From f5922011645019476af9edce2d36c0997a90b347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 23 Nov 2022 16:25:46 +0000 Subject: [PATCH 001/378] Fix: --output-format=json --solutions-in-one-file produced a malformed JSON file if there were no solutions (ref #541) --- src/Conjure/UI/MainHelper.hs | 10 +++++++--- tests/custom/json-integration/nosols/nosols.essence | 2 ++ tests/custom/json-integration/nosols/run.sh | 4 ++++ tests/custom/json-integration/nosols/stdout.expected | 9 +++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 tests/custom/json-integration/nosols/nosols.essence create mode 100755 tests/custom/json-integration/nosols/run.sh create mode 100644 tests/custom/json-integration/nosols/stdout.expected diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index e7e9191b7b..4825143f84 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -330,8 +330,10 @@ mainWithArgs config@Solve{..} = do msolutions <- liftIO $ savileRows eprimesParsed essenceParamsParsed case msolutions of Left msg -> userErr msg - Right [] -> pp logLevel "No solutions found." Right solutions -> do + + when (null solutions) (pp logLevel "No solutions found.") + when validateSolutionsOpt $ liftIO $ validating solutions let params = nub [ dropExtension p | (_,p,_) <- solutions ] @@ -1053,7 +1055,7 @@ srStdoutHandler srStdoutHandler _ _ _ _ = bug "srStdoutHandler" -srCleanUp :: FilePath -> UI -> Text -> sols -> Sh (Either [Doc] sols) +srCleanUp :: FilePath -> UI -> Text -> [sols] -> Sh (Either [Doc] [sols]) srCleanUp outBase Solve{..} stdoutSR solutions = do -- closing the array in the all solutions json file @@ -1063,7 +1065,9 @@ srCleanUp outBase Solve{..} stdoutSR solutions = do True -> do let mkFilename ext = outputDirectory outBase ++ ext let filenameEssenceSolJSON = mkFilename ".solutions.json" - liftIO $ appendFile filenameEssenceSolJSON "]\n" + case solutions of + [] -> liftIO $ writeFile filenameEssenceSolJSON "[]\n" + _ -> liftIO $ appendFile filenameEssenceSolJSON "]\n" _ -> return () stderrSR <- lastStderr diff --git a/tests/custom/json-integration/nosols/nosols.essence b/tests/custom/json-integration/nosols/nosols.essence new file mode 100644 index 0000000000..e4a7fc53c8 --- /dev/null +++ b/tests/custom/json-integration/nosols/nosols.essence @@ -0,0 +1,2 @@ +find x : int(1) +such that x != 1 diff --git a/tests/custom/json-integration/nosols/run.sh b/tests/custom/json-integration/nosols/run.sh new file mode 100755 index 0000000000..07e009eb1b --- /dev/null +++ b/tests/custom/json-integration/nosols/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output +conjure solve nosols.essence --number-of-solutions=all --solutions-in-one-file --output-format=json +cat nosols.solutions.json +rm -rf conjure-output nosols.solutions.json diff --git a/tests/custom/json-integration/nosols/stdout.expected b/tests/custom/json-integration/nosols/stdout.expected new file mode 100644 index 0000000000..6055d089a4 --- /dev/null +++ b/tests/custom/json-integration/nosols/stdout.expected @@ -0,0 +1,9 @@ +Generating models for nosols.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime +Running minion for domain filtering. +Running solver: minion +No solutions found. +Copying solution to: nosols.solutions.json +[] From 05fdc9ee9f1ed0b6d0c32bc2f74fc4b82994d654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 23 Nov 2022 19:42:03 +0000 Subject: [PATCH 002/378] Test output changed slightly. --- tests/custom/issues/387/int04/stdout.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/custom/issues/387/int04/stdout.expected b/tests/custom/issues/387/int04/stdout.expected index 037e805497..dd1df2e30c 100644 --- a/tests/custom/issues/387/int04/stdout.expected +++ b/tests/custom/issues/387/int04/stdout.expected @@ -14,3 +14,4 @@ Savile Row: model_4.eprime Running minion for domain filtering. Running solver: minion No solutions found. +Multiple eprime models found in the output directory, not copying solutions. From 4c659b5b3f1a69b97f394c13aa0d519be74a842a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 28 Nov 2022 09:59:28 +0000 Subject: [PATCH 003/378] Build solvers once a week We do not modify the install scripts or the Makefile very often, so we build the solvers once a week to make sure they still build OK. --- .github/workflows/solvers.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 80bc97de9e..68831a1dc5 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -1,6 +1,10 @@ name: Building all solvers on: + schedule: + - cron: '0 11 * * 1' # run at 11.00 every Monday + # we do not modify the install scripts or the Makefile very often, + # so we build the solvers once a week to make sure they still build OK. push: branches: - master # run for the master branch From 400f2b5bae029757a6da8ea8770ea7ee9534ac6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 3 Dec 2022 15:26:15 +0000 Subject: [PATCH 004/378] add a timestamp to the github actions caches --- .github/workflows/build.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee973b9cef..da29be37a0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: path: | ~/.stack .stack-work - key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} - name: Setting PATH diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 20a5686351..f302b160c2 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -36,7 +36,7 @@ jobs: path: | ~/.stack .stack-work - key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} - name: Setting PATH diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 55165a28db..fcf8bd9716 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,7 @@ jobs: path: | ~/.stack .stack-work - key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} - name: Setting PATH From 6bef03d2838155ce7c2ba8c713f366ebf0cfc58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 3 Dec 2022 15:28:04 +0000 Subject: [PATCH 005/378] support products in doDuplicatesMatter as well --- src/Conjure/Rules/Import.hs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Conjure/Rules/Import.hs b/src/Conjure/Rules/Import.hs index b01da28f44..636083a3ab 100644 --- a/src/Conjure/Rules/Import.hs +++ b/src/Conjure/Rules/Import.hs @@ -36,13 +36,14 @@ doDuplicatesMatter z0 = Just z -> do let h = Zipper.hole z case ( match opAnd h, match opOr h, match opSum h - , match opMin h, match opMax h ) of - (Just{}, _, _, _, _) -> return False - (_, Just{}, _, _, _) -> return False - (_, _, Just{}, _, _) -> return True - (_, _, _, Just{}, _) -> return False - (_, _, _, _, Just{}) -> return False - _ -> na "doDuplicatesMatter 2" + , match opProduct h, match opMin h, match opMax h ) of + (Just{}, _, _, _, _, _) -> return False -- and + (_, Just{}, _, _, _, _) -> return False -- or + (_, _, Just{}, _, _, _) -> return True -- sum + (_, _, _, Just{}, _, _) -> return True -- product + (_, _, _, _, Just{}, _) -> return False -- min + (_, _, _, _, _, Just{}) -> return False -- max + _ -> na "doDuplicatesMatter 2" -- case Zipper.up z of -- Nothing -> na "doDuplicatesMatter" -- Just u -> doDuplicatesMatter u From ae394c50ab0ef026bd9ab87d1ec103897a22138f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 3 Dec 2022 21:18:26 +0000 Subject: [PATCH 006/378] Add workflow_dispatch so the github actions can be triggered manually --- .github/workflows/build.yml | 1 + .github/workflows/docker-publish.yml | 1 + .github/workflows/solvers.yml | 1 + .github/workflows/test-coverage.yml | 1 + .github/workflows/test.yml | 1 + 5 files changed, 5 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da29be37a0..fe689b613b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,7 @@ name: Building on all platforms on: + workflow_dispatch: # can be triggered manually push: branches: - master # run for the master branch diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 8db8635cdf..18f1a7f8c7 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -6,6 +6,7 @@ name: Publishing Docker image to ghcr.io # documentation. on: + workflow_dispatch: # can be triggered manually push: branches: [ master ] # Publish semver tags as releases. diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 68831a1dc5..1db2e5ff4c 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -1,6 +1,7 @@ name: Building all solvers on: + workflow_dispatch: # can be triggered manually schedule: - cron: '0 11 * * 1' # run at 11.00 every Monday # we do not modify the install scripts or the Makefile very often, diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index f302b160c2..e23606dc2e 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -1,6 +1,7 @@ name: Running all tests (code coverage) on: + workflow_dispatch: # can be triggered manually push: branches: - master # run for the master branch only diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fcf8bd9716..83ec76b0ff 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,7 @@ name: Running all tests on: + workflow_dispatch: # can be triggered manually push: branches: - master # run for the master branch From 5c37ba289445e037707eadad4bcbb4fc2bf2f2dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 5 Dec 2022 23:54:03 +0000 Subject: [PATCH 007/378] Simplify docker + pushing to ghcr (#543) Significantly simplified the docker file. I also understand it a bit better now, so there is a chance we will maintain & advertise it :) --- .github/workflows/docker-publish.yml | 42 ++++----- Dockerfile | 69 ++++++++++++++ Makefile | 2 +- etc/build/docker/Dockerfile | 130 --------------------------- etc/build/docker/README.md | 16 ---- etc/build/docker/sudoku.essence | 15 ---- etc/build/docker/sudoku.param | 11 --- 7 files changed, 88 insertions(+), 197 deletions(-) create mode 100644 Dockerfile delete mode 100644 etc/build/docker/Dockerfile delete mode 100644 etc/build/docker/README.md delete mode 100644 etc/build/docker/sudoku.essence delete mode 100644 etc/build/docker/sudoku.param diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 18f1a7f8c7..26849dfd60 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -7,26 +7,26 @@ name: Publishing Docker image to ghcr.io on: workflow_dispatch: # can be triggered manually - push: - branches: [ master ] - # Publish semver tags as releases. - tags: [ 'v*.*.*' ] - pull_request: - branches: [ master ] - release: - types: [published] + workflow_run: # run only when all tests pass + workflows: + - Running all tests + types: + - completed env: - # Use docker.io for Docker Hub if empty REGISTRY: ghcr.io # github.repository as / IMAGE_NAME: ${{ github.repository }} jobs: - build: + + Job: + + if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ubuntu-latest + permissions: contents: read packages: write @@ -35,42 +35,36 @@ jobs: id-token: write steps: + - name: Checkout repository uses: actions/checkout@v3 - - # Setup ccache - - name: Setup ccache - uses: Chocobo1/setup-ccache-action@v1 - # Workaround: https://github.com/docker/build-push-action/issues/461 + # Set up buildx (Docker CLI plugin for extended build capabilities with BuildKit) - name: Setup Docker buildx - uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf + uses: docker/setup-buildx-action@v2 # Login against a Docker registry except on PR - # https://github.com/docker/login-action - - name: Log into registry ${{ env.REGISTRY }} + - name: Log into registry if: github.event_name != 'pull_request' - uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c + uses: docker/login-action@v2 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # Extract metadata (tags, labels) for Docker - # https://github.com/docker/metadata-action - name: Extract Docker metadata id: meta - uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + uses: docker/metadata-action@v4 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} # Build and push Docker image with Buildx (don't push on PR) - # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + uses: docker/build-push-action@v3 with: - context: ./etc/build/docker/ + context: . push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..b3a8b09c4e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,69 @@ + +# We use multi-stage builds to end up with a small final image. +# See https://docs.docker.com/build/building/multi-stage +# We have 2 stages, one for building and one just to copy the binaries we want to keep. + +################################################################################ +# First stage: Building + +# Setting up +FROM ubuntu:latest AS builder +WORKDIR /conjure/ +COPY . . + +# All binaries will end up in /root/.local/bin +RUN mkdir -p /root/.local/bin +ENV PATH /root/.local/bin:$PATH + +# Dependencies +RUN apt-get update +RUN apt-get install -y --no-install-recommends build-essential # so we can compile stuff +RUN apt-get install -y --no-install-recommends curl ca-certificates # so we can download stack (and other things) +RUN apt-get install -y --no-install-recommends xz-utils # GHC seems to need xz +RUN apt-get install -y --no-install-recommends libgmp-dev # GHC definitely needs GMP +RUN apt-get install -y --no-install-recommends zlib1g-dev # needed when building some solvers (for example bc_minisat_all_release) +RUN apt-get install -y --no-install-recommends cmake # needed when building some solvers (for example boolector) +RUN apt-get install -y --no-install-recommends git # needed when building some solvers (for example boolector) +RUN apt-get install -y --no-install-recommends zip unzip # needed when building some solvers (for example glucose) +RUN apt-get install -y --no-install-recommends autoconf # needed when building some solvers (for example yices) +RUN apt-get install -y --no-install-recommends gperf # needed when building some solvers (for example yices) +RUN apt-get install -y --no-install-recommends python3 # needed when building some solvers (for example z3) + +# Building solvers. We do this first to facilitate better caching. Also we don't use `make solvers` here for the same reason. +RUN PROCESSES=2 etc/build/install-bc_minisat_all.sh +RUN PROCESSES=2 etc/build/install-boolector.sh +RUN PROCESSES=2 etc/build/install-cadical.sh +RUN PROCESSES=2 etc/build/install-chuffed.sh +RUN PROCESSES=2 etc/build/install-gecode.sh +RUN PROCESSES=2 etc/build/install-glucose.sh +RUN PROCESSES=2 etc/build/install-kissat.sh +RUN PROCESSES=2 etc/build/install-lingeling.sh +RUN PROCESSES=2 etc/build/install-minion.sh +RUN PROCESSES=2 etc/build/install-nbc_minisat_all.sh +RUN PROCESSES=2 etc/build/install-open-wbo.sh +RUN PROCESSES=2 etc/build/install-yices.sh +RUN PROCESSES=2 etc/build/install-z3.sh + +# Building Conjure and copying Savile Row +RUN make install + +# Make binaries a bit smaller +RUN ls -l /root/.local/bin +RUN du -sh /root/.local/bin +RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 +RUN ls -l /root/.local/bin +RUN du -sh /root/.local/bin + + +################################################################################ +# Second stage: Copying the binaries + +FROM ubuntu:latest +WORKDIR /conjure +ENV PATH /root/.local/bin:$PATH +RUN mkdir -p /root/.local/bin/lib +COPY --from=builder /root/.local/bin /root/.local/bin + +# Testing +CMD echo "find x : set of int(1..3)" > model.essence ; conjure solve model.essence --number-of-solutions=all ; cat model.solutions + diff --git a/Makefile b/Makefile index 592d41bfa5..64121bb9cf 100644 --- a/Makefile +++ b/Makefile @@ -137,10 +137,10 @@ solvers: @etc/build/silent-wrapper.sh etc/build/install-bc_minisat_all.sh @etc/build/silent-wrapper.sh etc/build/install-boolector.sh @etc/build/silent-wrapper.sh etc/build/install-cadical.sh - @etc/build/silent-wrapper.sh etc/build/install-kissat.sh @etc/build/silent-wrapper.sh etc/build/install-chuffed.sh @etc/build/silent-wrapper.sh etc/build/install-gecode.sh @etc/build/silent-wrapper.sh etc/build/install-glucose.sh + @etc/build/silent-wrapper.sh etc/build/install-kissat.sh @etc/build/silent-wrapper.sh etc/build/install-lingeling.sh @etc/build/silent-wrapper.sh etc/build/install-minion.sh @etc/build/silent-wrapper.sh etc/build/install-nbc_minisat_all.sh diff --git a/etc/build/docker/Dockerfile b/etc/build/docker/Dockerfile deleted file mode 100644 index 84c679b995..0000000000 --- a/etc/build/docker/Dockerfile +++ /dev/null @@ -1,130 +0,0 @@ -# Dockerfile for Conjure -# -# Conjure requires Haskell, JRE, CMake, C++, etc. -# This is based on a merge of the two main parents -# https://github.com/freebroccolo/docker-haskell/blob/master/8.4/Dockerfile -# https://github.com/docker-library/openjdk/blob/master/11/jre/slim/Dockerfile -# with the other components on top of a slim Debian base image. - -FROM debian:stable-slim - -ARG BRANCH=v2.4.0 - -ENV LANG C.UTF-8 -ENV WORK /conjure - -# Stop tzdata prompt -ENV DEBIAN_FRONTEND=noninteractive - -# create a JAVA_HOME that's cross-architecture-safe -ENV JAVA_HOME /docker-java-home -RUN ln -svT "/usr/lib/jvm/java-11-openjdk-$(dpkg --print-architecture)" $JAVA_HOME -ENV JAVA_VERSION 11 - -RUN set -ex; \ -# slim variants have no man pages (causes "update-alternatives" to fail) - if [ ! -d /usr/share/man/man1 ]; then \ - mkdir -p /usr/share/man/man1; \ - fi; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - openjdk-11-jre-headless; \ -# update-alternatives so future installs of OpenJDK don't change /usr/bin/java - update-alternatives --get-selections | awk -v home="$(readlink -f "$JAVA_HOME")" 'index($3, home) == 1 { $2 = "manual"; print | "update-alternatives --set-selections" }'; \ -# ... and verify it worked for one of the alternatives - update-alternatives --query java | grep -q 'Status: manual' - -RUN apt-get update \ -&& apt-get install -y --no-install-recommends \ - ca-certificates \ - dirmngr \ - git \ - gnupg \ - && apt-get install -y --no-install-recommends \ - bison \ - cmake \ - flex \ - g++ \ - libsqlite3-dev \ - libtinfo-dev \ - make \ - netbase \ - wget \ - zlib1g-dev \ - xz-utils \ - libgmp-dev - -WORKDIR $WORK - -# default Haskell stack build usually fails on Docker, instead -# install a known-to-work binary build, see: -# https://github.com/commercialhaskell/stack/issues/3510#issuecomment-386266579 -RUN apt-get install -y --no-install-recommends \ - curl \ - && curl -fSL https://github.com/commercialhaskell/stack/releases/download/v1.7.1/stack-1.7.1-linux-x86_64.tar.gz -o stack.tar.gz \ - && curl -fSL https://github.com/commercialhaskell/stack/releases/download/v1.7.1/stack-1.7.1-linux-x86_64.tar.gz.asc -o stack.tar.gz.asc \ - && apt-get purge -y --auto-remove curl \ - && tar -xf stack.tar.gz -C /usr/local/bin --strip-components=1 \ - && /usr/local/bin/stack config set system-ghc --global true \ - && /usr/local/bin/stack config set install-ghc --global false \ - && rm -f stack.tar.gz.asc stack.tar.gz - -ENV PATH /root/.cabal/bin:/root/.local/bin:$PATH -ENV BIN_DIR /root/.local/bin - -RUN git clone https://github.com/conjure-cp/conjure.git -WORKDIR $WORK/conjure -RUN git pull -RUN git checkout $BRANCH - -RUN make -# RUN PROCESSES=4 make solvers -RUN etc/build/install-minion.sh -RUN etc/build/install-lingeling.sh - - -RUN apt-get purge -y --auto-remove \ - bison \ -# JRE depends on this, don't remove: -# ca-certificates \ - cmake \ - dirmngr \ - flex \ - g++ \ - git \ - gnupg \ - libsqlite3-dev \ - libtinfo-dev \ - make \ - netbase \ - wget \ - zlib1g-dev \ - && rm -rf /var/lib/apt/lists/* - -WORKDIR $WORK - -RUN rm -f pubring.kbx* trustdb.gpg /root/.wget-hsts \ - && rm -rf crls.d private-keys-v1.d \ - && rm -rf conjure \ -# remove stack - && rm -rf /root/.stack \ - && rm -rf /usr/local/bin/* - -ENV PATH /root/.local/bin:$PATH - -RUN rm -f pubring.kbx* trustdb.gpg /root/.wget-hsts \ - && rm -rf crls.d private-keys-v1.d \ - && rm -rf conjure \ -# remove stack - && rm -rf /root/.stack \ - && rm -rf /usr/local/bin/* - -ENV PATH /root/.local/bin:$PATH - -# do a test-run of the pipeline, unless command is specified -COPY sudoku.essence sudoku.param $WORK/ -CMD conjure solve -ac --solutions-in-one-file --number-of-solutions=all --solver=minion --limit-time=90 sudoku.essence sudoku.param \ - && mv conjure-output/model000001-sudoku.solutions /tmp/result.txt \ - && cat /tmp/result.txt \ - && rm /tmp/result.txt \ - && rm -rf conjure-output diff --git a/etc/build/docker/README.md b/etc/build/docker/README.md deleted file mode 100644 index e3fe52cd0f..0000000000 --- a/etc/build/docker/README.md +++ /dev/null @@ -1,16 +0,0 @@ -This is a basic Dockerfile for building Conjure. - -To test: in a directory containing the Dockerfile and the two Sudoku files, run - `docker build --tag=conjure .` - `docker run conjure` -which should print a solution ending with - -> $ 5 3 4 6 7 8 9 1 2 -> $ 6 7 2 1 9 5 3 4 8 -> $ 1 9 8 3 4 2 5 6 7 -> $ 8 5 9 7 6 1 4 2 3 -> $ 4 2 6 8 5 3 7 9 1 -> $ 7 1 3 9 2 4 8 5 6 -> $ 9 6 1 5 3 7 2 8 4 -> $ 2 8 7 4 1 9 6 3 5 -> $ 3 4 5 2 8 6 1 7 9 diff --git a/etc/build/docker/sudoku.essence b/etc/build/docker/sudoku.essence deleted file mode 100644 index fbfb98153b..0000000000 --- a/etc/build/docker/sudoku.essence +++ /dev/null @@ -1,15 +0,0 @@ -language Essence 1.3 -$ simple Sudoku spec -letting n be 9 -letting b be 3 -letting index be domain int(1..n) -letting values be domain int(0..n) - -given x : matrix indexed by [index,index] of int(0..n) $ 0 = blank -find y : matrix indexed by [index,index] of index -such that - forAll i,j : index . x[i,j] != 0 -> y[i,j] = x[i,j], - forAll i : index . allDiff( y[i,..] ), - forAll j : index . allDiff([ y[i,j] | i : index ]), - forAll u,v : int(0..b-1) . - allDiff([ y[u*3 + i,v*3 + j] | i,j : int(1..b) ]) diff --git a/etc/build/docker/sudoku.param b/etc/build/docker/sudoku.param deleted file mode 100644 index ba271f64ca..0000000000 --- a/etc/build/docker/sudoku.param +++ /dev/null @@ -1,11 +0,0 @@ -letting x be [ -[ 5, 3, 0, 0, 7, 0, 0, 0 ,0 ], -[ 6, 0, 0, 1, 9, 5, 0, 0, 0 ], -[ 0, 9, 8, 0, 0, 0, 0, 6, 0 ], -[ 8, 0, 0, 0, 6, 0, 0, 0, 3 ], -[ 4, 0, 0, 8, 0, 3, 0, 0, 1 ], -[ 7, 0, 0, 0, 2, 0, 0, 0, 6 ], -[ 0, 6, 0, 0, 0, 0, 2, 8, 0 ], -[ 0, 0, 0, 4, 1, 9, 0, 0, 5 ], -[ 0, 0, 0, 0, 8, 0, 0, 7, 9 ] -] From cacd5be570ac625a29433f52a0d168f36c745917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 6 Dec 2022 00:17:03 +0000 Subject: [PATCH 008/378] ubuntu-latest (ubuntu-22.04.1) fails to build chuffed. stick to ubuntu-20.04.5 for now. --- .github/workflows/solvers.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 1db2e5ff4c..4036a4aa1e 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -24,7 +24,7 @@ jobs: strategy: matrix: - os: [ubuntu-latest, macos-latest] + os: [ubuntu-20.04.5, macos-latest] runs-on: ${{ matrix.os }} From f0556eec96154b8105dd2620bf50e2f61427a1b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 6 Dec 2022 08:02:32 +0000 Subject: [PATCH 009/378] Use ubuntu-20.04 as ubuntu-20.04.5 doesn't exist --- .github/workflows/solvers.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 4036a4aa1e..45bba34e6d 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -24,7 +24,9 @@ jobs: strategy: matrix: - os: [ubuntu-20.04.5, macos-latest] + os: + - ubuntu-20.04 + - macos-latest runs-on: ${{ matrix.os }} From c1382ab4b70e3e0d6ca4e0f657fd3d2d70b30a38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 8 Dec 2022 23:42:00 +0000 Subject: [PATCH 010/378] Using alpine as the base image so we can get smaller images (#544) We use ubuntu to build, alpine to ship. Let's see how well this works. --- .github/workflows/docker-publish.yml | 12 ++++++++++-- Dockerfile | 13 ++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 26849dfd60..599458deac 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -12,6 +12,12 @@ on: - Running all tests types: - completed + pull_request: # and for PRs that edit the docker files + paths: + - Dockerfile + - .github/workflows/docker-publish.yml + # other branches that want testing must create a PR + env: REGISTRY: ghcr.io @@ -23,7 +29,9 @@ jobs: Job: - if: ${{ github.event.workflow_run.conclusion == 'success' }} + # if this was triggered through a completed run of "Running all tests", we check if the run completed successfully + # if it was triggered through a PR, we just run it + if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'pull_request' }} runs-on: ubuntu-latest @@ -65,7 +73,7 @@ jobs: uses: docker/build-push-action@v3 with: context: . - push: ${{ github.event_name != 'pull_request' }} + push: ${{ github.event_name != 'pull_request' }} # do not push if this was triggered by a PR tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha diff --git a/Dockerfile b/Dockerfile index b3a8b09c4e..ad8f5aecad 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,9 +7,9 @@ # First stage: Building # Setting up -FROM ubuntu:latest AS builder +FROM ubuntu:20.04 AS builder +ENV DEBIAN_FRONTEND noninteractive WORKDIR /conjure/ -COPY . . # All binaries will end up in /root/.local/bin RUN mkdir -p /root/.local/bin @@ -29,6 +29,10 @@ RUN apt-get install -y --no-install-recommends autoconf # needed RUN apt-get install -y --no-install-recommends gperf # needed when building some solvers (for example yices) RUN apt-get install -y --no-install-recommends python3 # needed when building some solvers (for example z3) +# Only copying the install*.sh scripts +RUN mkdir -p etc +COPY etc/build etc/build + # Building solvers. We do this first to facilitate better caching. Also we don't use `make solvers` here for the same reason. RUN PROCESSES=2 etc/build/install-bc_minisat_all.sh RUN PROCESSES=2 etc/build/install-boolector.sh @@ -44,6 +48,9 @@ RUN PROCESSES=2 etc/build/install-open-wbo.sh RUN PROCESSES=2 etc/build/install-yices.sh RUN PROCESSES=2 etc/build/install-z3.sh +# Copy everything +COPY . . + # Building Conjure and copying Savile Row RUN make install @@ -58,7 +65,7 @@ RUN du -sh /root/.local/bin ################################################################################ # Second stage: Copying the binaries -FROM ubuntu:latest +FROM alpine:3.17 WORKDIR /conjure ENV PATH /root/.local/bin:$PATH RUN mkdir -p /root/.local/bin/lib From 8cab95b47b1a9311de42ecc330bf679561886043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 8 Dec 2022 23:50:16 +0000 Subject: [PATCH 011/378] Allow workflow_dispatch --- .github/workflows/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 599458deac..c661b7c9f5 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -31,7 +31,7 @@ jobs: # if this was triggered through a completed run of "Running all tests", we check if the run completed successfully # if it was triggered through a PR, we just run it - if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'pull_request' }} + if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }} runs-on: ubuntu-latest From 0245c5706386545752ff5784dd9000aa0ef441b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Dec 2022 13:17:54 +0000 Subject: [PATCH 012/378] rename test case to avoid name clashes --- .../basic/multiset-operators/{hist => hist-basic}/hist.essence | 0 .../basic/multiset-operators/{hist => hist-basic}/hist.solution | 0 .../basic/multiset-operators/{hist => hist-basic}/run.sh | 0 .../basic/multiset-operators/{hist => hist-basic}/stdout.expected | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename tests/custom/STARIS_2022/basic/multiset-operators/{hist => hist-basic}/hist.essence (100%) rename tests/custom/STARIS_2022/basic/multiset-operators/{hist => hist-basic}/hist.solution (100%) rename tests/custom/STARIS_2022/basic/multiset-operators/{hist => hist-basic}/run.sh (100%) rename tests/custom/STARIS_2022/basic/multiset-operators/{hist => hist-basic}/stdout.expected (100%) diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.essence b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/hist.essence similarity index 100% rename from tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.essence rename to tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/hist.essence diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.solution b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/hist.solution similarity index 100% rename from tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.solution rename to tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/hist.solution diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist/run.sh b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/run.sh similarity index 100% rename from tests/custom/STARIS_2022/basic/multiset-operators/hist/run.sh rename to tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/run.sh diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist/stdout.expected b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/stdout.expected similarity index 100% rename from tests/custom/STARIS_2022/basic/multiset-operators/hist/stdout.expected rename to tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/stdout.expected From 4f38670dbaf468a3908809aa763e31a2ff49f7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 10:38:48 +0000 Subject: [PATCH 013/378] xor --- src/Conjure/Language/EvaluateOp.hs | 2 +- .../Language/Expression/Op/RelationProj.hs | 2 +- src/Conjure/Language/Expression/Op/Xor.hs | 15 +-------------- src/Conjure/Prelude.hs | 2 +- src/Conjure/UI/Model.hs | 6 +++--- 5 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/Conjure/Language/EvaluateOp.hs b/src/Conjure/Language/EvaluateOp.hs index 65a2fc1605..d70ba0c74b 100644 --- a/src/Conjure/Language/EvaluateOp.hs +++ b/src/Conjure/Language/EvaluateOp.hs @@ -796,7 +796,7 @@ instance EvaluateOp OpUnion where instance EvaluateOp OpXor where evaluateOp (OpXor x) = ConstantBool . xor <$> boolsOut x - where xor xs = 1 == length [ () | True <- xs ] + where xor xs = odd (length [ () | True <- xs ]) boolsOut :: MonadFailDoc m => Constant -> m [Bool] diff --git a/src/Conjure/Language/Expression/Op/RelationProj.hs b/src/Conjure/Language/Expression/Op/RelationProj.hs index 8a7dc5bd93..0d5382ea04 100644 --- a/src/Conjure/Language/Expression/Op/RelationProj.hs +++ b/src/Conjure/Language/Expression/Op/RelationProj.hs @@ -44,7 +44,7 @@ instance (TypeOf x, Pretty x) => TypeOf (OpRelationProj x) where else raiseTypeError $ "(relation projection)" <+> pretty p loop _ _ = raiseTypeError $ "(relation projection)" <+> pretty p TypeRelation <$> loop xs ts' - _ -> raiseTypeError $ "(relation projection)" <+> pretty p + _ -> raiseTypeError $ "(relation projection)" <+> vcat [pretty p, pretty tyR] instance SimplifyOp OpRelationProj x where simplifyOp _ = na "simplifyOp{OpRelationProj}" diff --git a/src/Conjure/Language/Expression/Op/Xor.hs b/src/Conjure/Language/Expression/Op/Xor.hs index b3adb1fccd..dd276566a3 100644 --- a/src/Conjure/Language/Expression/Op/Xor.hs +++ b/src/Conjure/Language/Expression/Op/Xor.hs @@ -11,6 +11,7 @@ import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector +-- true if an odd number of its arguments are true, and false otherwise data OpXor x = OpXor x deriving (Eq, Ord, Show, Data, Functor, Traversable, Foldable, Typeable, Generic) @@ -19,9 +20,6 @@ instance Hashable x => Hashable (OpXor x) instance ToJSON x => ToJSON (OpXor x) where toJSON = genericToJSON jsonOptions instance FromJSON x => FromJSON (OpXor x) where parseJSON = genericParseJSON jsonOptions -instance BinaryOperator (OpXor x) where - opLexeme _ = L_Or - instance (TypeOf x, Pretty x, ExpressionLike x) => TypeOf (OpXor x) where typeOf p@(OpXor x) = do ty <- typeOf x @@ -37,20 +35,9 @@ instance (TypeOf x, Pretty x, ExpressionLike x) => TypeOf (OpXor x) where ] instance (OpXor x :< x) => SimplifyOp OpXor x where - simplifyOp (OpXor x) - | Just xs <- listOut x - , let trues = filter (== fromBool True) xs - , length trues > 1 -- there were multiple true's - = return $ fromBool False - simplifyOp (OpXor x) - | Just xs <- listOut x - , let filtered = filter (/= fromBool False) xs - , length filtered /= length xs -- there were false's - = return $ inject $ OpXor $ fromList filtered simplifyOp _ = na "simplifyOp{OpXor}" instance (Pretty x, ExpressionLike x) => Pretty (OpXor x) where - prettyPrec prec op@(OpXor x) | Just [a,b] <- listOut x = prettyPrecBinOp prec [op] a b prettyPrec _ (OpXor x) = "xor" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpXor x) where diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index aa1aeee0b3..df9c4e8069 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -60,7 +60,7 @@ import Data.Int as X ( Int ) import GHC.Integer as X ( Integer ) import GHC.Float as X ( sqrt, (**) ) import GHC.Exts as X ( Double ) -import GHC.Real as X ( Fractional(..), Integral(..), fromIntegral, (^), Real(..), round ) +import GHC.Real as X ( Fractional(..), Integral(..), fromIntegral, (^), Real(..), round, odd, even ) import GHC.Enum as X ( Enum(..) ) import Data.Char as X ( Char, toLower, isSpace ) import Data.String as X ( String, IsString(..) ) diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index eb9aba9bd4..517e3deae1 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -2735,20 +2735,20 @@ rule_Xor_To_Sum = "xor-to-sum" `namedRule` theRule where let argOut = Comprehension [essence| toInt(&body) |] goc return ( "xor to sum" - , return [essence| 1 = sum(&argOut) |] + , return [essence| 1 = sum(&argOut) % 2 |] ) AbstractLiteral (AbsLitMatrix dom elems) -> do let argOut = AbstractLiteral $ AbsLitMatrix dom [ [essence| toInt(&el) |] | el <- elems ] return ( "xor to sum" - , return [essence| 1 = sum(&argOut) |] + , return [essence| 1 = sum(&argOut) % 2 |] ) _ -> do (iPat, i) <- quantifiedVar return ( "xor to sum" - , return [essence| 1 = sum([ toInt(&i) | &iPat <- &arg ]) |] + , return [essence| 1 = sum([ toInt(&i) | &iPat <- &arg ]) % 2 |] ) theRule _ = na "rule_Xor_To_Sum" From 71a7c3dfdf398ceffff6d9eed61354c0c2828300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 13:30:23 +0000 Subject: [PATCH 014/378] functions with multiple arguments --- src/Conjure/Language/Lenses.hs | 6 ++++++ tests/custom/tugce_1/expected-time.txt | 1 + tests/custom/tugce_1/run.sh | 4 ++++ tests/custom/tugce_1/stdout.expected | 15 +++++++++++++++ tests/custom/tugce_1/tugce_1.essence | 11 +++++++++++ 5 files changed, 37 insertions(+) create mode 100644 tests/custom/tugce_1/expected-time.txt create mode 100755 tests/custom/tugce_1/run.sh create mode 100644 tests/custom/tugce_1/stdout.expected create mode 100644 tests/custom/tugce_1/tugce_1.essence diff --git a/src/Conjure/Language/Lenses.hs b/src/Conjure/Language/Lenses.hs index 60fcbadffa..3be7ecc7ef 100644 --- a/src/Conjure/Language/Lenses.hs +++ b/src/Conjure/Language/Lenses.hs @@ -1574,9 +1574,15 @@ fixRelationProj= transformBi f Just TypeFunction{} -> make opImage func arg Just TypeSequence{} -> make opImage func arg _ -> p + Just (func, args) | arg <- catMaybes args, length arg == length args -> + case typeOf func of + Just TypeFunction{} -> make opImage func $ AbstractLiteral $ AbsLitTuple arg + Just TypeSequence{} -> make opImage func $ AbstractLiteral $ AbsLitTuple arg + _ -> p _ -> p + maxOfDomain :: (MonadFailDoc m, Pretty r) => Domain r Expression -> m Expression maxOfDomain (DomainInt _ [] ) = failDoc "rule_DomainMinMax.maxOfDomain []" maxOfDomain (DomainInt _ [r]) = maxOfRange r diff --git a/tests/custom/tugce_1/expected-time.txt b/tests/custom/tugce_1/expected-time.txt new file mode 100644 index 0000000000..209e3ef4b6 --- /dev/null +++ b/tests/custom/tugce_1/expected-time.txt @@ -0,0 +1 @@ +20 diff --git a/tests/custom/tugce_1/run.sh b/tests/custom/tugce_1/run.sh new file mode 100755 index 0000000000..936921962e --- /dev/null +++ b/tests/custom/tugce_1/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution *.solution.json +conjure solve --savilerow-options -O0 --solver chuffed *.essence +cat *.solution +rm -rf conjure-output *.solution *.solution.json diff --git a/tests/custom/tugce_1/stdout.expected b/tests/custom/tugce_1/stdout.expected new file mode 100644 index 0000000000..c9088e59f7 --- /dev/null +++ b/tests/custom/tugce_1/stdout.expected @@ -0,0 +1,15 @@ +Generating models for tugce_1.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime +Running solver: chuffed +Copying solution to: tugce_1.solution +language Essence 1.3 + +letting p be + function((1, 1, {1, 2}) --> 0, (1, 1, {1, 2, 3}) --> 0, (1, 1, {1, 3}) --> 0, (1, 1, {2, 3}) --> 0, + (1, 2, {1, 2}) --> 5, (1, 2, {1, 2, 3}) --> 0, (1, 2, {1, 3}) --> 0, (1, 2, {2, 3}) --> 0, + (1, 3, {1, 2}) --> 0, (1, 3, {1, 2, 3}) --> 0, (1, 3, {1, 3}) --> 0, (1, 3, {2, 3}) --> 0, + (2, 1, {1, 2}) --> 0, (2, 1, {1, 2, 3}) --> 0, (2, 1, {1, 3}) --> 0, (2, 1, {2, 3}) --> 0, + (2, 2, {1, 2}) --> 0, (2, 2, {1, 2, 3}) --> 0, (2, 2, {1, 3}) --> 0, (2, 2, {2, 3}) --> 0, + (2, 3, {1, 2}) --> 0, (2, 3, {1, 2, 3}) --> 0, (2, 3, {1, 3}) --> 0, (2, 3, {2, 3}) --> 0) diff --git a/tests/custom/tugce_1/tugce_1.essence b/tests/custom/tugce_1/tugce_1.essence new file mode 100644 index 0000000000..6ad82e2ea4 --- /dev/null +++ b/tests/custom/tugce_1/tugce_1.essence @@ -0,0 +1,11 @@ + +$ letting menu be new type enum {a,b,c} +letting menu be domain int(1,2,3) +letting menus be domain set (minSize 2) of menu +letting probability be domain int(0..10) $ discretised +letting individual be domain int(1,2) + +find p : function (total) (individual, menu, menus) --> probability + +such that p(1,2,{1,2}) = 5 +such that sum([j | (i,j) <- p]) = 5 From 53b3570dce52511dd1f97681a723a311a1099a37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 13:31:41 +0000 Subject: [PATCH 015/378] fixes #548 --- src/Conjure/Language/Constant.hs | 1 + tests/custom/issues/548/548.essence | 2 ++ tests/custom/issues/548/p.json | 1 + tests/custom/issues/548/run.sh | 4 ++++ tests/custom/issues/548/stdout.expected | 10 ++++++++++ 5 files changed, 18 insertions(+) create mode 100644 tests/custom/issues/548/548.essence create mode 100644 tests/custom/issues/548/p.json create mode 100755 tests/custom/issues/548/run.sh create mode 100644 tests/custom/issues/548/stdout.expected diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index 3f97672fda..370f3c4797 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -100,6 +100,7 @@ instance SimpleJSON Constant where ConstantAbstract lit -> toSimpleJSON lit TypedConstant c' _ -> toSimpleJSON c' _ -> noToSimpleJSON c + fromSimpleJSON (JSON.Bool b) = return (ConstantBool b) fromSimpleJSON x@JSON.Number{} = ConstantInt TagInt <$> fromSimpleJSON x fromSimpleJSON (JSON.Array xs) = do ys <- mapM fromSimpleJSON (V.toList xs) diff --git a/tests/custom/issues/548/548.essence b/tests/custom/issues/548/548.essence new file mode 100644 index 0000000000..8c778ebf3e --- /dev/null +++ b/tests/custom/issues/548/548.essence @@ -0,0 +1,2 @@ +given w : bool +find x : bool such that x = w diff --git a/tests/custom/issues/548/p.json b/tests/custom/issues/548/p.json new file mode 100644 index 0000000000..401f9b93c5 --- /dev/null +++ b/tests/custom/issues/548/p.json @@ -0,0 +1 @@ +{"w": false} diff --git a/tests/custom/issues/548/run.sh b/tests/custom/issues/548/run.sh new file mode 100755 index 0000000000..704857c0e4 --- /dev/null +++ b/tests/custom/issues/548/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution +conjure solve 548.essence p.json +cat *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/548/stdout.expected b/tests/custom/issues/548/stdout.expected new file mode 100644 index 0000000000..5f8d78d53f --- /dev/null +++ b/tests/custom/issues/548/stdout.expected @@ -0,0 +1,10 @@ +Generating models for 548.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime p.json +Running minion for domain filtering. +Running solver: minion +Copying solution to: 548-p.solution +language Essence 1.3 + +letting x be false From 009666893b640e2f6315b7c6a0bfd5e831a28bbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 16:34:53 +0000 Subject: [PATCH 016/378] install chuffed as well for CI testign --- .github/workflows/test-coverage.yml | 4 ++++ .github/workflows/test.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index e23606dc2e..92cfd33467 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -52,6 +52,10 @@ jobs: shell: bash run: BIN_DIR=${HOME}/.local/bin etc/build/install-minion.sh + - name: Install Chuffed + shell: bash + run: BIN_DIR=${HOME}/.local/bin etc/build/install-chuffed.sh + - name: Install Cadical shell: bash run: BIN_DIR=${HOME}/.local/bin etc/build/install-cadical.sh diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 83ec76b0ff..4c46ffd669 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,6 +60,10 @@ jobs: shell: bash run: BIN_DIR=${HOME}/.local/bin etc/build/install-minion.sh + - name: Install Chuffed + shell: bash + run: BIN_DIR=${HOME}/.local/bin etc/build/install-chuffed.sh + - name: Install Cadical shell: bash run: BIN_DIR=${HOME}/.local/bin etc/build/install-cadical.sh From df2227d0df0728bf97dd994a3318c8f4c620a335 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 20:25:55 +0000 Subject: [PATCH 017/378] sticking to ubuntu-20.04 on github actions --- .github/workflows/build.yml | 2 +- .github/workflows/docker-publish.yml | 2 +- .github/workflows/test-coverage.yml | 4 ++-- .github/workflows/test.yml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe689b613b..9f1763be8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -25,7 +25,7 @@ jobs: strategy: matrix: GHC_VERSION: [8.6] - os: [ubuntu-latest, macos-latest] + os: [ubuntu-20.04, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c661b7c9f5..6c511453bf 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -33,7 +33,7 @@ jobs: # if it was triggered through a PR, we just run it if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }} - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 permissions: contents: read diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 92cfd33467..be2e6d164c 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -19,9 +19,9 @@ jobs: strategy: matrix: GHC_VERSION: [8.6] - os: [ubuntu-latest] + os: [ubuntu-20.04] - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4c46ffd669..a66c91019a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,9 +27,9 @@ jobs: strategy: matrix: GHC_VERSION: [8.6] - os: [ubuntu-latest] + os: [ubuntu-20.04] - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 From 067f160620e853b07b70afa9d28c5e4e4c062b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 20:32:09 +0000 Subject: [PATCH 018/378] also trigger if the relevant yml file is modified --- .github/workflows/build.yml | 2 ++ .github/workflows/solvers.yml | 2 ++ .github/workflows/test-coverage.yml | 1 + .github/workflows/test.yml | 2 ++ 4 files changed, 7 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9f1763be8e..c78164e958 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,12 +10,14 @@ on: - Makefile - src/** - etc/build/** + - .github/workflows/build.yml pull_request: # and for PRs paths: - conjure-cp.cabal - Makefile - src/** - etc/build/** + - .github/workflows/build.yml # other branches that want testing must create a PR jobs: diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index 45bba34e6d..e72cab6e8f 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -12,10 +12,12 @@ on: paths: - etc/build/install*.sh - Makefile + - .github/workflows/solvers.yml pull_request: # and for PRs paths: - etc/build/install*.sh - Makefile + - .github/workflows/solvers.yml # other branches that want testing must create a PR jobs: diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index be2e6d164c..72ad0eca8e 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -11,6 +11,7 @@ on: - src/** - tests/** - etc/build/** + - .github/workflows/test-coverage.yml jobs: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a66c91019a..1b93559f3a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,6 +11,7 @@ on: - src/** - tests/** - etc/build/** + - .github/workflows/test.yml pull_request: # and for PRs paths: - conjure-cp.cabal @@ -18,6 +19,7 @@ on: - src/** - tests/** - etc/build/** + - .github/workflows/test.yml # other branches that want testing must create a PR jobs: From 4fddbceb038fb9dd3d597619ee5b7ab147c31e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Feb 2023 20:45:03 +0000 Subject: [PATCH 019/378] try with ubuntu-latest --- .github/workflows/build.yml | 2 +- .github/workflows/docker-publish.yml | 2 +- .github/workflows/solvers.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c78164e958..de28626036 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: GHC_VERSION: [8.6] - os: [ubuntu-20.04, macos-latest] + os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 6c511453bf..c661b7c9f5 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -33,7 +33,7 @@ jobs: # if it was triggered through a PR, we just run it if: ${{ github.event.workflow_run.conclusion == 'success' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }} - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest permissions: contents: read diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index e72cab6e8f..c9d3447073 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -27,7 +27,7 @@ jobs: strategy: matrix: os: - - ubuntu-20.04 + - ubuntu-latest - macos-latest runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 72ad0eca8e..aab5584587 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -20,7 +20,7 @@ jobs: strategy: matrix: GHC_VERSION: [8.6] - os: [ubuntu-20.04] + os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1b93559f3a..5c871bd101 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,7 @@ jobs: strategy: matrix: GHC_VERSION: [8.6] - os: [ubuntu-20.04] + os: [ubuntu-latest] runs-on: ${{ matrix.os }} From b0da3445e702011eb9137244c10280144dbc5924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Feb 2023 09:31:26 +0000 Subject: [PATCH 020/378] chuffed 0.11.0 --- etc/build/install-chuffed.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/build/install-chuffed.sh b/etc/build/install-chuffed.sh index 754628f5c1..8d95dc6ac8 100755 --- a/etc/build/install-chuffed.sh +++ b/etc/build/install-chuffed.sh @@ -1,7 +1,7 @@ #!/bin/bash -# version as of 18 November 2022 -VERSION=0.10.4 +# version as of 16 February 2023 +VERSION=0.11.0 set -o errexit set -o nounset From 6593a43e6a53fe2c8f9c9da0324da16f5604bac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Feb 2023 10:01:34 +0000 Subject: [PATCH 021/378] an unreleased gecode version that compiles --- etc/build/install-gecode.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/etc/build/install-gecode.sh b/etc/build/install-gecode.sh index 479428ff5c..030846c20e 100755 --- a/etc/build/install-gecode.sh +++ b/etc/build/install-gecode.sh @@ -1,7 +1,8 @@ #!/bin/bash -# version as of 18 November 2022 -VERSION=6.2.0 +# version as of 16 February 2023 +# alas, none of the published releases compile correctly +VERSION=f2ce8db2fdb6cf2d357059e8959bb77442826ed6 set -o errexit set -o nounset @@ -15,7 +16,7 @@ mkdir tmp-install-gecode pushd tmp-install-gecode git clone https://github.com/Gecode/gecode.git cd gecode -git checkout release-$VERSION +git checkout $VERSION mkdir build cd build ../configure --disable-qt --disable-gist --enable-static From 38b1d9678a3bef9348d61e85895ceea16a048ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Feb 2023 23:43:17 +0000 Subject: [PATCH 022/378] pretty printing adjustments --- src/Conjure/Language/Domain.hs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/Conjure/Language/Domain.hs b/src/Conjure/Language/Domain.hs index 61ce0470e5..7d5a776c6b 100644 --- a/src/Conjure/Language/Domain.hs +++ b/src/Conjure/Language/Domain.hs @@ -883,38 +883,36 @@ instance (Pretty r, Pretty a) => Pretty (Domain r a) where <+> prettyList prParens "," inners pretty (DomainRecord xs) = "record" <+> prettyList prBraces "," - [ pretty nm <+> ":" <+> pretty d | (nm, d) <- xs ] + [ pretty nm <+> ":" <++> pretty d | (nm, d) <- xs ] pretty (DomainVariant xs) = "variant" <+> prettyList prBraces "," - [ pretty nm <+> ":" <+> pretty d | (nm, d) <- xs ] + [ pretty nm <+> ":" <++> pretty d | (nm, d) <- xs ] pretty (DomainMatrix index innerNested) = "matrix indexed by" <+> prettyList prBrackets "," indices - <+> "of" <+> pretty inner + <+> "of" <++> pretty inner where (indices,inner) = first (index:) $ collect innerNested collect (DomainMatrix i j) = first (i:) $ collect j collect x = ([],x) pretty (DomainSet r attrs inner) = - hang ("set" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner) + "set" <+> prettyAttrs r attrs <+> "of" <++> pretty inner pretty (DomainMSet r attrs inner) = - hang ("mset" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner) + "mset" <+> prettyAttrs r attrs <+> "of" <++> pretty inner pretty (DomainFunction r attrs innerFrom innerTo) = - hang ("function" <+> prettyAttrs r attrs) 4 $ - hang (pretty innerFrom) 4 $ - "-->" <+> pretty innerTo + "function" <+> prettyAttrs r attrs <++> pretty innerFrom <++> "-->" <++> pretty innerTo pretty (DomainSequence r attrs inner) = - hang ("sequence" <+> prettyAttrs r attrs <+> "of") 4 (pretty inner) + "sequence" <+> prettyAttrs r attrs <+> "of" <++> pretty inner pretty (DomainRelation r attrs inners) - = hang ("relation" <+> prettyAttrs r attrs <+> "of") 4 (prettyList prParens " *" inners) + = "relation" <+> prettyAttrs r attrs <+> "of" <++> prettyList prParens " *" inners pretty (DomainPartition r attrs inner) - = hang ("partition" <+> prettyAttrs r attrs <+> "from") 4 (pretty inner) + = "partition" <+> prettyAttrs r attrs <+> "from" <++> pretty inner pretty d@DomainOp{} = pretty (show d) From e76d9f316d8995df0b0b1731bebdfbf49c30ec78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Feb 2023 23:44:31 +0000 Subject: [PATCH 023/378] whitespace --- src/Conjure/Rules/Transform.hs | 2 +- src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs | 4 ++-- src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs | 2 +- src/Conjure/Rules/Vertical/Set/Explicit.hs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Conjure/Rules/Transform.hs b/src/Conjure/Rules/Transform.hs index dc6ef12013..ad09b2852e 100644 --- a/src/Conjure/Rules/Transform.hs +++ b/src/Conjure/Rules/Transform.hs @@ -286,7 +286,7 @@ rule_Transformed_Indexing = "transformed-indexing" `namedRule` theRule where rule_Lift_Transformed_Indexing :: Rule rule_Lift_Transformed_Indexing = "lift-transformed-indexing" `namedRule` theRule where - matchIndexing :: (?typeCheckerMode::TypeCheckerMode) + matchIndexing :: (?typeCheckerMode :: TypeCheckerMode) => Expression -> Maybe (Expression, Expression, Expression, Expression) matchIndexing exp = do diff --git a/src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs b/src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs index 9febd63c7a..088210d685 100644 --- a/src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs +++ b/src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs @@ -144,7 +144,7 @@ rule_InDefined = "function-inDefined{FunctionAsRelation}" `namedRule` theRule wh tableCheck :: MonadFailDoc m => - (?typeCheckerMode::TypeCheckerMode) => + (?typeCheckerMode :: TypeCheckerMode) => Expression -> Expression -> m () tableCheck x func | categoryOf func < CatDecision = do tyX <- typeOf x @@ -181,7 +181,7 @@ rule_InToSet = "function-inToSet{FunctionAsRelation}" `namedRule` theRule where tableCheck :: MonadFailDoc m => - (?typeCheckerMode::TypeCheckerMode) => + (?typeCheckerMode :: TypeCheckerMode) => Expression -> Expression -> m () tableCheck x func | categoryOf func < CatDecision = do tyX <- typeOf x diff --git a/src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs b/src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs index c35d527257..a2bdb995fa 100644 --- a/src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs +++ b/src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs @@ -81,7 +81,7 @@ rule_In = "relation-in{RelationAsSet}" `namedRule` theRule where tableCheck :: MonadFailDoc m => - (?typeCheckerMode::TypeCheckerMode) => + (?typeCheckerMode :: TypeCheckerMode) => Expression -> Expression -> m () tableCheck x rel | categoryOf rel < CatDecision = do tyX <- typeOf x diff --git a/src/Conjure/Rules/Vertical/Set/Explicit.hs b/src/Conjure/Rules/Vertical/Set/Explicit.hs index 24ae3b9856..ff6ef7f87a 100644 --- a/src/Conjure/Rules/Vertical/Set/Explicit.hs +++ b/src/Conjure/Rules/Vertical/Set/Explicit.hs @@ -141,7 +141,7 @@ rule_In = "set-in-table{Explicit}" `namedRule` theRule where tableCheck :: MonadFailDoc m => - (?typeCheckerMode::TypeCheckerMode) => + (?typeCheckerMode :: TypeCheckerMode) => Expression -> Expression -> m () tableCheck x set | categoryOf set < CatDecision = do tyX <- typeOf x From 090227d993a193e046ae65090bfc46a7b63d3a2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 07:38:46 +0000 Subject: [PATCH 024/378] pretty printing - updated output --- .../typecheck.expected | 31 ++++++---- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 4 +- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 4 +- .../stdout.expected | 8 +-- .../typecheck.expected | 29 ++++++---- .../stdout.expected | 4 +- .../stdout.expected | 4 +- .../typecheck.expected | 19 +++--- .../stdout.expected | 4 +- .../stdout.expected | 4 +- .../typecheck.expected | 39 ++++++++----- .../typecheck.expected | 37 +++++++----- .../typecheck.expected | 39 ++++++++----- .../stdout.expected | 4 +- .../typecheck.expected | 34 ++++++----- .../typecheck.expected | 29 ++++++---- .../typecheck.expected | 47 +++++++++------ .../stdout.expected | 5 +- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 4 +- .../stdout.expected | 4 +- .../typecheck.expected | 39 ++++++++----- .../stdout.expected | 8 +-- .../stdout.expected | 8 +-- .../typecheck.expected | 49 ++++++++++------ .../stdout.expected | 5 +- .../stdout.expected | 4 +- .../typecheck.expected | 49 ++++++++++------ .../typecheck.expected | 43 +++++++++----- .../stdout.expected | 5 +- .../typecheck.expected | 19 +++--- .../stdout.expected | 4 +- .../typecheck.expected | 58 +++++++++++-------- .../typecheck.expected | 39 ++++++++----- .../stdout.expected | 6 +- .../stdout.expected | 4 +- .../stdout.expected | 3 +- .../typecheck.expected | 33 ++++++----- .../stdout.expected | 8 +-- .../stdout.expected | 11 ++-- .../stdout.expected | 17 +++--- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 7 +-- .../typecheck.expected | 27 ++++++--- .../typecheck.expected | 33 +++++++---- .../typecheck.expected | 31 ++++++---- .../stdout.expected | 4 +- .../stdout.expected | 4 +- .../typecheck.expected | 33 +++++++---- .../typecheck.expected | 27 ++++++--- .../typecheck.expected | 45 +++++++++----- .../typecheck.expected | 49 ++++++++++------ .../stdout.expected | 4 +- .../stdout.expected | 4 +- .../typecheck.expected | 33 +++++++---- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 8 +-- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 4 +- .../typecheck.expected | 58 +++++++++++-------- .../stdout.expected | 4 +- .../typecheck.expected | 19 +++--- .../typecheck.expected | 53 +++++++++++------ .../typecheck.expected | 39 ++++++++----- .../typecheck.expected | 36 ++++++++---- .../typecheck.expected | 44 ++++++++------ .../typecheck.expected | 36 ++++++++---- .../stdout.expected | 4 +- .../typecheck.expected | 33 +++++++---- .../typecheck.expected | 18 ++++-- .../stdout.expected | 4 +- .../stdout.expected | 5 +- .../stdout.expected | 6 +- .../typecheck.expected | 39 ++++++++----- .../stdout.expected | 4 +- .../typecheck.expected | 49 ++++++++++------ .../typecheck.expected | 33 +++++++---- .../stdout.expected | 6 +- .../stdout.expected | 8 +-- .../typecheck.expected | 43 ++++++++------ .../stdout.expected | 28 ++++----- .../typecheck.expected | 39 ++++++++----- .../typecheck.expected | 34 +++++++---- .../typecheck.expected | 43 +++++++++----- .../typecheck.expected | 54 ++++++++++------- .../stdout.expected | 4 +- .../typecheck.expected | 51 ++++++++++------ .../typecheck.expected | 50 +++++++++------- .../stdout.expected | 4 +- .../typecheck.expected | 41 ++++++++----- .../typecheck.expected | 36 ++++++++---- .../stdout.expected | 19 +++--- .../stdout.expected | 4 +- .../typecheck.expected | 39 ++++++++----- .../typecheck.expected | 33 +++++++---- .../stdout.expected | 5 +- .../stdout.expected | 4 +- .../typecheck.expected | 36 ++++++++---- .../stdout.expected | 8 +-- .../autogen/445~1435212982_68/stdout.expected | 4 +- 102 files changed, 1462 insertions(+), 891 deletions(-) diff --git a/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected index c8bc632f97..49f43198f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected @@ -2,26 +2,35 @@ Error: Undefined reference: q27 Bindings in context: q30: DeclNoRepr (quantified q30: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) var4_Function1DPartial_Values_Occurrence: DeclNoRepr (find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, 5), - int(3)] of bool) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, - 5)] of bool) + int(3)] of + bool) + var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of + bool) var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of int(3)) + int(-1)] of + int(3)) var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of bool) + int(-1)] of + bool) var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), int(1..2), - int(-2)] of int(-4)) + int(-2)] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), int(1..2), - int(-2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)) + int(-2)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected index d90b70844a..c84fce601f 100644 --- a/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected @@ -4,22 +4,33 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of int(4..5)) + bool] of + int(4..5)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/stdout.expected b/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/stdout.expected index 989431ab0a..fc8cda030d 100644 --- a/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/stdout.expected @@ -1,8 +1,8 @@ language Essence 1.3 find var1: - function (minSize 2, maxSize 5, surjective) - set (minSize 2, maxSize 2) of int(3..5, 0) --> matrix indexed by [int(5, 5)] of bool + function (minSize 2, maxSize 5, surjective) set (minSize 2, maxSize 2) of int(3..5, 0) --> + matrix indexed by [int(5, 5)] of bool such that false, 2 <= 0 diff --git a/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected index b33f7f9ddd..2551cc39e0 100644 --- a/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected @@ -4,23 +4,34 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..4)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) + int(1..2)] of + bool) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), int(1..4), - bool] of int(4)) + bool] of + int(4)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), int(1..4), - bool] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of int(0..4)) + bool] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/stdout.expected b/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/stdout.expected index bedde5431b..ad06b9cfec 100644 --- a/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/stdout.expected @@ -2,6 +2,6 @@ language Essence 1.3 find var1: relation (size min(([] : `matrix indexed by [int] of int`))) of - (function (minSize 1 ** 0, total, injective) - (bool, bool) --> partition (numParts 5, partSize 1, regular) from bool) + (function (minSize 1 ** 0, total, injective) (bool, bool) --> + partition (numParts 5, partSize 1, regular) from bool) such that false = true diff --git a/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/stdout.expected b/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/stdout.expected index 599fcc42f3..58203051da 100644 --- a/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/stdout.expected @@ -12,10 +12,10 @@ find var3: bool such that and([var3 | q_4_ExplicitVarSizeWithMarker_Marker : int(0..4), - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), - bool] of bool, - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), - bool] of int(5), + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), bool] of + bool, + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), bool] of + int(5), and([q1 + 1 <= q_4_ExplicitVarSizeWithMarker_Marker -> q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags[q1, ..] relation (minSize 5) of (bool * bool * int(3, 2..4)) + function (maxSize 0) set (minSize 2, maxSize 5) of int(2..3, 3) --> + relation (minSize 5) of (bool * bool * int(3, 2..4)) find var6: set (size 3) of partition (maxNumParts 0, minPartSize 0, regular) from int(2, 5) such that or([true, true, false, true, false; int(0, 5..7, 9)]), diff --git a/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/stdout.expected b/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/stdout.expected index d0397d7a13..269c8440ee 100644 --- a/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/stdout.expected @@ -1,8 +1,8 @@ language Essence 1.3 find var1: - function (minSize 1, maxSize 2, total, injective) - (int(2, 1..4), int(4, 1), bool) --> function (minSize 4, maxSize 4, injective) int(4, 2) --> int(4, 3) + function (minSize 1, maxSize 2, total, injective) (int(2, 1..4), int(4, 1), bool) --> + function (minSize 4, maxSize 4, injective) int(4, 2) --> int(4, 3) such that (mset() : `mset of (partition from bool, partition from bool, matrix indexed by [int] of bool, set of bool)`) in {mset((partition({true}, {true, true, true, true}, {false, true, true, false}), partition({false, true}, {false}), diff --git a/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected index affe7537f7..27c963718b 100644 --- a/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected @@ -2,20 +2,25 @@ Error: Undefined reference: q13 Bindings in context: q41: DeclNoRepr (quantified q41: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/stdout.expected b/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/stdout.expected index 8a7397e0fd..4d5fea1e53 100644 --- a/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/stdout.expected @@ -1,5 +1,5 @@ language Essence 1.3 find var2: - function (minSize 0, maxSize 3) - mset (minSize 3, minOccur 0, maxOccur 0) of bool --> relation (minSize 4) of (bool * bool) + function (minSize 0, maxSize 3) mset (minSize 3, minOccur 0, maxOccur 0) of bool --> + relation (minSize 4) of (bool * bool) diff --git a/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/stdout.expected b/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/stdout.expected index a0524fc8a4..98cc6f03e6 100644 --- a/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/stdout.expected @@ -2,8 +2,8 @@ language Essence 1.3 find var1: relation (size sum([0; int(2)])) of - (function (minSize 4, maxSize 4, total, bijective) - mset (maxSize 3, minOccur 4, maxOccur 5) of bool --> (bool, bool, bool)) + (function (minSize 4, maxSize 4, total, bijective) mset (maxSize 3, minOccur 4, maxOccur 5) of bool --> + (bool, bool, bool)) such that true, true, diff --git a/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected index 480519c261..07231f25f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected @@ -3,31 +3,40 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(1, 4)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, - 4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of + bool) q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, - int(1..16)] of int(0..2)) + 4)] of + bool, + int(1..16)] of + int(0..2)) q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, - int(1..16)] of int(0..2)) + 4)] of + bool, + int(1..16)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) + 4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 4)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected index 46093b6dda..5c38a10241 100644 --- a/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected @@ -2,31 +2,40 @@ Error: Undefined reference: q13 Bindings in context: q44: DeclNoRepr (quantified q44: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected index f14fd50122..40c96441fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected @@ -3,32 +3,41 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(4, 3)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, - 3)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, 3)] of + bool) q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of int(4, - 3)) + int(1..2)] of + int(4, 3)) q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of int(4, - 3)) + int(1..2)] of + int(4, 3)) q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, - int(1..16)] of int(0..2)) + 3)] of + bool, + int(1..16)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(4, - 3)] of bool) + 3)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(4, - 3)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 3)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/stdout.expected b/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/stdout.expected index 625975a5b6..91230f6812 100644 --- a/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/stdout.expected @@ -3,8 +3,8 @@ language Essence 1.3 given given1: partition (maxPartSize 1) from bool find var1: mset (minSize 1, maxOccur -4) of set (minSize 1, maxSize 4) of int(0..2, 0..3) find var2: - matrix indexed by [int(5, 4)] of relation (minSize 3, maxSize 4) of - (int(5, 1) * function (minSize 5, maxSize 5, total) bool --> bool) + matrix indexed by [int(5, 4)] of + relation (minSize 3, maxSize 4) of (int(5, 1) * function (minSize 5, maxSize 5, total) bool --> bool) find var3: int(4, 5) find var4: int(5, 1..5) such that diff --git a/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected index e787b654e1..c6c7fb04c7 100644 --- a/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected @@ -2,29 +2,37 @@ Error: Undefined reference: q13 Bindings in context: q50: DeclNoRepr (quantified q50: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected index 55248d27e0..c5455cdbc1 100644 --- a/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected @@ -3,25 +3,32 @@ Error: Bindings in context: q7: DeclNoRepr (quantified q7: int(1, 4)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, - 4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of + bool) q16_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q16_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q16_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q16_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, - int(1..16)] of int(0..2)) + 4)] of + bool, + int(1..16)] of + int(0..2)) q11_Occurrence: DeclNoRepr (find q11_Occurrence: matrix indexed by [matrix indexed by [int(1, 4)] of bool, - int(1..16), int(1, 4)] of bool) + int(1..16), int(1, 4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) + 4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 4)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected index 4bdf46bcdb..932c4ce49e 100644 --- a/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected @@ -2,35 +2,46 @@ Error: Undefined reference: q15 Bindings in context: q52: DeclNoRepr (quantified q52: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(4, - 2)) + var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, + 2)) var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/stdout.expected b/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/stdout.expected index 60c920fb7d..0563fcd0ff 100644 --- a/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/stdout.expected @@ -3,9 +3,8 @@ language Essence 1.3 find var1: tuple (bool) find var2: relation (size factorial(|(function() : `function bool --> bool`)|)) of - (matrix indexed by [int(1..3, 3)] of relation of - (partition (partSize 3, regular) from bool * - relation (size 5) of (bool))) + (matrix indexed by [int(1..3, 3)] of + relation of (partition (partSize 3, regular) from bool * relation (size 5) of (bool))) find var3: set of bool such that true, diff --git a/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected index 109e853a1a..fea71ade8d 100644 --- a/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected @@ -4,24 +4,35 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..4)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..4)] of int(0..2)) + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4)] of + int(0..2)) var3: DeclNoRepr (find var3: int(3..4)) var2_RelationAsMatrix: DeclNoRepr (find var2_RelationAsMatrix: matrix indexed by [int(-3..4, -2)] of bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), int(1..4), - bool] of int(-4)) + bool] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), int(1..4), - bool] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of int(0..4)) + bool] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/stdout.expected b/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/stdout.expected index 4b869fe42a..b51c742e6e 100644 --- a/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/stdout.expected @@ -5,8 +5,8 @@ find var2: bool find var3: set (size factorial(1)) of bool find var4: tuple ((int(0..5, 2), bool, int(1, 5))) find var5: - function (maxSize 0 ** 2, injective) - set (maxSize 1) of bool --> relation (minSize 2) of (int(2..3, 2..4) * int(0, 5)) + function (maxSize 0 ** 2, injective) set (maxSize 1) of bool --> + relation (minSize 2) of (int(2..3, 2..4) * int(0, 5)) find var6: int(4, 1..3) such that var1, diff --git a/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/stdout.expected b/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/stdout.expected index 703d8c3fad..833585cbbb 100644 --- a/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/stdout.expected @@ -1,6 +1,6 @@ language Essence 1.3 find var1: - function (maxSize 5 - 4, total, injective) - matrix indexed by [int(4, 3)] of int(2..4, 1) --> function (maxSize 3, total, surjective) bool --> bool + function (maxSize 5 - 4, total, injective) matrix indexed by [int(4, 3)] of int(2..4, 1) --> + function (maxSize 3, total, surjective) bool --> bool such that false diff --git a/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected index f61f23c45b..472c616287 100644 --- a/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected @@ -3,31 +3,40 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(1, -4)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, - -4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, -4)] of + bool) q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, + -4)] of + bool, int(1..16), - int(1..2)] of int(1, - -4)) + int(1..2)] of + int(1, -4)) q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, - int(1..16)] of int(0..2)) + -4)] of + bool, + int(1..16)] of + int(0..2)) q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, + -4)] of + bool, int(1..16), - int(1..2)] of int(1, - -4)) + int(1..2)] of + int(1, -4)) q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, - int(1..16)] of int(0..2)) + -4)] of + bool, + int(1..16)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(1, - -4)] of bool) + -4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(1, - -4)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + -4)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/stdout.expected b/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/stdout.expected index 2b4b3731ed..fee4c88d7f 100644 --- a/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/stdout.expected @@ -2,11 +2,11 @@ language Essence 1.3 find var1: int(1, 1) find var2: - matrix indexed by [int(3, 5), int(0, 3), int(2, 0), int(2, 4), int(5, 4), int(5, 0..2), int(5, 5)] of int(0, - 1..3) + matrix indexed by [int(3, 5), int(0, 3), int(2, 0), int(2, 4), int(5, 4), int(5, 0..2), int(5, 5)] of + int(0, 1..3) find var3: - matrix indexed by [int(1..2, 0), int(1..3, 4), int(3, 0), int(0..1, 0), int(3, 3), int(0, 1), - int(4..5, 2)] of int(4, 2) + matrix indexed by [int(1..2, 0), int(1..3, 4), int(3, 0), int(0..1, 0), int(3, 3), int(0, 1), int(4..5, 2)] of + int(4, 2) such that [[[[0, 1, var1, var1; int(2..4, 7)]; int(0)], [[var1, var1, var1, 3; int(2, 8..10)]; int(0)], [[2; int(0)], [5, var1, var1, var1, var1; int(3..4, 5, 12..13)]; int(2, 5)], [[5; int(2)]; int(2)]; diff --git a/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/stdout.expected b/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/stdout.expected index ef677bd548..f54ea3e828 100644 --- a/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/stdout.expected @@ -12,10 +12,10 @@ find var3: bool such that and([var3 | q_4_ExplicitVarSizeWithFlags_Flags : matrix indexed by [int(1..4)] of bool, - q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), - bool] of bool, - q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Values : matrix indexed by [int(1..4), - bool] of int(5), + q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), bool] of + bool, + q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Values : matrix indexed by [int(1..4), bool] of + int(5), and([q_4_ExplicitVarSizeWithFlags_Flags[q1 + 1] -> q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Flags[q1, ..] bool - --> tuple (relation (size 3) of (bool)) + function matrix indexed by [int(5, 5)] of function (size 1, total, injective) bool --> bool --> + tuple (relation (size 3) of (bool)) diff --git a/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/stdout.expected b/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/stdout.expected index 2954857354..0b444953d3 100644 --- a/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/stdout.expected @@ -2,8 +2,8 @@ language Essence 1.3 find var1: set (size toInt(true)) of matrix indexed by [int(0..5, 5)] of bool find var2: - function (minSize 0, maxSize 3) - mset (minSize 3, minOccur 0, maxOccur 0) of bool --> relation (minSize 4) of (bool * bool) + function (minSize 0, maxSize 3) mset (minSize 3, minOccur 0, maxOccur 0) of bool --> + relation (minSize 4) of (bool * bool) find var3: matrix indexed by [int(5, 2)] of (bool, bool, bool, bool) find var4: bool such that diff --git a/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected index ed599e1e0c..ec2af0bf23 100644 --- a/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected @@ -2,35 +2,46 @@ Error: Undefined reference: q17 Bindings in context: q54: DeclNoRepr (quantified q54: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(4, - 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2)) + var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected index eedf939140..a9b11209fa 100644 --- a/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected @@ -2,32 +2,45 @@ Error: Undefined reference: q29 Bindings in context: q32: DeclNoRepr (quantified q32: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of bool, + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of + bool) + aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of + bool, int(1..2), - int(1)] of int(-2)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2)] of int(0..1)) + int(1)] of + int(-2)) + aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2)] of + int(0..1)) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, 5), - int(1)] of int(3)) + int(1)] of + int(3)) var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, - 5)] of int(0..1)) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, - 5)] of bool) + 5)] of + int(0..1)) + var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of + bool) var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of int(3)) + int(-1)] of + int(3)) var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of bool) + int(-1)] of + bool) var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) var2: DeclNoRepr (find var2: bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), int(1..2), - int(-2)] of int(-4)) + int(-2)] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), int(1..2), - int(-2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)) + int(-2)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/stdout.expected b/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/stdout.expected index bb022e2e77..f55498f81e 100644 --- a/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/stdout.expected @@ -2,6 +2,5 @@ language Essence 1.3 find var2: relation of - (matrix indexed by [int(1..3, 3)] of relation of - (partition (partSize 3, regular) from bool * - relation (size 5) of (bool))) + (matrix indexed by [int(1..3, 3)] of + relation of (partition (partSize 3, regular) from bool * relation (size 5) of (bool))) diff --git a/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected index 32dce8fc63..818911fe92 100644 --- a/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected @@ -2,22 +2,27 @@ Error: Undefined reference: q13 Bindings in context: q41: DeclNoRepr (quantified q41: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/stdout.expected b/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/stdout.expected index 26a15341c3..d37339ef99 100644 --- a/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/stdout.expected @@ -3,8 +3,8 @@ language Essence 1.3 find var1: tuple (function (minSize 4, maxSize 5, bijective) bool --> bool) find var2: partition (minNumParts 3, maxNumParts 3, partSize 1 % 4, regular) from mset (size 3, maxOccur 1) of bool find var3: - function (maxSize 0 % 4, bijective) - function (minSize 5, total, bijective) bool --> bool --> set (minSize 3) of bool + function (maxSize 0 % 4, bijective) function (minSize 5, total, bijective) bool --> bool --> + set (minSize 3) of bool find var4: function (minSize 4 - 2, total, bijective) (bool, bool) --> matrix indexed by [int(4, 4)] of bool such that false -> false, diff --git a/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected index f1351bc922..5f9431c325 100644 --- a/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected @@ -2,42 +2,54 @@ Error: Undefined reference: q15 Bindings in context: q64: DeclNoRepr (quantified q64: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) + int(1..2)] of + int(-4, 4)) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) + int(1..2)] of + int(-4, 4)) aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of bool) + int(1..2)] of + bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(4, - 2)) + var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, + 2)) var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected index fc0d5e2fdc..83d36983b4 100644 --- a/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected @@ -3,33 +3,42 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(4, 3)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, - 3)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, 3)] of + bool) q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of int(4, - 3)) + int(1..2)] of + int(4, 3)) q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of int(4, - 3)) + int(1..2)] of + int(4, 3)) q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, - 3)] of bool, + 3)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(4, - 3)] of bool) + 3)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(4, - 3)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 3)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/stdout.expected b/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/stdout.expected index 359e547aab..b1848a6b79 100644 --- a/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/stdout.expected @@ -1,9 +1,9 @@ language Essence 1.3 find var1: - matrix indexed by [int(4..5, 5)] of function (minSize 0 - 0, total, bijective) - (bool, bool, bool, bool) - --> relation (size 2, irreflexive) of (bool * bool) + matrix indexed by [int(4..5, 5)] of + function (minSize 0 - 0, total, bijective) (bool, bool, bool, bool) --> + relation (size 2, irreflexive) of (bool * bool) find var2: partition (maxNumParts sum([5; int(2)]), partSize (5 - 1) / toInt(false)) from bool find var3: bool such that diff --git a/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/stdout.expected b/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/stdout.expected index 9671e87fae..979f6b0d0e 100644 --- a/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/stdout.expected @@ -1,5 +1,5 @@ language Essence 1.3 find var1: - function (minSize 1, maxSize 2, total, injective) - (int(2, 1..4), int(4, 1), bool) --> function (minSize 4, maxSize 4, injective) int(4, 2) --> int(4, 3) + function (minSize 1, maxSize 2, total, injective) (int(2, 1..4), int(4, 1), bool) --> + function (minSize 4, maxSize 4, injective) int(4, 2) --> int(4, 3) diff --git a/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/stdout.expected b/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/stdout.expected index 386f29f152..b54c028b0e 100644 --- a/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/stdout.expected @@ -7,7 +7,8 @@ find var1: find var2: function (minSize min([5, 2, 0; int(6..8)]), surjective) matrix indexed by [int(5, 5)] of function (size 1, total, injective) bool --> bool - --> tuple (relation (size 3) of (bool)) + --> + tuple (relation (size 3) of (bool)) such that true, true diff --git a/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected index fc9896e5e1..4c87df3320 100644 --- a/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected @@ -2,27 +2,34 @@ Error: Undefined reference: q17 Bindings in context: q51: DeclNoRepr (quantified q51: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(4, - 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2)) + var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/stdout.expected b/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/stdout.expected index 1a2a8acdf4..7118afa7e9 100644 --- a/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/stdout.expected @@ -12,10 +12,10 @@ find var3: bool such that and([var3 | q_4_ExplicitVarSizeWithMarker_Marker : int(0..4), - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), - bool] of bool, - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), - bool] of int(5), + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), bool] of + bool, + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), bool] of + int(5), and([q1 + 1 <= q_4_ExplicitVarSizeWithMarker_Marker -> q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags[q1, ..] bool * mset (maxSize toInt(false), minOccur 5, maxOccur 5) of matrix indexed by [int(5, 3..4)] of bool * - function (size 1, surjective) - set (maxSize 1) of int(2..4, 4) --> matrix indexed by [int(0..2, 3..5)] of int(2..4, 0..3)) + function (size 1, surjective) set (maxSize 1) of int(2..4, 4) --> + matrix indexed by [int(0..2, 3..5)] of int(2..4, 0..3)) find var3: set (size min([4, 1, 3, 1, 0; int(5..9)])) of matrix indexed by [int(5, 1..4)] of relation of (int(2..5, 2) * bool) @@ -17,10 +17,9 @@ find var4: (partition (maxNumParts 1, maxPartSize 0) from bool, relation (maxSize 0) of (bool * bool * bool), int(5, 5)) find var5: - function (minSize 0) - relation (size 2 ** 5) of (mset (maxSize 1, maxOccur 1) of int(3, 4..5)) - --> relation (size 4 % 4) of - (relation (minSize 5, maxSize 5) of (int(2, 2..3) * int(4, 3) * bool * bool) * bool) + function (minSize 0) relation (size 2 ** 5) of (mset (maxSize 1, maxOccur 1) of int(3, 4..5)) --> + relation (size 4 % 4) of + (relation (minSize 5, maxSize 5) of (int(2, 2..3) * int(4, 3) * bool * bool) * bool) such that false, toInt(true) in {5, 1}, diff --git a/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/stdout.expected b/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/stdout.expected index a5d70f864a..e124c77adf 100644 --- a/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/stdout.expected @@ -5,21 +5,24 @@ find var1: function (maxSize --4, total, surjective) relation (minSize 3, maxSize 3) of (bool * bool * function (minSize 0, total) int(5, 3) --> int(5, 3) * (bool, bool, bool, bool)) - --> partition (maxPartSize 5 / 4) from bool, + --> + partition (maxPartSize 5 / 4) from bool, relation (minSize 3, maxSize 5) of (mset (maxSize 0, minOccur 0) of set (size 1) of matrix indexed by [int(4, 1..4)] of int(4..5, 0) * - matrix indexed by [int(0..3, 0..4)] of partition (minNumParts 5, maxNumParts 5, minPartSize 1) from - relation (size 2) of (int(5, 2..4) * bool * bool) * + matrix indexed by [int(0..3, 0..4)] of + partition (minNumParts 5, maxNumParts 5, minPartSize 1) from + relation (size 2) of (int(5, 2..4) * bool * bool) * bool)) find var2: mset (maxSize toInt(true), maxOccur 0) of function (maxSize freq(mset(partition({0, 5, 4, 4, 3})), partition({3 % 4}, {5 % 0, 5, 4, -2, 1}, {1 / 2}, {3 / 1, 2, 0 % 0, 2 - 2, -1})), injective) - matrix indexed by [int(4, 4)] of partition (numParts 0, maxPartSize 0) from - function (minSize 1, bijective) int(2..3, 1..4) --> bool - --> partition (minNumParts 1 / 4, maxNumParts 3, partSize 2) from - set (minSize 1 - 5) of relation (minSize 4, transitive) of (int(4, 5) * int(4, 5)) + matrix indexed by [int(4, 4)] of + partition (numParts 0, maxPartSize 0) from function (minSize 1, bijective) int(2..3, 1..4) --> bool + --> + partition (minNumParts 1 / 4, maxNumParts 3, partSize 2) from + set (minSize 1 - 5) of relation (minSize 4, transitive) of (int(4, 5) * int(4, 5)) find var3: int(4, 2) find var4: partition (numParts min(flatten(([] : `matrix indexed by [int, int] of int`))), diff --git a/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected index 2ccf736b31..746ac71107 100644 --- a/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected @@ -4,21 +4,32 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) + bool] of + bool) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/stdout.expected b/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/stdout.expected index eb778dc07f..47b6060152 100644 --- a/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/stdout.expected @@ -1,7 +1,6 @@ language Essence 1.3 find var5: - function - relation of (mset (maxSize 1, maxOccur 1) of int(4)) - --> relation (size 4 % 4) of - (relation (minSize 5, maxSize 5) of (int(2, 2..3) * int(4, 3) * bool * bool) * bool) + function relation of (mset (maxSize 1, maxOccur 1) of int(4)) --> + relation (size 4 % 4) of + (relation (minSize 5, maxSize 5) of (int(2, 2..3) * int(4, 3) * bool * bool) * bool) diff --git a/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected index 323d18e9c1..c8bc0918c5 100644 --- a/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected @@ -3,20 +3,29 @@ Error: Bindings in context: q32: DeclNoRepr (quantified q32: int(2..4)) q20: DeclNoRepr (quantified q20: int(1..8)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(2..4)] of bool, - int(1..8), int(2..4)] of bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(2..4)] of bool, + int(1..8), int(2..4)] of + bool) + aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(2..4)] of + bool, int(1..8), - int(1..3)] of int(2..4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(2..4)] of bool, - int(1..8)] of int(0..3)) + int(1..3)] of + int(2..4)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8)] of + int(0..3)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..256), int(1..8), - int(2..4)] of int(1)) + int(2..4)] of + int(1)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..256), int(1..8), - int(2..4)] of bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of int(0..8)) + int(2..4)] of + bool) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of + int(0..8)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..256)) var1: DeclNoRepr (find var1: int(2)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected index 9a16d13810..aefecdbb37 100644 --- a/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected @@ -4,21 +4,32 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of int(4..5)) + bool] of + int(4..5)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected index 494bd46cec..b241baecac 100644 --- a/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected @@ -2,27 +2,36 @@ Error: Undefined reference: q27 Bindings in context: q30: DeclNoRepr (quantified q30: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) var4_Function1DPartial_Values_Occurrence: DeclNoRepr (find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, 5), - int(3)] of bool) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, - 5)] of bool) + int(3)] of + bool) + var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of + bool) var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of int(3)) + int(-1)] of + int(3)) var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of bool) + int(-1)] of + bool) var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) var2: DeclNoRepr (find var2: bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), int(1..2), - int(-2)] of int(-4)) + int(-2)] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), int(1..2), - int(-2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)) + int(-2)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/stdout.expected b/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/stdout.expected index aad4640032..8263f28899 100644 --- a/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/stdout.expected @@ -1,5 +1,5 @@ language Essence 1.3 find var2: - function (maxSize 0 / 1, bijective) - set (minSize 4, maxSize 5) of bool --> function (maxSize 1, total, injective) bool --> bool + function (maxSize 0 / 1, bijective) set (minSize 4, maxSize 5) of bool --> + function (maxSize 1, total, injective) bool --> bool diff --git a/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/stdout.expected b/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/stdout.expected index 79dea420e0..69366e13f4 100644 --- a/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/stdout.expected @@ -2,8 +2,8 @@ language Essence 1.3 find var1: set (maxSize factorial(1)) of partition (minNumParts 5, maxPartSize 0, regular) from int(5, 4) find var2: - function (size toInt(false), injective) - mset (size 0) of bool --> function (minSize 0, bijective) int(5, 1) --> int(5, 1) + function (size toInt(false), injective) mset (size 0) of bool --> + function (minSize 0, bijective) int(5, 1) --> int(5, 1) find var3: set (minSize 2, maxSize 3) of function (size 0, injective) bool --> bool find var4: set of function (minSize 1, maxSize 2, injective) int(2, 4) --> bool such that diff --git a/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected index ab26ddf67e..4728765f7b 100644 --- a/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected @@ -4,22 +4,33 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) + bool] of + bool) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected index 3d043f12ed..e8a886b4ac 100644 --- a/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected @@ -3,20 +3,29 @@ Error: Bindings in context: q7: DeclNoRepr (quantified q7: int(-4..-1)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool) - q16_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q16_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of + bool) + q16_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q16_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q16_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q16_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + int(1..4)] of + int(-4..-1)) + q16_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q16_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of bool) + int(1..4)] of + bool) q11_Occurrence: DeclNoRepr (find q11_Occurrence: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, - int(1..16), int(-4..-1)] of bool) + int(1..16), int(-4..-1)] of + bool) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of int(3)) + int(-4..-1)] of + int(3)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + int(-4..-1)] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected index bfc4efada3..1e8a1ef3a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected @@ -3,24 +3,39 @@ Error: Bindings in context: q57: DeclNoRepr (quantified q57: bool) q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool] of int(0..2)) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool] of int(0..2)) + aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool] of + int(0..2)) + aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool] of + int(0..2)) aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of int(0..2)) + int(1..2)] of + bool) + aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of + int(0..2)) aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of int(5, - 3)) + int(1..2)] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + int(5, + 3)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of int(-3, - -3)) + bool] of + int(-3, + -3)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of bool) + bool] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected index 87cff40d12..6866f7a0e1 100644 --- a/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected @@ -3,26 +3,41 @@ Error: Bindings in context: q59: DeclNoRepr (quantified q59: bool) q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) + aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of int(5, - 3)) + int(1..2)] of + bool) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of + int(0..2)) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + int(5, + 3)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of int(-3, - -3)) + bool] of + int(-3, + -3)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of bool) + bool] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/stdout.expected b/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/stdout.expected index ba396a5d7c..b1f873d53d 100644 --- a/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/stdout.expected @@ -2,8 +2,8 @@ language Essence 1.3 find var1: int(5, 3) find var2: - matrix indexed by [int(3..4, 1..3)] of function (total, injective) - int(1, 5) --> set (minSize 2, maxSize 4) of int(4, 1) + matrix indexed by [int(3..4, 1..3)] of + function (total, injective) int(1, 5) --> set (minSize 2, maxSize 4) of int(4, 1) find var3: (relation (minSize 4 / 0) of ((bool, bool) * partition (minNumParts 4) from int(2, 2..3)), matrix indexed by [int(5, 2)] of mset (minSize 4, maxSize 4, minOccur 5, maxOccur 5) of int(1..3, 3..5)) diff --git a/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/stdout.expected b/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/stdout.expected index 2617ca62c2..504d218a8e 100644 --- a/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/stdout.expected @@ -2,8 +2,8 @@ language Essence 1.3 find var1: (bool, bool, - function (minSize 1, maxSize 5, total, bijective) - set (minSize 2) of bool --> partition (minNumParts 2, partSize 2, regular) from bool, + function (minSize 1, maxSize 5, total, bijective) set (minSize 2) of bool --> + partition (minNumParts 2, partSize 2, regular) from bool, mset (maxSize -1, minOccur 3 / 5) of set (maxSize 3) of bool) such that together(({} : `set of set of relation of (bool * bool * bool)`), diff --git a/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected index 657697af75..9a3470b78d 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected @@ -4,22 +4,33 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) + bool] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected index 15b0e7ac39..76c7ed6d6e 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected @@ -4,25 +4,36 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..4)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) + int(1..2)] of + bool) var3: DeclNoRepr (find var3: int(3..4)) var2_RelationAsMatrix: DeclNoRepr (find var2_RelationAsMatrix: matrix indexed by [int(-3..4, -2)] of bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), int(1..4), - bool] of int(-4)) + bool] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), int(1..4), - bool] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of int(0..4)) + bool] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/stdout.expected b/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/stdout.expected index e4f3f6bdf4..839fbffedc 100644 --- a/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/stdout.expected @@ -9,10 +9,10 @@ find var3: bool such that and([var3 | q_4_ExplicitVarSizeWithMarker_Marker : int(0..4), - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), - bool] of bool, - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), - bool] of int(5), + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), bool] of + bool, + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), bool] of + int(5), and([q1 + 1 <= q_4_ExplicitVarSizeWithMarker_Marker -> q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags[q1, ..] partition (minPartSize 5, regular) from bool find var1: - function (size 2, bijective) - int(4..5, 5) --> function (minSize 2, maxSize 4, total, surjective) int(4, 3) --> int(3, 2) + function (size 2, bijective) int(4..5, 5) --> + function (minSize 2, maxSize 4, total, surjective) int(4, 3) --> int(3, 2) such that false, false, diff --git a/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected index 94c7278c9a..4e582bd955 100644 --- a/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected @@ -2,40 +2,52 @@ Error: Undefined reference: q17 Bindings in context: q62: DeclNoRepr (quantified q62: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) + int(1..2)] of + int(-4, 4)) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(4, - 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2)) + var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/stdout.expected b/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/stdout.expected index a8623362ef..0b9b886079 100644 --- a/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/stdout.expected @@ -1,5 +1,5 @@ language Essence 1.3 find var5: - function (maxSize 0 ** 2, injective) - set (maxSize 1) of bool --> relation (minSize 2) of (int(2..3, 2..4) * int(0, 5)) + function (maxSize 0 ** 2, injective) set (maxSize 1) of bool --> + relation (minSize 2) of (int(2..3, 2..4) * int(0, 5)) diff --git a/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected index aac3ad9b45..eb8a0a4e2a 100644 --- a/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected @@ -2,21 +2,26 @@ Error: Undefined reference: q13 Bindings in context: q41: DeclNoRepr (quantified q41: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var2_2: DeclNoRepr (find var2_2: bool) var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected index 2ee32f1999..1740a6c0df 100644 --- a/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected @@ -3,27 +3,44 @@ Error: Bindings in context: q62: DeclNoRepr (quantified q62: bool) q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) + aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of int(0..2)) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [bool] of bool) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of bool) + int(1..2)] of + bool) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of + int(0..2)) + var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [bool] of + bool) + var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of int(4, - -4)) + bool] of + int(4, + -4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of bool) + bool] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected index 480519c261..07231f25f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected @@ -3,31 +3,40 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(1, 4)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, - 4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of + bool) q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, - int(1..16)] of int(0..2)) + 4)] of + bool, + int(1..16)] of + int(0..2)) q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, - int(1..16)] of int(0..2)) + 4)] of + bool, + int(1..16)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) + 4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 4)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected index 80b8ea9e0e..85ed15d0f8 100644 --- a/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected @@ -3,25 +3,37 @@ Error: Bindings in context: q34: DeclNoRepr (quantified q34: int(2..4)) q20: DeclNoRepr (quantified q20: int(1..8)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of bool, + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of + bool) + aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of + bool, int(1..8), - int(1..3)] of int(2..4)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of bool, + int(1..3)] of + int(2..4)) + aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of + bool, int(1..8), - int(1..3)] of bool) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of bool, + int(1..3)] of + bool) + aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of + bool, int(1..8), - int(1..3)] of int(2..4)) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of bool, + int(1..3)] of + int(2..4)) + aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of + bool, int(1..8), - int(1..3)] of bool) + int(1..3)] of + bool) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..256), int(1..8), - int(2..4)] of int(1)) + int(2..4)] of + int(1)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..256), int(1..8), - int(2..4)] of bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of int(0..8)) + int(2..4)] of + bool) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of + int(0..8)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..256)) var1: DeclNoRepr (find var1: int(2)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected index 1bd40b9b81..38da2f17f4 100644 --- a/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected @@ -2,35 +2,45 @@ Error: Undefined reference: q13 Bindings in context: q54: DeclNoRepr (quantified q54: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) + int(1..2)] of + int(-4, 4)) aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of bool) + int(1..2)] of + bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected index 2eb46a7f19..0c116dcfd0 100644 --- a/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected @@ -3,25 +3,37 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(-4..-1)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of + bool) + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, - int(1..16)] of int(0..4)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + int(1..4)] of + int(-4..-1)) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4)) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + int(1..4)] of + int(-4..-1)) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of bool) + int(1..4)] of + bool) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of int(3)) + int(-4..-1)] of + int(3)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + int(-4..-1)] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) var2: DeclNoRepr (find var2: bool) var1: DeclNoRepr (find var1: bool) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/stdout.expected b/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/stdout.expected index b8efba52ef..6facd6ad7c 100644 --- a/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/stdout.expected @@ -1,7 +1,7 @@ language Essence 1.3 find var1: - function (maxSize factorial(2), surjective) - matrix indexed by [int(0..4, 4)] of bool --> mset (maxSize 0, minOccur 4, maxOccur 5) of bool + function (maxSize factorial(2), surjective) matrix indexed by [int(0..4, 4)] of bool --> + mset (maxSize 0, minOccur 4, maxOccur 5) of bool find var2: matrix indexed by [int(4, 5)] of relation (minSize 1) of (bool * bool * bool * bool) such that true diff --git a/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected index e2577ac37b..c184cad300 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected @@ -4,22 +4,33 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..4)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..4), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..4)] of int(0..2)) + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4)] of + int(0..2)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), int(1..4), - bool] of int(4)) + bool] of + int(4)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), int(1..4), - bool] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of int(0..4)) + bool] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected index 8eaf0b7b1e..c99d0590a2 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected @@ -3,16 +3,22 @@ Error: Bindings in context: q29: DeclNoRepr (quantified q29: int(2..3)) q20: DeclNoRepr (quantified q20: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..3)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..3)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(2..3)] of bool, - int(1..16), int(2..3)] of bool) + int(1..16), int(2..3)] of + bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(2..3)] of bool, - int(1..16), int(2..3)] of bool) + int(1..16), int(2..3)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - int(2..3)] of bool) + int(2..3)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - int(2..3)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + int(2..3)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/stdout.expected b/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/stdout.expected index a544c2ac1d..b01f211d43 100644 --- a/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/stdout.expected @@ -2,5 +2,5 @@ language Essence 1.3 find var1: relation (size sum([0; int(2)])) of - (function (minSize 4, maxSize 4, total, bijective) - mset (maxSize 3, minOccur 4, maxOccur 5) of bool --> (bool, bool, bool)) + (function (minSize 4, maxSize 4, total, bijective) mset (maxSize 3, minOccur 4, maxOccur 5) of bool --> + (bool, bool, bool)) diff --git a/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/stdout.expected b/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/stdout.expected index 9bffcfa9e2..aecbea6432 100644 --- a/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/stdout.expected @@ -5,8 +5,9 @@ find var1: partition (maxNumParts 4 - 1, maxPartSize 0) from (int(1..5, 4), bool, int(4, 5)) find var2: partition (maxNumParts 5 ** 3, regular) from bool find var3: - matrix indexed by [int(3, 5)] of mset (minSize 4, maxSize 4, minOccur 4, maxOccur 4) of - function (maxSize 0, total, surjective) bool --> int(5, 2..5) + matrix indexed by [int(3, 5)] of + mset (minSize 4, maxSize 4, minOccur 4, maxOccur 4) of + function (maxSize 0, total, surjective) bool --> int(5, 2..5) such that false, image(function(false --> tuple (mset(false, false)), false --> tuple (mset(true, false, false))), diff --git a/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/stdout.expected b/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/stdout.expected index 9718688c0a..b62d0f5519 100644 --- a/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/stdout.expected @@ -1,9 +1,9 @@ language Essence 1.3 find var1: - matrix indexed by [int(0, 5)] of function (maxSize factorial(0), total, bijective) - (bool, bool, bool) - --> mset (minSize 2, maxSize 4, minOccur 1, maxOccur 3) of bool + matrix indexed by [int(0, 5)] of + function (maxSize factorial(0), total, bijective) (bool, bool, bool) --> + mset (minSize 2, maxSize 4, minOccur 1, maxOccur 3) of bool find var2: matrix indexed by [int(1..2, 2)] of relation of (int(2..4, 0) * (bool, bool) * relation of (bool * bool * bool)) find var3: bool diff --git a/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected index 5e03a47b9e..8ac8f428f1 100644 --- a/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected @@ -3,32 +3,41 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(1, -4)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, - -4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, -4)] of + bool) q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, + -4)] of + bool, int(1..16), - int(1..2)] of int(1, - -4)) + int(1..2)] of + int(1, -4)) q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, - int(1..16)] of int(0..2)) + -4)] of + bool, + int(1..16)] of + int(0..2)) q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, + -4)] of + bool, int(1..16), - int(1..2)] of int(1, - -4)) + int(1..2)] of + int(1, -4)) q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, - -4)] of bool, + -4)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(1, - -4)] of bool) + -4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(1, - -4)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + -4)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/stdout.expected b/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/stdout.expected index 86dc41dbc3..f5fe0c14bc 100644 --- a/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/stdout.expected @@ -1,5 +1,5 @@ language Essence 1.3 find var3: - function (maxSize 0 % 4, bijective) - function (minSize 5, total, bijective) bool --> bool --> set (minSize 3) of bool + function (maxSize 0 % 4, bijective) function (minSize 5, total, bijective) bool --> bool --> + set (minSize 3) of bool diff --git a/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected index 2ae4f46411..f7e9efe3ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected @@ -3,42 +3,53 @@ Error: Bindings in context: q45: DeclNoRepr (quantified q45: int(3, 2)) q33: DeclNoRepr (quantified q33: int(1..16)) - q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, - 2)] of bool) + q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of + bool) aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(3, - 2)] of bool, + 2)] of + bool, int(1..16), - int(1..2)] of int(3, - 2)) + int(1..2)] of + int(3, 2)) aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(3, - 2)] of bool, - int(1..16)] of int(0..2)) + 2)] of + bool, + int(1..16)] of + int(0..2)) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(3, - 2)] of bool, + 2)] of + bool, int(1..16), - int(1..2)] of int(3, - 2)) + int(1..2)] of + int(3, 2)) aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(3, - 2)] of bool, - int(1..16)] of int(0..2)) + 2)] of + bool, + int(1..16)] of + int(0..2)) var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), - int(2)] of bool) + int(2)] of + bool) var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2)) var5: DeclNoRepr (find var5: bool) var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(3, - 2)] of bool) + 2)] of + bool) var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(3, - 2)] of bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 2)] of + bool) + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) var3: DeclNoRepr (find var3: bool) var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, - -5..3)] of int(-1, - 5)) + -5..3)] of + int(-1, 5)) var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, - -5..3)] of bool) + -5..3)] of + bool) var1: DeclNoRepr (find var1: bool) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected index 07ec9591bf..3a3cbec134 100644 --- a/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected @@ -4,23 +4,34 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) + bool] of + bool) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/stdout.expected b/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/stdout.expected index c30dd04d2a..7e50ad579a 100644 --- a/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/stdout.expected @@ -1,6 +1,6 @@ language Essence 1.3 find var1: - matrix indexed by [int(4..5, 5)] of function (minSize 0 - 0, total, bijective) - (bool, bool, bool, bool) - --> relation (size 2, irreflexive) of (bool * bool) + matrix indexed by [int(4..5, 5)] of + function (minSize 0 - 0, total, bijective) (bool, bool, bool, bool) --> + relation (size 2, irreflexive) of (bool * bool) diff --git a/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/stdout.expected b/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/stdout.expected index 9e92c6e1b1..913bf6f6e0 100644 --- a/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/stdout.expected @@ -4,10 +4,10 @@ find unused: bool such that and([true | q_4_ExplicitVarSizeWithMarker_Marker : int(0..4), - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), - bool] of bool, - q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), - bool] of int(5), + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), bool] of + bool, + q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values : matrix indexed by [int(1..4), bool] of + int(5), and([q1 + 1 <= q_4_ExplicitVarSizeWithMarker_Marker -> q_4_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags[q1, ..] matrix indexed by [int(4, 2)] of bool * + (function (size toInt(true), total) set (minSize 1, maxSize 1) of bool --> + matrix indexed by [int(4, 2)] of bool * tuple (relation (size 2) of (bool * bool * bool * int(4, 2)))), relation (maxSize [1, 4, 4, 0; int(9, 8, 11, 0)][2 / 0]) of ((mset (maxSize 4, minOccur 1) of int(3, 1..5), matrix indexed by [int(3, 0..5)] of int(1, 5), relation (size 5) of (bool * bool * bool * bool)) * - function (size 4, injective) - set (minSize 0, maxSize 4) of bool --> relation (minSize 4) of (int(4..5, 4..5) * bool * bool) * + function (size 4, injective) set (minSize 0, maxSize 4) of bool --> + relation (minSize 4) of (int(4..5, 4..5) * bool * bool) * bool), function (maxSize 3, total) - function (minSize 4, maxSize 5, total, surjective) - (bool, int(4..5, 1), int(2, 1), bool) --> relation of (bool) - --> partition (minNumParts 0, maxNumParts 3, partSize 4, regular) from int(2..5, 0)) + function (minSize 4, maxSize 5, total, surjective) (bool, int(4..5, 1), int(2, 1), bool) --> + relation of (bool) + --> + partition (minNumParts 0, maxNumParts 3, partSize 4, regular) from int(2..5, 0)) find var2: ((relation (minSize 1, maxSize 1) of (relation (maxSize 1, connex) of (bool * bool) * (bool, int(3, 2), bool, bool) * @@ -32,9 +33,10 @@ find var2: matrix indexed by [int(1, 4)] of int(4, 3) * mset (minSize 3, maxSize 4, minOccur 5, maxOccur 5) of bool * partition (minNumParts 3, maxNumParts 4, minPartSize 1) from bool), - matrix indexed by [int(4, 2..5)] of (relation (minSize 1) of (bool * int(2..5, 1) * bool * bool), - partition (minNumParts 5, maxNumParts 5, regular) from int(3..5, 5), - int(1, 5), partition (numParts 4, partSize 4) from int(4..5, 5)), + matrix indexed by [int(4, 2..5)] of + (relation (minSize 1) of (bool * int(2..5, 1) * bool * bool), + partition (minNumParts 5, maxNumParts 5, regular) from int(3..5, 5), int(1, 5), + partition (numParts 4, partSize 4) from int(4..5, 5)), partition (maxNumParts factorial(factorial(1)), minPartSize 1, maxPartSize factorial(3) ** (3 % 4), regular) from mset (size 0, maxOccur 0 / 3) of function (minSize 3, maxSize 3, injective) int(3..5, 0..1) --> bool) @@ -49,9 +51,9 @@ find var4: set (minSize -3) of relation (minSize 4, maxSize 5) of (int(1, 3..5) * bool * bool * bool)) find var5: bool find var6: - matrix indexed by [int(4, 1..4)] of set (minSize 0, maxSize 4) of - partition (minNumParts 5 / 1, partSize 2) from - matrix indexed by [int(0, 0)] of bool + matrix indexed by [int(4, 1..4)] of + set (minSize 0, maxSize 4) of + partition (minNumParts 5 / 1, partSize 2) from matrix indexed by [int(0, 0)] of bool find var7: int(3, 5) such that var5, diff --git a/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected index 69300bac53..a4db620275 100644 --- a/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected @@ -3,33 +3,42 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(1, 4)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, - 4)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of + bool) q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of int(1, - 4)) + int(1..2)] of + int(1, 4)) q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, - 4)] of bool, + 4)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) + 4)] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(1, - 4)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 4)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected index bbd1511502..6390c3c451 100644 --- a/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected @@ -2,28 +2,38 @@ Error: Undefined reference: q29 Bindings in context: q32: DeclNoRepr (quantified q32: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) + int(1..2), int(-2)] of + bool) var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, 5), - int(1)] of int(3)) + int(1)] of + int(3)) var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, - 5)] of int(0..1)) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, - 5)] of bool) + 5)] of + int(0..1)) + var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of + bool) var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of int(3)) + int(-1)] of + int(3)) var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of bool) + int(-1)] of + bool) var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), int(1..2), - int(-2)] of int(-4)) + int(-2)] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), int(1..2), - int(-2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)) + int(-2)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected index fac249b425..d28d91abac 100644 --- a/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected @@ -2,32 +2,45 @@ Error: Undefined reference: q29 Bindings in context: q32: DeclNoRepr (quantified q32: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool) + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of + bool) aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of bool, + int(1..2), int(-2)] of + bool) + aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of + bool, int(1..2), - int(1)] of int(-2)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2)] of int(0..1)) + int(1)] of + int(-2)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2)] of + int(0..1)) var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, 5), - int(1)] of int(3)) + int(1)] of + int(3)) var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, - 5)] of int(0..1)) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, - 5)] of bool) + 5)] of + int(0..1)) + var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of + bool) var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of int(3)) + int(-1)] of + int(3)) var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of bool) + int(-1)] of + bool) var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) var2: DeclNoRepr (find var2: bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), int(1..2), - int(-2)] of int(-4)) + int(-2)] of + int(-4)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), int(1..2), - int(-2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of int(0..2)) + int(-2)] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected index 404cabeae8..863061721f 100644 --- a/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected @@ -2,39 +2,51 @@ Error: Undefined reference: q15 Bindings in context: q60: DeclNoRepr (quantified q60: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool] of int(0..2)) + 4)] of + bool] of + int(0..2)) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) + int(1..2)] of + int(-4, 4)) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(4, - 2)) + var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, + 2)) var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/stdout.expected b/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/stdout.expected index 64f903c4cc..cf18dfb1ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/stdout.expected @@ -1,5 +1,5 @@ language Essence 1.3 find var1: - function (minSize 0, maxSize 4, total, bijective) - (bool, bool, bool, bool) --> function (minSize 4, total, surjective) bool --> bool + function (minSize 0, maxSize 4, total, bijective) (bool, bool, bool, bool) --> + function (minSize 4, total, surjective) bool --> bool diff --git a/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected index 472657756a..70310435d5 100644 --- a/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected @@ -3,27 +3,44 @@ Error: Bindings in context: q62: DeclNoRepr (quantified q62: bool) q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, - int(1..2)] of bool) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool] of int(0..2)) + aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool) + aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool] of + int(0..2)) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of bool) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [bool] of bool) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of bool) + int(1..2)] of + bool) + var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [bool] of + bool) + var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of int(4, - -4)) + bool] of + int(4, + -4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of bool) + bool] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected index 41492455b8..e61f5c2bf3 100644 --- a/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected @@ -2,35 +2,45 @@ Error: Undefined reference: q17 Bindings in context: q57: DeclNoRepr (quantified q57: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of int(4, - 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2)) + var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/stdout.expected b/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/stdout.expected index 68795df49b..59681d1ca9 100644 --- a/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/stdout.expected @@ -2,5 +2,5 @@ language Essence 1.3 find var1: relation (size 0) of - (function (minSize 4, maxSize 4, total, bijective) - mset (maxSize 3, minOccur 4, maxOccur 5) of bool --> (bool, bool, bool)) + (function (minSize 4, maxSize 4, total, bijective) mset (maxSize 3, minOccur 4, maxOccur 5) of bool --> + (bool, bool, bool)) diff --git a/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected index 9ca8e8f58e..f46ba053c5 100644 --- a/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected @@ -2,32 +2,41 @@ Error: Undefined reference: q15 Bindings in context: q54: DeclNoRepr (quantified q54: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, - 4)] of bool) + q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of + bool) aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of bool) + int(-4, 4)] of + bool) aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of int(-4, - 4)) + 4)] of + bool, + int(1..2)] of + int(-4, 4)) aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of bool, - int(1..2)] of bool) + 4)] of + bool, + int(1..2)] of + bool) aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of int(-4, - 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of int(0..2)) + int(1..2)] of + int(-4, 4)) + aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2)) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) var3_1_1: DeclNoRepr (find var3_1_1: bool) var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of int(4, - 2)) + var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, + 2)) var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of bool) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), int(-4, - 4)] of int(4)) + 4)] of + int(4)) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), int(-4, - 4)] of bool) + 4)] of + bool) var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected index 644eb2adff..207cf905cd 100644 --- a/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected @@ -3,25 +3,37 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(-4..-1)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of + bool) + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + int(1..4)] of + int(-4..-1)) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + int(1..4)] of + bool) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, - int(1..16)] of int(0..4)) + int(1..4)] of + int(-4..-1)) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of int(3)) + int(-4..-1)] of + int(3)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + int(-4..-1)] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) var2: DeclNoRepr (find var2: bool) var1: DeclNoRepr (find var1: bool) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/stdout.expected b/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/stdout.expected index 452cc55fc8..e63e6a919f 100644 --- a/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/stdout.expected @@ -11,27 +11,28 @@ find var2: (tuple (set (size factorial(0)) of (int(2..5, 5), bool)) * ((set (minSize 5, maxSize 5) of bool, mset (size 1, maxOccur 0) of bool), matrix indexed by [int(1..2, 1)] of mset (minOccur 3, maxOccur 3) of int(1, 1..3)) * - matrix indexed by [int(4, 3)] of set (minSize 4, maxSize 4) of - relation (maxSize 3) of - (bool * int(4, 3..4) * int(0..4, 5) * int(3, 1))) + matrix indexed by [int(4, 3)] of + set (minSize 4, maxSize 4) of relation (maxSize 3) of (bool * int(4, 3..4) * int(0..4, 5) * int(3, 1))) find var3: mset (maxSize min(flatten(([] : `matrix indexed by [int] of int`))), minOccur sum([4, 3, 0, 2; int(4, 12, 10, 3)])) of - matrix indexed by [int(5, 2)] of (set (minSize 2, maxSize 4) of int(1, 4), bool, - partition (numParts 1, minPartSize 3, maxPartSize 4) from bool) + matrix indexed by [int(5, 2)] of + (set (minSize 2, maxSize 4) of int(1, 4), bool, + partition (numParts 1, minPartSize 3, maxPartSize 4) from bool) find var4: matrix indexed by [int(1, 0)] of bool find var5: relation (minSize sum([0 - 5 | l_1 : int(0..3, 3), l_2 : int(4..5, 0), true, true -> false]), maxSize 4) of - (matrix indexed by [int(2, 0..5)] of relation (minSize 0, maxSize 5) of - (relation (size 4) of (int(2, 5) * int(5, 1)) * - matrix indexed by [int(0, 3)] of bool) * + (matrix indexed by [int(2, 0..5)] of + relation (minSize 0, maxSize 5) of + (relation (size 4) of (int(2, 5) * int(5, 1)) * matrix indexed by [int(0, 3)] of bool) * set (size 1) of relation of (int(5, 5) * partition (maxNumParts 4, minPartSize 5, regular) from bool) * ((bool, (int(5, 3..4), bool, bool), set (size 4) of int(0, 5)), matrix indexed by [int(3, 1)] of relation of (int(4, 3) * bool * bool), matrix indexed by [int(5, 0..3)] of bool, function (minSize 3, maxSize 5, injective) partition (minNumParts 5, minPartSize 1, maxPartSize 5) from bool - --> function (minSize 1, total, surjective) bool --> int(3, 1..4))) + --> + function (minSize 1, total, surjective) bool --> int(3, 1..4))) find var6: bool find var7: mset (size |mset(mset(4, 5), mset(2, 1, 3), mset(0))|, maxOccur 5) of diff --git a/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/stdout.expected b/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/stdout.expected index d143c13478..4dc562d8a5 100644 --- a/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/stdout.expected @@ -1,6 +1,6 @@ language Essence 1.3 find var1: - function (minSize 0, maxSize 4, total, bijective) - (bool, bool, bool, bool) --> function (minSize 4, total, surjective) bool --> bool + function (minSize 0, maxSize 4, total, bijective) (bool, bool, bool, bool) --> + function (minSize 4, total, surjective) bool --> bool such that true diff --git a/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected index 791e8c1d97..73b172bb7d 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected @@ -3,37 +3,46 @@ Error: Bindings in context: q42: DeclNoRepr (quantified q42: int(3, 2)) q33: DeclNoRepr (quantified q33: int(1..16)) - q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, - 2)] of bool) + q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of + bool) aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(3, - 2)] of bool, + 2)] of + bool, int(1..16), - int(1..2)] of int(3, - 2)) + int(1..2)] of + int(3, 2)) aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(3, - 2)] of bool, + 2)] of + bool, int(1..16), - int(1..2)] of bool) + int(1..2)] of + bool) aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, - int(1..16), int(3, 2)] of bool) + int(1..16), int(3, 2)] of + bool) var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), - int(2)] of bool) + int(2)] of + bool) var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2)) var5: DeclNoRepr (find var5: bool) var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), int(3, - 2)] of bool) + 2)] of + bool) var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), int(3, - 2)] of bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + 2)] of + bool) + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) var3: DeclNoRepr (find var3: bool) var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, - -5..3)] of int(-1, - 5)) + -5..3)] of + int(-1, 5)) var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, - -5..3)] of bool) + -5..3)] of + bool) var1: DeclNoRepr (find var1: bool) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected index ce212d62e1..55b5cf5a19 100644 --- a/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected @@ -4,22 +4,33 @@ Error: q12: DeclNoRepr (quantified q12: bool) q8: DeclNoRepr (quantified q8: int(1..16)) q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of bool, + q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of bool, + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, int(1..16), - int(1..2)] of bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of bool, - int(1..16)] of int(0..2)) + int(1..2)] of + bool) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) + bool] of + bool) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - bool] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + bool] of + bool) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/stdout.expected b/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/stdout.expected index 326ee93e17..70b2706800 100644 --- a/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/stdout.expected @@ -1,9 +1,8 @@ language Essence 1.3 find var1: - function (size 3 - 4, total, injective) - function (minSize 4, total, injective) bool --> bool - --> partition (numParts 3, minPartSize 4, maxPartSize 4) from bool + function (size 3 - 4, total, injective) function (minSize 4, total, injective) bool --> bool --> + partition (numParts 3, minPartSize 4, maxPartSize 4) from bool find var2: function (minSize 3, maxSize 3, total) relation (size 5) of (int(3, 1..3) * bool * bool) --> bool find var3: bool such that diff --git a/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/stdout.expected b/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/stdout.expected index fd13d59486..f85895036b 100644 --- a/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/stdout.expected @@ -2,5 +2,5 @@ language Essence 1.3 find var1: relation of - (function (minSize 1, total, injective) - (bool, bool) --> partition (numParts 5, partSize 1, regular) from bool) + (function (minSize 1, total, injective) (bool, bool) --> + partition (numParts 5, partSize 1, regular) from bool) diff --git a/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected index b5189d4600..04074bee70 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected @@ -3,22 +3,34 @@ Error: Bindings in context: q12: DeclNoRepr (quantified q12: int(-4..-1)) q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of + bool) + q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, - int(1..16)] of int(0..4)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, + int(1..4)] of + int(-4..-1)) + q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4)) + q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, int(1..16), - int(1..4)] of int(-4..-1)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, - int(1..16)] of int(0..4)) + int(1..4)] of + int(-4..-1)) + q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of int(3)) + int(-4..-1)] of + int(3)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), int(1..16), - int(-4..-1)] of bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of int(0..16)) + int(-4..-1)] of + bool) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16)) var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/stdout.expected b/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/stdout.expected index 404f47b9e8..8127cfaa50 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/stdout.expected @@ -12,10 +12,10 @@ find var3: bool such that and([var3 | q_4_ExplicitVarSizeWithFlags_Flags : matrix indexed by [int(1..4)] of bool, - q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), - bool] of bool, - q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Values : matrix indexed by [int(1..4), - bool] of int(5), + q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Flags : matrix indexed by [int(1..4), bool] of + bool, + q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Values : matrix indexed by [int(1..4), bool] of + int(5), and([q_4_ExplicitVarSizeWithFlags_Flags[q1 + 1] -> q_4_ExplicitVarSizeWithFlags_Values_Function1DPartial_Flags[q1, ..] function (size 3, total, surjective) bool --> bool + function (maxSize 0 / 4, total, bijective) (bool, bool, bool, bool) --> + function (size 3, total, surjective) bool --> bool such that ([] : `matrix indexed by [int] of bool`)[5] <= (function(false --> true, true --> true, false --> false) = function(false --> false)), From 42903c38ab6873df07bc92a3b66853898cfb26fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 07:41:34 +0000 Subject: [PATCH 025/378] Working on improving the json input support. Main change is that we look up the type of a definition from the associated Essence file before trying to parse the JSON objects. --- src/Conjure/Compute/DomainOf.hs | 2 - src/Conjure/Language/AbstractLiteral.hs | 4 +- src/Conjure/Language/AdHoc.hs | 29 +++-- src/Conjure/Language/Constant.hs | 152 +++++++++++++++++++----- src/Conjure/Language/Definition.hs | 44 +++++-- src/Conjure/Language/Expression.hs | 2 +- src/Conjure/Process/Enumerate.hs | 2 +- src/Conjure/Representations/Matrix.hs | 15 ++- src/Conjure/UI/IO.hs | 16 ++- src/Conjure/UI/MainHelper.hs | 57 +++++---- src/Conjure/UI/MainHelper.hs-boot | 2 + src/exec/Main.hs | 3 +- src/test/Conjure/ModelAllSolveAll.hs | 2 +- 13 files changed, 240 insertions(+), 90 deletions(-) diff --git a/src/Conjure/Compute/DomainOf.hs b/src/Conjure/Compute/DomainOf.hs index 6132e36ce7..0d5ce62531 100644 --- a/src/Conjure/Compute/DomainOf.hs +++ b/src/Conjure/Compute/DomainOf.hs @@ -267,7 +267,6 @@ instance DomainOf Constant where domainOf (DomainInConstant dom) = return (fmap Constant dom) domainOf (TypedConstant x ty) = domainOf (Typed (Constant x) ty) domainOf ConstantUndefined{} = failDoc "DomainOf-ConstantUndefined" - domainOf ConstantFromJSON{} = failDoc "DomainOf-ConstantFromJSON" indexDomainsOf ConstantBool{} = return [] indexDomainsOf ConstantInt{} = return [] @@ -277,7 +276,6 @@ instance DomainOf Constant where indexDomainsOf DomainInConstant{} = return [] indexDomainsOf (TypedConstant x ty) = indexDomainsOf (Typed (Constant x) ty) indexDomainsOf ConstantUndefined{} = return [] - indexDomainsOf ConstantFromJSON{} = return [] instance DomainOf (AbstractLiteral Expression) where diff --git a/src/Conjure/Language/AbstractLiteral.hs b/src/Conjure/Language/AbstractLiteral.hs index 0a2df79037..7eaa0f6f0a 100644 --- a/src/Conjure/Language/AbstractLiteral.hs +++ b/src/Conjure/Language/AbstractLiteral.hs @@ -62,7 +62,7 @@ instance (SimpleJSON x, Pretty x, ExpressionLike x) => SimpleJSON (AbstractLiter AbsLitSequence xs -> toSimpleJSON xs AbsLitRelation xs -> toSimpleJSON xs AbsLitPartition xs -> toSimpleJSON xs - fromSimpleJSON x = noFromSimpleJSON "AbstractLiteral" x + fromSimpleJSON = noFromSimpleJSON "AbstractLiteral" instance (ToFromMiniZinc x, Pretty x, ExpressionLike x) => ToFromMiniZinc (AbstractLiteral x) where toMiniZinc lit = @@ -88,7 +88,7 @@ instance (ToFromMiniZinc x, Pretty x, ExpressionLike x) => ToFromMiniZinc (Abstr instance Pretty a => Pretty (AbstractLiteral a) where pretty (AbsLitTuple xs) = (if length xs < 2 then "tuple" else prEmpty) <+> prettyList prParens "," xs - pretty (AbsLitRecord xs) = "record" <+> prettyList prBraces "," [ pretty n <+> "=" <+> pretty x + pretty (AbsLitRecord xs) = "record" <+> prettyList prBraces "," [ pretty n <+> "=" <++> pretty x | (n,x) <- xs ] pretty (AbsLitVariant _ n x) = "variant" <+> prBraces (pretty n <+> "=" <+> pretty x) pretty (AbsLitMatrix _ []) = "[]" diff --git a/src/Conjure/Language/AdHoc.hs b/src/Conjure/Language/AdHoc.hs index 2ebca1094d..af4beddaf1 100644 --- a/src/Conjure/Language/AdHoc.hs +++ b/src/Conjure/Language/AdHoc.hs @@ -98,17 +98,21 @@ noToMiniZinc a = userErr1 $ vcat class SimpleJSON a where toSimpleJSON :: MonadUserError m => a -> m JSON.Value - fromSimpleJSON :: MonadUserError m => JSON.Value -> m a + fromSimpleJSON :: MonadUserError m => Type -> JSON.Value -> m a instance SimpleJSON Integer where toSimpleJSON = return . toJSON - fromSimpleJSON x = + fromSimpleJSON t x = case x of JSON.Number y -> case floatingOrInteger y of Right z -> return z - Left (d :: Double) -> noFromSimpleJSON "Integer" d - _ -> noFromSimpleJSON "Integer" x + Left (d :: Double) -> noFromSimpleJSON "Integer" t d + JSON.String text -> + case readMay (textToString text) of + Just z -> return z + Nothing -> noFromSimpleJSON "Integer" t text + _ -> noFromSimpleJSON "Integer" t x data AsDictionary a b = AsDictionary [(a,b)] @@ -129,20 +133,20 @@ instance (Pretty x, SimpleJSON x, SimpleJSON y) => SimpleJSON (AsDictionary x y) -- all were suitable as keys, great then return $ JSON.Object $ M.fromList zs else return $ JSON.Array $ V.fromList asList - fromSimpleJSON x = noFromSimpleJSON "AsDictionary" x + fromSimpleJSON = noFromSimpleJSON "AsDictionary" instance SimpleJSON x => SimpleJSON [x] where toSimpleJSON xs = do ys <- mapM toSimpleJSON xs return $ JSON.Array $ V.fromList ys - fromSimpleJSON x = noFromSimpleJSON "list" x + fromSimpleJSON = noFromSimpleJSON "list" instance (SimpleJSON x, SimpleJSON y) => SimpleJSON (x,y) where toSimpleJSON (x,y) = do x' <- toSimpleJSON x y' <- toSimpleJSON y return $ JSON.Array $ V.fromList [x', y'] - fromSimpleJSON x = noFromSimpleJSON "pair" x + fromSimpleJSON = noFromSimpleJSON "pair" noToSimpleJSON :: (MonadUserError m, Pretty a) => a -> m b @@ -156,12 +160,15 @@ noToSimpleJSON a = userErr1 $ vcat ] -noFromSimpleJSON :: (MonadUserError m, Pretty a, Show a) => String -> a -> m b -noFromSimpleJSON src a = userErr1 $ vcat +noFromSimpleJSON :: (MonadUserError m, Pretty a, Show a, Pretty b, Show b) => String -> a -> b -> m c +noFromSimpleJSON src ty x = userErr1 $ vcat [ "Cannot convert this JSON to Essence yet." , "" - , pretty a - , pretty (show a) + , pretty ty + , pretty (show ty) + , "" + , pretty x + , pretty (show x) , "" , "Source:" <+> pretty src , "" diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index 370f3c4797..6533a73d0a 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -24,7 +24,6 @@ module Conjure.Language.Constant -- conjure import Conjure.Prelude import Conjure.Bug -import Conjure.UserError ( userErr1 ) import Conjure.Language.Name import Conjure.Language.Domain import Conjure.Language.Type @@ -54,7 +53,6 @@ data Constant [Name] {- values in the enum domain -} Name {- the literal -} | ConstantField Name Type -- the name of a field of Record or Variant and its type - | ConstantFromJSON [Constant] -- for holding list-like stuff read from json input. they can act as values for many types, depending on context. | ConstantAbstract (AbstractLiteral Constant) | DomainInConstant (Domain () Constant) | TypedConstant Constant Type @@ -100,22 +98,116 @@ instance SimpleJSON Constant where ConstantAbstract lit -> toSimpleJSON lit TypedConstant c' _ -> toSimpleJSON c' _ -> noToSimpleJSON c - fromSimpleJSON (JSON.Bool b) = return (ConstantBool b) - fromSimpleJSON x@JSON.Number{} = ConstantInt TagInt <$> fromSimpleJSON x - fromSimpleJSON (JSON.Array xs) = do - ys <- mapM fromSimpleJSON (V.toList xs) - return $ ConstantFromJSON ys - fromSimpleJSON (JSON.Object m) = do - ys <- forM (M.toList m) $ \ (name, value) -> + + fromSimpleJSON _ (JSON.Bool b) = return (ConstantBool b) + + fromSimpleJSON t x@JSON.Number{} = ConstantInt TagInt <$> fromSimpleJSON t x + fromSimpleJSON t x@JSON.String{} = ConstantInt TagInt <$> fromSimpleJSON t x + + fromSimpleJSON (TypeTuple ts) (JSON.Array xs) = + ConstantAbstract . AbsLitTuple <$> zipWithM fromSimpleJSON ts (V.toList xs) + + fromSimpleJSON t@(TypeVariant ts) x@(JSON.Object m) = do + mys <- forM (M.toList m) $ \ (name, value) -> do + let mty = [ ty | (nm, ty) <- ts, nm == Name name ] + case mty of + [ty] -> do + value' <- fromSimpleJSON ty value + return $ Just $ ConstantAbstract $ AbsLitVariant Nothing (Name name) value' + _ -> return Nothing + let ys = catMaybes mys + case ys of + [y] -> return y + _ -> noFromSimpleJSON "Constant" t x + + fromSimpleJSON t@(TypeRecord ts) x@(JSON.Object m) = do + mys <- forM (M.toList m) $ \ (name, value) -> do + let mty = [ ty | (nm, ty) <- ts, nm == Name name ] + case mty of + [ty] -> do + value' <- fromSimpleJSON ty value + return $ Just (Name name, value') + _ -> return Nothing + let ys = catMaybes mys + if length ys == length mys + then return $ ConstantAbstract $ AbsLitRecord ys + else noFromSimpleJSON "Constant" t x + + fromSimpleJSON (TypeMatrix index inner) (JSON.Object m) = do + ys <- forM (M.toList m) $ \ (name, value) -> do + -- the name must be an integer + a <- fromSimpleJSON index (JSON.String name) + b <- fromSimpleJSON inner value + return (a, b) + -- traceM $ show ys + -- traceM $ show $ sort ys + + let ys_sorted = sort ys + let domain_ints = map fst ys_sorted + let domain = if maximum domain_ints - minimum domain_ints + 1 == genericLength domain_ints + then DomainInt TagInt [RangeBounded (ConstantInt TagInt $ minimum domain_ints) (ConstantInt TagInt $ maximum domain_ints)] + else DomainInt TagInt (map (RangeSingle . ConstantInt TagInt) domain_ints) + + return $ ConstantAbstract $ AbsLitMatrix domain (map snd ys_sorted) + + fromSimpleJSON (TypeMatrix _index inner) (JSON.Array xs) = + let domain = DomainInt TagInt [RangeBounded 1 (fromInt $ genericLength $ V.toList xs)] in + ConstantAbstract . AbsLitMatrix domain <$> mapM (fromSimpleJSON inner) (V.toList xs) + + fromSimpleJSON (TypeSet t) (JSON.Array xs) = + ConstantAbstract . AbsLitSet <$> mapM (fromSimpleJSON t) (V.toList xs) + + fromSimpleJSON (TypeMSet t) (JSON.Array xs) = + ConstantAbstract . AbsLitMSet <$> mapM (fromSimpleJSON t) (V.toList xs) + + fromSimpleJSON (TypeFunction fr to) (JSON.Object m) = do + ys <- forM (M.toList m) $ \ (name, value) -> do -- the name must be an integer -- and this is a function from ints we are reading here - case readMay (textToString name) of - Nothing -> userErr1 "This is not an int. Boo." - Just a -> do - b <- fromSimpleJSON value - return (ConstantInt TagInt a, b) + a <- fromSimpleJSON fr (JSON.String name) + b <- fromSimpleJSON to value + return (a, b) return $ ConstantAbstract $ AbsLitFunction ys - fromSimpleJSON x = noFromSimpleJSON "Constant" x + + fromSimpleJSON ty@(TypeFunction fr to) value@(JSON.Array xs) = do + mys <- forM (V.toList xs) $ \ x -> + case x of + JSON.Array x' -> + case V.toList x' of + [a', b'] -> do + a <- fromSimpleJSON fr a' + b <- fromSimpleJSON to b' + return $ Just (a, b) + _ -> return Nothing + _ -> return Nothing + let ys = catMaybes mys + if length ys == length mys + then return $ ConstantAbstract $ AbsLitFunction ys + else noFromSimpleJSON "Constant" ty value + + fromSimpleJSON (TypeSequence t) (JSON.Array xs) = + ConstantAbstract . AbsLitSequence <$> mapM (fromSimpleJSON t) (V.toList xs) + + fromSimpleJSON (TypeRelation ts) (JSON.Array xs) = + ConstantAbstract . AbsLitRelation <$> mapM (fromSimpleJSON (TypeTuple ts)) (V.toList xs) + + -- fromSimpleJSON _ (JSON.String s) = return $ ConstantEnum (Name "") [] (Name s) + -- -- fromSimpleJSON _ (JSON.Array xs) = do + -- -- ys <- mapM fromSimpleJSON (V.toList xs) + -- -- return $ ConstantFromJSON ys + -- fromSimpleJSON t (JSON.Object m) = do + -- traceM $ show $ "fromSimpleJSON.Constant type" <+> pretty t + -- traceM $ show $ "fromSimpleJSON.Constant type" <+> pretty (show t) + -- ys <- forM (M.toList m) $ \ (name, value) -> + -- -- the name must be an integer + -- -- and this is a function from ints we are reading here + -- case readMay (textToString name) of + -- Nothing -> userErr1 $ vcat [ "This is not an int. Boo.", pretty name, pretty value] + -- Just a -> do + -- b <- fromSimpleJSON t value + -- return (ConstantInt TagInt a, b) + -- return $ ConstantAbstract $ AbsLitFunction ys + fromSimpleJSON t x = noFromSimpleJSON "Constant" t x instance ToFromMiniZinc Constant where toMiniZinc c = @@ -141,7 +233,6 @@ instance TypeOf Constant where typeOf (DomainInConstant dom) = typeOfDomain dom typeOf (TypedConstant _ ty) = return ty typeOf (ConstantUndefined _ ty) = return ty - typeOf ConstantFromJSON{} = return TypeAny instance DomainSizeOf Constant Integer where domainSizeOf DomainBool{} = return 2 @@ -184,7 +275,6 @@ emptyCollection (ConstantAbstract x) = emptyCollectionAbsLit x emptyCollection DomainInConstant{} = False emptyCollection (TypedConstant x _) = emptyCollection x emptyCollection ConstantUndefined{} = False -emptyCollection ConstantFromJSON{} = False intPow :: Integer -> Integer -> Integer intPow = (^) @@ -226,7 +316,6 @@ instance Pretty Constant where pretty (DomainInConstant d) = "`" <> pretty d <> "`" pretty (TypedConstant x ty) = prParens $ pretty x <+> ":" <+> "`" <> pretty ty <> "`" pretty (ConstantUndefined reason ty) = "undefined" <> prParens (pretty reason <+> ":" <+> "`" <> pretty ty <> "`") - pretty (ConstantFromJSON xs) = "ConstantFromJSON[" <+> prettyList id "," xs <+> "]" instance ExpressionLike Constant where fromInt = ConstantInt TagInt @@ -272,7 +361,6 @@ normaliseConstant (ConstantAbstract x) = ConstantAbstract (normaliseAbsLit norma normaliseConstant (DomainInConstant d) = DomainInConstant (normaliseDomain normaliseConstant d) normaliseConstant (TypedConstant c ty) = TypedConstant (normaliseConstant c) ty normaliseConstant x@ConstantUndefined{} = x -normaliseConstant (ConstantFromJSON xs) = ConstantFromJSON (map normaliseConstant xs) instance Num Constant where ConstantInt _ x + ConstantInt _ y = ConstantInt TagInt (x+y) @@ -330,7 +418,6 @@ viewConstantIntWithTag constant = failDoc ("Expecting an integer, but got:" <++ viewConstantTuple :: MonadFailDoc m => Constant -> m [Constant] viewConstantTuple (ConstantAbstract (AbsLitTuple xs)) = return xs viewConstantTuple (TypedConstant c _) = viewConstantTuple c -viewConstantTuple (ConstantFromJSON xs) = return xs viewConstantTuple constant = failDoc ("Expecting a tuple, but got:" <++> pretty constant) viewConstantRecord :: MonadFailDoc m => Constant -> m [(Name, Constant)] @@ -346,19 +433,33 @@ viewConstantVariant constant = failDoc ("Expecting a variant, but got:" <++> pr viewConstantMatrix :: MonadFailDoc m => Constant -> m (Domain () Constant, [Constant]) viewConstantMatrix (ConstantAbstract (AbsLitMatrix ind xs)) = return (expandDomainReference ind, xs) viewConstantMatrix (TypedConstant c _) = viewConstantMatrix c -viewConstantMatrix (ConstantFromJSON xs) = return (DomainInt TagInt [RangeBounded 1 (genericLength xs)] ,xs) -viewConstantMatrix constant = failDoc ("Expecting a matrix, but got:" <++> pretty constant) +viewConstantMatrix constant = + case viewConstantFunction constant of + Nothing -> failDoc ("Expecting a matrix, but got:" <++> pretty constant) + Just func -> do + let indices = map fst func + values = map snd func + indices_as_int = [ i | ConstantInt _ i <- indices ] + if length indices == length indices_as_int + then + if length indices > 0 + then + if maximum indices_as_int - minimum indices_as_int + 1 == genericLength indices + then return (DomainInt TagInt [RangeBounded (fromInt (minimum indices_as_int)) (fromInt (maximum indices_as_int))], values) + else return (DomainInt TagInt (map (RangeSingle . fromInt) indices_as_int), values) + else + return (DomainInt TagInt [RangeBounded 1 0], values) + else + failDoc ("Expecting a matrix, but got:" <++> pretty constant) viewConstantSet :: MonadFailDoc m => Constant -> m [Constant] viewConstantSet (ConstantAbstract (AbsLitSet xs)) = return xs viewConstantSet (TypedConstant c _) = viewConstantSet c -viewConstantSet (ConstantFromJSON xs) = return xs viewConstantSet constant = failDoc ("Expecting a set, but got:" <++> pretty constant) viewConstantMSet :: MonadFailDoc m => Constant -> m [Constant] viewConstantMSet (ConstantAbstract (AbsLitMSet xs)) = return xs viewConstantMSet (TypedConstant c _) = viewConstantMSet c -viewConstantMSet (ConstantFromJSON xs) = return xs viewConstantMSet constant = failDoc ("Expecting an mset, but got:" <++> pretty constant) viewConstantFunction :: MonadFailDoc m => Constant -> m [(Constant, Constant)] @@ -380,18 +481,15 @@ viewConstantFunction constant = do viewConstantSequence :: MonadFailDoc m => Constant -> m [Constant] viewConstantSequence (ConstantAbstract (AbsLitSequence xs)) = return xs viewConstantSequence (TypedConstant c _) = viewConstantSequence c -viewConstantSequence (ConstantFromJSON xs) = return xs viewConstantSequence constant = failDoc ("Expecting a sequence, but got:" <++> pretty constant) viewConstantRelation :: MonadFailDoc m => Constant -> m [[Constant]] viewConstantRelation (ConstantAbstract (AbsLitRelation xs)) = return xs viewConstantRelation (TypedConstant c _) = viewConstantRelation c -viewConstantRelation (ConstantFromJSON xs) = mapM viewConstantTuple xs viewConstantRelation constant = failDoc ("Expecting a relation, but got:" <++> pretty constant) viewConstantPartition :: MonadFailDoc m => Constant -> m [[Constant]] viewConstantPartition (ConstantAbstract (AbsLitPartition xs)) = return xs viewConstantPartition (TypedConstant c _) = viewConstantPartition c -viewConstantPartition (ConstantFromJSON xs) = mapM viewConstantSet xs viewConstantPartition constant = failDoc ("Expecting a partition, but got:" <++> pretty constant) diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index 249f69336e..a688a2ac8e 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -37,11 +37,14 @@ module Conjure.Language.Definition , module Conjure.Language.NameGen + , fromSimpleJSONModel + ) where -- conjure import Conjure.Prelude import Conjure.Bug +import Conjure.UserError import Conjure.Language.Pretty import Conjure.Language.AdHoc @@ -50,6 +53,7 @@ import Conjure.Language.NameGen ( NameGen(..), NameGenState, runNameGen ) import Conjure.Language.Constant import Conjure.Language.AbstractLiteral import Conjure.Language.Domain +import Conjure.Language.Type import Conjure.Language.Expression @@ -86,14 +90,38 @@ instance SimpleJSON Model where |> (\ (xs, ys) -> (M.unions (concat xs), concat ys)) unless (null rest) $ bug $ "Expected json objects only, but got:" <+> vcat (map pretty rest) return (JSON.Object innersAsMaps) - fromSimpleJSON json = - case json of - JSON.Object inners -> do - stmts <- forM (M.toList inners) $ \ (name, valueJSON) -> do - value <- fromSimpleJSON valueJSON - return $ Declaration (Letting (Name name) value) - return def { mStatements = stmts } - _ -> noFromSimpleJSON "Model" json + fromSimpleJSON = noFromSimpleJSON "Model" + +fromSimpleJSONModel :: + (?typeCheckerMode :: TypeCheckerMode) => + MonadUserError m => + MonadLog m => + Model -> + JSON.Value -> + m Model +fromSimpleJSONModel essence json = + case json of + JSON.Object inners -> do + stmts <- forM (M.toList inners) $ \ (name, valueJSON) -> do + -- traceM $ show $ "name " <+> pretty name + let mdomain = [ dom + | Declaration (FindOrGiven Given (Name nm) dom) <- mStatements essence + , nm == name + ] + -- traceM $ show $ "mdomain " <+> vcat (map pretty mdomain) + case mdomain of + [domain] -> do + -- traceM $ show $ "domain " <+> pretty domain + typ <- typeOfDomain domain + -- traceM $ show $ "typ " <+> pretty typ + value <- fromSimpleJSON typ valueJSON + -- traceM $ show $ "value " <+> pretty value + return $ Just $ Declaration (Letting (Name name) value) + _ -> do + logWarn $ "Ignoring" <+> pretty name <+> "from the JSON file." + return Nothing + return def { mStatements = catMaybes stmts } + _ -> noFromSimpleJSON "Model" TypeAny json instance ToFromMiniZinc Model where toMiniZinc m = do diff --git a/src/Conjure/Language/Expression.hs b/src/Conjure/Language/Expression.hs index 8c4968aba8..77d5172fc4 100644 --- a/src/Conjure/Language/Expression.hs +++ b/src/Conjure/Language/Expression.hs @@ -364,7 +364,7 @@ instance SimpleJSON Expression where (JSON.Number a'', JSON.Number b'') -> return (JSON.Number (a'' - b'')) _ -> noToSimpleJSON x _ -> noToSimpleJSON x - fromSimpleJSON x = Constant <$> fromSimpleJSON x + fromSimpleJSON t x = Constant <$> fromSimpleJSON t x instance ToFromMiniZinc Expression where toMiniZinc x = diff --git a/src/Conjure/Process/Enumerate.hs b/src/Conjure/Process/Enumerate.hs index a7ee2d35fc..f961825057 100644 --- a/src/Conjure/Process/Enumerate.hs +++ b/src/Conjure/Process/Enumerate.hs @@ -119,7 +119,7 @@ enumerateDomain d = liftIO' $ withSystemTempDirectory ("conjure-enumerateDomain- writeModel 120 Plain (Just essenceFile) model let solve :: IO () - solve = let ?typeCheckerMode = StronglyTyped in ignoreLogs $ mainWithArgs Solve + solve = let ?typeCheckerMode = StronglyTyped in ignoreLogs $ runNameGen () $ mainWithArgs Solve { UI.essence = essenceFile , validateSolutionsOpt = False , outputDirectory = outDir diff --git a/src/Conjure/Representations/Matrix.hs b/src/Conjure/Representations/Matrix.hs index 2e56042c6f..840aa59699 100644 --- a/src/Conjure/Representations/Matrix.hs +++ b/src/Conjure/Representations/Matrix.hs @@ -59,7 +59,7 @@ matrix downD1 downC1 up1 = Representation chck matrixDownD structuralCons matrix matrixDownC :: TypeOf_DownC m matrixDownC ( name -- special-case for empty matrix literals , domain@(DomainMatrix indexDomain _) - , ConstantAbstract (AbsLitMatrix _indexDomain2 []) + , viewConstantMatrix -> Just (_indexDomain2, []) ) = do mids1 :: Maybe [(Name, DomainX Expression)] @@ -72,7 +72,7 @@ matrix downD1 downC1 up1 = Representation chck matrixDownD structuralCons matrix mapM (mapM addEmptyLiteral) mids1 matrixDownC ( name , domain@(DomainMatrix indexDomain innerDomain) - , constant@(ConstantAbstract (AbsLitMatrix indexDomain2 constants)) + , constant@(viewConstantMatrix -> Just (indexDomain2, constants)) ) = do -- TODO: this may be too strict unless (indexDomain == indexDomain2) $ @@ -88,7 +88,7 @@ matrix downD1 downC1 up1 = Representation chck matrixDownD structuralCons matrix let mids2 = catMaybes mids1 if null mids2 -- if all were `Nothing`s then return Nothing - else + else do if length mids2 == length mids1 -- if all were `Just`s then do let @@ -112,7 +112,14 @@ matrix downD1 downC1 up1 = Representation chck matrixDownD structuralCons matrix , "When working on:" <+> pretty name , "With domain:" <+> pretty (DomainMatrix indexDomain innerDomain) ] - matrixDownC _ = na "{matrixDownC}" + matrixDownC (name, domain, constant) = na $ "{matrixDownC}" <+> vcat [ pretty name + , "" + , pretty domain + , pretty (show domain) + , "" + , pretty constant + , pretty (show constant) + ] matrixUp :: TypeOf_Up m matrixUp ctxt (name, DomainMatrix indexDomain innerDomain)= do diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 680b7f4fff..f84670ec44 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -61,27 +61,31 @@ readModelFromStdin = do readParamJSON :: + (?typeCheckerMode :: TypeCheckerMode) => MonadIO m => MonadUserError m => - FilePath -> m Model -readParamJSON fp = do + MonadLog m => + Model -> FilePath -> m Model +readParamJSON model fp = do (_, contents) <- liftIO $ pairWithContents fp let paramJSON = contents |> T.encodeUtf8 -- convert Text to ByteString |> Data.Aeson.eitherDecodeStrict case paramJSON of Left err -> userErr1 (pretty err) - Right j -> fromSimpleJSON j + Right j -> fromSimpleJSONModel model j readParamOrSolutionFromFile :: + (?typeCheckerMode :: TypeCheckerMode) => MonadIO m => MonadFailDoc m => MonadUserError m => - FilePath -> m Model -readParamOrSolutionFromFile fp = do + MonadLog m => + Model -> FilePath -> m Model +readParamOrSolutionFromFile model fp = do if ".json" `isSuffixOf` fp - then readParamJSON fp + then readParamJSON model fp else do con <- liftIO $ BS.readFile fp case Data.Serialize.decode con of diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 4825143f84..a5c185c7ed 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -25,14 +25,14 @@ import Conjure.Language.Name ( Name(..) ) import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), Declaration(..), FindOrGiven(..) ) import Conjure.Language.Type ( TypeCheckerMode(..) ) import Conjure.Language.Domain ( Domain(..), Range(..) ) -import Conjure.Language.NameGen ( NameGenM, runNameGen ) +import Conjure.Language.NameGen ( NameGen, NameGenM, runNameGen ) import Conjure.Language.Pretty ( pretty, prettyList, renderNormal, render, prParens ) import qualified Conjure.Language.ParserC as ParserC ( parseModel ) import Conjure.Language.ModelDiff ( modelDiffIO ) import Conjure.Rules.Definition ( viewAuto, Strategy(..) ) import Conjure.Process.Enumerate ( EnumerateDomain ) import Conjure.Process.Boost ( boost ) -import Conjure.Language.NameResolution ( resolveNamesMulti ) +import Conjure.Language.NameResolution ( resolveNamesMulti, resolveNames ) import Conjure.Language.ModelStats ( modelDeclarationsJSON ) import Conjure.Language.AdHoc ( toSimpleJSON ) @@ -63,7 +63,7 @@ import Shelly ( runHandle, lastStderr, lastExitCode, errExit, Sh ) import qualified Data.Text as T ( unlines, isInfixOf ) -- parallel-io -import Control.Concurrent.ParallelIO.Global ( parallel, parallel_, stopGlobalPool ) +import Control.Concurrent.ParallelIO.Global ( parallel, stopGlobalPool ) mainWithArgs :: forall m . @@ -71,6 +71,7 @@ mainWithArgs :: forall m . MonadLog m => MonadFailDoc m => EnumerateDomain m => + NameGen m => (?typeCheckerMode :: TypeCheckerMode) => UI -> m () mainWithArgs TSDEF{} = liftIO tsDef @@ -110,15 +111,15 @@ mainWithArgs TranslateParameter{..} = do when (null essenceParam) $ userErr1 "Mandatory field --essence-param" let outputFilename = fromMaybe (dropExtension essenceParam ++ ".eprime-param") eprimeParam eprimeF <- readModelInfoFromFile eprime - essenceParamF <- readParamOrSolutionFromFile essenceParam + essenceParamF <- readParamOrSolutionFromFile eprimeF essenceParam output <- runNameGen () $ translateParameter False eprimeF essenceParamF writeModel lineWidth outputFormat (Just outputFilename) output mainWithArgs TranslateSolution{..} = do when (null eprime ) $ userErr1 "Mandatory field --eprime" when (null eprimeSolution) $ userErr1 "Mandatory field --eprime-solution" eprimeF <- readModelInfoFromFile eprime - essenceParamF <- maybe (return def) readParamOrSolutionFromFile essenceParamO - eprimeSolutionF <- readParamOrSolutionFromFile eprimeSolution + essenceParamF <- maybe (return def) (readParamOrSolutionFromFile eprimeF) essenceParamO + eprimeSolutionF <- readParamOrSolutionFromFile eprimeF eprimeSolution output <- runNameGen () $ translateSolution eprimeF essenceParamF eprimeSolutionF let outputFilename = fromMaybe (dropExtension eprimeSolution ++ ".solution") essenceSolutionO writeModel lineWidth outputFormat (Just outputFilename) output @@ -126,8 +127,8 @@ mainWithArgs ValidateSolution{..} = do when (null essence ) $ userErr1 "Mandatory field --essence" when (null essenceSolution) $ userErr1 "Mandatory field --solution" essence2 <- readModelFromFile essence - param2 <- maybe (return def) readParamOrSolutionFromFile essenceParamO - solution2 <- readParamOrSolutionFromFile essenceSolution + param2 <- maybe (return def) (readParamOrSolutionFromFile essence2) essenceParamO + solution2 <- readParamOrSolutionFromFile essence2 essenceSolution [essence3, param3, solution3] <- runNameGen () $ resolveNamesMulti [essence2, param2, solution2] runNameGen () $ validateSolution essence3 param3 solution3 mainWithArgs IDE{..} = do @@ -147,7 +148,7 @@ mainWithArgs Pretty{..} = do | s <- [".param", ".eprime-param", ".solution", ".eprime.solution"] ] then do liftIO $ hPutStrLn stderr "Parsing as a parameter file" - readParamOrSolutionFromFile essence + readParamOrSolutionFromFile def essence else readModelFromFile essence let model1 = model0 |> (if normaliseQuantified then normaliseQuantifiedVariables else id) @@ -262,12 +263,12 @@ mainWithArgs config@Solve{..} = do ]) when (solver `elem` ["bc_minisat_all", "nbc_minisat_all"] && nbSolutions /= "all") $ userErr1 $ "The solvers bc_minisat_all and nbc_minisat_all only work with --number-of-solutions=all" - essenceM <- readModelFromFile essence + essenceM <- readModelFromFile essence >>= resolveNames unless (null [ () | Objective{} <- mStatements essenceM ]) $ do -- this is an optimisation problem when (nbSolutions == "all" || nbSolutions /= "1") $ userErr1 ("Not supported for optimisation problems: --number-of-solutions=" <> pretty nbSolutions) essenceParamsParsed <- forM essenceParams $ \ f -> do - p <- readParamOrSolutionFromFile f + p <- readParamOrSolutionFromFile essenceM f return (f, p) let givens = [ nm | Declaration (FindOrGiven Given nm _) <- mStatements essenceM ] ++ [ nm | Declaration (GivenDomainDefnEnum nm) <- mStatements essenceM ] @@ -334,7 +335,7 @@ mainWithArgs config@Solve{..} = do when (null solutions) (pp logLevel "No solutions found.") - when validateSolutionsOpt $ liftIO $ validating solutions + when validateSolutionsOpt $ validating solutions let params = nub [ dropExtension p | (_,p,_) <- solutions ] @@ -450,13 +451,13 @@ mainWithArgs config@Solve{..} = do , p <- params ] - validating :: [(FilePath, FilePath, Maybe FilePath)] -> IO () + -- validating :: [(FilePath, FilePath, Maybe FilePath)] -> IO () validating solutions = if null essenceParams - then autoParallel_ [ validateSolutionNoParam config sol - | (_, _, Just sol) <- solutions ] - else autoParallel_ [ validateSolutionWithParams config sol p - | (_, p, Just sol) <- solutions ] + then sequence_ [ validateSolutionNoParam config sol + | (_, _, Just sol) <- solutions ] + else sequence_ [ validateSolutionWithParams config sol p + | (_, p, Just sol) <- solutions ] mainWithArgs_Modelling :: forall m . @@ -1097,25 +1098,33 @@ srCleanUp _ _ _ _ = bug "srCleanUp" validateSolutionNoParam :: + MonadIO m => + MonadLog m => + MonadFailDoc m => + EnumerateDomain m => (?typeCheckerMode :: TypeCheckerMode) => - UI -> FilePath -> IO () + UI -> FilePath -> m () validateSolutionNoParam Solve{..} solutionPath = do pp logLevel $ hsep ["Validating solution:", pretty solutionPath] essenceM <- readModelFromFile essence - solution <- readParamOrSolutionFromFile solutionPath + solution <- readParamOrSolutionFromFile essenceM solutionPath [essenceM2, solution2] <- ignoreLogs $ runNameGen () $ resolveNamesMulti [essenceM, solution] failToUserError $ ignoreLogs $ runNameGen () $ validateSolution essenceM2 def solution2 validateSolutionNoParam _ _ = bug "validateSolutionNoParam" validateSolutionWithParams :: + MonadIO m => + MonadLog m => + MonadFailDoc m => + EnumerateDomain m => (?typeCheckerMode :: TypeCheckerMode) => - UI -> FilePath -> FilePath -> IO () + UI -> FilePath -> FilePath -> m () validateSolutionWithParams Solve{..} solutionPath paramPath = do pp logLevel $ hsep ["Validating solution:", pretty paramPath, pretty solutionPath] essenceM <- readModelFromFile essence - param <- readParamOrSolutionFromFile paramPath - solution <- readParamOrSolutionFromFile solutionPath + param <- readParamOrSolutionFromFile essenceM paramPath + solution <- readParamOrSolutionFromFile essenceM solutionPath [essenceM2, param2, solution2] <- ignoreLogs $ runNameGen () $ resolveNamesMulti [essenceM, param, solution] failToUserError $ ignoreLogs $ runNameGen () $ validateSolution essenceM2 param2 solution2 validateSolutionWithParams _ _ _ = bug "validateSolutionWithParams" @@ -1142,7 +1151,3 @@ doIfNotCached (show . hash -> h) savedHashesFile getResult act = do autoParallel :: [IO a] -> IO [a] autoParallel = if numCapabilities > 1 then parallel else sequence - -autoParallel_ :: [IO ()] -> IO () -autoParallel_ = if numCapabilities > 1 then parallel_ else sequence_ - diff --git a/src/Conjure/UI/MainHelper.hs-boot b/src/Conjure/UI/MainHelper.hs-boot index 1dbe63fda2..738f481620 100644 --- a/src/Conjure/UI/MainHelper.hs-boot +++ b/src/Conjure/UI/MainHelper.hs-boot @@ -4,6 +4,7 @@ import Conjure.Prelude import Conjure.UI ( UI ) import Conjure.Language.Type ( TypeCheckerMode(..) ) import {-# SOURCE #-} Conjure.Process.Enumerate ( EnumerateDomain ) +import Conjure.Language.NameGen ( NameGen ) mainWithArgs :: @@ -11,5 +12,6 @@ mainWithArgs :: MonadLog m => MonadFailDoc m => EnumerateDomain m => + NameGen m => (?typeCheckerMode :: TypeCheckerMode) => UI -> m () diff --git a/src/exec/Main.hs b/src/exec/Main.hs index f4df159bd5..bf1a6ddbe2 100644 --- a/src/exec/Main.hs +++ b/src/exec/Main.hs @@ -7,6 +7,7 @@ import Conjure.Language.Pretty ( pretty ) import Conjure.Language.Type ( TypeCheckerMode(..) ) import Conjure.UserError ( userErr1 ) import Conjure.Language.Pretty ( renderWide ) +import Conjure.Language.NameGen ( runNameGen ) -- base import System.CPUTime ( getCPUTime ) @@ -68,7 +69,7 @@ main = do >>= return . verbosity >>= helpAutoWidth input <- withArgs args (cmdArgs ui) - let workload = runLoggerPipeIO (logLevel input) $ do + let workload = runLoggerPipeIO (logLevel input) $ runNameGen () $ do logDebug ("Command line options:" <+> pretty (show input)) let ?typeCheckerMode = StronglyTyped mainWithArgs input diff --git a/src/test/Conjure/ModelAllSolveAll.hs b/src/test/Conjure/ModelAllSolveAll.hs index a7a4d8296f..973fd853bc 100644 --- a/src/test/Conjure/ModelAllSolveAll.hs +++ b/src/test/Conjure/ModelAllSolveAll.hs @@ -522,7 +522,7 @@ modelAll tBaseDir dir essenceFile = do additionalArgs <- catch (words . textToString <$> T.readFile (tBaseDir ++ "/additional-arguments.txt")) (\ (_ :: SomeException) -> return [] ) args <- withArgs (defaultArgs ++ additionalArgs) (cmdArgs ui) - ignoreLogs $ mainWithArgs args + ignoreLogs $ runNameGen () $ mainWithArgs args where defaultArgs = [ "modelling" , essenceFile From 0d43f4690d5aa486dc721a2bc5e8b85be8e42254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 07:42:38 +0000 Subject: [PATCH 026/378] test cases for #548 --- tests/custom/issues/548/{ => 1}/548.essence | 0 tests/custom/issues/548/{ => 1}/p.json | 0 tests/custom/issues/548/{ => 1}/run.sh | 0 tests/custom/issues/548/{ => 1}/stdout.expected | 0 tests/custom/issues/548/2/param.json | 5 +++++ tests/custom/issues/548/2/run.sh | 4 ++++ tests/custom/issues/548/2/stdout.expected | 10 ++++++++++ tests/custom/issues/548/2/variant.essence | 4 ++++ 8 files changed, 23 insertions(+) rename tests/custom/issues/548/{ => 1}/548.essence (100%) rename tests/custom/issues/548/{ => 1}/p.json (100%) rename tests/custom/issues/548/{ => 1}/run.sh (100%) rename tests/custom/issues/548/{ => 1}/stdout.expected (100%) create mode 100644 tests/custom/issues/548/2/param.json create mode 100755 tests/custom/issues/548/2/run.sh create mode 100644 tests/custom/issues/548/2/stdout.expected create mode 100644 tests/custom/issues/548/2/variant.essence diff --git a/tests/custom/issues/548/548.essence b/tests/custom/issues/548/1/548.essence similarity index 100% rename from tests/custom/issues/548/548.essence rename to tests/custom/issues/548/1/548.essence diff --git a/tests/custom/issues/548/p.json b/tests/custom/issues/548/1/p.json similarity index 100% rename from tests/custom/issues/548/p.json rename to tests/custom/issues/548/1/p.json diff --git a/tests/custom/issues/548/run.sh b/tests/custom/issues/548/1/run.sh similarity index 100% rename from tests/custom/issues/548/run.sh rename to tests/custom/issues/548/1/run.sh diff --git a/tests/custom/issues/548/stdout.expected b/tests/custom/issues/548/1/stdout.expected similarity index 100% rename from tests/custom/issues/548/stdout.expected rename to tests/custom/issues/548/1/stdout.expected diff --git a/tests/custom/issues/548/2/param.json b/tests/custom/issues/548/2/param.json new file mode 100644 index 0000000000..46fd87ac36 --- /dev/null +++ b/tests/custom/issues/548/2/param.json @@ -0,0 +1,5 @@ +{ + "q": { + "a": 2 + } +} \ No newline at end of file diff --git a/tests/custom/issues/548/2/run.sh b/tests/custom/issues/548/2/run.sh new file mode 100755 index 0000000000..078fe4ee2b --- /dev/null +++ b/tests/custom/issues/548/2/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution +conjure solve *.essence *.json +cat *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/548/2/stdout.expected b/tests/custom/issues/548/2/stdout.expected new file mode 100644 index 0000000000..947d3c74f5 --- /dev/null +++ b/tests/custom/issues/548/2/stdout.expected @@ -0,0 +1,10 @@ +Generating models for variant.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime param.json +Running minion for domain filtering. +Running solver: minion +Copying solution to: variant-param.solution +language Essence 1.3 + +letting w be variant {a = 2} diff --git a/tests/custom/issues/548/2/variant.essence b/tests/custom/issues/548/2/variant.essence new file mode 100644 index 0000000000..1261e61fc0 --- /dev/null +++ b/tests/custom/issues/548/2/variant.essence @@ -0,0 +1,4 @@ +given q : variant { a: int(1..10), b: int(1..10) } +find w : variant { a: int(1..10), b: int(1..10) } + +such that q = w From b967ee41168858b9ae77b328517c81f9f304b6ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 07:42:43 +0000 Subject: [PATCH 027/378] test cases for #549 --- tests/custom/issues/549/1/549_1.essence | 6 ++++++ tests/custom/issues/549/1/p.eprime-param | 3 +++ tests/custom/issues/549/1/p.json | 14 ++++++++++++++ tests/custom/issues/549/1/run.sh | 4 ++++ tests/custom/issues/549/1/stdout.expected | 10 ++++++++++ tests/custom/issues/549/2/549_2.essence | 1 + tests/custom/issues/549/2/param.json | 1 + tests/custom/issues/549/2/run.sh | 4 ++++ tests/custom/issues/549/2/stdout.expected | 9 +++++++++ 9 files changed, 52 insertions(+) create mode 100644 tests/custom/issues/549/1/549_1.essence create mode 100644 tests/custom/issues/549/1/p.eprime-param create mode 100644 tests/custom/issues/549/1/p.json create mode 100755 tests/custom/issues/549/1/run.sh create mode 100644 tests/custom/issues/549/1/stdout.expected create mode 100644 tests/custom/issues/549/2/549_2.essence create mode 100644 tests/custom/issues/549/2/param.json create mode 100755 tests/custom/issues/549/2/run.sh create mode 100644 tests/custom/issues/549/2/stdout.expected diff --git a/tests/custom/issues/549/1/549_1.essence b/tests/custom/issues/549/1/549_1.essence new file mode 100644 index 0000000000..c90a6059e6 --- /dev/null +++ b/tests/custom/issues/549/1/549_1.essence @@ -0,0 +1,6 @@ + +given y : matrix indexed by [int(1..10)] of int(1..10) +find x : matrix indexed by [int(1..10)] of int(1..10) +such that + sum(x) <= sum(y) + \ No newline at end of file diff --git a/tests/custom/issues/549/1/p.eprime-param b/tests/custom/issues/549/1/p.eprime-param new file mode 100644 index 0000000000..b42b3db91d --- /dev/null +++ b/tests/custom/issues/549/1/p.eprime-param @@ -0,0 +1,3 @@ +language ESSENCE' 1.0 + +letting y be function(1 --> 1, 2 --> 1, 3 --> 1, 4 --> 1, 5 --> 1, 6 --> 1, 7 --> 1, 8 --> 8, 9 --> 10, 10 --> 10) diff --git a/tests/custom/issues/549/1/p.json b/tests/custom/issues/549/1/p.json new file mode 100644 index 0000000000..a36f3545b1 --- /dev/null +++ b/tests/custom/issues/549/1/p.json @@ -0,0 +1,14 @@ +{ + "y": { + "1": 1, + "10": 10, + "2": 1, + "3": 1, + "4": 1, + "5": 1, + "6": 1, + "7": 1, + "8": 8, + "9": 10 + } +} \ No newline at end of file diff --git a/tests/custom/issues/549/1/run.sh b/tests/custom/issues/549/1/run.sh new file mode 100755 index 0000000000..078fe4ee2b --- /dev/null +++ b/tests/custom/issues/549/1/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution +conjure solve *.essence *.json +cat *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/549/1/stdout.expected b/tests/custom/issues/549/1/stdout.expected new file mode 100644 index 0000000000..aef9e84cb4 --- /dev/null +++ b/tests/custom/issues/549/1/stdout.expected @@ -0,0 +1,10 @@ +Generating models for 549_1.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime p.json +Running minion for domain filtering. +Running solver: minion +Copying solution to: 549_1-p.solution +language Essence 1.3 + +letting x be [1, 1, 1, 1, 1, 1, 1, 1, 1, 1; int(1..10)] diff --git a/tests/custom/issues/549/2/549_2.essence b/tests/custom/issues/549/2/549_2.essence new file mode 100644 index 0000000000..2c0acef621 --- /dev/null +++ b/tests/custom/issues/549/2/549_2.essence @@ -0,0 +1 @@ +given f: function (int(1..10), int(1..10)) --> int(1..10) diff --git a/tests/custom/issues/549/2/param.json b/tests/custom/issues/549/2/param.json new file mode 100644 index 0000000000..4fa8b1b08e --- /dev/null +++ b/tests/custom/issues/549/2/param.json @@ -0,0 +1 @@ +{"f": [[[2, 3], 4]]} diff --git a/tests/custom/issues/549/2/run.sh b/tests/custom/issues/549/2/run.sh new file mode 100755 index 0000000000..078fe4ee2b --- /dev/null +++ b/tests/custom/issues/549/2/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution +conjure solve *.essence *.json +cat *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/549/2/stdout.expected b/tests/custom/issues/549/2/stdout.expected new file mode 100644 index 0000000000..1e9e8310fe --- /dev/null +++ b/tests/custom/issues/549/2/stdout.expected @@ -0,0 +1,9 @@ +Generating models for 549_2.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime param.json +Running minion for domain filtering. +Running solver: minion +Copying solution to: 549_2-param.solution +language Essence 1.3 + From e47a9b3e213f525d9e76836d0a81abbb667f6a13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 09:05:17 +0000 Subject: [PATCH 028/378] bugfix for handling tuples, making sure we use the right instance --- src/Conjure/Language/Constant.hs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index 6533a73d0a..fc9eae9ba3 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -188,8 +188,17 @@ instance SimpleJSON Constant where fromSimpleJSON (TypeSequence t) (JSON.Array xs) = ConstantAbstract . AbsLitSequence <$> mapM (fromSimpleJSON t) (V.toList xs) - fromSimpleJSON (TypeRelation ts) (JSON.Array xs) = - ConstantAbstract . AbsLitRelation <$> mapM (fromSimpleJSON (TypeTuple ts)) (V.toList xs) + fromSimpleJSON ty@(TypeRelation ts) x@(JSON.Array xs) = do + minners <- forM (V.toList xs) $ \ x -> do + mtuple <- fromSimpleJSON (TypeTuple ts) x + case mtuple of + ConstantAbstract (AbsLitTuple ts) -> return (Just ts) + _ -> return Nothing + let inners = catMaybes minners + if length inners == length minners + then return $ ConstantAbstract $ AbsLitRelation inners + else noFromSimpleJSON "Constant" ty x + -- fromSimpleJSON _ (JSON.String s) = return $ ConstantEnum (Name "") [] (Name s) -- -- fromSimpleJSON _ (JSON.Array xs) = do From 59fce41fba4cffda3cb1671be2d0d3dac9c39a70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 09:05:42 +0000 Subject: [PATCH 029/378] update the test case - turns out there was a bug! --- tests/custom/json-integration/json-in/run.sh | 2 +- tests/custom/json-integration/json-in/stdout.expected | 6 +++--- tests/custom/json-integration/json-in/test.essence | 7 +++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/custom/json-integration/json-in/run.sh b/tests/custom/json-integration/json-in/run.sh index e51cac3850..0814bf3e15 100755 --- a/tests/custom/json-integration/json-in/run.sh +++ b/tests/custom/json-integration/json-in/run.sh @@ -1,7 +1,7 @@ rm -rf conjure-output -conjure solve test.essence param.json --output-format=json --line-width=40 --copy-solutions=no +conjure solve test.essence param.json --output-format=json --line-width=40 --copy-solutions=no --savilerow-options -O0 cat conjure-output/model000001-param-solution000001.solution.json diff --git a/tests/custom/json-integration/json-in/stdout.expected b/tests/custom/json-integration/json-in/stdout.expected index f952e0f1b1..e5229b00c8 100644 --- a/tests/custom/json-integration/json-in/stdout.expected +++ b/tests/custom/json-integration/json-in/stdout.expected @@ -2,7 +2,7 @@ Generating models for test.essence Generated models: model000001.eprime Saved under: conjure-output Savile Row: model000001.eprime param.json -Running minion for domain filtering. Running solver: minion -{"ff": {"1": 2, "2": 3}, "x": 35, - "x2": 70} +{"fCard": 2, "ff": {"1": 2, "2": 3}, + "mCard": 6, "qCard": 6, "rCard": 2, + "sCard": 3, "x": 32, "x2": 64} diff --git a/tests/custom/json-integration/json-in/test.essence b/tests/custom/json-integration/json-in/test.essence index 775d2830be..4d724e181c 100644 --- a/tests/custom/json-integration/json-in/test.essence +++ b/tests/custom/json-integration/json-in/test.essence @@ -13,3 +13,10 @@ such that x * 2 = x2 find ff : function int(1..3) --> int(1..3) such that f = ff + +find sCard : int(0..100000) such that sCard = |s| +find mCard : int(0..100000) such that mCard = |m| +find fCard : int(0..100000) such that fCard = |f| +find rCard : int(0..100000) such that rCard = |r| +find qCard : int(0..100000) such that qCard = |q| + From 0ec06a4323c457b5d98ffabd21c008888eb2f98d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 09:18:37 +0000 Subject: [PATCH 030/378] warnings --- src/Conjure/Language/Constant.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index fc9eae9ba3..a4248c9712 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -188,16 +188,16 @@ instance SimpleJSON Constant where fromSimpleJSON (TypeSequence t) (JSON.Array xs) = ConstantAbstract . AbsLitSequence <$> mapM (fromSimpleJSON t) (V.toList xs) - fromSimpleJSON ty@(TypeRelation ts) x@(JSON.Array xs) = do + fromSimpleJSON ty@(TypeRelation ts) value@(JSON.Array xs) = do minners <- forM (V.toList xs) $ \ x -> do mtuple <- fromSimpleJSON (TypeTuple ts) x case mtuple of - ConstantAbstract (AbsLitTuple ts) -> return (Just ts) + ConstantAbstract (AbsLitTuple tuple) -> return (Just tuple) _ -> return Nothing let inners = catMaybes minners if length inners == length minners then return $ ConstantAbstract $ AbsLitRelation inners - else noFromSimpleJSON "Constant" ty x + else noFromSimpleJSON "Constant" ty value -- fromSimpleJSON _ (JSON.String s) = return $ ConstantEnum (Name "") [] (Name s) From 1c02cde521b203e80912a66263c14e7fcf913632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 19:39:31 +0000 Subject: [PATCH 031/378] use -rf --- .../basic/arithmetic-operators/product-type-error/run.sh | 2 +- .../arithmetic-operators/product-type-error/stdout.expected | 0 tests/custom/STARIS_2022/basic/bool-xor/run.sh | 2 +- tests/custom/STARIS_2022/basic/decision-where-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/enum-directions/run.sh | 2 +- tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh | 2 +- tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh | 2 +- .../custom/STARIS_2022/basic/enum-spaces-error/stdout.expected | 0 tests/custom/STARIS_2022/basic/factor/run.sh | 2 +- tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh | 2 +- tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh | 2 +- tests/custom/STARIS_2022/basic/list-operations/exists/run.sh | 2 +- tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh | 2 +- tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh | 2 +- .../custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh | 2 +- tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh | 2 +- .../custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh | 2 +- .../STARIS_2022/basic/matrices/alldifferent_except/run.sh | 2 +- tests/custom/STARIS_2022/basic/matrices/flatten/run.sh | 2 +- tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh | 2 +- tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh | 2 +- tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh | 2 +- tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh | 2 +- .../custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/maximising/run.sh | 2 +- tests/custom/STARIS_2022/basic/modulus/run.sh | 2 +- tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh | 2 +- .../STARIS_2022/basic/multiset-operators/hist-basic/run.sh | 2 +- .../STARIS_2022/basic/multiset-operators/hist-type-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh | 2 +- tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh | 2 +- .../STARIS_2022/basic/multiset-operators/multiset-basic/run.sh | 2 +- tests/custom/STARIS_2022/basic/parameter-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/parameter-simple/run.sh | 2 +- tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh | 2 +- tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh | 2 +- tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh | 2 +- .../basic/partitions/partition-operator-errors/set-apart/run.sh | 2 +- .../partitions/partition-operator-errors/set-participant/run.sh | 2 +- .../partition-operator-errors/set-parts-together/run.sh | 2 +- .../basic/partitions/partition-operator-errors/set-party/run.sh | 2 +- tests/custom/STARIS_2022/basic/record-simple/run.sh | 2 +- tests/custom/STARIS_2022/basic/record-type-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/set-comprehension/run.sh | 2 +- tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh | 2 +- .../STARIS_2022/basic/set-operators/in-type-error-01/run.sh | 2 +- .../STARIS_2022/basic/set-operators/in-type-error-02/run.sh | 2 +- .../STARIS_2022/basic/set-operators/in-type-error-03/run.sh | 2 +- tests/custom/STARIS_2022/basic/set-with-attributes/run.sh | 2 +- tests/custom/STARIS_2022/basic/set01/run.sh | 2 +- tests/custom/STARIS_2022/basic/simple-assignment/run.sh | 2 +- tests/custom/STARIS_2022/basic/such-that/run.sh | 2 +- .../custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh | 2 +- tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh | 2 +- tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh | 2 +- .../basic/type-conversion-operators/toInt-basic/run.sh | 2 +- .../basic/type-conversion-operators/toInt-error/run.sh | 2 +- .../STARIS_2022/basic/type-conversion-operators/toMSet/run.sh | 2 +- .../basic/type-conversion-operators/toSet-basic/run.sh | 2 +- .../basic/type-conversion-operators/toSet-sum/run.sh | 2 +- .../STARIS_2022/operation-type-errors/allDiff-type-error/run.sh | 2 +- .../operation-type-errors/allDiffExcept-type-error-01/run.sh | 2 +- .../operation-type-errors/allDiffExcept-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/and-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/apart-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/defined-type-error/run.sh | 2 +- .../operation-type-errors/factorial-type-error/run.sh | 2 +- .../operation-type-errors/flatten-type-error-01/run.sh | 2 +- .../operation-type-errors/flatten-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/freq-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/hist-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/in-type-error-01/run.sh | 2 +- .../STARIS_2022/operation-type-errors/in-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/inverse-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/max-type-error-01/run.sh | 2 +- .../STARIS_2022/operation-type-errors/max-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/min-type-error-01/run.sh | 2 +- .../STARIS_2022/operation-type-errors/min-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/negate-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/not-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/or-type-error/run.sh | 2 +- .../operation-type-errors/participants-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/parts-type-error/run.sh | 2 +- .../operation-type-errors/party-type-error-01/run.sh | 2 +- .../operation-type-errors/party-type-error-01/stderr.expected | 0 .../operation-type-errors/party-type-error-02/run.sh | 2 +- .../operation-type-errors/party-type-error-03/run.sh | 2 +- .../operation-type-errors/powerSet-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/pred-type-error/run.sh | 2 +- .../operation-type-errors/product-type-error-01/run.sh | 2 +- .../operation-type-errors/product-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/range-type-error/run.sh | 2 +- .../operation-type-errors/restrict-type-error/run.sh | 2 +- .../operation-type-errors/subsequence-type-error/run.sh | 2 +- .../operation-type-errors/substring-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/succ-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/sum-type-error-01/run.sh | 2 +- .../STARIS_2022/operation-type-errors/sum-type-error-02/run.sh | 2 +- .../STARIS_2022/operation-type-errors/toInt-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/toMSet-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/toSet-type-error/run.sh | 2 +- .../STARIS_2022/operation-type-errors/xor-type-error/run.sh | 2 +- .../flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh | 2 +- .../flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh | 2 +- .../flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh | 2 +- .../flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh | 2 +- .../tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh | 2 +- .../tree_core/find_v_find/tuple_3_bools_and_ints/run.sh | 2 +- .../flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh | 2 +- .../tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh | 2 +- .../flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh | 2 +- .../flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh | 2 +- .../flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh | 2 +- .../flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh | 2 +- .../flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh | 2 +- .../tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh | 2 +- .../tree_core/find_v_given/tuple_3_bools_and_ints/run.sh | 2 +- .../tree_core/find_v_given/tuple_3_bools_only/run.sh | 2 +- .../tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh | 2 +- .../flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh | 2 +- 121 files changed, 118 insertions(+), 118 deletions(-) delete mode 100644 tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/enum-spaces-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stderr.expected diff --git a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/run.sh b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/run.sh index 322c1b3251..0472949060 100755 --- a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/run.sh +++ b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/run.sh @@ -1,2 +1,2 @@ conjure model *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stdout.expected b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stdout.expected deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/custom/STARIS_2022/basic/bool-xor/run.sh b/tests/custom/STARIS_2022/basic/bool-xor/run.sh index fdd9fbfbd8..6816995e9a 100755 --- a/tests/custom/STARIS_2022/basic/bool-xor/run.sh +++ b/tests/custom/STARIS_2022/basic/bool-xor/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat xor.solution -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/STARIS_2022/basic/decision-where-error/run.sh b/tests/custom/STARIS_2022/basic/decision-where-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/decision-where-error/run.sh +++ b/tests/custom/STARIS_2022/basic/decision-where-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/enum-directions/run.sh b/tests/custom/STARIS_2022/basic/enum-directions/run.sh index b1b04859a2..b17970e23b 100755 --- a/tests/custom/STARIS_2022/basic/enum-directions/run.sh +++ b/tests/custom/STARIS_2022/basic/enum-directions/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence -rm -r conjure-output +rm -rf conjure-output cat directions.solution \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh b/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh index f2be23af24..910479c7b7 100755 --- a/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat pred-basic.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh b/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh index 97d99d2563..d9dcbabce7 100755 --- a/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat succ-basic.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/enum-spaces-error/stdout.expected b/tests/custom/STARIS_2022/basic/enum-spaces-error/stdout.expected deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/custom/STARIS_2022/basic/factor/run.sh b/tests/custom/STARIS_2022/basic/factor/run.sh index c79f88f2e5..b20aa585e3 100755 --- a/tests/custom/STARIS_2022/basic/factor/run.sh +++ b/tests/custom/STARIS_2022/basic/factor/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat factor.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh b/tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh index 2dd85faa98..aab40594f9 100755 --- a/tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh +++ b/tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence *.param cat gcf-inputs.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh b/tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh index 2b0e44b490..a2a4988be4 100755 --- a/tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh +++ b/tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat letting.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/list-operations/exists/run.sh b/tests/custom/STARIS_2022/basic/list-operations/exists/run.sh index e6674155b1..5d398c5bd6 100755 --- a/tests/custom/STARIS_2022/basic/list-operations/exists/run.sh +++ b/tests/custom/STARIS_2022/basic/list-operations/exists/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat exists.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh b/tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh index f011b2df35..d1011cf9f3 100755 --- a/tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh +++ b/tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat forAll.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh b/tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh index 5cdce4d4cf..29850a8709 100755 --- a/tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat sum.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh b/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh index 97ecaf2db4..c59bb922c1 100755 --- a/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh +++ b/tests/custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat sum-matrix.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh b/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh index a5c325158c..a64f81e0de 100755 --- a/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat allDiff.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/run.sh b/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/run.sh index be9bf222f3..42e820ebb3 100755 --- a/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/alldifferent_except/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat alldifferent_except.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/flatten/run.sh b/tests/custom/STARIS_2022/basic/matrices/flatten/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/matrices/flatten/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/flatten/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh b/tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh index 446ad0ea79..f7d99c459f 100755 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat matrix-basic.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh b/tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh index b2dfb82113..02e88cbf8c 100755 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat matrix-bool.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh b/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh index 11b8ddd4d5..2af786f6a7 100755 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat matrix-flatten.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/maximising/run.sh b/tests/custom/STARIS_2022/basic/maximising/run.sh index 596b0f25cf..c57327b782 100755 --- a/tests/custom/STARIS_2022/basic/maximising/run.sh +++ b/tests/custom/STARIS_2022/basic/maximising/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat max.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/modulus/run.sh b/tests/custom/STARIS_2022/basic/modulus/run.sh index ae1882db37..4922bc598c 100755 --- a/tests/custom/STARIS_2022/basic/modulus/run.sh +++ b/tests/custom/STARIS_2022/basic/modulus/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence --number-of-solutions=all -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh b/tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh +++ b/tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/run.sh b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/run.sh index 0ae260d0e8..dd6665ec44 100755 --- a/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/multiset-operators/hist-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat hist.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/run.sh b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/run.sh +++ b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh b/tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh index 596b0f25cf..c57327b782 100755 --- a/tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh +++ b/tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat max.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh b/tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh index f9a6812a7c..97e522adcf 100755 --- a/tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh +++ b/tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat min.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/run.sh b/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/run.sh index 44daebecb0..b96343cf64 100755 --- a/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat multiset-basic.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/parameter-error/run.sh b/tests/custom/STARIS_2022/basic/parameter-error/run.sh index 5329c449e0..ebe7bfc8b7 100755 --- a/tests/custom/STARIS_2022/basic/parameter-error/run.sh +++ b/tests/custom/STARIS_2022/basic/parameter-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence *.param -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/parameter-simple/run.sh b/tests/custom/STARIS_2022/basic/parameter-simple/run.sh index 0938602eb0..6bb09facad 100755 --- a/tests/custom/STARIS_2022/basic/parameter-simple/run.sh +++ b/tests/custom/STARIS_2022/basic/parameter-simple/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence *.param cat simple-parameter.solution -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh index 8a544f24f9..79f4fb9710 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat apart.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh index 2832997e21..182b1ac90f 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat union.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/run.sh b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/run.sh +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/record-simple/run.sh b/tests/custom/STARIS_2022/basic/record-simple/run.sh index 4817ccac28..79af3774dc 100755 --- a/tests/custom/STARIS_2022/basic/record-simple/run.sh +++ b/tests/custom/STARIS_2022/basic/record-simple/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat record.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/record-type-error/run.sh b/tests/custom/STARIS_2022/basic/record-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/record-type-error/run.sh +++ b/tests/custom/STARIS_2022/basic/record-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set-comprehension/run.sh b/tests/custom/STARIS_2022/basic/set-comprehension/run.sh index 9bc83c753c..2fa36c6323 100755 --- a/tests/custom/STARIS_2022/basic/set-comprehension/run.sh +++ b/tests/custom/STARIS_2022/basic/set-comprehension/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat set.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh b/tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh index f7d521d799..ba63b0550d 100755 --- a/tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh +++ b/tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat basic-set.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/run.sh b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/run.sh b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/run.sh index e36ac3bf9a..20bc0101f3 100755 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/run.sh b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/run.sh index e36ac3bf9a..20bc0101f3 100755 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/run.sh +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set-with-attributes/run.sh b/tests/custom/STARIS_2022/basic/set-with-attributes/run.sh index 9bc83c753c..2fa36c6323 100755 --- a/tests/custom/STARIS_2022/basic/set-with-attributes/run.sh +++ b/tests/custom/STARIS_2022/basic/set-with-attributes/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat set.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/set01/run.sh b/tests/custom/STARIS_2022/basic/set01/run.sh index 9bc83c753c..2fa36c6323 100755 --- a/tests/custom/STARIS_2022/basic/set01/run.sh +++ b/tests/custom/STARIS_2022/basic/set01/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat set.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/simple-assignment/run.sh b/tests/custom/STARIS_2022/basic/simple-assignment/run.sh index 406651a808..bde760f675 100755 --- a/tests/custom/STARIS_2022/basic/simple-assignment/run.sh +++ b/tests/custom/STARIS_2022/basic/simple-assignment/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat simple.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/such-that/run.sh b/tests/custom/STARIS_2022/basic/such-that/run.sh index 91668f5015..671b861f7c 100755 --- a/tests/custom/STARIS_2022/basic/such-that/run.sh +++ b/tests/custom/STARIS_2022/basic/such-that/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat such-that.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh b/tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh index 166199644f..eabcb04702 100755 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat tuple.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh b/tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh index 166199644f..eabcb04702 100755 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat tuple.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/run.sh b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/run.sh index 5452fd065c..7975774316 100755 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat toInt.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/run.sh b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/run.sh +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/run.sh b/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/run.sh index c84c9c9f87..6f3e36b797 100755 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/run.sh +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat toMSet.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/run.sh b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/run.sh index 1bab60d3c2..e73020d086 100755 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/run.sh +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat toSet.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/run.sh b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/run.sh index 65ddfc9db1..7a6b0fac4c 100755 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/run.sh +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/run.sh @@ -1,3 +1,3 @@ conjure solve *.essence cat toSet-sum.solution -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stderr.expected deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/run.sh b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/run.sh b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/run.sh b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/run.sh b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/run.sh index 7381bb7229..2f72c9239c 100755 --- a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/run.sh +++ b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/run.sh @@ -1,2 +1,2 @@ conjure solve *.essence -rm -r conjure-output \ No newline at end of file +rm -rf conjure-output \ No newline at end of file diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output diff --git a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh index cd16315856..c93d930e95 100755 --- a/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh +++ b/tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh @@ -1,3 +1,3 @@ conjure modelling *.essence cat conjure-output/*.eprime | grep -v "^[$]" -rm -r conjure-output +rm -rf conjure-output From 439257c79ca537bf8c1d83f1912300159387dd08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 19:40:28 +0000 Subject: [PATCH 032/378] ConstantFromJSON removed --- tests/custom/tsdef/stdout.expected | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/custom/tsdef/stdout.expected b/tests/custom/tsdef/stdout.expected index d1904b8d71..0da493e1d9 100644 --- a/tests/custom/tsdef/stdout.expected +++ b/tests/custom/tsdef/stdout.expected @@ -85,7 +85,7 @@ type BinaryRelationAttrs = IBinaryRelationAttrs; type IBinaryRelationAttrs = BinaryRelationAttr[]; -type Constant = IConstantBool | IConstantInt | IConstantEnum | IConstantField | IConstantFromJSON | IConstantAbstract | IDomainInConstant | ITypedConstant | IConstantUndefined; +type Constant = IConstantBool | IConstantInt | IConstantEnum | IConstantField | IConstantAbstract | IDomainInConstant | ITypedConstant | IConstantUndefined; interface IConstantBool { tag: "ConstantBool"; @@ -107,11 +107,6 @@ interface IConstantField { contents: [Name, Type]; } -interface IConstantFromJSON { - tag: "ConstantFromJSON"; - contents: Constant[]; -} - interface IConstantAbstract { tag: "ConstantAbstract"; contents: AbstractLiteral; From 616f1e94bc0a75cd994ec0832fdc808d30efd424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 19:41:03 +0000 Subject: [PATCH 033/378] improved enum parsing (from json) --- src/Conjure/Language/Constant.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index a4248c9712..1204516d64 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -101,8 +101,11 @@ instance SimpleJSON Constant where fromSimpleJSON _ (JSON.Bool b) = return (ConstantBool b) - fromSimpleJSON t x@JSON.Number{} = ConstantInt TagInt <$> fromSimpleJSON t x - fromSimpleJSON t x@JSON.String{} = ConstantInt TagInt <$> fromSimpleJSON t x + fromSimpleJSON t@TypeInt{} x@JSON.Number{} = ConstantInt TagInt <$> fromSimpleJSON t x + fromSimpleJSON t@TypeInt{} x@JSON.String{} = ConstantInt TagInt <$> fromSimpleJSON t x + + fromSimpleJSON (TypeEnum enum_type_name) (JSON.String value) = + return (ConstantEnum enum_type_name [] (Name value)) fromSimpleJSON (TypeTuple ts) (JSON.Array xs) = ConstantAbstract . AbsLitTuple <$> zipWithM fromSimpleJSON ts (V.toList xs) From 80e92ec0519ef5b9331790d474a3f97c871316ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 19:41:29 +0000 Subject: [PATCH 034/378] run prologue instead of just resolveNames --- src/Conjure/UI/MainHelper.hs | 9 +++++---- src/Conjure/UI/Model.hs | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index a5c185c7ed..4bf3cf9c29 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -9,7 +9,7 @@ import Conjure.UI ( UI(..), OutputFormat(..) ) import Conjure.UI.IO ( readModel, readModelFromFile, readModelFromStdin , readModelInfoFromFile, readParamOrSolutionFromFile , writeModel ) -import Conjure.UI.Model ( parseStrategy, outputModels, modelRepresentationsJSON ) +import Conjure.UI.Model ( parseStrategy, outputModels, modelRepresentationsJSON, prologue ) import qualified Conjure.UI.Model as Config ( Config(..) ) import Conjure.UI.TranslateParameter ( translateParameter ) import Conjure.UI.TranslateSolution ( translateSolution ) @@ -32,7 +32,7 @@ import Conjure.Language.ModelDiff ( modelDiffIO ) import Conjure.Rules.Definition ( viewAuto, Strategy(..) ) import Conjure.Process.Enumerate ( EnumerateDomain ) import Conjure.Process.Boost ( boost ) -import Conjure.Language.NameResolution ( resolveNamesMulti, resolveNames ) +import Conjure.Language.NameResolution ( resolveNamesMulti ) import Conjure.Language.ModelStats ( modelDeclarationsJSON ) import Conjure.Language.AdHoc ( toSimpleJSON ) @@ -263,7 +263,8 @@ mainWithArgs config@Solve{..} = do ]) when (solver `elem` ["bc_minisat_all", "nbc_minisat_all"] && nbSolutions /= "all") $ userErr1 $ "The solvers bc_minisat_all and nbc_minisat_all only work with --number-of-solutions=all" - essenceM <- readModelFromFile essence >>= resolveNames + essenceM_beforeNR <- readModelFromFile essence + essenceM <- prologue essenceM_beforeNR unless (null [ () | Objective{} <- mStatements essenceM ]) $ do -- this is an optimisation problem when (nbSolutions == "all" || nbSolutions /= "1") $ userErr1 ("Not supported for optimisation problems: --number-of-solutions=" <> pretty nbSolutions) @@ -295,7 +296,7 @@ mainWithArgs config@Solve{..} = do then return useExistingModels else userErr1 $ "Models not found:" <+> vcat (map pretty missingModels) else doIfNotCached -- start the show! - ( sort (mStatements essenceM) + ( sort (mStatements essenceM_beforeNR) , portfolio -- when the following flags change, invalidate hash -- nested tuples, because :( diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index 517e3deae1..67f758ac1a 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -12,6 +12,7 @@ module Conjure.UI.Model , modelRepresentationsJSON , timedF , evaluateModel -- unused, exporting to suppress warning + , prologue ) where import Conjure.Prelude From 01cb65d05a1495be16600650c354c9cb6dcafdea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 17 Feb 2023 20:57:48 +0000 Subject: [PATCH 035/378] Updating test outputs --- .../basic/matrices/allDiff-type-error/stdout.expected | 1 - .../STARIS_2022/basic/matrices/matrix-forAll/stdout.expected | 1 - .../basic/matrices/matrix-index-error/stdout.expected | 1 - .../STARIS_2022/basic/multiple-objective-error/stdout.expected | 1 - .../basic/multiset-operators/hist-type-error/stdout.expected | 1 - .../partition-operator-errors/set-apart/stdout.expected | 1 - .../partition-operator-errors/set-participant/stdout.expected | 1 - .../partition-operator-errors/set-parts-together/stdout.expected | 1 - .../partition-operator-errors/set-party/stdout.expected | 1 - tests/custom/STARIS_2022/basic/record-type-error/stdout.expected | 1 - .../basic/set-operators/in-type-error-02/stdout.expected | 1 - .../basic/set-operators/in-type-error-03/stdout.expected | 1 - .../basic/tuples/tuple-addition-error/stdout.expected | 1 - .../STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected | 1 - .../basic/type-conversion-operators/toInt-error/stdout.expected | 1 - .../operation-type-errors/allDiff-type-error/stdout.expected | 1 - .../allDiffExcept-type-error-01/stdout.expected | 1 - .../allDiffExcept-type-error-02/stdout.expected | 1 - .../operation-type-errors/and-type-error/stdout.expected | 1 - .../operation-type-errors/apart-type-error/stdout.expected | 1 - .../operation-type-errors/defined-type-error/stdout.expected | 1 - .../operation-type-errors/factorial-type-error/stdout.expected | 1 - .../operation-type-errors/flatten-type-error-01/stdout.expected | 1 - .../operation-type-errors/flatten-type-error-02/stdout.expected | 1 - .../operation-type-errors/freq-type-error/stdout.expected | 1 - .../operation-type-errors/hist-type-error/stdout.expected | 1 - .../operation-type-errors/in-type-error-01/stdout.expected | 1 - .../operation-type-errors/in-type-error-02/stdout.expected | 1 - .../operation-type-errors/inverse-type-error/stdout.expected | 1 - .../operation-type-errors/max-type-error-01/stdout.expected | 1 - .../operation-type-errors/max-type-error-02/stdout.expected | 1 - .../operation-type-errors/min-type-error-01/stdout.expected | 1 - .../operation-type-errors/min-type-error-02/stdout.expected | 1 - .../operation-type-errors/negate-type-error/stdout.expected | 1 - .../operation-type-errors/not-type-error/stdout.expected | 1 - .../operation-type-errors/or-type-error/stdout.expected | 1 - .../participants-type-error/stdout.expected | 1 - .../operation-type-errors/parts-type-error/stdout.expected | 1 - .../operation-type-errors/party-type-error-02/stdout.expected | 1 - .../operation-type-errors/party-type-error-03/stdout.expected | 1 - .../operation-type-errors/powerSet-type-error/stdout.expected | 1 - .../operation-type-errors/pred-type-error/stdout.expected | 1 - .../operation-type-errors/product-type-error-01/stdout.expected | 1 - .../operation-type-errors/product-type-error-02/stdout.expected | 1 - .../operation-type-errors/range-type-error/stdout.expected | 1 - .../operation-type-errors/restrict-type-error/stdout.expected | 1 - .../operation-type-errors/subsequence-type-error/stdout.expected | 1 - .../operation-type-errors/substring-type-error/stdout.expected | 1 - .../operation-type-errors/succ-type-error/stdout.expected | 1 - .../operation-type-errors/sum-type-error-01/stdout.expected | 1 - .../operation-type-errors/sum-type-error-02/stdout.expected | 1 - .../operation-type-errors/toInt-type-error/stdout.expected | 1 - .../operation-type-errors/toMSet-type-error/stdout.expected | 1 - .../operation-type-errors/toSet-type-error/stdout.expected | 1 - .../operation-type-errors/xor-type-error/stdout.expected | 1 - tests/custom/basic/enum_duplicate_name/stdout.expected | 1 - tests/custom/issues/298/stdout.expected | 1 - tests/custom/issues/390/stdout.expected | 1 - tests/custom/issues/439/stdout.expected | 1 - 59 files changed, 59 deletions(-) delete mode 100644 tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/multiple-objective-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/record-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/and-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/not-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/or-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/range-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stdout.expected delete mode 100644 tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stdout.expected delete mode 100644 tests/custom/basic/enum_duplicate_name/stdout.expected delete mode 100644 tests/custom/issues/298/stdout.expected delete mode 100644 tests/custom/issues/390/stdout.expected delete mode 100644 tests/custom/issues/439/stdout.expected diff --git a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stdout.expected deleted file mode 100644 index c6dcb0ad7e..0000000000 --- a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for allDiff-type-error.essence diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stdout.expected deleted file mode 100644 index 18859903a8..0000000000 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for matrix-forAll.essence diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stdout.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stdout.expected deleted file mode 100644 index d4986420ab..0000000000 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for matrix-index-error.essence diff --git a/tests/custom/STARIS_2022/basic/multiple-objective-error/stdout.expected b/tests/custom/STARIS_2022/basic/multiple-objective-error/stdout.expected deleted file mode 100644 index 11e3c8bab1..0000000000 --- a/tests/custom/STARIS_2022/basic/multiple-objective-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for multiple-objective.essence diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stdout.expected b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stdout.expected deleted file mode 100644 index 755d5b0ad0..0000000000 --- a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for hist-type-error.essence diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stdout.expected deleted file mode 100644 index 562d60ff06..0000000000 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for set-apart.essence diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stdout.expected deleted file mode 100644 index f1d3091e99..0000000000 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for set-participant.essence diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stdout.expected deleted file mode 100644 index 808cde88dc..0000000000 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for set-parts-together.essence diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stdout.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stdout.expected deleted file mode 100644 index cab785d8e8..0000000000 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for set-party.essence diff --git a/tests/custom/STARIS_2022/basic/record-type-error/stdout.expected b/tests/custom/STARIS_2022/basic/record-type-error/stdout.expected deleted file mode 100644 index ed1b5555b8..0000000000 --- a/tests/custom/STARIS_2022/basic/record-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for record.essence diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stdout.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stdout.expected deleted file mode 100644 index 9ee7a8234e..0000000000 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for in.essence diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stdout.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stdout.expected deleted file mode 100644 index 9ee7a8234e..0000000000 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for in.essence diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stdout.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stdout.expected deleted file mode 100644 index 9cccc82ffc..0000000000 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for addition.essence diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected deleted file mode 100644 index d40c106055..0000000000 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for bound.essence diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stdout.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stdout.expected deleted file mode 100644 index 65a8be6280..0000000000 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for toInt-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stdout.expected deleted file mode 100644 index c6dcb0ad7e..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for allDiff-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stdout.expected deleted file mode 100644 index d08ba70db4..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for allDiffExcept-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stdout.expected deleted file mode 100644 index d08ba70db4..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for allDiffExcept-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stdout.expected deleted file mode 100644 index 574516d415..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for and-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stdout.expected deleted file mode 100644 index b07cf4e56b..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for apart-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stdout.expected deleted file mode 100644 index 11421249cb..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for defined-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stdout.expected deleted file mode 100644 index 63cdb13e8f..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for factorial-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stdout.expected deleted file mode 100644 index 12d62fd78d..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for flatten-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stdout.expected deleted file mode 100644 index 12d62fd78d..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for flatten-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stdout.expected deleted file mode 100644 index 3c77415a09..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for freq-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stdout.expected deleted file mode 100644 index 755d5b0ad0..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for hist-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stdout.expected deleted file mode 100644 index 09078fc677..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for in-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stdout.expected deleted file mode 100644 index 09078fc677..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for in-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stdout.expected deleted file mode 100644 index 25d65fce5a..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for inverse-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stdout.expected deleted file mode 100644 index d8bfaf4059..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for max-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stdout.expected deleted file mode 100644 index d8bfaf4059..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for max-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stdout.expected deleted file mode 100644 index 51657be1bb..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for min-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stdout.expected deleted file mode 100644 index 51657be1bb..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for min-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stdout.expected deleted file mode 100644 index 2cd68ebd69..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for negate-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stdout.expected deleted file mode 100644 index b54d65c352..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for not-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stdout.expected deleted file mode 100644 index 964289c5a3..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for or-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stdout.expected deleted file mode 100644 index 6999b5d73e..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for participants-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stdout.expected deleted file mode 100644 index 0f9e98df61..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for parts-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stdout.expected deleted file mode 100644 index 5bbac40d9d..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for party-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stdout.expected deleted file mode 100644 index 5bbac40d9d..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for party-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stdout.expected deleted file mode 100644 index f70cd02f08..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for powerSet-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stdout.expected deleted file mode 100644 index b8a03ecadc..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for pred-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stdout.expected deleted file mode 100644 index 9f232ebe6f..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for product-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stdout.expected deleted file mode 100644 index 9f232ebe6f..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for product-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stdout.expected deleted file mode 100644 index b66f4dca8d..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for range-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stdout.expected deleted file mode 100644 index bef49825c6..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for restrict-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stdout.expected deleted file mode 100644 index 5a07ef5a51..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for subsequence-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stdout.expected deleted file mode 100644 index e25d2e77ef..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for substring-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stdout.expected deleted file mode 100644 index 2c10fba821..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for succ-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stdout.expected deleted file mode 100644 index 0cdd74a453..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for sum-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stdout.expected deleted file mode 100644 index 0cdd74a453..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for sum-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stdout.expected deleted file mode 100644 index 4c8698fa8c..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for toInt-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stdout.expected deleted file mode 100644 index cbdba80ee6..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for toMSet-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stdout.expected deleted file mode 100644 index 7266076f9a..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for toSet-type-error.essence diff --git a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stdout.expected b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stdout.expected deleted file mode 100644 index 9e2076e4a6..0000000000 --- a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for xor-type-error.essence diff --git a/tests/custom/basic/enum_duplicate_name/stdout.expected b/tests/custom/basic/enum_duplicate_name/stdout.expected deleted file mode 100644 index 0ab5faf70b..0000000000 --- a/tests/custom/basic/enum_duplicate_name/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for e.essence diff --git a/tests/custom/issues/298/stdout.expected b/tests/custom/issues/298/stdout.expected deleted file mode 100644 index 7b4bf8f64b..0000000000 --- a/tests/custom/issues/298/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for 298.essence diff --git a/tests/custom/issues/390/stdout.expected b/tests/custom/issues/390/stdout.expected deleted file mode 100644 index 443e0a4e0f..0000000000 --- a/tests/custom/issues/390/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for 390.essence diff --git a/tests/custom/issues/439/stdout.expected b/tests/custom/issues/439/stdout.expected deleted file mode 100644 index 6fd3206828..0000000000 --- a/tests/custom/issues/439/stdout.expected +++ /dev/null @@ -1 +0,0 @@ -Generating models for 439.essence From 63f3f666f32b3b16ea0a816bd3ce6564cb5e68b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 18 Feb 2023 08:34:02 +0000 Subject: [PATCH 036/378] gecode does not build at the moment, temporarily disabling --- Dockerfile | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad8f5aecad..6bb7c28f94 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,7 +38,7 @@ RUN PROCESSES=2 etc/build/install-bc_minisat_all.sh RUN PROCESSES=2 etc/build/install-boolector.sh RUN PROCESSES=2 etc/build/install-cadical.sh RUN PROCESSES=2 etc/build/install-chuffed.sh -RUN PROCESSES=2 etc/build/install-gecode.sh +# RUN PROCESSES=2 etc/build/install-gecode.sh RUN PROCESSES=2 etc/build/install-glucose.sh RUN PROCESSES=2 etc/build/install-kissat.sh RUN PROCESSES=2 etc/build/install-lingeling.sh diff --git a/Makefile b/Makefile index 64121bb9cf..a68dfd263f 100644 --- a/Makefile +++ b/Makefile @@ -138,7 +138,7 @@ solvers: @etc/build/silent-wrapper.sh etc/build/install-boolector.sh @etc/build/silent-wrapper.sh etc/build/install-cadical.sh @etc/build/silent-wrapper.sh etc/build/install-chuffed.sh - @etc/build/silent-wrapper.sh etc/build/install-gecode.sh + # @etc/build/silent-wrapper.sh etc/build/install-gecode.sh @etc/build/silent-wrapper.sh etc/build/install-glucose.sh @etc/build/silent-wrapper.sh etc/build/install-kissat.sh @etc/build/silent-wrapper.sh etc/build/install-lingeling.sh From 88e0df19a93ec9aa3dda13ea56301256eeb2b5d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 19 Feb 2023 20:44:12 +0000 Subject: [PATCH 037/378] Fixes #551 - produce a better error message when a record field shadows an existing name --- src/Conjure/Language/Expression.hs | 12 ++++---- src/Conjure/Language/NameResolution.hs | 40 ++++++++++++++++++------- tests/custom/issues/551/551.essence | 4 +++ tests/custom/issues/551/run.sh | 3 ++ tests/custom/issues/551/stderr.expected | 4 +++ 5 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 tests/custom/issues/551/551.essence create mode 100755 tests/custom/issues/551/run.sh create mode 100644 tests/custom/issues/551/stderr.expected diff --git a/src/Conjure/Language/Expression.hs b/src/Conjure/Language/Expression.hs index 77d5172fc4..9133b4dd8c 100644 --- a/src/Conjure/Language/Expression.hs +++ b/src/Conjure/Language/Expression.hs @@ -755,12 +755,12 @@ instance ToJSON ReferenceTo where toJSON = genericToJSON jsonOptions instance FromJSON ReferenceTo where parseJSON = genericParseJSON jsonOptions instance Pretty ReferenceTo where - pretty (Alias x) = "Alias" <+> prParens (pretty x) - pretty (InComprehension gen) = "InComprehension" <+> prParens (pretty gen) - pretty (DeclNoRepr forg nm dom _) = "DeclNoRepr" <+> prParens (pretty forg <+> pretty nm <> ":" <+> pretty dom) - pretty (DeclHasRepr forg nm dom ) = "DeclHasRepr" <+> prParens (pretty forg <+> pretty nm <> ":" <+> pretty dom) - pretty (RecordField nm ty) = "RecordField" <+> prParens (pretty nm <+> ":" <+> pretty ty) - pretty (VariantField nm ty) = "VariantField" <+> prParens (pretty nm <+> ":" <+> pretty ty) + pretty (Alias x) = "an alias for" <++> pretty x + pretty (InComprehension gen) = "a comprehension generator" <++> pretty gen + pretty (DeclNoRepr forg nm dom _) = "declaration of" <++> pretty forg <+> pretty nm <> ":" <+> pretty dom + pretty (DeclHasRepr forg nm dom ) = "declaration of" <++> pretty forg <+> pretty nm <> ":" <+> pretty dom + pretty (RecordField nm ty) = "record field" <++> prParens (pretty nm <+> ":" <+> pretty ty) + pretty (VariantField nm ty) = "variant field" <++> prParens (pretty nm <+> ":" <+> pretty ty) data Region = NoRegion diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index cabb3ac61c..725a70654e 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -74,6 +74,26 @@ shadowing p@(Comprehension _ is) = do shadowing p = return p +addName :: + MonadState [(Name, ReferenceTo)] m => + MonadUserError m => + Name -> ReferenceTo -> m () +addName n thing = do + ctxt <- gets id + let + allowed (DeclNoRepr _ _ _ _) (Alias _) = True -- needed when instantiating stuff + allowed (DeclHasRepr _ _ _) (Alias _) = True -- needed when instantiating stuff + allowed old new = old == new + let mdefined = [ thing' | (n', thing') <- ctxt, n == n' && not (allowed thing' thing) ] + case mdefined of + [] -> return () + (thing':_) -> userErr1 $ vcat [ "Redefinition of name:" <+> pretty n + , "When trying to define it as" <+> pretty thing + , "It was already defined as" <+> pretty thing' + ] + modify ((n, thing) :) + + resolveNamesX :: MonadFailDoc m => MonadUserError m => @@ -112,20 +132,20 @@ resolveStatement st = case decl of FindOrGiven forg nm dom -> do dom' <- resolveD dom - modify ((nm, DeclNoRepr forg nm dom' NoRegion) :) + addName nm $ DeclNoRepr forg nm dom' NoRegion return (Declaration (FindOrGiven forg nm dom')) Letting nm x -> do x' <- resolveX x - modify ((nm, Alias x') :) + addName nm $ Alias x' return (Declaration (Letting nm x')) LettingDomainDefnUnnamed nm x -> do x' <- resolveX x - modify ((nm, Alias (Domain (DomainUnnamed nm x'))) :) + addName nm $ Alias (Domain (DomainUnnamed nm x')) return (Declaration (LettingDomainDefnUnnamed nm x')) LettingDomainDefnEnum (Name ename) nms -> do - modify ( [ (nm, Alias (Constant (ConstantInt (TagEnum ename) i))) - | (nm, i) <- zip nms [1..] - ] ++) + sequence_ [ addName nm $ Alias (Constant (ConstantInt (TagEnum ename) i)) + | (nm, i) <- zip nms [1..] + ] return st LettingDomainDefnEnum{} -> bug "resolveStatement, Name" GivenDomainDefnEnum{} -> return st -- ignoring @@ -225,7 +245,7 @@ resolveX p@Comprehension{} = scope $ do let gen'' = GenInExpr pat expr' return ( gen'' , InComprehension gen'' ) forM_ (universeBi (generatorPat gen)) $ \ nm -> - modify ((nm, refto) :) + addName nm refto return (Generator gen') Condition y -> Condition <$> resolveX y ComprehensionLetting pat expr -> do @@ -269,12 +289,12 @@ resolveD (DomainReference nm Nothing) = do resolveD (DomainRecord ds) = fmap DomainRecord $ forM ds $ \ (n, d) -> do d' <- resolveD d t <- typeOfDomain d' - modify ((n, RecordField n t) :) + addName n $ RecordField n t return (n, d') resolveD (DomainVariant ds) = fmap DomainVariant $ forM ds $ \ (n, d) -> do d' <- resolveD d t <- typeOfDomain d' - modify ((n, VariantField n t) :) + addName n $ VariantField n t return (n, d') resolveD d = do d' <- descendM resolveD d @@ -286,7 +306,7 @@ resolveAbsPat :: MonadUserError m => Expression -> AbstractPattern -> Expression -> m () resolveAbsPat _ AbstractPatternMetaVar{} _ = bug "resolveAbsPat AbstractPatternMetaVar" -resolveAbsPat _ (Single nm) x = modify ((nm, Alias x) :) +resolveAbsPat _ (Single nm) x = addName nm $ Alias x resolveAbsPat context (AbsPatTuple ps) x = sequence_ [ resolveAbsPat context p [essence| &x[&i] |] | (p, i_) <- zip ps allNats diff --git a/tests/custom/issues/551/551.essence b/tests/custom/issues/551/551.essence new file mode 100644 index 0000000000..771b91e0ce --- /dev/null +++ b/tests/custom/issues/551/551.essence @@ -0,0 +1,4 @@ +find blocks : function (total) int(1..5) --> int(1..5) +find neighbourhood : variant { None, Some : record { blocks: function (total) int(1..5) --> int(1..5) } } + +such that and([true | b <- blocks]) diff --git a/tests/custom/issues/551/run.sh b/tests/custom/issues/551/run.sh new file mode 100755 index 0000000000..c534553f7c --- /dev/null +++ b/tests/custom/issues/551/run.sh @@ -0,0 +1,3 @@ +rm -rf conjure-output *.solution +conjure solve 551.essence +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/551/stderr.expected b/tests/custom/issues/551/stderr.expected new file mode 100644 index 0000000000..d813e13309 --- /dev/null +++ b/tests/custom/issues/551/stderr.expected @@ -0,0 +1,4 @@ +Error: + Redefinition of name: blocks + When trying to define it as record field (blocks : function int --> int) + It was already defined as declaration of find blocks: function (total) int(1..5) --> int(1..5) From f1672162b93f1491b85bddbd618c9bd14e311d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 19 Feb 2023 23:58:29 +0000 Subject: [PATCH 038/378] write an empty file when there are no errors --- src/test/Conjure/ParsePrint.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/Conjure/ParsePrint.hs b/src/test/Conjure/ParsePrint.hs index 49e182984c..70650e6ef9 100644 --- a/src/test/Conjure/ParsePrint.hs +++ b/src/test/Conjure/ParsePrint.hs @@ -88,7 +88,7 @@ testSingleDir TestDirFiles{..} = testCaseSteps (map (\ch -> if ch == '/' then '. writeModel 120 Plain (Just (tBaseDir "stdout")) model case tyCheck model of Left err -> writeFile (tBaseDir "typecheck") (renderNormal err) - Right () -> pure () + Right () -> writeFile (tBaseDir "typecheck") "" removeFileIfExists (tBaseDir "stderr") let fixWindowsPaths :: String -> String From bd77adbae14a8f32fd064592cc97b5bb8a8af5dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 19 Feb 2023 23:59:34 +0000 Subject: [PATCH 039/378] update test files --- .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 77 +++++++----- .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 52 ++++---- .../typecheck.expected | 86 +++++++------ .../typecheck.expected | 84 +++++++------ .../typecheck.expected | 88 +++++++------ .../typecheck.expected | 79 ++++++------ .../typecheck.expected | 69 ++++++----- .../typecheck.expected | 98 ++++++++------- .../typecheck.expected | 79 ++++++------ .../typecheck.expected | 86 +++++++------ .../typecheck.expected | 105 +++++++++------- .../typecheck.expected | 100 ++++++++------- .../typecheck.expected | 97 ++++++++------- .../typecheck.expected | 56 +++++---- .../typecheck.expected | 116 ++++++++++-------- .../typecheck.expected | 90 +++++++------- .../typecheck.expected | 74 ++++++----- .../typecheck.expected | 73 ++++++----- .../typecheck.expected | 63 +++++----- .../typecheck.expected | 73 ++++++----- .../typecheck.expected | 77 +++++++----- .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 63 +++++----- .../typecheck.expected | 89 ++++++++------ .../typecheck.expected | 93 ++++++++------ .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 81 ++++++------ .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 114 +++++++++-------- .../typecheck.expected | 54 ++++---- .../typecheck.expected | 99 ++++++++------- .../typecheck.expected | 86 +++++++------ .../typecheck.expected | 80 ++++++------ .../typecheck.expected | 96 ++++++++------- .../typecheck.expected | 80 ++++++------ .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 48 ++++---- .../typecheck.expected | 88 +++++++------ .../typecheck.expected | 115 +++++++++-------- .../typecheck.expected | 77 +++++++----- .../typecheck.expected | 95 +++++++------- .../typecheck.expected | 90 +++++++------- .../typecheck.expected | 82 +++++++------ .../typecheck.expected | 97 ++++++++------- .../typecheck.expected | 110 +++++++++-------- .../typecheck.expected | 99 ++++++++------- .../typecheck.expected | 99 ++++++++------- .../typecheck.expected | 87 +++++++------ .../typecheck.expected | 80 ++++++------ .../typecheck.expected | 100 ++++++++------- .../typecheck.expected | 75 ++++++----- .../typecheck.expected | 74 ++++++----- .../model.expected.json | 0 .../stdout.expected | 0 .../unnamed-redefinition/typecheck.expected | 4 + .../unnamed.essence | 0 .../unnamed-valid/model.expected.json | 25 ++++ .../unnamed-valid/stdout.expected | 11 ++ .../unnamed-valid/unnamed.essence | 7 ++ .../syntax_test/domains/int/int.essence | 6 +- .../domains/int/model.expected.json | 6 +- .../syntax_test/domains/int/stdout.expected | 6 +- .../comprehensions/typecheck.expected | 10 +- .../expressions/operators/typecheck.expected | 18 +-- 67 files changed, 2626 insertions(+), 2065 deletions(-) rename tests/parse_print/syntax_test/declarations/{unnamed => unnamed-redefinition}/model.expected.json (100%) rename tests/parse_print/syntax_test/declarations/{unnamed => unnamed-redefinition}/stdout.expected (100%) create mode 100644 tests/parse_print/syntax_test/declarations/unnamed-redefinition/typecheck.expected rename tests/parse_print/syntax_test/declarations/{unnamed => unnamed-redefinition}/unnamed.essence (100%) create mode 100644 tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json create mode 100644 tests/parse_print/syntax_test/declarations/unnamed-valid/stdout.expected create mode 100644 tests/parse_print/syntax_test/declarations/unnamed-valid/unnamed.essence diff --git a/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected index 49f43198f7..8aa0426d8a 100644 --- a/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q27 Bindings in context: - q30: DeclNoRepr (quantified q30: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - var4_Function1DPartial_Values_Occurrence: DeclNoRepr (find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, - 5), - int(3)] of - bool) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of - bool) - var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of - int(3)) - var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of - bool) - var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file + q30: declaration of quantified q30: int(1..2) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + var4_Function1DPartial_Values_Occurrence: declaration of + find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, + 5), + int(3)] of + bool + var4_Function1DPartial_Flags: declaration of + find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of bool + var3_Function1DPartial_Values_Function1DPartial_Values: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, + int(-1)] of + int(3) + var3_Function1DPartial_Values_Function1DPartial_Flags: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, + int(-1)] of + bool + var3_Function1DPartial_Flags: declaration of find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected index c84fce601f..b4ad1b90ab 100644 --- a/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - int(4..5)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + int(4..5) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected index 2551cc39e0..c8373ce94e 100644 --- a/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected @@ -1,37 +1,46 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..4)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), - int(1..4), - bool] of - int(4)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), - int(1..4), - bool] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of - int(0..4)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..4) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), + int(1..4), + bool] of + int(4) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), + int(1..4), + bool] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/typecheck.expected index 0e16c48175..983f126a8b 100644 --- a/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q28 Bindings in context: - q42: DeclNoRepr (quantified q42: int(3, 2)) - q33: DeclNoRepr (quantified q33: int(1..16)) - q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, - int(1..16), int(3, 2)] of - bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, - int(1..16), int(3, 2)] of - bool) - var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), - int(2)] of - bool) - var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(3, - 2)] of - bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(3, - 2)] of - bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, - -5..3)] of - int(-1, 5)) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, - -5..3)] of - bool) \ No newline at end of file + q42: declaration of quantified q42: int(3, 2) + q33: declaration of quantified q33: int(1..16) + q4_Function1DPartial_Flags: declaration of + quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, int(1..16), + int(3, 2)] of + bool + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, int(1..16), + int(3, 2)] of + bool + var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: declaration of + find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), + int(2)] of + bool + var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2) + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(3, + 2)] of + bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(3, + 2)] of + bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) + var2_1_Function1DPartial_Values: declaration of + find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, + -5..3)] of + int(-1, 5) + var2_1_Function1DPartial_Flags: declaration of + find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, -5..3)] of + bool \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected index 27c963718b..7b4b372097 100644 --- a/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected @@ -1,26 +1,32 @@ Error: Undefined reference: q13 Bindings in context: - q41: DeclNoRepr (quantified q41: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q41: declaration of quantified q41: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_Occurrence: declaration of + find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected index 07231f25f2..739dbf5ab7 100644 --- a/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected @@ -1,42 +1,50 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(1, 4)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of - bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(1, 4) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected index 5c38a10241..3194c7223b 100644 --- a/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected @@ -1,41 +1,49 @@ Error: Undefined reference: q13 Bindings in context: - q44: DeclNoRepr (quantified q44: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q44: declaration of quantified q44: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected index 40c96441fe..ba14844d31 100644 --- a/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected @@ -1,43 +1,51 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(4, 3)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, 3)] of - bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - int(4, 3)) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - int(4, 3)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(4, - 3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(4, - 3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(4, 3) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, 3)] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + int(4, 3) + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + int(4, 3) + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(4, + 3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(4, + 3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected index c6c7fb04c7..e22376ba65 100644 --- a/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected @@ -1,38 +1,47 @@ Error: Undefined reference: q13 Bindings in context: - q50: DeclNoRepr (quantified q50: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q50: declaration of quantified q50: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected index c5455cdbc1..3f31925145 100644 --- a/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected @@ -1,34 +1,41 @@ Error: Undefined reference: q5 Bindings in context: - q7: DeclNoRepr (quantified q7: int(1, 4)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of - bool) - q16_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q16_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q16_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q16_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16)] of - int(0..2)) - q11_Occurrence: DeclNoRepr (find q11_Occurrence: matrix indexed by [matrix indexed by [int(1, 4)] of bool, - int(1..16), int(1, 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q7: declaration of quantified q7: int(1, 4) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of bool + q16_ExplicitVarSizeWithMarker_Values: declaration of + find q16_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q16_ExplicitVarSizeWithMarker_Marker: declaration of + find q16_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16)] of + int(0..2) + q11_Occurrence: declaration of + find q11_Occurrence: matrix indexed by [matrix indexed by [int(1, 4)] of bool, int(1..16), + int(1, 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected index 932c4ce49e..ddee67a2fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected @@ -1,47 +1,57 @@ Error: Undefined reference: q15 Bindings in context: - q52: DeclNoRepr (quantified q52: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of - int(4, - 2)) - var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q52: declaration of quantified q52: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithMarker_Values: declaration of + find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithMarker_Marker: declaration of + find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithMarker_Values: declaration of + find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithMarker_Marker: declaration of find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected index fea71ade8d..e2b1b726eb 100644 --- a/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected @@ -1,38 +1,47 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..4)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4)] of - int(0..2)) - var3: DeclNoRepr (find var3: int(3..4)) - var2_RelationAsMatrix: DeclNoRepr (find var2_RelationAsMatrix: matrix indexed by [int(-3..4, -2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), - int(1..4), - bool] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), - int(1..4), - bool] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of - int(0..4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..4) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4)] of + int(0..2) + var3: declaration of find var3: int(3..4) + var2_RelationAsMatrix: declaration of find var2_RelationAsMatrix: matrix indexed by [int(-3..4, -2)] of bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), + int(1..4), + bool] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), + int(1..4), + bool] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected index 472c616287..b6931be21f 100644 --- a/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected @@ -1,42 +1,50 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(1, -4)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, -4)] of - bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16), - int(1..2)] of - int(1, -4)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16), - int(1..2)] of - int(1, -4)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(1, - -4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(1, - -4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(1, -4) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, -4)] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16), + int(1..2)] of + int(1, -4) + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16), + int(1..2)] of + int(1, -4) + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(1, + -4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(1, + -4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/typecheck.expected index 005e01374b..fde744a403 100644 --- a/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/typecheck.expected @@ -1,50 +1,61 @@ Error: Undefined reference: q27 Bindings in context: - q30: DeclNoRepr (quantified q30: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2), - int(1)] of - int(-2)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2), - int(1)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2), - int(1)] of - int(-2)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2)] of - int(0..1)) - var4_Function1DPartial_Values_Occurrence: DeclNoRepr (find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, - 5), - int(3)] of - bool) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of - bool) - var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of - int(3)) - var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of - bool) - var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var2: DeclNoRepr (find var2: bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file + q30: declaration of quantified q30: int(1..2) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2), + int(1)] of + int(-2) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2), + int(1)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2), + int(1)] of + int(-2) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2)] of + int(0..1) + var4_Function1DPartial_Values_Occurrence: declaration of + find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, + 5), + int(3)] of + bool + var4_Function1DPartial_Flags: declaration of + find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of bool + var3_Function1DPartial_Values_Function1DPartial_Values: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, + int(-1)] of + int(3) + var3_Function1DPartial_Values_Function1DPartial_Flags: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, + int(-1)] of + bool + var3_Function1DPartial_Flags: declaration of find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool + var2: declaration of find var2: bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected index ec2af0bf23..e34026470b 100644 --- a/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected @@ -1,47 +1,59 @@ Error: Undefined reference: q17 Bindings in context: - q54: DeclNoRepr (quantified q54: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of - int(4, 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q54: declaration of quantified q54: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithMarker_Values: declaration of + find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithMarker_Marker: declaration of + find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithFlags_Values: declaration of + find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithFlags_Flags: declaration of + find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected index a9b11209fa..ca62ac3a57 100644 --- a/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected @@ -1,46 +1,57 @@ Error: Undefined reference: q29 Bindings in context: - q32: DeclNoRepr (quantified q32: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of - bool) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2), - int(1)] of - int(-2)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2)] of - int(0..1)) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, - 5), - int(1)] of - int(3)) - var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, - 5)] of - int(0..1)) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of - bool) - var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of - int(3)) - var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of - bool) - var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var2: DeclNoRepr (find var2: bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file + q32: declaration of quantified q32: int(1..2) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2), + int(1)] of + int(-2) + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2)] of + int(0..1) + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: declaration of + find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, + 5), + int(1)] of + int(3) + var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, + 5)] of + int(0..1) + var4_Function1DPartial_Flags: declaration of + find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of bool + var3_Function1DPartial_Values_Function1DPartial_Values: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, + int(-1)] of + int(3) + var3_Function1DPartial_Values_Function1DPartial_Flags: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, + int(-1)] of + bool + var3_Function1DPartial_Flags: declaration of find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool + var2: declaration of find var2: bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected index 818911fe92..434b24273d 100644 --- a/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected @@ -1,28 +1,34 @@ Error: Undefined reference: q13 Bindings in context: - q41: DeclNoRepr (quantified q41: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q41: declaration of quantified q41: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_Occurrence: declaration of + find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected index 5f9431c325..2b9fc22e94 100644 --- a/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected @@ -1,55 +1,67 @@ Error: Undefined reference: q15 Bindings in context: - q64: DeclNoRepr (quantified q64: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of - int(4, - 2)) - var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q64: declaration of quantified q64: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithFlags_Values: declaration of + find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithFlags_Flags: declaration of + find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithFlags_Values: declaration of + find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithFlags_Flags: declaration of + find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithMarker_Values: declaration of + find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithMarker_Marker: declaration of find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected index 83d36983b4..6e6a4fe7e4 100644 --- a/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected @@ -1,44 +1,52 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(4, 3)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, 3)] of - bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - int(4, 3)) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - int(4, 3)) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, - 3)] of - bool, - int(1..16), - int(1..2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(4, - 3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(4, - 3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(4, 3) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(4, 3)] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + int(4, 3) + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + int(4, 3) + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(4, + 3)] of + bool, + int(1..16), + int(1..2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(4, + 3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(4, + 3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected index 4c87df3320..6b7c3a0104 100644 --- a/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected @@ -1,35 +1,45 @@ Error: Undefined reference: q17 Bindings in context: - q51: DeclNoRepr (quantified q51: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of - int(4, 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q51: declaration of quantified q51: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_Occurrence: declaration of + find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithFlags_Values: declaration of + find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithFlags_Flags: declaration of + find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected index 746ac71107..b71b86b677 100644 --- a/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected @@ -1,35 +1,44 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected index c8bc0918c5..ca15d76893 100644 --- a/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected @@ -1,31 +1,38 @@ Error: Undefined reference: q17 Bindings in context: - q32: DeclNoRepr (quantified q32: int(2..4)) - q20: DeclNoRepr (quantified q20: int(1..8)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(2..4)] of bool, - int(1..8), int(2..4)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(2..4)] of - bool, - int(1..8), - int(1..3)] of - int(2..4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(2..4)] of - bool, - int(1..8)] of - int(0..3)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..256), - int(1..8), - int(2..4)] of - int(1)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..256), - int(1..8), - int(2..4)] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of - int(0..8)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..256)) - var1: DeclNoRepr (find var1: int(2)) \ No newline at end of file + q32: declaration of quantified q32: int(2..4) + q20: declaration of quantified q20: int(1..8) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(2..4)] of bool, int(1..8), + int(2..4)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8), + int(1..3)] of + int(2..4) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8)] of + int(0..3) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..256), + int(1..8), + int(2..4)] of + int(1) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..256), + int(1..8), + int(2..4)] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of + int(0..8) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..256) + var1: declaration of find var1: int(2) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected index aefecdbb37..da172494cf 100644 --- a/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected @@ -1,35 +1,44 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - int(4..5)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + int(4..5) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected index b241baecac..4d0c5c4708 100644 --- a/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected @@ -1,37 +1,46 @@ Error: Undefined reference: q27 Bindings in context: - q30: DeclNoRepr (quantified q30: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - var4_Function1DPartial_Values_Occurrence: DeclNoRepr (find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, - 5), - int(3)] of - bool) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of - bool) - var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of - int(3)) - var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of - bool) - var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var2: DeclNoRepr (find var2: bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file + q30: declaration of quantified q30: int(1..2) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + var4_Function1DPartial_Values_Occurrence: declaration of + find var4_Function1DPartial_Values_Occurrence: matrix indexed by [int(-5, + 5), + int(3)] of + bool + var4_Function1DPartial_Flags: declaration of + find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of bool + var3_Function1DPartial_Values_Function1DPartial_Values: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, + int(-1)] of + int(3) + var3_Function1DPartial_Values_Function1DPartial_Flags: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, + int(-1)] of + bool + var3_Function1DPartial_Flags: declaration of find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool + var2: declaration of find var2: bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected index 4728765f7b..0911577ec7 100644 --- a/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected index e8a886b4ac..4eca399a05 100644 --- a/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected @@ -1,31 +1,38 @@ Error: Undefined reference: q5 Bindings in context: - q7: DeclNoRepr (quantified q7: int(-4..-1)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of - bool) - q16_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q16_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q16_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q16_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - bool) - q11_Occurrence: DeclNoRepr (find q11_Occurrence: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, - int(1..16), int(-4..-1)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - int(3)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q7: declaration of quantified q7: int(-4..-1) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool + q16_ExplicitVarSizeWithFlags_Values: declaration of + find q16_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q16_ExplicitVarSizeWithFlags_Flags: declaration of + find q16_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + bool + q11_Occurrence: declaration of + find q11_Occurrence: matrix indexed by [matrix indexed by [int(-4..-1)] of bool, int(1..16), + int(-4..-1)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + int(3) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected index 1e8a1ef3a4..9b77db8943 100644 --- a/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected @@ -1,41 +1,54 @@ Error: Undefined reference: q12 Bindings in context: - q57: DeclNoRepr (quantified q57: bool) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool] of - int(0..2)) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool] of - int(0..2)) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of - int(0..2)) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of - int(5, - 3)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of - int(-3, - -3)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file + q57: declaration of quantified q57: bool + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool + aux4_ExplicitVarSizeWithMarker_Values: declaration of + find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux4_ExplicitVarSizeWithMarker_Marker: declaration of + find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool] of + int(0..2) + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool] of + int(0..2) + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of + int(0..2) + aux1_ExplicitVarSizeWithFlags_Values: declaration of + find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithFlags_Flags: declaration of + find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), + int(1..2)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + int(5, + 3) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), + bool] of + int(-3, + -3) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), + bool] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected index 6866f7a0e1..7d38ef4065 100644 --- a/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected @@ -1,43 +1,56 @@ Error: Undefined reference: q12 Bindings in context: - q59: DeclNoRepr (quantified q59: bool) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of - int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of - int(5, - 3)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of - int(-3, - -3)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file + q59: declaration of quantified q59: bool + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithFlags_Values: declaration of + find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithFlags_Flags: declaration of + find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of + int(0..2) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + int(5, + 3) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), + bool] of + int(-3, + -3) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), + bool] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected index 9a3470b78d..57cca71f02 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected index 76c7ed6d6e..711f7f935f 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected @@ -1,39 +1,48 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..4)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - var3: DeclNoRepr (find var3: int(3..4)) - var2_RelationAsMatrix: DeclNoRepr (find var2_RelationAsMatrix: matrix indexed by [int(-3..4, -2)] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), - int(1..4), - bool] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), - int(1..4), - bool] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of - int(0..4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..4) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + var3: declaration of find var3: int(3..4) + var2_RelationAsMatrix: declaration of find var2_RelationAsMatrix: matrix indexed by [int(-3..4, -2)] of bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), + int(1..4), + bool] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), + int(1..4), + bool] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/typecheck.expected index cddf27dcf7..1f21ebbae0 100644 --- a/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected index 4e582bd955..83f6630206 100644 --- a/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected @@ -1,53 +1,67 @@ Error: Undefined reference: q17 Bindings in context: - q62: DeclNoRepr (quantified q62: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of - int(4, 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q62: declaration of quantified q62: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithFlags_Values: declaration of + find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithFlags_Flags: declaration of + find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected index eb8a0a4e2a..70376571a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected @@ -1,27 +1,33 @@ Error: Undefined reference: q13 Bindings in context: - q41: DeclNoRepr (quantified q41: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q41: declaration of quantified q41: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_Occurrence: declaration of + find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var2_2: declaration of find var2_2: bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected index 1740a6c0df..d08bdc58b1 100644 --- a/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected @@ -1,46 +1,59 @@ Error: Undefined reference: q15 Bindings in context: - q62: DeclNoRepr (quantified q62: bool) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of - int(0..2)) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [bool] of - bool) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of - int(4, - -4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file + q62: declaration of quantified q62: bool + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithFlags_Values: declaration of + find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithFlags_Flags: declaration of + find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..31)] of + int(0..2) + var2_1_Function1DPartial_Values: declaration of + find var2_1_Function1DPartial_Values: matrix indexed by [bool] of bool + var2_1_Function1DPartial_Flags: declaration of + find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), + bool] of + int(4, + -4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), + bool] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected index 07231f25f2..739dbf5ab7 100644 --- a/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected @@ -1,42 +1,50 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(1, 4)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of - bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(1, 4) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected index 85ed15d0f8..6f79b8f368 100644 --- a/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected @@ -1,39 +1,47 @@ Error: Undefined reference: q17 Bindings in context: - q34: DeclNoRepr (quantified q34: int(2..4)) - q20: DeclNoRepr (quantified q20: int(1..8)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of - bool, - int(1..8), - int(1..3)] of - int(2..4)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of - bool, - int(1..8), - int(1..3)] of - bool) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of - bool, - int(1..8), - int(1..3)] of - int(2..4)) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of - bool, - int(1..8), - int(1..3)] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..256), - int(1..8), - int(2..4)] of - int(1)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..256), - int(1..8), - int(2..4)] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of - int(0..8)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..256)) - var1: DeclNoRepr (find var1: int(2)) \ No newline at end of file + q34: declaration of quantified q34: int(2..4) + q20: declaration of quantified q20: int(1..8) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..4)] of bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8), + int(1..3)] of + int(2..4) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8), + int(1..3)] of + bool + aux1_ExplicitVarSizeWithFlags_Values: declaration of + find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8), + int(1..3)] of + int(2..4) + aux1_ExplicitVarSizeWithFlags_Flags: declaration of + find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(2..4)] of + bool, + int(1..8), + int(1..3)] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..256), + int(1..8), + int(2..4)] of + int(1) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..256), + int(1..8), + int(2..4)] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..256)] of + int(0..8) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..256) + var1: declaration of find var1: int(2) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected index 38da2f17f4..db3ee9abb3 100644 --- a/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected @@ -1,46 +1,56 @@ Error: Undefined reference: q13 Bindings in context: - q54: DeclNoRepr (quantified q54: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q54: declaration of quantified q54: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithMarker_Values: declaration of + find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithMarker_Marker: declaration of + find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux3_ExplicitVarSizeWithFlags_Values: declaration of + find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithFlags_Flags: declaration of + find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux2_Occurrence: declaration of find aux2_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + aux1_ExplicitVarSizeWithFlags_Values: declaration of + find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithFlags_Flags: declaration of + find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected index 0c116dcfd0..f53ad29aa4 100644 --- a/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected @@ -1,39 +1,47 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(-4..-1)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of - bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16)] of - int(0..4)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - int(3)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) - var2: DeclNoRepr (find var2: bool) - var1: DeclNoRepr (find var1: bool) \ No newline at end of file + q12: declaration of quantified q12: int(-4..-1) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4) + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + int(3) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) + var2: declaration of find var2: bool + var1: declaration of find var1: bool \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected index c184cad300..850b2bb2ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..4)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..4)] of - int(0..2)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), - int(1..4), - bool] of - int(4)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), - int(1..4), - bool] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of - int(0..4)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..4) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..4)] of + int(0..2) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..16), + int(1..4), + bool] of + int(4) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..16), + int(1..4), + bool] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..16)] of + int(0..4) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..16) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected index c99d0590a2..cd0ce1fbd2 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected @@ -1,24 +1,30 @@ Error: Undefined reference: q17 Bindings in context: - q29: DeclNoRepr (quantified q29: int(2..3)) - q20: DeclNoRepr (quantified q20: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..3)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(2..3)] of bool, - int(1..16), int(2..3)] of - bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(2..3)] of bool, - int(1..16), int(2..3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(2..3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(2..3)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q29: declaration of quantified q29: int(2..3) + q20: declaration of quantified q20: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(2..3)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(2..3)] of bool, int(1..16), + int(2..3)] of + bool + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(2..3)] of bool, int(1..16), + int(2..3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(2..3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(2..3)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected index 8ac8f428f1..e1438bb62c 100644 --- a/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected @@ -1,43 +1,51 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(1, -4)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, -4)] of - bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16), - int(1..2)] of - int(1, -4)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16)] of - int(0..2)) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16), - int(1..2)] of - int(1, -4)) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, - -4)] of - bool, - int(1..16), - int(1..2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(1, - -4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(1, - -4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(1, -4) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, -4)] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16), + int(1..2)] of + int(1, -4) + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16)] of + int(0..2) + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16), + int(1..2)] of + int(1, -4) + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, + -4)] of + bool, + int(1..16), + int(1..2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(1, + -4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(1, + -4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected index f7e9efe3ef..c440803506 100644 --- a/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected @@ -1,55 +1,66 @@ Error: Undefined reference: q28 Bindings in context: - q45: DeclNoRepr (quantified q45: int(3, 2)) - q33: DeclNoRepr (quantified q33: int(1..16)) - q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of - bool) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(3, - 2)] of - bool, - int(1..16), - int(1..2)] of - int(3, 2)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(3, - 2)] of - bool, - int(1..16)] of - int(0..2)) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(3, - 2)] of - bool, - int(1..16), - int(1..2)] of - int(3, 2)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(3, - 2)] of - bool, - int(1..16)] of - int(0..2)) - var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), - int(2)] of - bool) - var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var5: DeclNoRepr (find var5: bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(3, - 2)] of - bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(3, - 2)] of - bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) - var3: DeclNoRepr (find var3: bool) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, - -5..3)] of - int(-1, 5)) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, - -5..3)] of - bool) - var1: DeclNoRepr (find var1: bool) \ No newline at end of file + q45: declaration of quantified q45: int(3, 2) + q33: declaration of quantified q33: int(1..16) + q4_Function1DPartial_Flags: declaration of + quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of bool + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(3, + 2)] of + bool, + int(1..16), + int(1..2)] of + int(3, 2) + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(3, + 2)] of + bool, + int(1..16)] of + int(0..2) + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(3, + 2)] of + bool, + int(1..16), + int(1..2)] of + int(3, 2) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(3, + 2)] of + bool, + int(1..16)] of + int(0..2) + var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: declaration of + find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), + int(2)] of + bool + var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2) + var5: declaration of find var5: bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(3, + 2)] of + bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(3, + 2)] of + bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) + var3: declaration of find var3: bool + var2_1_Function1DPartial_Values: declaration of + find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, + -5..3)] of + int(-1, 5) + var2_1_Function1DPartial_Flags: declaration of + find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, -5..3)] of + bool + var1: declaration of find var1: bool \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected index 3a3cbec134..cfa116040a 100644 --- a/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected @@ -1,37 +1,46 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var2_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/typecheck.expected index 2fba92fa04..382512ec02 100644 --- a/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/typecheck.expected @@ -1,45 +1,56 @@ Error: Undefined reference: q13 Bindings in context: - q62: DeclNoRepr (quantified q62: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_Occurrence: DeclNoRepr (find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q62: declaration of quantified q62: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_ExplicitVarSizeWithFlags_Values: declaration of + find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithFlags_Flags: declaration of + find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithFlags_Values: declaration of + find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithFlags_Flags: declaration of + find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_Occurrence: declaration of find var2_1_Occurrence: matrix indexed by [int(4, 2)] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected index a4db620275..2d6615a362 100644 --- a/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected @@ -1,44 +1,52 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(1, 4)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of - bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - int(1, 4)) - q11_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, - 4)] of - bool, - int(1..16), - int(1..2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(1, - 4)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(1, 4) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(1, 4)] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithFlags_Values: declaration of + find q11_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + int(1, 4) + q11_ExplicitVarSizeWithFlags_Flags: declaration of + find q11_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(1, + 4)] of + bool, + int(1..16), + int(1..2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(1, + 4)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected index 6390c3c451..22ac8b77e8 100644 --- a/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected @@ -1,39 +1,49 @@ Error: Undefined reference: q29 Bindings in context: - q32: DeclNoRepr (quantified q32: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, - 5), - int(1)] of - int(3)) - var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, - 5)] of - int(0..1)) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of - bool) - var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of - int(3)) - var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of - bool) - var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file + q32: declaration of quantified q32: int(1..2) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: declaration of + find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, + 5), + int(1)] of + int(3) + var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, + 5)] of + int(0..1) + var4_Function1DPartial_Flags: declaration of + find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of bool + var3_Function1DPartial_Values_Function1DPartial_Values: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, + int(-1)] of + int(3) + var3_Function1DPartial_Values_Function1DPartial_Flags: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, + int(-1)] of + bool + var3_Function1DPartial_Flags: declaration of find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected index d28d91abac..4c6904235c 100644 --- a/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected @@ -1,46 +1,57 @@ Error: Undefined reference: q29 Bindings in context: - q32: DeclNoRepr (quantified q32: int(1..2)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of - bool) - aux2_Occurrence: DeclNoRepr (find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, - int(1..2), int(-2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2), - int(1)] of - int(-2)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of - bool, - int(1..2)] of - int(0..1)) - var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, - 5), - int(1)] of - int(3)) - var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, - 5)] of - int(0..1)) - var4_Function1DPartial_Flags: DeclNoRepr (find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of - bool) - var3_Function1DPartial_Values_Function1DPartial_Values: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, - int(-1)] of - int(3)) - var3_Function1DPartial_Values_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, - int(-1)] of - bool) - var3_Function1DPartial_Flags: DeclNoRepr (find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool) - var2: DeclNoRepr (find var2: bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - int(-4)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), - int(1..2), - int(-2)] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4)) \ No newline at end of file + q32: declaration of quantified q32: int(1..2) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-2)] of bool + aux2_Occurrence: declaration of + find aux2_Occurrence: matrix indexed by [matrix indexed by [int(-2)] of bool, int(1..2), + int(-2)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2), + int(1)] of + int(-2) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-2)] of + bool, + int(1..2)] of + int(0..1) + var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: declaration of + find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(-5, + 5), + int(1)] of + int(3) + var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_Function1DPartial_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(-5, + 5)] of + int(0..1) + var4_Function1DPartial_Flags: declaration of + find var4_Function1DPartial_Flags: matrix indexed by [int(-5, 5)] of bool + var3_Function1DPartial_Values_Function1DPartial_Values: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Values: matrix indexed by [bool, + int(-1)] of + int(3) + var3_Function1DPartial_Values_Function1DPartial_Flags: declaration of + find var3_Function1DPartial_Values_Function1DPartial_Flags: matrix indexed by [bool, + int(-1)] of + bool + var3_Function1DPartial_Flags: declaration of find var3_Function1DPartial_Flags: matrix indexed by [bool] of bool + var2: declaration of find var2: bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + int(-4) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..4), + int(1..2), + int(-2)] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..4)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..4) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected index 863061721f..94d4af1895 100644 --- a/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected @@ -1,52 +1,64 @@ Error: Undefined reference: q15 Bindings in context: - q60: DeclNoRepr (quantified q60: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool] of - int(0..2)) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of - int(4, - 2)) - var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q60: declaration of quantified q60: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithMarker_Values: declaration of + find aux4_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithMarker_Marker: declaration of + find aux4_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool] of + int(0..2) + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..7), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithMarker_Values: declaration of + find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithMarker_Marker: declaration of find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected index 70310435d5..2d03dd2ab5 100644 --- a/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected @@ -1,46 +1,59 @@ Error: Undefined reference: q15 Bindings in context: - q62: DeclNoRepr (quantified q62: bool) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..2)] of - bool) - aux3_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool] of - int(0..2)) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), - int(1..2)] of - bool) - aux1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), - int(1..2)] of - bool) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [bool] of - bool) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), - bool] of - int(4, - -4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), - bool] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32)) \ No newline at end of file + q62: declaration of quantified q62: bool + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [bool] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithMarker_Values: declaration of + find aux3_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..2)] of + bool + aux3_ExplicitVarSizeWithMarker_Marker: declaration of + find aux3_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool] of + int(0..2) + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithFlags_Values: declaration of + find aux1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..31), + int(1..2)] of + bool + aux1_ExplicitVarSizeWithFlags_Flags: declaration of + find aux1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..31), + int(1..2)] of + bool + var2_1_Function1DPartial_Values: declaration of + find var2_1_Function1DPartial_Values: matrix indexed by [bool] of bool + var2_1_Function1DPartial_Flags: declaration of + find var2_1_Function1DPartial_Flags: matrix indexed by [bool] of bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..32)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..32), + bool] of + int(4, + -4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..32), + bool] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..32) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected index e61f5c2bf3..eb8b2dfafd 100644 --- a/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected @@ -1,46 +1,59 @@ Error: Undefined reference: q17 Bindings in context: - q57: DeclNoRepr (quantified q57: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux4_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux3_Occurrence: DeclNoRepr (find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - aux1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of - int(4, 2)) - var2_1_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q57: declaration of quantified q57: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_ExplicitVarSizeWithFlags_Values: declaration of + find aux4_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux4_ExplicitVarSizeWithFlags_Flags: declaration of + find aux4_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux3_Occurrence: declaration of + find aux3_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + aux1_ExplicitVarSizeWithMarker_Values: declaration of + find aux1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux1_ExplicitVarSizeWithMarker_Marker: declaration of + find aux1_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithFlags_Values: declaration of + find var2_1_ExplicitVarSizeWithFlags_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithFlags_Flags: declaration of + find var2_1_ExplicitVarSizeWithFlags_Flags: matrix indexed by [int(1..2)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected index f46ba053c5..f40e510582 100644 --- a/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected @@ -1,42 +1,51 @@ Error: Undefined reference: q15 Bindings in context: - q54: DeclNoRepr (quantified q54: int(-4, 4)) - q7_Function1DPartial_Flags: DeclNoRepr (quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of - bool) - aux4_Occurrence: DeclNoRepr (find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, - int(-4, 4)] of - bool) - aux3_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - int(-4, 4)) - aux3_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, - 4)] of - bool, - int(1..2)] of - bool) - aux2_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), - int(1..2)] of - int(-4, 4)) - aux2_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of - int(0..2)) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool) - var3_1_1: DeclNoRepr (find var3_1_1: bool) - var2_2: DeclNoRepr (find var2_2: bool) - var2_1_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of - int(4, - 2)) - var2_1_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), - int(-4, - 4)] of - int(4)) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), - int(-4, - 4)] of - bool) - var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8)) \ No newline at end of file + q54: declaration of quantified q54: int(-4, 4) + q7_Function1DPartial_Flags: declaration of + quantified q7_Function1DPartial_Flags: matrix indexed by [int(-4, 4)] of bool + aux4_Occurrence: declaration of + find aux4_Occurrence: matrix indexed by [matrix indexed by [int(-4, 4)] of bool, + int(-4, 4)] of + bool + aux3_ExplicitVarSizeWithFlags_Values: declaration of + find aux3_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + int(-4, 4) + aux3_ExplicitVarSizeWithFlags_Flags: declaration of + find aux3_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4, + 4)] of + bool, + int(1..2)] of + bool + aux2_ExplicitVarSizeWithMarker_Values: declaration of + find aux2_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..7), + int(1..2)] of + int(-4, 4) + aux2_ExplicitVarSizeWithMarker_Marker: declaration of + find aux2_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..7)] of + int(0..2) + aux1_Occurrence: declaration of find aux1_Occurrence: matrix indexed by [int(1..7), int(-4, 4)] of bool + var3_1_1: declaration of find var3_1_1: bool + var2_2: declaration of find var2_2: bool + var2_1_ExplicitVarSizeWithMarker_Values: declaration of + find var2_1_ExplicitVarSizeWithMarker_Values: matrix indexed by [int(1..2)] of + int(4, 2) + var2_1_ExplicitVarSizeWithMarker_Marker: declaration of find var2_1_ExplicitVarSizeWithMarker_Marker: int(0..2) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_2: matrix indexed by [int(1..8)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Values: matrix indexed by [int(1..8), + int(-4, + 4)] of + int(4) + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Values_1_Function1DPartial_Flags: matrix indexed by [int(1..8), + int(-4, + 4)] of + bool + var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_FunctionAsRelation_RelationAsSet_ExplicitVarSizeWithMarker_Marker: int(0..8) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected index 207cf905cd..ebd81214d6 100644 --- a/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected @@ -1,39 +1,47 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(-4..-1)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of - bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16)] of - int(0..4)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - int(3)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) - var2: DeclNoRepr (find var2: bool) - var1: DeclNoRepr (find var1: bool) \ No newline at end of file + q12: declaration of quantified q12: int(-4..-1) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + bool + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + int(3) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) + var2: declaration of find var2: bool + var1: declaration of find var1: bool \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected index 73b172bb7d..7fe103ed23 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected @@ -1,48 +1,58 @@ Error: Undefined reference: q28 Bindings in context: - q42: DeclNoRepr (quantified q42: int(3, 2)) - q33: DeclNoRepr (quantified q33: int(1..16)) - q4_Function1DPartial_Flags: DeclNoRepr (quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of - bool) - aux2_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(3, - 2)] of - bool, - int(1..16), - int(1..2)] of - int(3, 2)) - aux2_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(3, - 2)] of - bool, - int(1..16), - int(1..2)] of - bool) - aux1_Occurrence: DeclNoRepr (find aux1_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, - int(1..16), int(3, 2)] of - bool) - var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), - int(2)] of - bool) - var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2)) - var5: DeclNoRepr (find var5: bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(3, - 2)] of - bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(3, - 2)] of - bool) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) - var3: DeclNoRepr (find var3: bool) - var2_1_Function1DPartial_Values: DeclNoRepr (find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, - -5..3)] of - int(-1, 5)) - var2_1_Function1DPartial_Flags: DeclNoRepr (find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, - -5..3)] of - bool) - var1: DeclNoRepr (find var1: bool) \ No newline at end of file + q42: declaration of quantified q42: int(3, 2) + q33: declaration of quantified q33: int(1..16) + q4_Function1DPartial_Flags: declaration of + quantified q4_Function1DPartial_Flags: matrix indexed by [int(3, 2)] of bool + aux2_ExplicitVarSizeWithFlags_Values: declaration of + find aux2_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [int(3, + 2)] of + bool, + int(1..16), + int(1..2)] of + int(3, 2) + aux2_ExplicitVarSizeWithFlags_Flags: declaration of + find aux2_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [int(3, + 2)] of + bool, + int(1..16), + int(1..2)] of + bool + aux1_Occurrence: declaration of + find aux1_Occurrence: matrix indexed by [matrix indexed by [int(3, 2)] of bool, int(1..16), + int(3, 2)] of + bool + var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: declaration of + find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Values_Occurrence: matrix indexed by [int(1..2), + int(2)] of + bool + var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var6_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..2) + var5: declaration of find var5: bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(3, + 2)] of + bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(3, + 2)] of + bool + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var4_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) + var3: declaration of find var3: bool + var2_1_Function1DPartial_Values: declaration of + find var2_1_Function1DPartial_Values: matrix indexed by [int(1..4, + -5..3)] of + int(-1, 5) + var2_1_Function1DPartial_Flags: declaration of + find var2_1_Function1DPartial_Flags: matrix indexed by [int(1..4, -5..3)] of + bool + var1: declaration of find var1: bool \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected index 55b5cf5a19..f24c32f1ab 100644 --- a/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected @@ -1,36 +1,45 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: bool) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool) - q18_ExplicitVarSizeWithFlags_Values: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q18_ExplicitVarSizeWithFlags_Flags: DeclNoRepr (find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16), - int(1..2)] of - bool) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of - bool, - int(1..16)] of - int(0..2)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - bool] of - bool) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: bool + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [bool] of bool + q18_ExplicitVarSizeWithFlags_Values: declaration of + find q18_ExplicitVarSizeWithFlags_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q18_ExplicitVarSizeWithFlags_Flags: declaration of + find q18_ExplicitVarSizeWithFlags_Flags: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16), + int(1..2)] of + bool + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [bool] of + bool, + int(1..16)] of + int(0..2) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + bool] of + bool + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var1_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected index 04074bee70..39d69add0f 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected +++ b/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected @@ -1,36 +1,44 @@ Error: Undefined reference: q5 Bindings in context: - q12: DeclNoRepr (quantified q12: int(-4..-1)) - q8: DeclNoRepr (quantified q8: int(1..16)) - q1_Function1DPartial_Flags: DeclNoRepr (quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of - bool) - q18_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q18_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16)] of - int(0..4)) - q11_ExplicitVarSizeWithMarker_Values: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16), - int(1..4)] of - int(-4..-1)) - q11_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of - bool, - int(1..16)] of - int(0..4)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - int(3)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), - int(1..16), - int(-4..-1)] of - bool) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of - int(0..16)) - var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: DeclNoRepr (find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536)) \ No newline at end of file + q12: declaration of quantified q12: int(-4..-1) + q8: declaration of quantified q8: int(1..16) + q1_Function1DPartial_Flags: declaration of + quantified q1_Function1DPartial_Flags: matrix indexed by [int(-4..-1)] of bool + q18_ExplicitVarSizeWithMarker_Values: declaration of + find q18_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q18_ExplicitVarSizeWithMarker_Marker: declaration of + find q18_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4) + q11_ExplicitVarSizeWithMarker_Values: declaration of + find q11_ExplicitVarSizeWithMarker_Values: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16), + int(1..4)] of + int(-4..-1) + q11_ExplicitVarSizeWithMarker_Marker: declaration of + find q11_ExplicitVarSizeWithMarker_Marker: matrix indexed by [matrix indexed by [int(-4..-1)] of + bool, + int(1..16)] of + int(0..4) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Values: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + int(3) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Values_Function1DPartial_Flags: matrix indexed by [int(1..65536), + int(1..16), + int(-4..-1)] of + bool + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Values_ExplicitVarSizeWithMarker_Marker: matrix indexed by [int(1..65536)] of + int(0..16) + var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: declaration of + find var3_PartitionAsSet_ExplicitVarSizeWithMarker_Marker: int(0..65536) \ No newline at end of file diff --git a/tests/parse_print/syntax_test/declarations/unnamed/model.expected.json b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/model.expected.json similarity index 100% rename from tests/parse_print/syntax_test/declarations/unnamed/model.expected.json rename to tests/parse_print/syntax_test/declarations/unnamed-redefinition/model.expected.json diff --git a/tests/parse_print/syntax_test/declarations/unnamed/stdout.expected b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/stdout.expected similarity index 100% rename from tests/parse_print/syntax_test/declarations/unnamed/stdout.expected rename to tests/parse_print/syntax_test/declarations/unnamed-redefinition/stdout.expected diff --git a/tests/parse_print/syntax_test/declarations/unnamed-redefinition/typecheck.expected b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/typecheck.expected new file mode 100644 index 0000000000..2e90ed7a58 --- /dev/null +++ b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/typecheck.expected @@ -0,0 +1,4 @@ +Error: + Redefinition of name: y2 + When trying to define it as an alias for `int(1..4)` + It was already defined as an alias for `int(1..2)` \ No newline at end of file diff --git a/tests/parse_print/syntax_test/declarations/unnamed/unnamed.essence b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/unnamed.essence similarity index 100% rename from tests/parse_print/syntax_test/declarations/unnamed/unnamed.essence rename to tests/parse_print/syntax_test/declarations/unnamed-redefinition/unnamed.essence diff --git a/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json b/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json new file mode 100644 index 0000000000..bb79989af6 --- /dev/null +++ b/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json @@ -0,0 +1,25 @@ +{"mInfo": + {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], + "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], + "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], + "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, + "mStatements": + [{"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "x0"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "x2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "y2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "x3"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "y3"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "a"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "b"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "c"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}}, + {"Declaration": + {"LettingDomainDefnUnnamed": [{"Name": "d"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/syntax_test/declarations/unnamed-valid/stdout.expected b/tests/parse_print/syntax_test/declarations/unnamed-valid/stdout.expected new file mode 100644 index 0000000000..727a34f0db --- /dev/null +++ b/tests/parse_print/syntax_test/declarations/unnamed-valid/stdout.expected @@ -0,0 +1,11 @@ +language Essence 1.3 + +letting x0 be new type of size 1 +letting x2 be new type of size 2 +letting y2 be new type of size 2 +letting x3 be new type of size 3 +letting y3 be new type of size 4 +letting a be new type of size 5 +letting b be new type of size 5 +letting c be new type of size 6 +letting d be new type of size 6 diff --git a/tests/parse_print/syntax_test/declarations/unnamed-valid/unnamed.essence b/tests/parse_print/syntax_test/declarations/unnamed-valid/unnamed.essence new file mode 100644 index 0000000000..6eefa4aae5 --- /dev/null +++ b/tests/parse_print/syntax_test/declarations/unnamed-valid/unnamed.essence @@ -0,0 +1,7 @@ +letting x0 be new type of size 1 + +letting x2,y2 be new type of size 2 + +letting x3 be new type of size 3, y3 be new type of size 4 + +letting a, b be new type of size 5, c,d be new type of size 6 \ No newline at end of file diff --git a/tests/parse_print/syntax_test/domains/int/int.essence b/tests/parse_print/syntax_test/domains/int/int.essence index e8f253626c..b9c8a67a2c 100644 --- a/tests/parse_print/syntax_test/domains/int/int.essence +++ b/tests/parse_print/syntax_test/domains/int/int.essence @@ -1,6 +1,6 @@ letting a be domain int letting b be domain int(..1) letting c be domain int(1..) -letting c be domain int(..) -letting c be domain int(1..2) -letting c be domain int(1) \ No newline at end of file +letting d be domain int(..) +letting e be domain int(1..2) +letting f be domain int(1) \ No newline at end of file diff --git a/tests/parse_print/syntax_test/domains/int/model.expected.json b/tests/parse_print/syntax_test/domains/int/model.expected.json index 40afa43e3c..f4a721fbc4 100644 --- a/tests/parse_print/syntax_test/domains/int/model.expected.json +++ b/tests/parse_print/syntax_test/domains/int/model.expected.json @@ -20,10 +20,10 @@ {"DomainInt": [{"TagInt": []}, [{"RangeLowerBounded": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}]]}}]}}, - {"Declaration": {"Letting": [{"Name": "c"}, {"Domain": {"DomainInt": [{"TagInt": []}, [{"RangeOpen": []}]]}}]}}, + {"Declaration": {"Letting": [{"Name": "d"}, {"Domain": {"DomainInt": [{"TagInt": []}, [{"RangeOpen": []}]]}}]}}, {"Declaration": {"Letting": - [{"Name": "c"}, + [{"Name": "e"}, {"Domain": {"DomainInt": [{"TagInt": []}, @@ -32,7 +32,7 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}}]}}, {"Declaration": {"Letting": - [{"Name": "c"}, + [{"Name": "f"}, {"Domain": {"DomainInt": [{"TagInt": []}, diff --git a/tests/parse_print/syntax_test/domains/int/stdout.expected b/tests/parse_print/syntax_test/domains/int/stdout.expected index 8f4f763148..c9d4057dc8 100644 --- a/tests/parse_print/syntax_test/domains/int/stdout.expected +++ b/tests/parse_print/syntax_test/domains/int/stdout.expected @@ -3,6 +3,6 @@ language Essence 1.3 letting a be domain int letting b be domain int(..1) letting c be domain int(1..) -letting c be domain int(..) -letting c be domain int(1..2) -letting c be domain int(1) +letting d be domain int(..) +letting e be domain int(1..2) +letting f be domain int(1) diff --git a/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected b/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected index fefee519d7..f9e6f65ae0 100644 --- a/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected +++ b/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected @@ -1,8 +1,8 @@ Error: Undefined reference: x Bindings in context: - c4: Alias ([x | x <- {1, 2, 3, 4}, x < 2]) - c3: Alias ([x | x <- {1, 2, 3, 4}]) - c2: Alias ([x + y | x : s, y : s]) - c1: Alias ([x | x : s]) - s: Alias (`set (size 5) of int`) \ No newline at end of file + c4: an alias for [x | x <- {1, 2, 3, 4}, x < 2] + c3: an alias for [x | x <- {1, 2, 3, 4}] + c2: an alias for [x + y | x : s, y : s] + c1: an alias for [x | x : s] + s: an alias for `set (size 5) of int` \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/operators/typecheck.expected b/tests/parse_print/syntax_test/expressions/operators/typecheck.expected index 35a0c1b76a..d253b3b743 100644 --- a/tests/parse_print/syntax_test/expressions/operators/typecheck.expected +++ b/tests/parse_print/syntax_test/expressions/operators/typecheck.expected @@ -1,12 +1,12 @@ Error: Undefined reference: a Bindings in context: - _doublePostFixFactorial: Alias (factorial(factorial(2))) - _postFixFactorial: Alias (factorial(4)) - _aac: Alias (minSize({1, 2, 3, 4}, 2)) - _paren: Alias (1) - _doubleUnaryNegate: Alias (--1) - _unaryNegage: Alias (-1) - _doubleUnaryNot: Alias (!!true) - _unaryNot: Alias (!true) - _binary: Alias (1 + 2) \ No newline at end of file + _doublePostFixFactorial: an alias for factorial(factorial(2)) + _postFixFactorial: an alias for factorial(4) + _aac: an alias for minSize({1, 2, 3, 4}, 2) + _paren: an alias for 1 + _doubleUnaryNegate: an alias for --1 + _unaryNegage: an alias for -1 + _doubleUnaryNot: an alias for !!true + _unaryNot: an alias for !true + _binary: an alias for 1 + 2 \ No newline at end of file From cefc1c94ca03243590dd268ab8207b9350542bae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 20 Feb 2023 12:29:55 +0000 Subject: [PATCH 040/378] fixes #489 --- src/Conjure/Process/Enums.hs | 2 ++ tests/custom/issues/489/489.essence | 4 ++++ tests/custom/issues/489/run.sh | 3 +++ tests/custom/issues/489/stderr.expected | 1 + 4 files changed, 10 insertions(+) create mode 100644 tests/custom/issues/489/489.essence create mode 100755 tests/custom/issues/489/run.sh create mode 100644 tests/custom/issues/489/stderr.expected diff --git a/src/Conjure/Process/Enums.hs b/src/Conjure/Process/Enums.hs index 0431ee79d1..2d02eafa66 100644 --- a/src/Conjure/Process/Enums.hs +++ b/src/Conjure/Process/Enums.hs @@ -46,6 +46,8 @@ removeEnumsFromModel = let redefinedTopLevel = [ name | Declaration (FindOrGiven _ name _) <- mStatements model, name `elem` enumNames ] let redefinedQuantified = [ name | Generator gen <- universeBi (mStatements model), name@Name{} <- universeBi gen, name `elem` enumNames ] let redefined = redefinedTopLevel ++ redefinedQuantified + let duplicates = [ name | (name, count) <- histogram enumNames, count > 1 ] + unless (null duplicates) $ userErr1 $ "Enumerated value defined multiple times:" <+> prettyList id "," duplicates unless (null redefined) $ userErr1 $ vcat [ "Members of an enum domain are later redefined as top-level or quantified variables." , "Check:" <+> prettyList id "," redefined diff --git a/tests/custom/issues/489/489.essence b/tests/custom/issues/489/489.essence new file mode 100644 index 0000000000..db31af84c7 --- /dev/null +++ b/tests/custom/issues/489/489.essence @@ -0,0 +1,4 @@ +letting T be new type enum {A,B,A,C} +letting fullday be function(A-->1, B-->2,A-->1,C-->4) +find f : function(total) T --> int(1..10) +such that forAll t : T. f(t) = fullday(t) diff --git a/tests/custom/issues/489/run.sh b/tests/custom/issues/489/run.sh new file mode 100755 index 0000000000..9d0c59b992 --- /dev/null +++ b/tests/custom/issues/489/run.sh @@ -0,0 +1,3 @@ +rm -rf conjure-output +conjure solve *.essence +rm -rf conjure-output diff --git a/tests/custom/issues/489/stderr.expected b/tests/custom/issues/489/stderr.expected new file mode 100644 index 0000000000..8639ec1866 --- /dev/null +++ b/tests/custom/issues/489/stderr.expected @@ -0,0 +1 @@ +Error: Enumerated value defined multiple times: A From 193e67b4c16f64a9b48c1a2bf5928cd221964795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 20 Feb 2023 12:33:16 +0000 Subject: [PATCH 041/378] fixes #460 --- tests/custom/issues/460/460.essence | 4 ++++ tests/custom/issues/460/data.param | 2 ++ tests/custom/issues/460/run.sh | 3 +++ tests/custom/issues/460/stderr.expected | 4 ++++ 4 files changed, 13 insertions(+) create mode 100644 tests/custom/issues/460/460.essence create mode 100644 tests/custom/issues/460/data.param create mode 100755 tests/custom/issues/460/run.sh create mode 100644 tests/custom/issues/460/stderr.expected diff --git a/tests/custom/issues/460/460.essence b/tests/custom/issues/460/460.essence new file mode 100644 index 0000000000..7dabc9bbd9 --- /dev/null +++ b/tests/custom/issues/460/460.essence @@ -0,0 +1,4 @@ +given n : int(..0) +given n : int(1..3,9..) +find a : int(-50..50) +such that a = n+n diff --git a/tests/custom/issues/460/data.param b/tests/custom/issues/460/data.param new file mode 100644 index 0000000000..40ac1fd9e9 --- /dev/null +++ b/tests/custom/issues/460/data.param @@ -0,0 +1,2 @@ +letting n be -5 +letting n be 1 diff --git a/tests/custom/issues/460/run.sh b/tests/custom/issues/460/run.sh new file mode 100755 index 0000000000..43ec2e5640 --- /dev/null +++ b/tests/custom/issues/460/run.sh @@ -0,0 +1,3 @@ +rm -rf conjure-output *.solution +conjure solve *.essence *.param +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/460/stderr.expected b/tests/custom/issues/460/stderr.expected new file mode 100644 index 0000000000..e4acd696bf --- /dev/null +++ b/tests/custom/issues/460/stderr.expected @@ -0,0 +1,4 @@ +Error: + Redefinition of name: n + When trying to define it as declaration of given n: int(1..3, 9..) + It was already defined as declaration of given n: int(..0) From 15c4373e0ed527c6567f057f84630d0e30bf9df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 20 Feb 2023 12:36:16 +0000 Subject: [PATCH 042/378] fixes #457 --- tests/custom/issues/457/457.essence | 3 +++ tests/custom/issues/457/run.sh | 3 +++ tests/custom/issues/457/stderr.expected | 4 ++++ 3 files changed, 10 insertions(+) create mode 100644 tests/custom/issues/457/457.essence create mode 100755 tests/custom/issues/457/run.sh create mode 100644 tests/custom/issues/457/stderr.expected diff --git a/tests/custom/issues/457/457.essence b/tests/custom/issues/457/457.essence new file mode 100644 index 0000000000..8b7b0d1876 --- /dev/null +++ b/tests/custom/issues/457/457.essence @@ -0,0 +1,3 @@ +letting b,v,k be 5 +find design : mset (size 1) of mset (size 1) of int(1..v) +find design: set (size b) of set (size k) of int(1..v) diff --git a/tests/custom/issues/457/run.sh b/tests/custom/issues/457/run.sh new file mode 100755 index 0000000000..7f60e11747 --- /dev/null +++ b/tests/custom/issues/457/run.sh @@ -0,0 +1,3 @@ +rm -rf conjure-output *.solution +conjure solve *.essence +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/457/stderr.expected b/tests/custom/issues/457/stderr.expected new file mode 100644 index 0000000000..bc1a261527 --- /dev/null +++ b/tests/custom/issues/457/stderr.expected @@ -0,0 +1,4 @@ +Error: + Redefinition of name: design + When trying to define it as declaration of find design: set (size b) of set (size k) of int(1..v) + It was already defined as declaration of find design: mset (size 1) of mset (size 1) of int(1..v) From 7d9d491991e75b21106973d342eaecc9084562ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 20 Feb 2023 12:48:59 +0000 Subject: [PATCH 043/378] Added a test case capturing #513 --- tests/custom/issues/513/513.essence | 7 +++++++ tests/custom/issues/513/run.sh | 3 +++ tests/custom/issues/513/stderr.expected | 16 ++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 tests/custom/issues/513/513.essence create mode 100755 tests/custom/issues/513/run.sh create mode 100644 tests/custom/issues/513/stderr.expected diff --git a/tests/custom/issues/513/513.essence b/tests/custom/issues/513/513.essence new file mode 100644 index 0000000000..9542a39f05 --- /dev/null +++ b/tests/custom/issues/513/513.essence @@ -0,0 +1,7 @@ +letting N be domain int(1..9) +letting s be sequence((2,5),(8,4)) +letting l be [x | x <- s] + +find t,u : (N,N) +such that t=s[1] +such that u=l[1] diff --git a/tests/custom/issues/513/run.sh b/tests/custom/issues/513/run.sh new file mode 100755 index 0000000000..7f60e11747 --- /dev/null +++ b/tests/custom/issues/513/run.sh @@ -0,0 +1,3 @@ +rm -rf conjure-output *.solution +conjure solve *.essence +rm -rf conjure-output *.solution diff --git a/tests/custom/issues/513/stderr.expected b/tests/custom/issues/513/stderr.expected new file mode 100644 index 0000000000..839c9722d5 --- /dev/null +++ b/tests/custom/issues/513/stderr.expected @@ -0,0 +1,16 @@ +Error 1: + In a 'such that' statement: t = s[1] + Error: + Indexing something other than a matrix or a tuple: + The expression: s[1] + Indexing: s + With type: sequence of (int, int) +Error 2: + In a 'such that' statement: u = l[1] + Error: + When type checking: u = l[1] + Cannot unify the types of the following. + lhs : u + type of lhs: (int, int) + rhs : l[1] + type of rhs: (int, (int, int)) From dd5a27df138af2ccbbb970274c2b8f22ac6b26a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 20 Feb 2023 15:08:43 +0000 Subject: [PATCH 044/378] Update test output --- .../declarations/enums/lettings/typecheck.expected | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tests/parse_print/syntax_test/declarations/enums/lettings/typecheck.expected b/tests/parse_print/syntax_test/declarations/enums/lettings/typecheck.expected index 89d0406e11..6b3f39ea48 100644 --- a/tests/parse_print/syntax_test/declarations/enums/lettings/typecheck.expected +++ b/tests/parse_print/syntax_test/declarations/enums/lettings/typecheck.expected @@ -1,5 +1 @@ -Error: - Some members of this enum domain (y2) seem to be defined - as part of other enum domains. - Repeated: d, e, f - While working on domain: letting y2 be new type enum {d, e, f} \ No newline at end of file +Error: Enumerated value defined multiple times: d, e, f, m, n, o, p, q, r \ No newline at end of file From 0b559382029f98f975cff248fc3d2ad360f8ee4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 22 Feb 2023 11:12:32 +0000 Subject: [PATCH 045/378] Update SR version to 692790eb2 (2023-02-18 14:39:52 +0000) --- etc/savilerow/savilerow.jar | Bin 820683 -> 781092 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index a1217639bd8cf7e7f96d68c3f31d57d94d923a90..d4e574664c5ad901f1cdcc3e35a5ca1d99130dec 100644 GIT binary patch delta 300593 zcmZU)18^Ww(>5C0wrv|5+qP{xv$1X4-WVI(wry-S+9aEQ-}k%q-Fxe=nyRjz(^WH7 z&*_;y&(l2>!&bV=jHE0F4uJsz0|Nu%tD~uzgv1N+Un|%2Uz-d{@n4&PN(+nEEDEZO z58?AKEJFna9GQ+{p)1X7Da3}sqGoLUvC(M-SOVyc>zDWML zuk_$_E*)yk;r}d!JNHwaB$lg_dT!}V;4IhA>FeY30ly!O%N&Bj+Tp$9fUoZKEVfC5 z>!&XUnka&aIK?=m+tNCt2Ia6Ew}%dsI!>`ZPPL{ykb(}55R0CatU{BCskmbj=|Y#y z?BsyECFGYu$|QTOJ{h*-pXT<0gO;o28EblCuz(i-f}0$?O=D=0z#`C3W1)11TV}A7 z%<{XpPYm-YGm&-j9wmVy^vZF`tx{f>nQ(K=bF}qmh`i6&e3h3pf0zw!062c01>YBBk^dt(A`v~OfK|6& z%Uw(LbFbX=G$Z19yN*QNXpogx7o#j(`I8_Ykf6WwG?v-RYG1!+5+|Tuv*ECkHv`om z;QU|`WL3|+sIBHsoA!j!=M6GaNt{J&78v`^dN4+junE(Le2h}wqoqySw-!o8`%CJE z^oh{y4ChN$dJtci{7^6XH~YBZC3vvL(c(5P)g0;575E2&&B-5FhzrQ$&bI}%(!QrC zz^w(UvAXJG{DVv)R9r14`vYE;ab0Y_I?Ok*PPaoUM?K~@i}lJe5l2n=Zx-_vj^gmT zzlIpKCM)fqhg+*avdxFgJ%*AJ3WhN$#dn5pR1Dwg`kNy`Lcka%!K}dqv>9`SJQ~CXPZe>n zNc(C>uq0)QQfW{u5qs?&9QsT?Pjmj?UMTRx74a zywt}_P9hF^PhCN<(087|kO zmu$@3gV??0AVvLs6%R*BW=`RC604Nb&b>HdFBE>PRYX~s7NV>kI? z?*1Ic1_s6AGzv*c;-7;vq1ePw;@BIyJmaAsLixDF1iywAzsC8vMCjDBlKw6JW`5k} zGhcB~XmMJpZK<`!pKo0M*e&JBGN>TNO2`%Qrp|oN_I+eS#<2(DQTRVd-wkJ8RDyzl zH2g#R|3&)0pSK`0IJ}g=ND?5Rbkw?Lwf%{as~7HYqM8JgP+Dc zh}=?Xf?raTRY}a)fD^#pfc;*=r4qZNQO; zW!q`ACSf!^HMq~+2d^6c_3Dx@1c?WNVE`%9io&&#;I#YCHgen~lhd~tlJu{9=kOKY8O-Lu`5Rcp*@ zSF7hzm;aaFo*%mt6*|tx>u09VORw7;@5^@c$6VgW@8*a=dGY47Bf-+d>Lj@e1iX>d z=9TsxZt{Hq{&`xv*QaIy*8;D#pZK>FHfvRy20f=M`-xof-%4SY5+Q0ubD&m!Z}0pbS-Bpd_z9?cT{ z@+OyyCoT;$9s)Q&nz3WULN!uMkt!jhbr{j^k8~42^iqI?pk|2&Z!UGiOk7L5B`i&Y zTv=(pDwQg@&PB7283nbJaU#94MwdQTqkf5^+SoPZVG)E2oUor;k&$}915RPZI$Lo} zg>osg^hF+Twf)W4BsnAB10$T+fR)N=)XmhKUsvl&0=ltw3@dt^&d4{-GM3Xw-P zXB+b7t~lRf4eEz0?hNV^0p_&Dte5bToSTCj ze7(iw%M}Z&5F?vc{JI}1UxkXKF<-cn{Z@(v66?z1 z6_ws8*hW1q?RGl-Ya#vPL1_;-I~M@5r{qwtu{gtK{nCbMnD<7sKZak`!nfejr-6F; z`GS(Aj0^otK{U8XFZfUEeAi;10Jp{) zW>j$>Dz6tk$LXf=wE0{z&k^mhWbPRn%zFXnI<)r?!Exb2Qw8ex-^ivWW{mr=&jrvp zMW$?{$Hu)1>%o7}=>+@g9mpxQPGpQ*u7grB6}J_2{p(9?*dL?DYrC^zU~? zf>orpi^^LDxCyLmCrQOX)-<@JGt%io#Whf$2Y zBJ#rZOX#Y>EHLpE)EJ|u1+pzhESqPK5s+_7e1c-ata&o!v{|@0g1;#Q=_lXk5?SeU za%wcAbwA>a0`fDLdW4ytm;W zL^AJ}8?kHf{3x54kj(&2c8VIaSULY7u8uYv%h9Z-JYceYS>%3ozA>Xme;HP+T_Doz zCS0ORI#^>h1Irgmu3RX5TQF9OIlt2-frSeP73p7jLQdtJ*OX4p$`;+sJ*-`j6}^-g z=dMfq@!Ld*Q9WpIx|6Hf*4QYy92oC*G1Tl0EiO6OK~8@3f7OO`-gfj${lNP*;=j5Gxb z)3451ib<1lQV;?%Box*d%sdUxgX3d50y$CRSL6P)VEfeB?E3~*X+l)~s&AP&>{-?5 z6k{*CxZm+LD64=;9p`LU?gT{^^+Uen_3C3pYXQkK0@Q%|NT7n0>X-ZM8Ca-%0xDs6 zRqZ2o(Q=`Si>OYU>uc)lt`MlDfIfuv$Wf>G5iDN@+h8LLQdLGc7-%CJhz<;L7-{XK zE2j*}zNbNqn+WrKBQqXc&T2_mzmkB=8C*WXyVvBJq!eHcalTOcpiW>V>!AR0aX{%MH*It6V!nF3#mBV$;$rubd)x$LJA1D?=-Jh7LFY<>nqltP%8wE2wr!nVs?1 z74?v`*su@1@rR`J3)o8RlcUec14FC26xg10z++zXfh@@Xj+FiyGWG8K931nsoqc$% zcAkHVwX=OYPGOA*27aUWv9oY|4(^+8ujUaRtO97WABN61c~2c`@HL!r^7!N^=K9ll zh)*1Q@HJ#qg1l~`pk~Wly~*)89V;|)eAlZtv!P#wykzrX_p;qCYaZBvJx#tFiGmi* z2?&Zq)hQ(H^A4@fo6uWtc+kvicOd~a<*yu8tSx4ox7rp|l0dS4dOCOwCRprHDotxH zya!m|%59`*Syxj>MK?OI+VuPT@4rz+bQ+!A6mwO3lh?M3oqgs;(8vR@$Y)QAk#DX2Z58hzYWdrg~m>}W3wsz zxDYi-onJP`<`-aCw0l6iF=9KQMCxP}{SIWCcTEwv9wBHUd96Fa80%i0PMM6k31FJ` zng;rW@vz5i-cLo~|xu2?pN{(Z*WVMUgE4-5e? zI+%CK+xN(sZGR*@|EpjqnuXd4L*-W}9+%UHthKezyC$ag>X`Qu?SSP$DnBHtb!}Q9 zcp397#R28c+^Bcz*>7jm-?tQ7kQ+%*577qknWca@Kd%_b7GYnqe4#7vorr9oZ#hR{8AK&u1=Ss^*g__m zkqJuToVA8-ru!i>B)^~uHg5m&0?{Ax&wt?WEEb75-_y_`yN|J6hkA zoB^I@_KSq35O!SRQ)a>ZWabkHL=ujO$VuZ%uwK5fsq8h%XT9*{o@3@zts~(x-UL$H zN*VeXKXIecH=7XX71%1n7kFb z;&KoV4|0S#(9WjJ#mvjJzG@o)y?7WAQ)xykS`xDZv@9;Uqn+=cgT3;#Dcr|}u9pFX zXDTNm1^>`Pb}pN8S^};t7`v!H2X{m)q-pEg-rdY3t+M1a*KKOvu8xPk9QQQ6qw$JE z=h5Su%|o|0$CM=-rXy}xXw%7oK7xy_bPUgAXv9dxs04o~_E%qt4(xw6Z3inyK32{Vx|NPnSXiUG|GMulsCD#WX5U9_AVzGiSc!quQw z&&&_LfPwOGtmfx|TO3i&zDR37M|o9jN>c_I+h$`ImT>@)OEoPL$uQrOP#yBlFRNaAiWnxhq`oh=?SVvwB=G#F* zm*bc+SP(4;&F1|(5p>9u2AGIH({dC+jSSzdOBhki+V>9>cFandAYzuNh^jak5APvRlH755$Vw1$KLhz8~=cs1~vr7?o?F)FXAZ z=$v2*Nbr#daVZ^u`#0$WahFn>$EN9PRvs%V@9QFrPIqG;7M4bVF363YK3)*dU*X=2 z$E<0ji^q$UQ2vhmiOCBqs6UuJ_`~KH&JnbQ$9*=%J`WVlvW#An9kUuWX<|&&SRyr5 zK32^mjdE(cpBHqX^c(Vb;H_qX~SY2`90b!lZ{jH65s>D&B4|N-5v3 zwWqy_NvbFwkHBh7@Wl;XRX8neeW0{qez`UY`gbEIx1E9lliS#Otg^Fn$JC`A)F;&y z1U0GTwb^EMe6br9Z@6-;59zjW)Jp{v7lDU`YO0Hj!{-$rwG!N0i>A{*k2e%_plPAI zjs^dacXISzK&@9L0aPdqE^Wv6Zg#{rt~{6o*`@@wKR<(ANA4=pnaWt3?1oN#N&DUoc*0XO4^PM^mIR&n@4qD;mcci7Gg)#I9}{$~+gPxZMjf&xEN zcf~WnFjwA}QnK%4Pp1^!Y}UY4m{D>~T}xg!6PAu0%}s<@jsg4j)J^ z?80{PgHEe5OoB&N-gBH3`1TpX(Fs9scbp97e}hxXN@idxTJL)EGsAON?rcYf`}_T$ zBv{fjQMK2R@_RY?gA7E~C@sQbC+U+PKbamE4Bf&$omWU!WV^)N5nGZInEZ6|2`nj? zey*zCgBS=)-+k+DN1DGCfgvouyDbOyh!j@z)mAv%KZ>hi$q^Ria~=yvbn^E*IuZ$D zUVJ;x4ZD02slHupL8%OepChf!aNunM$a|}vO%qk?w-ikaB6!HGUdXCK>H2Ls?oF=k zg&Z%;@t)ALkVal+bFY6upJN;Rpcu)=RcOza1ek!rH+}gh zf%NnT9^DB_jAPj4F?8DL6B-UocR{6ck$g$ydzaq~T4ZA07nJqo89saoV6kqG4+7y< zu1s@>{`o_OLP;6-0*?E9hGXzN!|-nmhSTl$6aM(S+aq#5%*;pcZy14bN+)ZbS;9w4 zAl$l`VHxyk{^5rwX|nVUn(4r!t_696ntzYTg*iIq^8B&S2P|eudwmb35P-hbg((f%)4x%bdt{dms1JL2w6G5wJn4g-3i99!dwQ{z=b zgU1}bo+&O!-rgt|`2q1~KpR6p>qJX$zCquB2UOEPVJ`j96urqh3AwbuTKnpi0Nc$HSo4@o^EJ%N-)1q6So!qF-X zJI8?1GWjd1U=JV1rnrWm&lfKyZ_$>x2c`b5NbV?&Di!(ne4L+he0@@3A3||w$kt$^ zm>)%{nG%;35G@+^(LHzPnF+#!=QAbP1}bE4bsXmqqn~oM3j|GXYCi}VPq%F5&v?$i z@a*~}%b5qy^KkZ7Sn@$~#(XSjc z`3VnOh6+1!uFRtA<};`>(TDtaHxDjZFeO_er$U;SgK^qD`!3o*fC(3M0{MFj%vYl^ z^2Q%emtED;?95GC>r^$#l`M_!@tns(Xh!+6QbFh26_6ITh*mPLky^6y?drvhX%T@K zTQZa8c~|vkf#J}XFb>h)&);V;UOPMptFk!d3`GbQRhWX4)Epuu)ReuS-@hzzz0euR z>|Kk^QUHZ@^WE;#`%m@mIPREJP!6>+SG*Yw-D~o^DPSxFo=tf83;5N?&{@OK*^1N& z2>(0O03(bQY!;9TT8arGGY~Fc@eb^19RNXd2T~+I`k`hy)=L5T?XA%mgCpl~T~J4B z)kr|-VLy5F`y6Y`7Kn>ca7Uct_FvYowI*sxnenkP26OgMcTs7rOTmD_0-_r*xr+g5 zi;S{WU3z|bZdCcKx=redYQn-fbI1lF(|EfyfZ8_V2ciq^H!e8UIJ6&}Ik|-!Rv(>| z3ob9_O|IL5v?ihY6eeZqlKFcm<_(beBvcsTa~;#RdDEL7H}Z^c{GYXX$)DBjsZa<+e+<+YZ%nQzhKM9i z0i@CjD5ZdlNH@v(CWHv?5Pbpn##S$Umx_)0xE_t#0!Dk;YilAYhVTd&W$w*oS6VfQ z9M22uB;KLu9mHDs`o5=YH`aBLJgk}_L(=}ZUt-LvK))ICJrA_wgDHC{0f~f9UminmF%zIb6;Z7 z#Vgq|g9LJHUi6!tFdeq3e72E#jLZ%L>WNFQ(V8hkLQb^}zG?Mryp|0Cyk$Bowsh)t zmD+V>E|&<|wM0s-m-2iff7piP*S^aZphj4GsK%tBRq zvs41P2)EiuL(2nwmmE*PTkHCAscK}Q;W_z8${`4=PQA3gu=DbQWfs@-1B1jL!d#p1 zozyJHBiK+~_Ua|Zq>iK^_0f|49EA#>!-KPPh4WZt&1CCpLE5npPC%<#s7A!iXMayq ziRP~=J1k0C=b@0QvMKMxrh+B^tEbGb)vkjS!O|MNePluPYR6Wfs99c?n7mMXBJR!V zLz381(engG5}b8Wt`3KPgx-m<+?%-M>D^~2@cHJ9sA0PLXM&5ju#}qscTTT?sja~= zW0GuvgKkvOi{4Nz$G4^ByvE7S`>jXoB3~iKQMVG`B8M_rlQOU+t;a=}VW(gwVa?yG z+FpZW{DM|zO|K0=mT>(bsA1fF*XS&9D~&iLtZ+#*K>k5ey^C_C(cZc{BTj1ymMK7YR=rSJ!tLbew?4daFBVF_J|Nx z1AP{|c_l;5SS4bHQb6S{eCQ@ER+b=^Ek18S(6~j3ZPEo`QBBBO2rzCTj-@IzBbF(7 zRAou-gW|yzgpouJS{UZgzf+k{qdh?is)qm+OHIsqZH>5wE&gk*D?9AS58aoMO%d zQ^Uq~4q10!R>&BW{~&?A8Gw9$F^+jr`4BF&eY%qdiiuTo{xI{2eR4OhNSRlD#qE7- zvpJr@g1PkU9oii7&}_AN*6a>{1L~%IElK-95QSsyXEuk@01+MDyJPIoPpNw zEUbwI7Qz@~S>>)FUa>*odkZxyu&|EpzZJ)HY0708PYhH8P30%msn{XSRZp>Q5rxPyn5HaZ5%-vO<>o6q|josM}hY_`SqVL$C zm=?;IuT<_8SCyyF5hahxKlQAoF)s2z^mo>u}5D48t*S_-dNzRV3z+NJ2vw;W7fOuO;W~6aAkC0;yRukD zI=vJPR**KAv!+94dD!V{_C{Bgn~+%-L%o4UrO%}N8l=tQ9zJr+Gp%e#M!|}zNGjnH zSU7^SeVpRvVdr%miD-G?k)vVlkr;_+k_(!ge#T4bvcXTMb-8{hRv73q+e}?WTbqtb z7ooPvM9-sLRfE`!MiR;2QT1Mr5QNk1MkXTQS;xCxlwWcU)+IwNfVE{}4OS}_7m3la zMaqL9q_2de=G4t|M1=Fpqw8wSSS~3B9FsY?!~SS?Iob8tPQ+CzWUf=oZ+D5h8GmFF zdF)CxOGz+0l4lXnH_Hr*Y1JsV5kvRjD7*0AYOjJCq%;M%I0P@>Q_)-wD~Ke6xioq~ zVX7Z<{b6t`J{B?m8&w@!*@0eCid-YQdoE+jUCF<*1glAbuQADb$e3iVnsdPp*jLmY z_uck^=y+sACmc9FKbh0zJCR0A!`49 z;geN7p>&mZj^$v2eR}3Xiushmq+*Q-X>NW}+VSrg z^x9F1im!gyO1iAI?!A?Ho}&gAogE@1FdQ|1K1BY}xfd}8qpTiVSUUO|^3lzY?m;P3 zbeJ+I(cd)AeO78B8Q`6)iN_nz<1IU~^op_KG;gn`6kU7sGn~;k-<#I#AE9udJbi*O zA?rb%g7y9f*ByqrK$A7*tPDFT@}7+9gwxMjUj3~3H5c2B?(`uz_*YM73F%}Cn6VBdqXaX_Xs$I6fR;WW#-{YD6u0o&+R0r zzOqA1lScaqW9pc|sI>iOJMW#CDZ0gu!Qc}Ccf45^Si2;^BEHqAU^c!qTiHouZqHIS zZm_OODN!ya7_sHcpyy&lkFJ;6wSM}@C3l$DM;37>U#P;A(kgc@M9N z@a0LJYKATru#wv~DQnE>I)*jau*&p3Jx@J@=PuSXwLIa?sw22E#ZQUqa0w+l`He5Q z+d!$W@Kwla!j??2mjj>B{S0PxcgyASd!pRgohzT3W0gk|0x`#hwWt#7tbdm4H1dET zuCzRYGq~p_n^89raKDbey{ODj{CP5R_hTsbQV?8@U*MZ7VfI~JvXs0z4PY_F=4&(C zx~*AmzeDx;gK?OEaL04|VO;;JB%9VrKacN;)1t>Hab zh$bEG$_p;opI_I4jydBnhy*kewQi_)>P|ThL5Kz$l5+_W}@5K(cb&3_2Ys7(7;aDqyo~f>zEG3 zKsuXH>?THhU;vuU*2!#3fNopsjsWkN{>yQ8yc;zJ61CM;MU?z-cV-m&&cgzx1aGGD zB#tQ(tGqi8yN$2|l7C^~Ovtbosu4b7VRon*yrR+v3bjY>hAy=?qA=p3H^Rfvepg#f z3c|b3&4oq3vVDqV(8k}Hh;jsbJ5<;mX^pwq<2T$UP$QHqSxOss%kj)y*zg*BHmF+I z8j7mel?7F*R6OjwA&BVR(gJnyV&&3Z<6^O-W%^VH4?uTK-oEa=uGjmY>%Pk_b| zlKn6Vpu;O3iHw?Q(qa;dvO6I!*~uqqj4U>0z!UCgE@S~V6DQu>Tb~R2kSsAoR+kX{ z70FPPHR^1{qaW7{5HuaLu3-=ifyQynd8j*VN{!Dl<)-HQd{A2ZbOQQ8aSu zTT~?B*&wker5sd44@-rUWrabHh}N^SBV?NXp;nH!DdrPXS4ysaIp9tPg$tY#HjLki z^ju81H_A9!8wxhUUGF-9j%xc6LA?L?5*8fbuH&E34a(h3tb_sgObYeRqIrZ`J63`K zJhMW*zy2`xadQa~y!M6bi(Y!H+-8aRAt5l-SP&owhUpUEBz?pir6Ar#KUs5zZa+f3 zfm^}boo}ip%$OyPPHIrjd`De z+@N3X@t%1<#_isBc1SJPZWEz+Zi+<~P|?@uk+S}^d8oTN!V}saZXeW}%ZO4j?9)3X z0FPl4Kc|&GtzDlLRGZ~=ob^`D;+BLQ{#xyAq}};8IvG}zt0~mu133jU#SZ}lk`MP9||9xpSSEB`SbUt`x~ z&ZyUqe8Zs&Ir`icIV(yU)v^j;{08`o{GT!_eF%>o4i*GNANBuRX8otBHsgR25-%lw z4FO;>vo~>bE7OMeS3gPnD#+r`nm7&*4TXS0llQhxmid+#LG?W}R7#XcdQdNv)GY;J zntWCsOdIp2*yGBvF5Nan7gJ9MlfIHr*}qV4Yo$%M)v>*%bye5s=C%~zk5EwgfLRePPMz_ce*Uywq+he#V2D!RMo?lnBlKqNB; zg?3G~-Zf7QOJKLvIQ!Ba?DNdEX$-`BIs%(0`Sq~5dNh1F&1ox=JUN4Im#@d!<)7%X zZtZ~Od(F^b$vke-m7@k2ni|d5U`!yt1C`EKbU>Qp`T?@!36t#6p75+NTJRhfhb7oP zx~sY^31xkkjiKYH>nsJ&RzWIhnX^dcc z24(SU3F9&^d7HEwI`2 zeP5Q55jN~2oVv2jhawxVQ99R^6xwk`Qbjdbl2C4V$Y)^SyXv3|^>5KP?P@dJ^ybbu zIcUMZ<21$^r7h>yBeKCu*fQs8^;$7Ee0=k`2?wo2Uxh{Kx)v8?gf(e_yrtB(zrzN* z!*=V;5LdI^(XlIv#d}3raGroSE3WXN{2hm0=~RbaBK+(1O0yJc`q{yui1=3~_E5Lx zc)7+fkw#};b-AakF*Fn+!mars+#!ECin}z}MYje@9K!q8LBvj$c{{0s_`p}T#o1$$ z^^c-FC_t@-=iCCw-#%Cbpsk-(;?N+q#Utef9!*LxG@lNAK zFBZQ;;s^S<$aCRdUE9pJtfv^xbhm4du>50`aky~OSWFrhHF-8%(O)@6a3bf&e0RuP&m(2lGM}P84Po zw?jfaKSJXDT!_u&tL&Z;-%7o-fA*3hZC0;p%Iw*>NRNTP8WKovTcIg3t`Ho(@zfr{ z5FOg*o<@nsI;Yn7mu_Gu{T=kSDIrW~Ur5D20kNiK4BpSZ=$mj)7SqtPX!j^og7sm0fpO4w-^zABHP$@rL= zx)y}z?~)My6vY!)O^)X=U|j2AA|b-~m4MH=mHPys9xc*Q2L=~xJ_P?R$L<`UXY8Gy zrVOz~yRV0TFIMHZT|DZl+C#rRoV17Vixs~*6m&7vfCCH{AJ`042y61Bh-`K&G#oa< zxb0K9KIz`eR)dW0wOYaZ%$Ec5iEc*?Z%2~{8ZNvIkktDB8ltnRtLR_BN{Mgb^93^6 zQI6IV4c$vFn|cB3k-sB8450&u9Of`i`ki#d(!l$UoU1DJwGaBc5ti)V<$;1F(v=S% zibzLTJV2xPz@oAVNVVZRN-}u@)k41Zdesf7G`hcb`A9nFV(8G2%k~$DX;25Xkzd*v`{7S=##4j ztml(qNV%uZ)5_#$6pIt0nu^K|%+pyt95@L}hd^x547x+2I0gR6`b2$7h^vmateu{8 zImUb9^4qN8#!j{&g?Z1SEGiC*&O2? zZ+mTc7W2%FbbClL>B}R-NVia>K3yXvR%eh$NRNPwzaWB+bCWvk%u?2CnzHUtte8?6 z3$WAA=0v|TI2tq0n?H*>goV)YkmMmH2YEC+ zf#8p&wL`~5tb)YVNsEGyV=k8c5rXF2Mu~10xdNiEXcb_c7Jm5*?_lGZSXIvaYYFxJptMj=U-YT=p`jPqcH@2)I*1&IBEDrnqDY36K|99b}s zyg!6sOIRnYR#2XuKBt!v$AvF|`vs&6o4t+w$xFYawn5~{3Mf1 zlqwn7PGXNOkZo1OpximN?9F4G_odc5tBTFkW{EoW7Gt~;u2}89nXT{h1NPsj=PBH%G;=QQMqhf+@y)IQ%s%5!l z9|F_I!uXnh=dL(!H_aNYfDN@UeRcLSXcM(pDfWw_y(k(;d zhEA;obI3Vo>OLP#>f=*}(UWkov1pR z$k22n6*TCw(e-oF#$mxQZi4V+C^ISiCr4DOX@_W24?XHAaQjmhOn&1?ajItQo_i=A z`{Z8XDSL~`h%19?-%X$E?MJukD+E)w@t0@z&(I!&@qe#TmeN|`a>HWTWqE0POr|LGjAY_muzfI z9oKY(nG2T>&>K>qV=Y=ZgJCTPvy2AjkOkJt@Sp1l#!s9?YLE(jEvO^2Z5RqRTK~W% zr$8%PYf|dt_TyvmV^QD8X1Dh@hV+_tc7Y{qPL&k<)B4{~q8s@0sDd$SHmt4NVa-S5 zE6i8@*h+c2d!5N@lJ){?FVGragGFozPAYY_b^-s5KN;n>(g2-a`#kizgkB_5*p*6 z!I^5KpT4eD5y;G8iM4W6#Q?Lgb_#c;N7 zC`W$VTs!=kuEArj69diA?Y!=a9w)_6alWmVJ;po-s z*aQ7l!hQIY#mD9!zTKAIkUeeTVZCg^z9rj#+ynNVZOlXdYV=F1qko}6@Sa`Bt8yz4 zBW(JM_U&i)F$RGp2D0NuDJ) z-}Sf^>0m?etI~SV;-k-7d3JZHQksfaEa!b}GLTD~it+TX(&q%~pm8ya{woU6b^7<@Er5*?& ztc8HiGJ#^`jjbE;&_kHTHgs)uvzr)Q5?0=|)MD0N280mO7!*-`e)4pk3~43+20h&G z<6rOp!&G2HS(3Ms*&h4duE+q4m4vgG$tQ7GPY zk$AJjG6YwFklcO}0|eJa8j_P2N_6uwT)58ihI~TSB^5}ZH&#oVx_L>Jh{b})Pxh^= z&>omPta z%f>}-v^_qGY4p2XwUU*Q@rRi2<@+AdoS|El&c5^kx5aAF#&W2`yZ-qy zx5aZOv_AR6s+R)niDPFQ{Q;KbYu^?8%VS))j4-cWi+Kv#3X@RljAvK;gSNhf^NBHa zByjyg9cAAK?OF~Ezz)%DOluyssu`X@u~iyXl&Z^)9bN5wD`J$y5s=(G=;CQwHOP<@ zC_#Z_NmAgB6U`L^GEAAmHXv167D?9f^5ATRYSD$oGsdxn@;EY z9oDeY)~ex@wdx%>@9;lPUDuW;3FQs=vrUiHwc^_~5Cbm8VM;UD7wJ3YZ$%Id!X7WC z?3ZhJwq6Qz>Q$u221ccC5K_)S@@h`a6}NwbBoR|6oC{h4Sq;R5e<}s%3|MhW2Fc0U z9{5IIG{z!Pi$E zTw%w#VK2R!dsmYbq-gq8C*SX|y0SX?B(GVbA)D5Fm}IGkf%{7_l{aHZWp({Ykz=&p z1y5cT&cO5lm;=M!=-Ayz@|U>Xko@7ztZ|ln81fX_i}D@MjJskC+(EFHc3954VHN~& zOgB&5iJuogEfZ}Dik~oufBY#`XT_6!?uwZ<7M?USYTxC?9yfTI&3voX*oOxF#irXR%IB<&`@^>_KWw5VP@ zGN}a^0REIy>uHl_mL%_6?!t)uHN?tU58OCsLf zpQ9O>Q=Qc#K4+C?AZ9VY%vyv{$B~Z)$g?ijX-lZQ4Q#qa8I9ilJ9CSR#!dEZNwMpOlMB#ycRrcOCA>v9zn9 z@}{GSUAt%MLKD@=%D1zHa`OH}F~LF`6Z#f>GkWDs5gRF^lB<|{gXV9~eOd(+!Wik4 zeR~z}JZIZ(vtI(YPce4@@P-RgbAp8ox9>b)Q-~q~<}@gP60iNRK7cu6u#?x6xI#u_ z3nw)+ff&rodGkIEej0sX&hw*~mxvp=Jpz4Vbn_qUT_=tKZ@G4DQ$RLSo>gv*AmX4v zl-#4wB#)gMyA>5KKr?^<&VGP7ecqnT2!0?<<0#Q88mzpMPGv9Q25LoO8$ zh2Uxim6W$>+{|*aAU{Ih#u`&LwsJM}(=j-k6oC?B!CER7p?ITBcr$GFkrUxBQeS%> zpsAkvd#7dLoc~BBQa6iool#Yg)LJQA4dVk3T!ueA75B;s7(!*ojhASk1Voi31^uSI z*RNx=qi!A&G24MkR|BE1)l*2Nyr0|saQd=^Gs=~`Xa`Y8L5@)pWSYu(8`|AlA!*tt zgSOxq^wjAmsI<;hgHj9X|O>uHkJm`nGZ3jmnH3@}nW?*(?$yDu5Em(RokUyEN4l#rbLfu6O%7C@^ zjm_Vh%zvWRAjMz<3Jj!rQlJ?mkRwuW3PU37L813cP}`Cjf$THy_bRL!m#~X>*t~`V z*WkU>1n#u*@qGi^`JY3Z+&@RuKG~ee+ku?j!kB+xw1Vc)jH7K zncR*ghrnx&fH6HAj(|~LN+F~uWS@kum9bKQfh@L}If_R6regpm8qg6_Blqr+jY>(@ z0IbB2DJtYA+1+vDyRQzLcH3Y);xX~H_lL$D=XbmuAm3nZx8{c?j=8!D@zuBOKnEeY(Yd->3po2=mXoI0w?1QMGn& zFnVPTK%rr^^w=2vTNc^QH74b4N*eL-Srh%9Pi2qO*lO-`!>c=k%oWmjh+TfnbY3b3 z53GlZK9CzK4pa?rDK~UhziS4Vl6~WNnt<$C#o-8P5@cc&`rn0Fo7-*>c`7y|(ZM0` z%T!)BuLjvUOP^Y9(A(Ppqj5f;Wg3asf2wfo7hdewjGjc5GpDW z%sKI0e2XLL6(6jUm(B1URqxvpgX(edVtq3?*jt5qr|~xiMM2a!q(3UE z-_Btw*tVFiy&F#!)1`6Qf9WuQ*4>Lv8Q4#h65T!5p9y7JeIGwkx*K1+Zi29X_wunu zfuu%$rTYH9^J=k+x7V> zl=P=8))Lr4N7EI6rn3Zx#L4W$BRkG(vd7acJ8iHs*Qw&x7ATqp*OpQ@eVnUqFX2mw zkXX8hQZi;-<-QE9Y3T2-+V*?$Kr9T73DmNJBecV@u+f)PdZ}XaO|ml8+Pd6EX_hxg z`kO9&cw$KiXGV>3ytUGc4(S{`Wg@1vEe*xQhBah-V2pH!WPe@gsIybKGk}?CEM|p? zoHpMmEF#Kw6gbA?TvB>js-kEio=78q3u$wq!jG=a6v&8(w7Vz4I!^AVK$IvM4w8b? zppgnGQ`L8jrc$tRcTbL8a!tKbBwLj%HQ7q!DpV`4tJD2Vw^MlKS|`N7JG73cgsjA- zkf%AntYbPXsWCt>=HXgg=)lNwVjJ7;*+}WCExSmNFR@tmr8>m{e%x}sC&V_Vl)NBx zKzmVd8=<6k-F%qLVo|`U;ZomJ7gRG&33v`FJ%%DjDcgXU2snTh^G=IRRBEEws(2b^ zYaJ!63~DItpvP4^CaM^!2qUEKC4e)LvQwLtMj)RT9ol{1o;4cycB;AQL3&|Byqk)h z-o=AP^dT1_7#_8ws5@UVxzo!>T~!Sov04QLB{1!&R_Vz)nJZKL%ae2@Yt8jRdn4Af=UG;82ZV*HW@Xt(!-bx!yOK{-D8@Gpsh9I; zAwX0TZsce?%(Y~#wehz1*JV<7b?)p7++7oPDS?mChbV7qkxoq(%0{=5nVMFX2_`ea zd>aSvEI89CmA$$lKP*K<1u5f=^I_9&F1lfd1zV)IQ)1NWwP#f=19{AC;H`pdztX6M z86m@Zg5}cmXt!#vLR$ojJrrr8%s{$(|@6GJmUiwUe3gJQpe^0BzkL~fCka6g9b>@e_ ztf(XloluO*nzV-9Z#ww6+ca_>+83$9W{{K5=!{m=OFbz`sv>7Qu}lgAD#}t03QlPPYTHD3IVGou)_DMf{$`}--VP3d%)t1GdvFK?Z8R^ zt$MVTxI1xn0=r`eI&BD$KC058GHBL2YIk%h@0xeq0lDl+{?Je~b0Tre2n+slgrh+p zIRiLDZ-pb%U?3c9B&^b@$}O)aS~!)nk3p3wV_Ek?U1A9Y;W=kiXG?iD71T67mH5AQ zXB===xQi$CH5t`7)HgLwYRFC%M;jH;q_#^ zh7oytJlSJ-bhIw5I5ix<55KT~-^LZ5q8p;9;x3%(HiGkXVf3;+E|9a6wNe~)RAe~& zA}Q7Aq#Y;?nxZS-oju|m7RIsoAPJN=^|JiM_{{2IAy|LP>c*BhcsWG%=(gEI$(aao z=|i*E9BHs73v$sX<5C!LefoSZ0Kap~JVtlqL0m=rqn%?-=K3)Qe~CB(8;LlhU%M6H z{fwd4FofK9q`yNriQoH4_LlUO#C_-)+&hYXA{pulG$y_cAi2@O`H2XGy4r@?EDX47 zky&rif%6i1e=eywypx9*JV<%r3lk0W%gzNx5dsmcGLM!^&>eJvXttdl(}BE&iAVAz zW{g`hWt-u{MbVBfI&5;pFq{5j8V*TxXgD!Ck0UA>rK<|VdvWoJ?{M8- z;A;g#rFrq)7gV=O9Loy7QEdS@!r#8)BX=>BaeeuP8g=@)NB(u$p2iIa#1+(TKDV(c zR}4f{i!KK0!DKsT;BbOWwW-vU?6-BthrE?RA3jCb{w3r^TF=jGLBW{R*-J$U{!lGC zEf+XcIwf4;qGlF9hA%6a*;i!g^RtM}u0@k#+mvuXrOk9lwAE|}$f{BFv)p=ypZLlK z>UGO3+mHMULgQS@)X1bf{bsWY8WbcwEjt>{=!poj4wLD*+w(h2-d>0I+;%x6HI#}$ zk%Xe`Sw3v#LriEW+~TL|B!|zb?s6}ka>duyZL=M`eq`NGoUBuEbd#~C0JCFo9-pf% zv(&D=Cm$UdyfLh$A1Ciwxv_dCQ9hBpC!B2lN3}_NGS6Hy?!K6BMD=&r<2`mvDSG-% zodNxBE8oX2c!Mpd?qQ%Zm6@%=_8~7p94Efm7EfP(a$RKWt>9jk;Idq3SgDyQ8K&wL z3&YSe<#CQ*{E}y0Ac-*M{i6{PxJtaM^{>a_7 z*?9tgF?9F#Dn0amwMAdM`QawpyJ|U?Org3jxT${?Hjaj@d%XyLv~W^CrK9*d4M@71?A)L-O*cfQQau5bsxeh`z& zg6t(>loWaVMt?kR!hw3OKqD2cE5HJg;>-Ma-^1h&ub_FOT<{v@B%{iT9>`WywJ|Cz z^vO{>iso*)~f~1-4fUBY@YVDp0 zI#1)yib|WeR|d}K7@WUnpFfi4#^OEl8u}>J`iI2k$xi0OWYt`e`vbRXg0oGa0ViXY zixLy_HpY>(th=5?iU*WW)9JE?_Xf z*u5NadG}McvY^A>CD62{qEGRWStEh{s@m0voXu|EoDkQ$DkJ~VC6Q(msawZ==4&lB zp~J-fI%eEhmiSBZXrkC85-(|l>tPI5yUj*2|5sr*o3Td(3~0qntVU!8sQ0_3ryO}~ z$4Lcd%=oTE`^9=PiPcL>_>r-Sm?BwFSrT=OBnZG10J##47MdUFspIei;+R0l0jl4D zWGMv>Yelif+%NS59c=odLgLG*VC9Lb6_tKbGYP3ybpHX4@7xV|*04p|r3~!-NFW6R zTPeS7(8FWbZ+wWqc|e@pWA185pFZj0|DT{n?_XEEVstpf^Y>giY6wv?Sn?o!w!vwAHlL9)25F9=z7@ACGder1F4sLuLo|#?1 ztND9nrCp_sUl?RUQy#>;Z<=barqzjMqnwS+LRD8obmMAcTbm}DWVhpCV)26*wBu3M z(54w^YxC`#mz>XINA%O5Fg-c~2WttJHjo-bA&bRLq`+)&QBh{KQnLt?{s6NsMSK&| zsogs}Tf}(Qm~CBFq2e#rJ8wYk5^q6bL(k&oj4GtIeZq3_S|!d>q5s{&XobV_r)@F1 zXiARNT28)(`Wu8~4)P92-B#mgbw`xGXt$<_}>ZL1nouNi4hU@AXU)q_Tj%n&KB)+6rp2wXr=*ZLfU3y1(0QsuEA zj}Tw4f(}vo%r)7^^V)lS$+kyQT-N}yXi#W0F)CtmS%d+=2878)#%VXZQ%Anz#~mG0 zh+=vhX`P5d%t;M}0qu|gSX9n5A`2k`Wzm6ZqLGsYpDWX~E+|$WBF)6gfkWdQ<9yRK{gK&+`m`P3dKZV&OWFY%g32axuh_M=7Ap1-yh*}WN8BjpTJBP*u zD2RXL0D(oEx(7+G0txb@LUskTd5J26RmzBJ#oB3T@RGQlMN0_Uks7w)hKrqtgt~Tq zzN#k9)gOZbnG}1(BuewFp4}gm`NXM>!`o&F5@2gE)@*a8*o@3btb3U*$xvV6(a%~$ zjK>PBo94saD7Qypa39o5^;bckiBnm=#bqYO7U=sbA2mp4GKup+JX&ZT#TG z!U8d; z)~v~HwWnxxc(p%7}>!%mTZkzFz0}jYxo~4XTej$HiR&jV01T z0uYe-*kNbr&z{4OXr;p!Mcdoq81;zFS1b1nQuS!yRXZHL`%WLX6|#&1g?OO{&4$le znv*?lFz}WbC@$YRBh=lEf0k*^)SHB-GW6SohS-qZf>BLWUooN37U)ro?B+>(*i~|T zK;z08c2|71T80CKeAZB0W$C(IMNok2F6vQ0zTT$vs2}$)mJsNws-4#%zWQm!K>_&c zB|Ic(|6{31o#xz%_$KCSaA|(UqW_T_u!tkcBPMSU1~G~Wvd*#~4BZKCM@uoVMxg{r zgVDe_zIiF!O`@L>cj$%*R*MgVE>bf+(!4WPe;j>9RVM+|vr8jZuC-XHBF}0IDdQBw zaRl&E>o4c(BKJ~fiFl=`wtS_uCL=axa3yYD4%+Asq{I=6FfUI<61^DxzIi!nd8o-& zdth@a^qSrGR;&xDrJzJ&TU7mNq*#C71jWj$-aMA8A@E@awF!;Q5$x;Y6KGw9q3AZxQJ)SyXSW;dw} zn3N=f`K;BHGO`du!5L|S%VKLmk!B&$NvkSHWLy;nmH!|u*D7CP^4Z+lwl^BTdgo0Z zC=}(xV3I@;??u0hv!=@j8lL%F^8SVApf_xkSRMfc{r!fRuTybqW!@FROm_$yGn9%F zb{xlVQTI|hH%A+Qh>kDDaH20O=%K}#eXc&&H%i3u^0nhoTXh#t#Ks-E(2r6Y@5h+C zK$K!i)n#u6;kYHg-^zfa5=T8x;0tAjH|oLU7jFcU-zRDZv6LBStKmfMb#7b9$y}g> zgmn-I2OUn|;qal)ry?OPRYT3i#o+r>T*M}6e}o2?WTl5d9QAZn4=NwE#F9{6r61za z3}!fxaB>J`QZK@?!5+0=v_g`#CG%s>mZqOseUhgYqgt^)y3_y$Mz%K>b&4N)X*`uL zd;5x9<2Lgue&I8odp3cOdpv{l3zot0Z6g3Q`&y5XZ~JK=5eF^@2nFBpHk%v-)M)nr zFGqw7ZNk4&94sk-NR(>vVkb$v!v*&o*)V|&(Zt3*%U&Kn@I#5~w z!r*H$33c60`z$ zHRg_TBljuA*p<|$la$OpMjw@D5e~BC`_W!)q740Mf1O6`@|-XmCbi%8 zlI^Gtp=w{H_;TYo0*j5nE*(J1yS77`>whTMJ4(l`#~u+c4tm9Z1>YbyDDNILMd>n) zpQqXX{ea}qC&VJP`SPID#%G` zh!Qod8gw_*>X&_3wN4mENq15?o6A(EbMW;*KtxOFn&MJRbvAnJPc``wWZ{)pZ)-o# zQNa;k3>{j(wilEh!j9kLHnNw+KCW(-s~IOO*mSfIoIVQPfb_W_G@jTefAz3Vr+dDN zfp6~{HF~ou;LfvRDRhik0sP`n{BP<6qv8aJA9}tN`Mx*=F~!jPNWM5^F-K7Q?w=)) zhmk*XN)pgZgYO@~ZLol1R^HJTCJ3o}u05WJvJsCSA8vsP-{~FbGW+{x_(L!c9E~+F zV*u51gn3W(3#Ir<^#el>7}}>`W?fwwy`!ITh(q=&XzAzPjZ((SYEw2;SYbOET9L|1 zaOW`P>&-uGg_yMxr#j zaTmO)u*p9fB2(|Z1EZw>Yt{G<>&%fuW2bMA+hKYpnHmaYI1E_S1wZMEDb8x!07?2xuKZ5d0w-@@B)`ISj~%Fl7f zrXh7zz2B^UGl}`5=rWj#hJBXcHzn?cU%w-CyNRMs9I_5gvTx}CjoH>n7=L)1a6ZfU zl;t!%^2tY(w$D@dUqO&5GIre#`{@%0+W!#*e=V_-Ct$%4Ko(BQ2bezp1OCSU1O9>o z1keP8B4FSAM818qJYaH^fHXY}O63-imnyffR;6BmRA!-5mP!=;W_fB`S=doS~&GIkpzDhjdDo0b?b9=*Kx-CxKcm$Mg0fA=gto$|FV9FX20EnT3Qqk z>$k`EDs}Bu4%4p3aQMVV%WH}h7VAOVy0|8EtPU=iTMzQ)9u9oakoqfYQ>O ztRp2V)vpnywPnG74#2`*p|#XeMK)dIKeT4bp+7J&3REpahW`mSx{SPRO!~P9`4k2t zbQ0C<;zuK;{xTy93Y5l8K_&x{eLEQe0`xJ*w|WbR{Pwko`1H})!5OZFq(~6vXo&{3 z$T)zgi^bCHZg67$26WD&B}O@FjNBXck0MezzJ>EqmuX9a^_fGI+pTMl#9Ds^j- zSe5LDQ0CxYLpp2noK+Iq!NP4++;O8K^JX^~ zu$zkha6g+OR#T{BQ}p!$Yw7ZL=2&uX)sxemqlgT$XHexaGTM4+&N=L%1DHK;)r>uD zmt;@`@EP?+3h@mK*D)o)Z8==0MHa`cli}>SL7cr!a41r!YYo*c9&cSbyYhZlb-ic@ zo6B|x7bYyI)s$p&UFHk)AoG;WUcmr8l>NG7J)Y}n3+xt=d7H0ay_A}_&*QjzO3(&Z zSEMJZG)P(#+S7eXl6VCW7kHvf;snLtCTo2$S1V>sD{WU9?&6AR*ztYZ>5ot_&Z!mp zb3bZ?E?@Ki>K+AvDMWFakHKVZPV$(E4rb*cn*EjUr1KB?XRS7jNT=*HiTq^y<}R0b zy5x!(iZ)9hU~F$M=V4RH;oTi|wQH{dm$nQ-4q^I3{v2J`f5;!DyZ9gSe`_#J{VG?R zaX5wzyQxCNt~+p~NccM@s$Zz<5BW2lXU4h>`xjH@{ULuav>2yAnul$Q0~NPx8s`zH z*v~#Cdz?J<5Ks_-pO8_CD}YSFogv9A9Tj_kj?vwur-1PM#qY$Lb|lBwqD?9wbkZ^o zsoB${LspowLHKMXT#`w5c>cxfwy12VFKF<4yrTg!#DNpW0rv;D4&gS-r3L1x(u;L} z(LeFxR%QHV)DlvYt;|H$neao-0Ie)JOLZP2H2vf``2vAlNYynOYV+nj^Rv6Yxm5g2 zrpBejcf*aDVKQ6F5UtRZKNj#LoIH$AG&)LTAI@YGq#wO&HN?g)W4rk~nbuK7t`(M( z6AYs^)Dwmyr8Y{7lE)R~c{DXv;i(z$p?&pb75<~N2%^j~rOgA9q(X52a5Lvuoga5ZoQq<%h6hpByCtYU{2)=w z(TS4ifRs>!m{IK$%bWb^Me~zW{pStr%fZZG0J<O)IxS(y+d?*EotVSb_ifc~uvPI&!~E-~zXO z+N6t4ijUn_<-+g&?vW;DLUb^`m2aMS8i#bwqw zbX1x!|7fJ}R{(7LrmB27zUV*MpHuRRZz*E;C|y!mXZm5+^x#o4Gj_6oYh&5iuEyQ^ z+c~~I#A)gtR|R2lI}dwzg3=N@CuV* zttHhC^nZ9uwjcr^m2M~-wBAnrki2EG# zF$}F;dVH?rZLVsXCzTpKF-l~ufQ6*8SOeDiImz&bH?VS)Zh6$UAfeM5<89@NH>^C7 zxaGS$#1fTV-P|iwI}S{hvw6#=LV&IqW0i|EXlNozqh-Jz&DL3YhwYC9xHKQajmm79 zvq!&7B24Xzm|~C?g)t5xs!IN&h#4x3|=``wEW)J?qyUU- z;l*lL_n8c}AQK}j3F7W}&)g1XH^~slZTU#YKZfy%mueFxQ7Sl@n9Z53|EmGQubV)F z+Y0NQ1qF!79LbX~l4~!1^+6hw5@X&(GBmo5zX+{41Mb%R{aaj((dehr>oW>JwR{b1 zLI0LgU$n!QP(u!@kMFqT&vGryV#&{sj~D9%5X`*BEE10x+CfC=v*Sk(VL};p{Z%cH zFe89R9zzbbFY(zuOaK9S*x)m#5P=-%+b}aYlN%L5cm7zB@A$UPJbQ2jSU>e9QZ?fK z;=?siL7W~)mo+k5+l;R?W;WXAkX_;434`pNQ7Px0l0nN~^>s%Pk>d_<=(LDdvvRlV zu9}Qq^2;%00L>QcOpNs`SpKgHz*9PwpDX>OrDls3xRg%WA!g#8l2)1O{Q|-wBoC8( zjKE6GRI8*YUhQHG*M1SLstxxWc!Ru_PiJwANgnbWkQ)Y5TfLMahFpmC|N3+Lj|w{^dz#~=iXvI@ETUe%J>IjZ}r#ShInJj*%EfHLp4{U}E_BgyifWkcaU67-BnkxbfaCDQsjyuj*Spgkv+l~{BhvJ8bHHBJ@w-Jg z{`Pi(2VvyOQjRkD%t@OBu+xq|;!TBY{uKdAJQTX~JM>lKuq#~t7bC}P=U;SRGGmbW z;LZ?Rd`K2^a}rX9(y)P%+N4of{txs&U)2mhV$}JG7Q2zphJL<6gKB?eQg4yoHlWlq z$L`RXO?NZ2-MoKIp9eYYdov~I>W#Fg+)S>2k=a0WR<|w?{3V683K49Exn}YnOI6TJ z7cv7=l?izhfB1y|1O2ZEX!>R!HuOgXaQ`0>@agX-SrrKu z&}@qV*7ILJgPrD0GBD47*Z(vn!AefYgaaf; z(Em{r({u?!7P&lB?K(Lff@lFvKN@Vc^rfVFq2?~+A)A=T&S~fYq7W!D5m>B3d5l=X zECUH81LB7JY9ABb!5H11W{)#A?kp?Z^-o!MnT}m|8}%P=-Tc46Yv7xOOZ?;l`6Ddn zDa?m0k|QE)wUW8p6@|Ynwp8VqMjK#FQp0$GW|o0SVBjhNeI=smy>)Tk%_b&J6X&(# z8TqMEpG_jN;|aNFkd9#i&-vs={e0lRKZb(G){@KA3vy06TqMrM%@0M)Mr+|6^SJGd z2c5YCpuE6n6h7Uwu|$}dn=)y#m8b8)u!+PcW`!>pl>4EX-bnW+{wdH0 zCHnm^Y7K@#6FX`nQLa#^5w|_UC7xR`SzBEwh;!CN9e1 zT3tfNMq9jLSTy=Vxj3kyW#n$-Z*=s~5FZjdB5SQ!%NaqtT$WP>o;fSt%$3V6?4q0O zefq7z4$2;vPw&+0!`*?2^#fSfnyWGU#Ct^-|+cHiM7#~|`9zx&^ z6#}yy+E)C`EvJrn;CRV#y2?>ZB0NE=}AK(aVEjDC7DMkYA!) zeXIpkK5+z*%V&;3)!_@IAfWaD5QCVbcQdJU4H&cn86LRAwP^4mDTo;!s;tz4->*qlt=9jclp-13VGSD}REoGyKIG&njy(oNHmmwb)h_Ik zN`$N!mDDv|ZPIzy!%6Ep>1?_O@&p7#tTXcFbHY(K%QBe|i%F9uEHcgJI7#_OIfo2J z*|t5!FM^$l7Kwe_CiX2{NNJK4a(}Hhb~l1`HE254aAYu%PDzVzK56ywDd!#GWGA|T z(IKuNqWqa>f{k(N>TBBB=&v8c&LZ`&K>+LXNql1$h{k(sRC z053+;;BX_YG=q@h1gOEFrw(@d|H*IiW6rS(c~KceLxROU`@u@tf8%2jUzlU5#$nqhzACHjAx&^jG(bkL?35kt6vr#FPe70PP_;aMo^9K)2Jw`k zHmmhDk4L9?<;@V(x@e=FWXr&Bp&!w9xvy8fSLtyhNq%+#qhP2%L1YmU>UuT4`I3TI zdwAz)6in)w0`2~3;vdQdx!~X87@O}}g@qW-kS<={c3xa(1)kY?g^ceB(ZsOKrb%i{ zYrG(-sjMV{3-*hSwvT>lFU3^nj}DnBR!8LxYeNs~u-nd#tiZ1EDofptFWU6_3L6K2E9ew_0}n*!c`@%yLgmR( zsFM>-Q&&Vt*}a2rh9k+NPJt|a4YKlY#V|r;8}xxOo^ zBc-0piQ|IuAs>)sC!t^ok4W4LMCt$Cx4HL&p zULmL7&3%3jv=J}$+O;z|acNq)BG;k-}NQ)i#)!Xll+Y2}rd z7Y(bTjvsOudrG?HQ#B}h*FK<;(Dy`gK2ZL!u)*t8x8fGCv-h)3JMJbACBjVa$?(ic zSdh0ErI%ck4+Va~6+dpi71yj%=nXNW57D49=ipb-h>ffeEbRz^W7mQrf5XzARI!YP_pGwbTtDDChYa?xpST%KlTg!YazO8vhm>v=FQjSQx3kX zbW&(AvtilEOZQ1fzD>u;w?E}J@6g-C)&)p{EKw;zbWX5vuY*}8=~-`7dQC3nO)twE ztTbXdo}fjC3jHX!&iUQ(1`2+14Ca=tG|GSJH7~} zF_h&n!g6Kh1MoWZ#lWZbXhU>7Iu1>S!TX%?5VrE%QEYr)9}g3sKatdK|0=W z$o%o}Y_P-V&G|;;OX*`%r>mjJ7PSUfM6_b9+J)nmR9`P|lq^FZ$WtX@ueR62e@GE& zxd3un{!Q6Af1)&;<=4j$2!2_Q#d~decz-X||2R<*@fsS0iMqVjV{;Ah`Y@+({EJeF z`pNn;BE+r-afm>+okx;^T}qZ+t8C%3x&RIH(hb4FNc;3NG@e(i@KIO-&5(BGg>Bkq zTdl=6iDw71%H(S9V*3tFI8B6z%52pL%VQAAnnQU3`PgEV5jbn~^!|!cDz8zSV?>FD zPYZ`-5pPmANp)ChLl;|RUy~j8$8W(%-PF;fqX|OH#!=s1;If0?vynl2 z=<*|?XCc1>H`(3F_+Glz#a`h}6S25ei&rcBNAxy#Ez`XjM01Xy`lk@>9|UkpP)uG~ z<~}vY1V$Anm`LY|7r^e~0(=ilMcMnqJfdUVstoZB?{nN^Y)v|3QWeBv>5RsSW(x9_ z?DOM&lH-;V8tRX)TxYN9ziYUMV$p*v>l+pLtP35mD}}eNuBqj#^a=J6?`UVlE8?F* z93F5w$P@H3{M8EHZ*e*Rqh>N$xJ?E{tgkom`B(g$uT{%F%e6r$8+MbfNVf?5d&W!4 z)z0g}5Qx`_Y4&ij(5(f`W&BKccIWxpLz(x+l*tuFue4092_A^}gi{AEz&w*E?h{W` zXC8`=u+|utKAts}=%7vEi^JAwo*B)4I6LHP);W;>*mF|<2ZHN0@7TKWjTXZT>Vi$^ zFMn+ut0gh@+qT>4_pg5`cZhmkzW2+gPa0qU&tLs-Yqex8HZb^P0W3I}=3y={s4xFh z%!Ac@$qV-J`5)5#OR~+-f?z}c4wL^D_B3A#gHb~NvpcyP0S>E~RR(O~e}gcEJeb&j zjVPmh|A2F(E?C@u>wgUln|TeuKrsJ;^xyMnp6~+G1p9Yf%>nx-1n&igoScdahuCc5 z19tFVQjWYk^uH_3?*3q4U;jP4!Wtx2b4nQ4#D9fJf31Czp;N%%nxkXD(Ej_*f3EeP z$*EYdyZ?1v+X-N>{{j9#=kaIH;J?2@@;`uokq)->Z;8`CoFdlPC1; z3sy2;DHt+HMMvqI8itQ7-!hV#{J!w~Ze9}^Sb=6ED+TIj^O$JKXC#pm14nUH_V$xY z$epIS@LvIowHMNM9{r-8Uox5I@Td7_yQfc_R=dpVp@OE#n6F0Mr|$TUK6qX(uJn8$ zfZt?s2m=5j$|5s8)4R9u{isnNbs!FQcAF#7pxhl$l>z1^fiM%J`@UCB6jf^u!Qiw9 zFm5MHH>3I1kQV{M9zdSM^b@9U3>BVvYC3C}?2JLei6hE1LlLMc3OmV=!S~rH1pBgr zq19{|O_(EAJBiJPYPGNzx<9ijA;9Q(J>j*UimQ;%vW0U;V!|DOevKeZ%*kS?R?#sw zox}k;mtVXcT?cvv)0It6%XFv~?zdlsoK|X#IBN_5I;6BWRW*)9bG!99TsiDpD`(Se zCU02dnGU!;R78bP%A7t*6i||+>?y<b6U*dL?3R-lGIO`uXyq@vLqLtSL)3|!;%Y)}xL-WZ3I>S9-AXVUY z_L^5<!b|I|Lw^Db)|!iNKc`U>^TvFtno;A0%bN9jQxcsrLUfR}ImMrfC&rPWAx}Pu$`}GYpeuFY zFtBjuSv%+qheg^XVWK?rmCE5ytpLQ(_ku_)`P?9@N495VswKo<ce{_pvT-HKQRr+&5(@ZmHMR3jqz9ZQ9t@e6R^O=>uVQ(9^@%oHJuLo}X$UJc; zu&=R2i{zx2FX&O*Cc+}_p6u&2zn^gz!d83Cs^HSovA7OFe-^H`N1(aeTR76&PWIN9 zx~DF|_-yXi7uv}y!q$fHtRyRLx9kYJ%kBPbMx@P6Ie||$AD5rFv|%ejLQH!20)tir zu{PcC#^BBNar*=+9#Cc$7kyA4c4iE|3etu+Cnxf`O!+u9)!=?rzkNS?wSZ)P>oej1`W!ECxCquC&vk=Z&Fl7~+^~1gPmRN<< z#J@5~d*(|$g+IrqeS~ZMh~*1Cw=ts_qw3;>Wr7BmLh;MwSqJM(3ZNtA|kk`;qbg zyKy$_R)J~#cPm%;(|kDj<LSy9O-r-^qUhAOFl{)Pp(vuY3OAjZps?u4QU}^+FwZ z0@X9uH@BwWe`iN6gak)L28Tvs!1#>9WyupK6++UQqHX@T=?T%EXQqY{NYRuHPwfKw zGeN)n>uMrtofaMB^Xr<^8D2VnAe2D=taH|7GO|RP`-vSb6C16TSyk6Rd}qGwWi;N zTdEQTHKkfg$yPa-X9IpX(ALnZZZTM9k;%ac1Zl~AP6aok91g;P%wt6i6j70&UjKEfAPiy$F2o+&J-O2tpnA%FXc@t3cE^e zi40s7}2~FB;YpNwf>F;VMZKqnEpo1RL%!gO6)?yOrmB$Fuv9)oM z#JH#1a+ilxnatATEXFy*0~-LtDAh-;eK*O3Dm47b8`5R;r{U*rkDZv!bN< zf@xVBEs|B4Bg9_7xsGD%RO$%85txrDYC4r5@+buPy+Gfc^r2I!7ra@-*Phsppg>5K ziV(uHmWLk*Kzvp3RoPO;b`Dj6L71UJvenv~O`R z#Qi+zhZO}#ycMJ(+mI|IEr{JnyMz}$ig9}ME^c%OSA0BBF1T{gaCa7gCPl?h#gbaMohCPDV_JTl<*%@2G>=RIB&+&!s5rvLd zW-E4*aV|)`r~Z`uY&LZW*Eax!`|t;79}3-vxOL12Q=@7_tK}Z9omDTgWxqg^)fa#Y zNjsWwf?+EUS*vpP;|R3jGk&$o_C6qy(+;5p7%5nTe7UvK3deKh;Cds0N}p_1fv}OD zlaolw-GH6Nu;DZe13M)k_qs1x3pBJ3E)bRJ)5XY{fLtepE7K1GYrhGYCIRw^Uj{Zi zL5sEx9+b}eco169qy4O`EYeSuE!iL%6;my%g3-m;GL;=Pn-o0dYkVrHrNMkEv`Vgq z1-$iO0FMx9@4`+}QCU+_nmBDNzEVx(FwByfqgDkBx>jUUupEV(;u1>LfM5yC(n6!i zseF3Lxdp`3v1SQ`Ia+$Z?MOXLR(@PZK^zrMv3R`gJ1mSYiGYt(0b?7L-vektU#m}s zu^N`1+AR=?(>$asEl)6$;ifWEB(5Ut9S^b{C5Pc7)whKqNCZ`F!%|JjQrTHrndg|e!KKbs1H6Qr z62vq$KVRee3w1Ne*p%Cq3in%@af6gM7H3f`!Y0Jn z+1tBvb2po;_OUS4q|J+0uwa|b12_-PDFr|^kfsL28dwN)kZc=l1BQeZ6p_~_0aFC; z_n$Te zU8q#4LAllhT2!P8hCRkY|0|^nL%9&EO~~Sc8uM`?l^0z$bG>yMUV4q;*aH%c9&0yg zgl;`xf~4Fa_EWh^MHI=yvFs;Rhn|Qs2xcg~>gC)vO;CZfj(7s(09L3WQK7X5XKY>= zYkR?M9STt+#o}okRZM`4rIIy3E0SxLwbon7Ij`X}YjcGmS=ozb6I~C2+Bwwj*$1M! zQycTBMB!pxJ}P(GwyCJa!Tan923f5UfIEtZW0FR--HB#KR{mThPXmLC);#jhF@MGb z<_J~OKr%mrzCExE$jap;t<5t7xT$@^gazjvQMuU#X%L7|rqs?qSJI_8=9pDQv9awn zu+7ge#Z{Z2Q@Yf;L@BT1RM~0hR3B}8sZg`_UzB$6h9X)u3Dc>H?-?|YT+E~fv`e1J z(#&E>-O8O~4OA_N&K#-(UfrGaj4ex#xdy71KnC0Z14Uo5@~C&7cEMWg#_}>NX!h!o zvM9Egtp**k#I1^DS}uVejZpa+hX@{87wo1wr_Bz|yWxKIbA$mlg=Gqclt_(=FTqv{ zBONdqwa}ty?cu#Om@`R4I5FSvTSfQD!c|4E(!@}AK2NJQr{FcZ<4W8%Q7lT_3eiT| zf)duke1bOoA8INSK9b;d%xmAK^H8TSjcUIh7dbe^d<65N>LXG=LV2=KmM`8IP`CD| zhM{1da~W%d{h%h~nKvLC)U!@EjIJjSX)G!#0Ml`pB80B7mJ1gwIYn^w$n$m>2$v;Z<1!z&|Q;hM#M)pL$xwL{;GAwhpA_9qD{Ktc2LD9v*N zOt+bi19i?GnqN^n_h$CEWKkP;vPN_|!Du*azC{>xAsD4_ZEMqv%butHk zO`lP$jFH5WvlGi0%h(-7IbfWCwiaBU_0^U!hCxxuv|_{*dDJ2b&FUg8MUC~XtvXn> zj6IaGC&hoE>c*OKG(e?jse;B{#`u7-w=yOe6H$EEiY&7Qpn=Cs3ax%qteafEjHYgq zGA5IbW`?WDl_#`rial_;(dgkVV=B&nSTWjm8gA|4En_;?qDl2N4VE#(eQKx=TgHAg z&h)f=m1WFwi<+p2HpTQ4T1^yOK{e?@^b3(1%a}{cVjb;|8S|7;N&91g>7_GD7L?Do zj0Frv&2DRm)i-0bi$PhDopUD!ywN7tU>B3Y9%&hiNC}rmqh#=+Etau_8n?E8zBA65TSwxSHJovwdo@ z<1#G+YEU>k}69k7Td|I zWi;AlWK@d1w6)k49>tZVn~Vv6YjIb?Y8i*2At~0bwHRG%G5XJ9?OH9PmFh=tTuhF- zSUYOVXd~?)qU)k914Eo~bDCrIsLElITI3eF%3Y*0^r9p-?MW?TEjkODyD(1H;b^$p znp#O!jzscu9Ia}+Ke~JIZLP7Q<&h#=0J>^oE{aRQkz zOPel-c#<+s?lRy=tZJ=}HscJON}a{$hDdSiVQt~o6_#;2gZ@dRB23eVTQG-4 z9}yW*G_z#dh@#4pX;UeGk!wx3t~74^21E#nf5o4TG; zH53h95l%)Fr6B(Xnh$s5*)lF;u$%Xo$n9E3ue)R)uTaL7^kRV`f@u{q%551}(^{-) zSxdX(H15|bW1|jH9hzlaPkKzTXt5WITE-1D=vZECuWOQjlQM39CP%5rHMh|QCKg!6 zt=e}qG<0zj_;zL7;kv6C^-UCaRdz{lCmu|H6KlMaL1{8A)p$+N!6w3%WA~%AMP1;Q z$YE{uxU5G8jm^fEfYGUpyN!FWqArtP9;I9+O*;hpKBY&PWf}J}7*XO*Q7l^IYgm12 zQ3GjSYy~zAbxV(b|NY8%fX3hLaz$HXLYM!8NmQ4F;#joU-c2e-c5R+X#KX#Xghs75 zitu>nM=LdQPE&;3o@G2nCMks|lJK}Po^XSoog`SsQ|OwLS?xV5%Xmf^+g;C{z*vFB zmhl{h+y83Q#4=uBP(smuQB$}v;#s%^U-56mP=j7l#>?b??g!~e@PF)yTLy;NS;h7q zsH=@y-(OS4>v|j1*&oF+%DIr^O|68{V!f}U-2helwldyHh-CEwU#MNgdzi~Raapmu z7gQWu(Go#B)qw8h0|t9_U;fX_7sHs3l<~3g3B3lS9?hv`F!+CL@;M>SMB@HT8J|}}$23`V*^het+@q6FIYm42Sz^_p;>i_y`M z+iwYz3jC>zzwFIiH}|N*@+w_!aUh$Ew6+F{D!Ac)_%!`UE*T|op}5pJv|CVx1r`q= zr5Ga=8sXx)a5X{G6c6hC9EVjvVi+ct5>d z?6Smv-8x>Rcz@D{JYQKAO-z6fWUxz@a#m;)JtNxE7>;=_i7dV=MVyQD+Y5^irUzRq z(^x+~6oXvW$KseK< zs>(rCb;;cyE3YM6&1dWL295O=pMwG8@^C9=DEt7dHWi~6BNFe3BI45lB5~oUR_a`T z2iH<_v?1J5AEON?zCiJXdNJr%L{5Rl7whzeu*-`ZYiiQ?Qoby}4^;dh+WO7%Zw%9@ zO`mS@D$-kGYef%>d=?KU2&!vdO@gWwuOTUX=G;XVuT5k@gvD1Rur$~#hbq2Ovy>A{ zVpDGw z3kfTT>rBPZ(p<>2pT*Bfv-1xn|FwWATfVxDaFU^*TI%L zZL!E2Qj1F!zfAAI6S+#0Eq;ZEYo+(@gu6=dtGjTTZ1HQU6&h#fZUnqe@$0oE)j*qW zaUGb38!45fBP|5HN%5PtL?l<)WQ*TQ4xtNIj7eWhOTFHK<+m$-hjs{E3{`Hq#oH-H zO5nt`615HBor>S3Ul%0s*`*eL-=ZTc93h;Ts*yZ(IA@kFP8K2Kknti>$)ly`^^~ z!jAvfRt2H&DE_W~DM!O$XOG%$yw9LeqtWBE)UQDqky>ZNf!ID&T)+D*AhraEv(Inw zPu$`1dGyZ||6IF79W*3=di5_!7u~3;9=+Sw4EA;-7kh^e!@fv$n;pN@dSP)wINZgK z(I@{_@$V?;rR`u_fW?2HQSdfx?20g)n&DP7)h%*&XZ}}}NwTPizbO8zK7!&9y7g3;*Nn@_rb2EiFjacfwj>HoHt zE-6@(kV=^PSe7Q+m09jy8y&^7L=ZD;FT_Mjkq)|jTUr`R0+kZ!`WO}Mb7}reM>7+4 zy+n3G^D9f{|J%0vq~ww%tPa=cty@jOlydU_LvDf$>O-LtJ@lzGhi(r`FWUAZop&-P z+Hkg`J<&&rzB+h+#A3VDDYV2ct|PQh-&vwRgW|*{+VoUi^;j@k43O?qcqK3@Ov6B~ zF4CaoQ(Rcr&{iF7jaXtRJ~(Z*1crv@O00;OFyzZ@T3%h{NTJNm5*Yer_-Pmbh7ww3 z2@C-*6fk$tew5*R14q9AM% z6P4IUV0b87n;YmnVaoJvS*p`!SBrfWNHOIf-b~T^ATd>mX=1v)!(eZ}lu{1k98>Kv zB;`S?p$jcBgC@+5j%}UVkHJ8QW`)KpqdNW&VsU2b45;52uyI*wqy}XI{~KD(P10VkMSnsW_tqw52YiT%dNH zZJ@N;V*+6q>tgC2GjB)9zX2+Q#X2m?CN^ zF|2PYwhxwC0wdXRrLC>#;Uh(JiKMgMhJ+>VOBy_XUaI6!C00@;^h&8zQ)w&45{+d2 z5UCH9Sps95p;u15;FyVBHh> zsG3WaxXi7_m0(wMh0e$kPUn{`aTSBz=~%9Re&g2qzbhdws^A(WuGKFDv4S$B*}|`L zCm`Im#u9NfOC@b<{&{c^N%C$~;wF+8v|lXS;%=d+&klEL0-+7o(Yvr$c3l<0IjHDjG4{vI-a z--L5FNyNPj#`?|oKULr{-tVf6x1}N;)XHhgLf;fyno>yXjXFt_{5--ugCEDGh-E;AZ691)REdiQO&H5S+@w`a5 zrqWwUZ{SiO%5?o&vJ#_ggkg%aUvZLX9hle}k8`kmZINBeh@wPkBWRb#Cu}4IA@3;h zF6{%G4Us0y?}_xj5+8^UDW_;#ZrfryNL^Nz;^4a_KE^(bbe++sC}*VOGd{aD7u4J&z@RAT4Z)E^mld zuPnAdnGruJ@w3k59Xi4-@he5C`h|gW;=ud9L+nuEcP&4m*m*N0{$wy@Mi>>YhPJ=; zTOa#?sAo>P-YU@~{;ed?*ahl;oJo`hhDjAT9d#(Rsi-@@JQA~7DU?yk?@QxLrAgbE zQ!HuGP&%$l2I-*&bKB}xODfc`k!aq>STciw7)h2&X3-r6Dwf1FIBle7fn^?{wWX8= zglSwy0ln;@WKZoU8ta?2QIfqG@R1G8*cI7V$$oUYEmTL!9m60|zm}7KMN0Pf=(Fd0 z^npqaB64>*EJEDlTWosg};kJgDTRLQ# z9l;NEw7abdLvD%D{G>%IaAcE{AbK6q)=H8RG6o{LulS0>twpON4Gky)lK`u#1+(%n z<_Z#{|K1ClRyIXfHzl@z&6Y5sD2>&~(Mpb?^NyloL3w!^TPybn-@M9HaoM<7BK(U})ZVhXTpg1DuBV|SM0WbG0o|KbFw zomTG*Pe{Y%e)Qfb7K=1uqJwJ$mkyor>)K_|=cx6`m!c>xrxyFIkv?`x??L4(CHJQm z2k1iu`|OUKtz-p_OVB=TNnXK{bII>xaI|1Xk-MYSwI7WL`*5MI&O0VU!saPisg+fq z67?Ep$pv&mi=tG2xk$;yI^YY})Yy|iNs=X(Qkbe8%p^-5$Y8csKP@N8zUtLI!ix^P zW|3Obh`0ks=7g57Z3irQFoW2?5b4DV|0LJRo?G-ovh7KVHHNef#hMRc(DFZO_QfIp zyYgtQzV`<>UD*xRyByaG8B4ve>D_J}X5Nt+ToJN{KB2;YwNWeU0&<0t_3}_m47%1( zW4I|?r?=Ba&Gv3*=yywNG3v6H5S^Zwy?AOQ+=RSIAL=BqC*dZBWP@xB$R;JD^u@z~ z|IK3C{0d6=gfc3aqy!7k_Px2^-;AE_pJch#Mnh$)d zzq_syq$*fD=P~Lilu|pP}TL`cs`$-}2B)NO`uB=VLre)TD zC7<@Tzh2$>{I~seZHmL%_UQPJXnTSas>-WNaa7xGRjEERQb{K_P}6LY{sUzg_0@HM zV9FN1Qz?U-x}AbgEau*ceWAlzm&Gm4Lfq{4*RmWzMzSxz2H}3!LkJJmlaRauRC~G&t7w$ zuX3LM<6Pfyu8%n7w>bR@I@f;AwZCqEkUrtp*C+M0r+5kJOx~`?6X#02mhij@pWjG$ zZpU#t$CgKXZTkAVbN$(=r_AYJwo_jSly2AM_V`h7ujyAN%wq?Cj@#u9z0J9<(bqEi z4qPW6CAJ>J{?4_+xgOwLmpa!)&h;SYI^VfgJJ(ugJ)G=Z&$6$y!==j)ajs{<+4?%& zseeCxEtAgt)2FnW50e0|A9v#OU2-!(Ru9_WLE7oS=zj-7#1?$&i%$%%a@ZDNoA8Fo zPW;!@#NNn!x4g%HftG*(`qQHw0^1;aE2J-Jhs+bVKyC*FkamZzkhn8|BLB}($`_Ca zU&*cb#DV3ZxO?G5M_eCW1%POWf?IqQe~a3d$=-I5{oOY9>VSf-HU_of`w?696HfAX zaI7CbtOI)a;lCpMH*Cj!aMaH2=yiv$9ls;;{#3|*e&k<&IBzv6o6z6a1ZIH1^e9a} zkVUDbmBKkbC=)g@~M#O6B(PsT@OHr!PDb zCXoI}(EvKYR~_?}_lWDdBVc@VyW|9^uEN zgwONCCm?(x!Z)RaFYv=BA$&5zFG~qu?1xW5cnQLPuT2SG=7_;iHdloEchA3g)& zGZEgI5+3%$%Md;b;TNWa*ZAS(2%nAWvJF}s_+CgScm|r&^$=`_x?!84aT6rjWHuK} zb^xTaO4lZ*qaQgkl^(bH^>`s7PfvwhKX%J927t#&gV2S9T}*mW9a|p z!|SAWxO^L=Z-uLuY=LV#;BxHl#`58J!wn49Lw~%vmBE9sY4(Vmj?Hk_1_&X;h|O^K zqWIr$cFku$tOZyz&gWr}#adwqi@|8t276;rz7JcY+mQ|;>kkkCxN+bPWV0iJC$Rs2 zPs*p9R!wxQOpb0<$Z6Fb_~divY#mm0IApM+T-C{N1U`)d7kg?u)zQPA{%*GGp5DF4 zuad`M^N)uf>;zYC7OKzZDV_hl{$+47E`w9B`e#y^_{(qy8prz$RRZ@aIzre$+4cazwt6Qt;z`!B?Z; zYY_foD#4HY1#iUJ_$sB~r~HC%K*2Yn;FnSfe#$TS78Lw#O2OOxg6}}Vn^5q}sRVEL z3&xO_{u_l9f}i&b?nJ?Nqu^Ik34Y!$cq@8cNGbRwzu*T@@PjD$zo`Vj9A2!2J=ofx}+6=#KhCdhr zY+oBf_uzW^UML)l0E7&r8Wv<4X)weH!U#jT{#87)Ja(|~@PSs<4Mu?0gmGnLCSowl&-IAlz~E`F8E@~~ypsyrBv4)el9 z4{T(DX=Fj3kptt6e3)o|HFNB)q(lbVxu1jV;8LJ{S@lJ{Q0&q0FfW0NZnY^cGkC>)Xmr}Id%K6 z8~y>^@efPp|EL@OUAyBiPUipETP$ae>Y9)R>1V+CJpL_f3NQNXD0K1F2C4W#V7fa5(ASf`DH3( zi64o175(2tDOTBkbpI-wi>vGa6#P}HRW{wf$|_NCpOk`U`UNjU!HZDv*Qo^0^b4kh z>#dZ6XZZymh=LD7!QZ43Jj*Y*3I%_dQt)iQ;N>W|8U=rwO7LvI;0O-INKf!MM{qg{ zo{Nz|KsXg7W1%HxK@Djh^BT?{CDEP-zf|vLOAA`uB zZ|e|k6kP2KUIk<5QeH~fcn$A4zB5&SKcU8nlBU8jy{ zyZ%oS&+^&zid0RCwX-$d2{=2sNjtjXKe9XibCUUg_xSg7lxI*UJ7zuX(#ekB0QsHl zqz#bS$xht>X`Sqh_1y?P&+Sz|yH|gBQulO&uTFM<_Ii-wmUebt7q@K&F2v~WBCw20 zTr)tM?0=@x>I?l^O}YDDsgRfWkyjuR*fTpLFZCm@hBP{ApTYuM>bC$J(E?nDg8xp{ zge&}lcDPcf^YIv zf^YJF3*HQA^uO{u$U#o>X(eoqCd$4C0tV*zbmZ7eSMA-weq9MmF1s};W9ekKcgeAp z<^kwsJP3V_|Bx(GK-W$qEraph%kq~DPhE>nk&TD3mPcR@<5AelcudzMotoBRO|;WE z@BdSizhp$}Ht6k7<8f@m6WE3)p~83y4lrncD{y~r^!9Q_uXm!%_M~?Br(in@d=|a+ zo}Q5X9U+7Nu`{{s&eWsy0t$Q)1{yEHZkU&*nWm>^!yLT{cCyXc(B8@J_Rr&Mz>U|j zF>fGW;GcVS>p%ADZEVClXyi9}l@D<$x3F@NqU!gt>JLyIKg6mnGtK52IMz;Sd-QOB zc2&!V=dycgPZh8C>+7&i_TXmr*djiu&+yIc$!nMx-e)u0{vd3sD9&Xs=>6pWc=wXN zD=gOhc$bcMui)K!c!n5WU37x+x5Ka=hVf4J2L9f`-~0Ic2!EgA?+g5Wjlb_?2m3J& z=R0zd0lV~uNMH~t8J0WMcf)|cFYxz&weT25d#xPoGKg*%Ok_C0VDZ0pxI+QQCJx0f z-T>V14Zv?&^!&sD_(hX)u!i69_ZRO(kub*L!UC-7ci|QE^n_%(1p*7G9e*E5jkqG~ zgW(*d>+StqLuhPzr(vS-yW?38BQ2z98OWC|I*hD%)@?}4)x;pyk{{2y90@&tY!nd? z*(;uP3KIKjVu63Q;#n)Pa2HzyjaxixDH8g7gm>auWk?w45#EnyjYq<+F2NWa&l-$` zVIE;bJgWc+qcovEbq&36t}(jP80&Vh(-_xb>=V!Y8gcu2qCbjfzJ-JmO~8Ppx`Q1U z&wLU|(_GR@P1=H_QkT@ENgI)WG}9%m(4=#bROXTn)1;%2w7*MQ)4^i#OzQt^mvp2i zEk@EDP3lcAsEq@zqxR3o_P4|C9WXeaISvsEyFm=sh&)6r?glZI5E7AHgM<|x;fr`i9TE<8b<18S@r-#$Z17OO$1_Th(Bu*Rif8POgl4bmcsyelB(!*h ztK%6NNQh~|eqJ9}CH9eR#NZ&;SVQY9{at;(PT#+z?~l;;kLMakAyYj40Tg$P7S{{) z|F{Hgn%uX;I5D1n1p-cg@#)=Ze!V**p1ulkXS)r>g_Isa!nwZ5I6rAJ_Kl}cLC}R7 zw3`RII9Yl&|8&KP9WXVXo{Ql18a%)QUz!X)vD3Ibu0BWLRbE@JiL2L;aGf`bSH#uh zNQi4fTBmViTy^5}E#7jwEw187*rW-gyt+D)>bh%c|FjD(C;C=@r1$SM?u)C#kn2HD z%tLW?2ofIk2;1Un4icX92v5h=WF$Q68>Z)zDta-ldLrl*uS2iKm4$>iJS+89JoF0^ z-qnQNJu&YmiTQA|@#*Bgy1`#y0nYAM@z8_F_Py5}77yKygdg3S00q0*yjK2y5f3d#!rwN*)QAH{Shu#)E$#p_e8MMS}J|R|G$y_HB3clkcKiyC@!ft|A_M8u5d?E zNLb`}A-<%4gH4KCFCgjQ1X4-dLi@)LaY@TH>J}tL5=e-m`LATg-8jr9s9ykyQagT6gJg`3!Zt)1W#RJs;O^&lf1pYeWfnAZf*{!^@gWn$y z9LO+x$6pLI#kYtmy#vcu=$?fexaX}e+Go@6&( zbL@tHc}YdwyZ|}g^qT#4+&mr$?|Fm|;${mHKK2No#?3GizDPFi{HsLc$-jx4`yl9h zALz%Vh46FSEJV<6KG5$;pg-dh;~xRZAYmkegosOA|03W6r6qwvad`uRGJK${BX<3zqF)>+S>;(TE%kUma?>4qj?f+PNa zK0#n&@>+4HD2a=iSVyUE>}Dp7U0GZVKv204RFMRl8|Qx_sL}^okOW#3=dU8j7a5D> z$hcpecOd9sALx)oZ57Mo{44}Te4x4{P<@=&BdEa#YDxk%$N6*wwfaD9Nubqnj`6Qp z=K~#)1Uf2i>_E`5KG5+=LvUi;co{)|r}#jpC4tU}8+Rb+Y#->{r0UL(8>b`aA|L3I zB+!PqQH!9dK7`*7lr{d)}3`fGNHbH7aFC@I~#F(0Z65gbU06rYCS-hPUxEh9xu{FKG5e!yi;(*GO`lHjm$*uf(LG7al}ra% z6mMM*X?FD54*j-4v3s^awTm)Z>~>g2ujG-kNK?|<#az5;=l8cuPVCyBwzEm?QtC$v zL)uwM!edE0%-aT&v9FKOkxt!6d?0Hp19mezU|t;hcx7e2vUYJ|cLLIX91t$vodk51 zwTm;l6A*GiXY4GXtE?Rk?oL3u+suP^7SL7J4&m+uWV)d6&H}p1+F@~b004UuwJiZ$SWvv$~f8;sM$!R?~pG04F{0Npj-Yrx~}u+MsUC|3^Ai~sIi zIZWT&p;>N1b~|ub4?U2D7K<1X2h(LgRRip}W3axrBahzt-i|#o_5Cm>j)c86<6KP~ zkpQsciLPPTTX%JYJ640bh9OrX_9q)*uV@^A_3#V5IF!5V6-@hoZuA;Yj@6H}n`Uo* zT@N!m+3~s|dV37U>o;_1`t6!>cGX~DyWDdF6zbP@*`4f+4G`KY$1m9;Cp=(pnzh5Y zZP3&yC$5JT?x!m~+WF7gnoRDLQ}CX)&0v=MVG5T1sY|En(m!?S2whK}{qf0l36%(; zv899+m~M}AE6K5c-xpI_C}(!cGClQ~*lp^t9E<(bJ<05p<>VFQ9F)*04_FUF^cW4u zmGe90LT@0K&_D`jRbzn$h23|`i)p9N-KdR28Cp$wB?R$eUIoLn1;8qn>8-@Y`u-q& zzhE2m&6QPJk@9pGGpJ{|GQ34rKd=dmz@34|15fb*p)VDGD9#7iZ!^=@83zLxpMYh2 z23f`z(8Kr=`WxTDaN~Q}!}u8vG=72Q#;*`DeuJp-JG2^qz-r@9INbOPj^+Tza|S1K z15W20&gKFx;wD_hE!fD@;07LqTX+cW;OTHD&wx&z3HS0Wc#vnqHl7R5^L%)j7r<-0 z5Z>ZF;62`d3qIn#;WOR`zT$o1JKhg|&U&P+$i`mC~3HypK zW54hN*g`de8KZ^(XIXsV_%lq>4`Cxtl-<@B?C-95;G`^nC<{S7zeknhYU(O@^ zN*?7`@iqKveiXl!pUkgAuImvIN9v9E_h#O~Z{ZK}Tlsc=2Y;1s;_vXg_-A}G|CV?1 z9sF*=`28Zp9}qeGKcWwRNDSnUh+_Vz*n@9>6O;MlVk&<^l<}uTC4X8h<=aIKe^#vI z&x`y}XkDAUE+}E}!Oq$QSuv@-6Hja*<^&6xrrMBG;@Fd1g%Ho5zVl^9<3$JYV!OFBiSdjiRr4o9Jh56}y;EiXwBn z=x@Fx2AHpkf#w@xkol3=)%;QnHh&g>L(D(Lus}cz59EmvfgxgKV2l_Q*jtPaOcP@Q zv&0^O`C`w&GO<@6BE|a5d5y>)>&)Vfxzv~CfN)@IRUJu0Hsc5#^X zs%Wu35v|s@qRrYNR;8th)oD3mZCW3(E^W9tJZ%qgWZGnLRN8EDblO63Y}z5>xU@!b zeA*guLfUoWq_o?`$!VL#sc8>?iqq1b5ND*lD9%iKQ=Falu{bB~8*yIRZ{qx*AubFm zaZxZ|ToT+xtPc(mmj=g(%YqZd6~R(*Ww1hA9b7D~35LbS;7V~_Fec)`qr?rtlf_NJ zbH&ZU4dT||MsZv4R&hsgi`W!=P;>;J6n6$+6q|!@i7mm8#ofVg#XZ4)-^9HkF768{ z@j$3RJQ(UL9tsT>4~IsIM?>SqW1)S;p_Ss0ohn`qoiAPqT_#=)T`yh>-7ek;-7Ve>JtW=^JuTh|y)51fy(8WaeIz~zeJMT) z?GPU;5T7Y7K2-v*0r91O$`)U#9^xA{Kzyr)itp7}@q?Nmep1uL&*}j2i>ea8sd}+P ztrEYh6U3kDEb*7RRQ#=OluUI^; z93!V^?juVx%jC>|%tf*+Gc0FiHp%kLBV8&2m0E)&-f5$wisZ z$;Fv($t9U+2{M0@2WA=a;H)fpNLDWy&KfMMv-XsctbJu|R=He}wNxIORU=ns9VQ#I zj+W7^Q)P43MY1Jpql{(UCfl;M%GFs<$hBE7%5_=q$|JIWzLrO2{VI>nmh#x_TzPzU zUwK0IFnMD3M0s*{sXQfne|cK=0(pA&GI?fpM4px1BG1V_T%MPGqC7wQ40&PpMe?HT z%jG56ak)PGHhEe0o$`w8E%KV|x8=3jAIa-;l#J)(%A0Z~$eVLYa#PM?*`8A+ z@64%}cjYvH%Pl$UWM|H?a%;{d^1hr)<)b;*$j5SSklS)@lTYMqkx%8^C!fiASU#Kc zw0th-W%)wR+w#SnPvk2(U&+^UewMH2{2|}WmGZ6JkbEaMPrjSmOMZ}BBtOjEO@5R+ zReqAYOn#OdmY?U=$uDw`mtW^zCcn$QMt+}rgZv?X_YwJX?pyM=+z;fA+|T6ic~btF z*H8YPH^_v%VJ6F)Ve-5xQ|3iXGjF9C$UE6g%e%@9vUy0s z8)i+xCuVKIw`N_z&*qAPKg>f5rP)xJVKx?j=9x`}z0Bsqfo5yr1T$7R#cV5_VXiJL zH`f&&Y#v@%V;)s_sCi6bvw3XcD)aclg^!tM z6h3L5S@^tpPT@P|d4(UD=NEoqUR3yl77+cGR{Rsnq z18_C_1I7nn)84!9z5|MP(3gn}Nh6WezsC;9*A&EU%FD{@lSO|Dva)jQKRqn^Tad2F zS$Vo}uOcijNH54Q$j-{j%qsW;3dIgEsR(iS*n{cEf?S&`Yh{2B;90gP|KEbW+^Q1( z*p=zqM$N11OZZE*ti%@Qa;&M~Pv}j5y&Q-gp~v)p^*1Xs6NU6dAz4|-XcQM0t1P-L zFmf^qvt>p`#^4_QzePnER^O?}BS%?Usu{O&V z_j{ubxhL;{f?T<}1A67kwH=}?S03IW=H|*HJH#T^0sV62(H+pAb?~3@_b2NR0@Ec- zb+Bw)t~|Cwgc7q1j+p^w2j}7SLNrkwa#zF+LaqY5?#(+yZ>(>hc1|zg5H}rhGx0hL zue0%2iNCq{yb!NTFy@=zE@g**-ZJT6CHQyUBI*i%q&>|v`I^i$+?#I5Dm$+H~r5@-CO5fzAZjRjQ6cq0CP&R`v~5T6gG@14>*U@HD*U{|ieZXU8#UWch_yhGmL9ZF}P z!#X;023b%9c`yKa!9ctl1iQhmFarPG9R|ZV7zPtyI7~*$R49i1U?h~I%Flz*uo%X| z!LTPRhrOT{#>1g75t?Bih`}USgB(Y|6gURCPJrof8q9#RU?!Y@hY~J=GS~pK;0o9u zu0d(n!)&+-=D=-m0Nja^?}7PnKP-TUU?Dt)wLA?=;5k?dFTpZ+6%K?qvDSB?3OoLXzv@r`-F$HT_4y>Rj{T>$s9OW*-^89d0Y zfrr=)@G!dt9%XmHHntg_V$Z_U>9d4A&@sgcpq7@S?E`ykrc7myN;j ziZLAiYm9ZRylYg#d&VMo-&h787*+65 z;`fS%86p)hm6;Co863x{waknuJ+V`knTgl6c+Hy9^Zx))O9u#mzaR+PLI3~*jsO5q zO9KQH00;;M2mpFnR#umAe*+q~;`#xl0|a_mR#ul$5DOZY>JS1Be=cKeVRLh(SqXfU z<(dD#nMr0c`5@#@Ab~LiNM@3toSK9q7Z}We1c(WXbx1zKz+@)QOt`$TfVQI6T0F># z2WnZ{=te6EYbs(7-MYKoquT9ukJjE@yQh0p47&gK{k}PpOxW~S_>u4X-uHQ*=l|T# z8{YZkwF>}Nhz@=MFm9KmE7wqgN*acAwLYIffk~c9IMu z6l~Z?#<4A9HF9H*5F|ZV|BensFul(v(O=2W;4-p&KM|ctcxspGU^0N}Vpbxm!c8+6;w* z0e|o2V4z)+f9qtq2+4$u*Nw5&@9_q!Q*j$^x8V*A zcjB%IwbP^^Okd!D&ZpQUiSO3%SxK2Z(BH2IrLbcfj^iGlr7#(?!TlZ|^=drWFEg+# zVJJDs>2n%BkNYGizp`d+;*?IDi_>tm;eHJd;6bV$KGd&w@6o&W3CxWTo%Tb0y8^zg zf3i|m8}55Z!xyFXH7d~H?bH1s;z`AqaMFfHG(3vO=!94?Yd;hU>wWZoV1VAqF_3rz zOE(9-{&0IZsC)XD6{o0t+!-dLzqf9HUX(_A9P{mXg1{QLY-!t4JieufUnr_RSiRUG18+anuA@pUw--gllnqLh3$6yvA{;t8jU`kP6&sb-pOWh z?(yu`oju;&yLBc**y&g0BIFG0=A!AiP^I+g%NkxWb8my}zd9q*j#mX1MNQtLe;;(R zr#QVKr#}#OdYrozp~QVzYJ1h;sG~gu(_4f52aHm?7nq^GBs@spnIDf+Dg9-mtJ zw(PlYsmhgDqz!+n;X9IJ{v?h~f5D(3T=Mxd4S$ZmU`&%p;%_RO%1$!-h9v$g4S$Wl zA#q3&FG(mm@$q*xyk}}|sN8J$)sDYqec9o_-{FTg{Jo6Xf1py4P^ueH4)5s*N^&(x z#n{*H@dVpx5#8UdN96L1L93+xlZGGR$10Lryhg1lENxEAoK23w_!EJoe{!cCKO?H0 zlEw3O{F3hu`TlDS|11qUdt$wlCG9sF{ssTa;={n)?(q%iq3I`;O?Lb{S*oJ_pBg@t zxt1NtwRUe`zfU)8WXFHg);pXE$p32it<=R44s2i>I_&j#%jHWNKE}9OmMY3+*;}Vg z@Gc`9Khf~1Jf?*Mo7&r2f3Md)+_Vcp4T_C0DXt=WVbO$DBs201x|sbEu%`WlP1?_4 z7pVfXiX*+NxXQW1F4CxTxn0bnN;@5Q*hRVkq=*bnWQr_83H5~={oQP5O>#b1IH7d6 zY)w$Ks_i0&Or4TTo+k1om$WFCI;p6btBHA{&}fL8J+gL8ZisO`e^kuZ!~)q69Ffl3 z8j#Gd(nPUX$X?(Lsa1B8KAjL~YAZ9Q%OMtt#Wt}-6Qwf9<8A}>eLeJ6Z^)Q7wuK}r z61z0vmXxW+Vrx^aT&>VVW!!4Bv3j*8u8CW1YG`(d8pA0XA2oFP+Ng^@@Ud#~P=cRe3O0r2otpV;G7n zk-Qy~l(h2C31{ZD^BJuCRBEn_A31+3=)2=3Ynigf=6ppVpktzAT@+5ylm3I{Wc3s) zZYXL*#)fyf@?W`DjcomZERn3u3|>aF!!9mHnq_N#Uju&1>UFhpwm$~cc^(E1g`iz1_!nLq3TmJ~Pu2sX+DxNk*DHhoyLk};?G%tc+EPm@n z>rWvL?vv!#w(rA3$tFM%kdBwC9g`u++!pk3?yy1yCYiJsEL@Za6ltxogpq@3Z7Xvo zrMan_&oAv&qx4G+p#C{0r%oM0s>Giu8E;#re_&(lV+qm?aaSnRI1=(7gsS#PMPLrr zk9mUG7h0sSU)m!$>0Bz(s{dtKPd2fmK<3l>b*)Kycc|w_O-8K~LH%3EG3iAj$<0Ce zRot8r_~p?gZS$wUf@$AXimN;%f3>aPF}V0QU&tBvkix_QTfT-DI+jsMG~K-Vuc7Jg zE4VDM#Rx@hfrz3V%9@r$P-^Qw&((q$_tV;MaBpiRKPLmojBp3)g_+D$z%7v5J2GT5@@R^!+7%xU$BG~@@Dkma{O zDqQ0iCdPkHQL5p{s6DJF5VhIo#ZsfvkZ6+iMf`wuVP2QDyPr+mU@h%YNa?!Uuj|(| z0(6umOm)l@wyAM@CXw914VvaNMNhxlZjW=>Q#k3UNBn;-0>K4t5p(oj6^E}3gA!%u z^jl!d5j|2cO@%&2dr?;m#2!GbCU}MQtE~PYmmmr#~Tz0aS0m*NrZz?aHV?^-s8rrJ$GjhBJ?$SsLfR`KQStv(aYmDD8eOP7~5 zd4#mZ8|c0+KnZ-aM9vsTagsfhOdiRUzdI7dWj?`YfibHaE4yFY%EYa8NV3>_2P)C3 zcWW{}<@o(so8CA>`@C^?R^t-nv8}`>cfuTdo7VdhGOuCxK47hO>R3OVXbY$6^fP?$eBMerYAKn#4kPi3;SWP$bv| z<9g}Koi*ehHgSTkmF2@4)ZWmMdOdwc?wR5Isn4M#oU##SV%O`CA7MCY3^$Ve=(iqY zCW@gU5TDsBddg}*n4$7Vg>;?X~x0M2baalrC$^DHLxB2fL3!O&Q^cr z6Z&Oe(+%ThucWv7FA^Mfta7gVZWGQRje!*C^zBGy_e6%(2?cFZmwNta+=VgI5&C2g zThx3zjnE1t<#l9GGv~*vTKf)Z`>Po`0R@msiP0lGnGfAQR7T^X*J#x1^an2M^!Pv{ z2QKr7R>a7#7E=-J9AGmFcs??7NG>xz3{>~x*`%n+W<&u-`5*aTU#naGeb>6OtBJ$7 zCGTw75oVE59<+$F?qg=wy%kV0@MOX+8Y*P>UZhSimgF2UGlbimr(l6jGn%1g!nF}c zpS!z(Qjv-37O!APIi89=nR0*^&CU_hs8J#{%9045PhDSkVDn1_nAT;?x59;9{k)BX zxv{N$Lu$zI$SXQ#Ry`vvx|_6MPV^>ph{TKPN}8(v9+uRe!m6q7YgF=)xE~Q)U*ewL zO@18~g|&Fcvf2?vCG!PzopYKd`B$!A8)rI}?-P>Dc1!ayi*g@Ea8V**sl)_k4U08U zc8f7#a721wZok?9>s=WfCv0MxdSbaMZrUFZD)CXPs?LxbC}w{D@)Q?r)b7cOS|_O# zA3FMzbQTb5QwgP^{=$m(27`I)ky0BiY#^0h3iQV2v!p4qrAH&B=Bu+JuBUAg^dN9o z#BnR;od#vVKZ`dQUT}ei^4$4I7FhNoY@`V!5!50%Fr8rm{f@+%JyyL^wEL=^0ZYLP z?X(pKZlFx-gqGv~);p>9q?0PtIl4!m}97$VxEPEH~bO&}lWLE@HmAj6S5xHy2O1KmU z9s9iejP3-0fCse48qN|*%x$>}o zp|_|l=}ado!gh6A@bojxybr4uj3Mk%B0w+slj60xL@u{*ur|{mNtDG0lMQA3V)oYv?PTZ%HCuv59b*2w={P9ZPMjFg1+Qpd~E+NEoFYTGUjk6qG!KTwWL#}`4y zP)a=e8>C}{xR_44tu!|VZX1t*CN*wR;3^^rWb3Vp%&WGO{ag=3z2O>1&ldmF9E*1L zBRT9f{7tX|S+5)W29Z51G!0X)m%Zu&5r}0*#gCL7ND`uDpC2)1W1sivRVk*C9=BE8 zxWKAUD^;LBLMi|548MgHMK>cjj3%B)_Lt0JMntJ_tnDCyTwE8iau>?HJ(mGVeh2%8 zwei{`!JVDGHEE^aG{!cmKlPJ`WFm`ecAbWVPr85s@kBk$IZQ&2be4!1PcF<^8mMPT zs-YSzeyTPX;iQl~-&OT(5SO19EJ3-Oii{WB&%`jXW;hakCRCb=EG*WqLyja{ z?1sh9hZcvXeNKJ|P&J@|zz^Jl9*AD~lg2}w43~b?6_S}k@mK#Sfi^y_ATAJbZT|7` z6ZAhR35K6GdxHByyKtp*qqw>{CLLrX2d9L9w;B6C-&_E z)j}{O& z+d^06Dxl%QH%t)Xu@pPE$iC4m-$5q$bAoqY7W8?K3%ZzMAMR?*`+A&``jz zH|dRLyhKc=MODERSzr
1aJgj(3iC~CMum-+fkU^)2o>Oz#v9o-UefORFjxpb8P z36_4oK2`?viJNKIgSLp%1zOSK0!uONUfKm+;pKLz%ZtJdX`-{ZC|djk+KE4CSwl|i z4knclOhdn~b;r)*vf&x1ajN2ms#24c9HC;fVTc03up)bvN46V_>ktbZML@MalcuPfT zn6t$!&KL$`@9=8O$v782F;=#}^OkXHb0utJ98YQi)FceOs~f+QW-Tri=p)t_X?49> zL>yyIRgUvQAJfaK9i^M!NTpj$`=^ugxDFIF)m1xsK}!J4K!Jl~K>uH+>2nj4c@d3kYa!oK~oQHK8gJzDINwHFxZEhillT9^j0{syWrt2%QVz zfW}cH+s3#oP@n4$U?wuk3G7h2)*N;q<}anz@Cez{9hUESkIRn{y&z~yPt5&*os)7J z?Ten%+EwA|HHmjv2wr4FRI_Z}QJO9aag(p>H!nP_uB)LkM7ntz3vTn(0fI}0u;d`C zxaHy8ycu-9n#-4}NY}1x>j=C<*HF_kC}H%yrQlC&%&P0a&2IwrPlzW;lxr-pjjk>t z<-Yb$kA(R`Wu&=9a~|*%3ivks7ap zAd@;#l)9Nrem2?Z7gd%)nH-)E{$6SZLkhsy1ICC_TR)dzu)k z@JI*y2iSk+-S6ISS*2fi=feMmcm8iE{Qt%q7Eq}U<*u@T_HmVQK-MQrh)DEv^ykm` zv>-nPS}kKJb8|=uLZ+Nvk~>Jyx}Y>D!~!Wg+vSL6c1lWpoQ9I`M7ckx9D2Uox0yUaZkKKU)}1a_KAbM=DE{GnW0W#3Q~2R2_JH=`hXhqU zo(&+w4>$wEVa#{)`81}TIq*p zQ!N$rKom8J5+*z{3mUz@txZPVgF@0yKu8t!<6ySQF&w z7_9&J`3cuRmSVIM5t@bf#vc%_m5XEYBw&&X>NUziGTCudTOn?;coLnHXN8LVBoG$O zC#@{|=PDJe@(!x z9Nm%atKaT7Mv!Im;~vw3R)1_VZ78FUEoys${)6&)E9{Bp;ahd=JR|fL#(6T&wluYb^*}wC`PEQj@8x?+h1_SIETWOXPZZFL!MM0L)7G0O1 z8=X_HPeg{;m((^{jt8~yWF-sB7l;TEl0oB)WS~GX)Z|nWnH-hFcF3}C`PmmtNo+RM zTZsBCm)c*~fdY&&_jW=x@0}<@b$nVOAkDe5Kq_8W`rbSZ|0YB4WTlvSG_81-I3g$p zC&6kMI|`vrVKk0We6@uZ%mn1Jw9afQlW$Q6)e*uZwUuTq^iqQ(yH!IN3^+t8J6>22 z3p@XvBJ)BeoxJWazKd+?U=f*J@~_sx%46Ns05WI8k~IRCGykyMSIZ54BPRb+J4`S8(hw8K-k?Ut8iq?-d}3xPd5X?MvFfrHJ+ z?ABf;rn&z%;%q=-tL6|HqUE5qUJyPk&U*}t(@1%wqF3Hb@;x%#t>H4ZVApltVmXLM zvhAmPArcbe9F`lq6|fx8R!R&`YA5gbCK0oyRVzE-TGjZETt%yjZYTZs6fF%1m|4{6 zUA$mYgdRER!ng!hDRxnJhkT9|&&%)Fi+_G0dbKy1NFhN{h7=(f>5CMY5#IynIT}SvRW)h>H!HEC`}W;Qx9WnMo@^F z7Gfu$$g^xzAnv95kcZa^7VQ0gIrUJoaZ+e6hqB^pvhoft5V4`p2+s`cNc_II4GN)f z2Ce(Nh%PG}b07eZlKLP+>E#$#<$wvO-Nc8a+(2)1+5mFeLy?x07jKd8A$FED&=ok+ zNLFbN?kax@4FPs9f*Ke9hG}9&DRrax!cy91o089`S^#RJKb)J~uB#&cvA$)H5Z+mp zj&Kthne2+??v$6R-Fz=ygctP=u~>zCy%vW1JjgSe^Wle&h~@I)N22_Aq&q8xD%h?2 zA&nYL%IiCd)CnQJ@;1a7As@YLypTk4(Hw%pX+b`298zpP1V08c=5T+R^Z85_u*qa7 z8&Ly8*#cam3QnO9$hNfuRKid$k)Ao@VfG>ubkwBZ!f}*)J3tS!pU4qY>mv(;(ulQA zZ3k3dC)^?yTndw4%7r{DLN z<#twCS;$mtvkO-@Cd!3tN|G|(e750@Ep*Y1QvgP3DiJ@=d1PYj2p3hctHM>V=iaOv z_$Bdu`j(Y2B`nrMNzlGdK;4x3TaTrYbV?ePhX`9|-)J?d{9s&P@b+)mg;n<1dyRDqj>}Ud zno{oz+0gTsU7d68W+f0LB5es3Z!F7D=OOLHZ@sa_ou&S4#l2}`pA=fene~vXw=L7X zIAOT*GNy}pdZj}oE;##*Q@~4k+L4GY82}|JTbch7$Qh3|3dr0$q2Slx*MdHhvj%PZ zlpR;QkWi#}qrd2kwkX(4&r}5-mCyBJGSz*{rsHMiz325U(UcUU&(Y1+4CwvpaGDLr zN5!f$p)In#Vrz33?@hTvmr@2NtTK!i?^}OvxZ6rT%Y3th_9RNJNCINK946^iD1e>i zFtqwOSFZO}SB?Em+2Y)fILQlM;Y0OCiqD&q)ar!!M?B`Ll`(b2zu)#4ardY=p&5~m zjJTtvDL1RTjjab!*P~0D5$2|a7@krTf~LZDVKjNdK@5t;J>ABUx$YP7{Z|Z0JBnc# z)f4BOJim_y$3P<$EZwrDGT8Q$?E>W5?>(0)GZc`T_Q?}9 z=CaX-4Em+{J5LC0x1zIAa!7sCj+sf+Ltb>((WbgPnu|%R{resf7q8`Ed;!JKuytEO zAG|W_z1Ls;sHfy2_X)MA&elVyR#wwd+M4a3gny+lCDIkA%d>%WNA3SU z?@EWj5C1O6E^Beb! z>nMxeqecUGts`<*yk8W}U|>NUjWaRM;yArG76C^$L&vI9DP!EC-n3GLj6>mC^OPl!C>R z2;nJd929;2MaD=U$oe=HvF)jT(u(vg)en_81(%wHLGp zrX(TUlsTeSulSL$V{F#A3}hgiM$Ftv&*O`e`;U1GC8NA4P36TB5=}Um@BRQ!gTawG zj@!Z+kTkyiiwQ_ci|_CbdIhUkpZHt4psT82w`kpXYF+!{)oVj1eI_oEBm`{AjQ_!B z7$SMT!@_dCy08}A=~S^1L|{gH1`3i{Hc? zj3r|hj(F=wekRsYE8JrHD;MM9j)hG*7}$aw$dX>>> z;xRZs>twRg+acq5w_b@*{dV`>KE6;_aUX$Pq76URHU%$0oitQoo+t~~!o>uAwhNXcOqtgGK)0TFI4}qoQkN-QX-bK&VoL*D_ zo1tLTI$l7YqiA?YsvLpxvB*a>>u1XnH-Fdqnlb>XE2&`dyGfN|1xR8^iv|k$8NBF7 zlZWugh0WF?sMSjr%;(%#TW1fz2}PS{WMK<@0mO%cU&9oH?`CJfFFQxg`w&Y zattfs^a}*>s*tL^q(%%wFfMrb9np7;4!Hn2=9lKL11dI?zg-gHW-p`v8G{0HaVaJV zOjVyeyZD=XYelV#Ijpc(TaA&oY{thKQp-uGP+w&+N3^Q4TbJWe%oK0ypuM}t8h1FS zr#Fm#Gf`(iZq#u|E7r_|^Lk1*(y*O$ajxVn()WAbINY0U=Ke)QwE;yEQ&7>9Gvq@Q zqzs}wcXy|LByKbp3%RxcQ_CV8%#A()M6JkKC&lS(grl*6d!e$JQyEu;KRLawIOBzhZ7J1EiyCm`jN+B|5Wf#_zPt7s656RFZfd!~n6%kxin=!5KD{Qm4 z18iv7qe@qF$5qLCfDsLMo%IKgpUFpG^jN zxyXe3YG>3MHUAKvzrLcDnK~)3c}w43IFzii9!QSJK6=+$I@0{d*e>|DSyzR9OB=SfNao zF$$*N$<%SUeTgFa$J4~;UrhRqAM=)s%pSJ~8`k&AX(7NRi1P?$!Xu8S<89Q*CVby1 z%#IHs(rAKbFo8nf>krvfb=Drdz=3R60`JOD7Q^<_(JSIMtb!h)H;ZEM3vSjFwyw<| zy2-e!!mArHK9DzEC~aOqD)c=AQy#Z6kLK4vT(LQvwMRL13H4s$ zkFF7sFN^0>U~0e{KXieoWyvIkXV{*Zwr_+l!2OKM_u+gB_2>!AQJenBQRVfbg*-~Z z7)Cs&SOIVH9U$UE=nBxGChs*GLkg}X<&_$}# z#=C~z2t1)VgcY4Jm@IyD4|+yEUUM*i2~>0z2dUs6^aV8YE?FLQ9$-Kaep?+a|Bsg; zp)gz`aop3M2B`!v=}4Q>95JJc=3?N4p;PT0yboMY`oy~SB2Klu=G#}ls-iU+-TP-I z&tjSw|Lw44RIpPp)FDu4a)*;3MbihQ8WD9@zmh-R?V_sMdtv;^ahRNB47J~IZ}+PY zd^eoeghFdgoEe3>PlPadH8LEbtzdSPzH(`@_05fQ(0*)%ErOpFmRhT8-$;KL!wQ*Rt2bxy&fouqOo@4b zq^#ik9%L`u>w;yluHU?AGRUaUVb$(DEM1KyMz5Z1rxsb%nUC&LW~(QHos85&2c8yR zZKY~E&o-xjEn;-?-8%pY%FTFvpcr;Zx72RlLx+tTwaE648u*n4mtnxUXU^*M5nPDn zy4l#QDJ$_5wX;Y@V7XLM!B!$*3&t41^!>a!p=^7IFJwc7z9~yfNy)C%JtHMayzanN zwCq1gb?z{GQ({?QR$g4$c#;x?3Ylk4IeW)YVql2k-w`KCq>;<9RG~!hqD9Mf!XUH! zwDJZrLmlEKU_A(uiB71$+T9jIPqFfIkBi0#{*G0DjaQv{J<7H1_k}QT{Iv%83mxP7 z@pqa)6%;-03G-%k7?BpykhK&l^~yB3eD6sPD81iC;u&R&=cXAEM5M;Fk!e51*43m# z;c@6}Ar~T|s;}8*awe4Gt2L8X3#d@Ex~>G(p{xkVfVTdRZ)&ylkiU^HJ2FKnrXWjV z$aM}wD)Gz%_=yTktf6<|BRnY$2kO(mTN9FyMACt0|Nh!1?cksa!eH(cjUmceaLP2F zBmd|m;6Yt7QM%uW+7}Rxd?GZW7tupr(H3P|+&8(8x9LyAzW*sZegz*tVdc3h8q!4-RPY zcY>T@XZ1@j8H~GN+T%4=rxza=tPQYDwc5+H{xsX&;T7z_aoaFzySbJY|2gai?iuq; z{_v2AP9khQD&)YZmQ@w`KjQ1-<`s;yyDuFs#{bgc{?~2z-|)La5d<>jf&>-`$nyMJ zfL>Vmim1;MQrKW%GXkxN(!PViVM8LTflB5;AqNt}k06T0LruzPROT5rEVQCEn*g-OEtLGzLzyN=)G4os6rnClRjH3@!^E_SFV@8vYjro+MfoD zH9^6dXtx17mVNxX0`(K%La;DnyaOzE51tp^$tRN~gTW(=ZP%k`c7 zP$%syu~9b6V6RFxOO}Bj&SZg0G-9XWjE5W&vX&Q8yqSkpRsHo|cc4cU`;Ojhs1gA&b|39)&9fa1u4RuS7}1(F(I= z3?~ALtVm~8d7h6e=40oj<;K31{s$U80W36&`@6Ua<*!s;js4(je6p1cW%%4A%r;p6fMa`s?i zCUOjscVhJ3BkL&^+=wdhNu*Zf?`GtR^%YdJ(vKBNPZ_ z&*sK_8y!uUb9QaK!Sc25o(1`bO~1F7_c`A5Vi$!nsbgU6}h4 zvXm1w8HOmJIM(u1t*Td3HE_i##%Io7e|SE zKvI0xU8nPWt`a-w{6)u+nHhP7)eNBnOEGhuJQ@R3s!sSQPN&mpe{^>vh${BE+cw5) zbN)WKgjroY>fgTP*Xh zU$Ds$uV*8ztSmF1zi$bWv|WD*@XoIz2e^pb zZ;%b?+ebT7@pZ6ZMEB0tjBFm_8f7cv9@g63MU`%7o?84lu3=1h<1!sVa#Gaxk=|y5 zn_%1N3=faOuwB>PjlI4IEkoVaqA~3f-n9U#wt-F?ZjW6d_ET1~tLo$%djA#No1nhF z1Oevn1ppQBiEY|h(9|Kod`ghPub`+?V-MAQkOO)`>E9N*Kez38(>F_6`Br;_LFCUM z8T6(MA#+R-tRyjpG1TLMsZrI|RtfF^oKMDUst?KQ2PYI;CPq@uRcXgF4vfR$WFQ;s z30J(Ob;nv~WfW^sJ(I~z(94SEEZiv?408w;x9P7!{P&Z~1H63$!{qOr#OXB~(A&?zVn=GZ~08Q$Y!R2d0k zIIJPf1^6xef0OtaW>I6zv{cn?KeyH@r^!IGM0_!#IgX8~s3FV{GBlJ34n=0p^TJ1Z z^&%~L{8GrLjRT9!?KR9EEf(6$sfDHV8pf~mg_(O5nXGMhZ@o-~O>}HjFMxQ*E_iC7 z4omgzUVIJZqfsHxA~2h%Cwmz&89nmsXn}Pi=fpXJll16>GGCq1Y=W)(qb}HAyn{7C z&S~ZZJZXlus)WV9tJ1^4sw8-0s3AOsOfw%elU=RlM5Z?)5s`-D%M4WX7_(^l*;*s8 zZx`7wi?kSwqSd=&UW7>(2TZIZF}<<}8+x}J7F<`G;jj0L2h=I62+x=Tq)77gtS*V# z7V!pd5KpWcYgXf=9AGrSC`efAfMzArrV?$ zup)gS{Y#Ae%bOB2Aq%>0Z%8&16k24J-|%^(pLPoNNmv%j6|IX@*LB&Rmn4(Lkg&4c z0%SYmYn|TEaYH|;$Ol3Hm2JLIYfSQpS?vyk7H{aHWD2~k2))*RYQbYZUze}o}sh=Qq6Sq7un9l zr$)1L0--u+0za@*xao|#F=VXrv7}km<+9SW8XfE{_>$GU8Wrk~8oj48wS&ejCC5!J zVOK%H$N7N^Oe+?ps{$$T2y9Umx_W9$s5hTT z(x(dT?tI+IeVv^=ur@7)?Kyx`n>Fx{nV(f(OY=RJWcc=$n_AIz=}!Yt`fzb9UHtLs zliNiAMoSL#Q(CI~#2EN{l3Tk%9lz?_(l;ZKmz&8L@Piup`F4H*n#` z*0dGS-=A_Fxm^1d^Uoq5sJFn-U450LkAk)VCwjAWs`qM2C)(t+F(;e5!qhjD`=C6X z-pqk2({(1NaF>6qVFT8y!#Elj1~;98Q$A5BKCh0t9hIj0Obo{_atx<#n7Wv@m)pCp zlTg{H%qDXb=y6tw^CN0D8?i&Bpcpnj*MAuQi5wj=2iY?hmGYtQ5#r{A(2ojcXC>JK zJAj5Z!a3rv!kC&vN$WM#MY3-@v!A>hN6BxW>1pl!ndLB`y-~QORQVJ`@`$uO$KMTn zPN^{*s+5kHEUxk@Wp`v>BDO@cDdf-Ei!41XMTDW$x1dm@24P{z3~~Qu7O9=3pxF6% ziC0jya}p~uGecy|1tAXJLH&|+-M`uahL1o`?8us?ubTP5jg&9kT67YbKD>Uv;ex{A zQ3+_+Z*gAk7*Dc%bXS5evu@1B<10v>kk}{T4(1Hv!+QJ>o~s6X;||dCiPfJ6<;^!80Puv zT{JvVm0O+8K`vf<3I6Pg-L5)uddMR(sxzZ7b2bvAfGy9j=*d%Fy!K1hP328vgBTA% zaAJgVO6#br`H{qlafj4PtQ|CPFa9SEBIAlPfPNC5|Im#~O=JBFJBoZ+J$%?%MdPX|jThgb!Ua>GGFtqm)C+&cJbbP)o#P0U;qu5$~*LfaHqVW2x^6`f6JL zZ^|X-Cm63vFLqZA`xD6FjkFWRAfA}?o`DE9UucaYKVNe*M7X0DMmmC#^k=ROvx*7* zpHyvJZ_G6h5CK=yILvHPAkGK`#gJM(nFoIFR4jYr=(uNTEKAbXXVO-CY2d-c0{oM& zndpKhk}0Z-!BlkUxiXN%nFgZQRb~J_GeCMdklqMId!%(W_{@O~ep{0_%x;%z-7m#~ zOkWemjc0H;sdLz=G*~eC<4WC%=&)BO9Oy=EK)>B5_9@(10mJR1f%Y``Jr`!q@e1gy4 z%Zdv1!isowNCZ;wOaveX|FOQhmh8+eGr8`eM{Y>d3S=q1eEF|>4FtLw1Wx;Zcnx4~ z-fgxq|Cm@er`{nH$FJtD5oubr zoVp>XrkLohU}BjeSty!}>INhu2S%Ln!ux`wqbOx+S$Ib#NzxO#iY~N&a5?h&3-OMy z`$jbR#y9zj*_{PfUSrxhCz?^UbTzSetghbED!(a`wU6WiwzyS0M+t8pA$(UYKO0ID zm?*k~N+XXnFa!+vc&A!Uz$Q5v{`PeQot(>=T|3e1$}+RbIU6v$C{v3R--VGTn@Ka* zh>P#tmB1{!?>V+jZAO2t26BboAP@DYh{_}Qs!gKk8nAV$U0!n;ADrPTv3q#XTZPh$ zT{JR_=l;0`4mUK0d$+WX?RA?8SU_+0v)XRT`BL}mFt}T9a5|3Fvnc2D)3T;69BXvp z3m=pwQz70mU2b9E^Yjc^HwS;T_kGcVL(aDt?Ykn$+lPo=_+58F-@XC82EG6|fu&A# z$R6k9QTJXd5A=}(tlJLcI}S{2#KM981Wvfg`s7Q{Ni;m*I*+pZq==yq(r&?w6EJkeq zlswU}X_IfgsSeR$58tMjsRyaV`J9Ag6-;NKEd{aga7H5%06|<*HxA4`PaT~4wJ*lz zVNZWxffWMt6P@YEv_4u5%mb^v+9*wyKyMJhr{8H^f~|~JNicMijbDQqn8+TA?}oX4 zI%m@f0R zI5$UqKA00OBNzUDx8fq$x1G0ht?>P}6mhQv62<&S(X>QWx|jh~v=~fm!;GXkg#bG+ z=WbmX{zNX@i^uwlrUc$&C~hc5W{B|*0nPK=n5lE~wyWfGL*NtWfZk&W0~QbTKox+x zPp_ZkD*>=&1#B8z5%f>}@{t-fwyZdSbZ=V6pJ&{K z3FR+__cN<0M6vq?hsXPG_1{jgb0|4*dgJj&umI)XEAQ-Lw`Sk=Z_WD;qTBIX{35~V z!zgd;-Mec!1XPa>gTYE+){0QEL>zSUXV~wweMj*rvDo9KdU6X@r7^4{*@&um)AZRi zHrFtW0SlNxf^&@Vat20I-K5-b->LgfSR*?=U|DC=n!^tDc~rNd(<9F;@E>OY5MF7R z8*I8>Eob%*3F#a8vfMb8G5VU!q8VE5Xf+G7RB$hb;vcb%S9q)af_R^TFkpU0%jHB@ zxRR-+r0)ngZ+7=_Nxk?-Kgd_|*kDHODko|@T68c%`Ms_YqvLU>W%vFRL47s9P{@q9 znVuQZI35)w`IB6g75F!tPl?ijIC-<98%nlHaQ&+#UNC;3O9aYp$ z(4o;-iZ`68&$%?%L1$hK^v=I-V49c+b4QYu?Y~hhUYz=Hu$c(l`f&RIofcpJbfdsrl2Ghjmvww!3kL_H6jPp1?Y=Y@1leTv9 z+Se1yApW`zBNHA#c{M+Nw=wct_ZM`A^6D?d6ism$*N#y>ky4pf)sS4;7Lr@cIM(bx z_SBZ**lu$s!7s{a=5NQ3ouhM4w;ix6O}P8Gc;eac2c~s#3w;2Q`s}a6>zI76W75;S z8)v_W6MpXC%VKEH-(|-{mIbz&@}ZQ1v9m7gZY+F)UMIgUJSH#~$IM*Js7HsRSSM}r zu_DnhQ0_Pfzkp29W#f|F7`Ug0uS`*kzhq||XqmH?*kkzvS*$wIazDpvpP91jC$!aj z7jhCw|49V7D!&8y^FK@IeG=7BmM%Dwibeq%V^EN}o+$2W+VD9cLj7RQ${EfM3?ro( zFCuYULbQ%X(2=s(i>h*dD%W)~e^_dMSAU_<%Fx9N|3258@}`A9Rc9^}Vgd(Wz|#Cp z=~PLE{7l~vDNi)Gd+fY>ZmnBc>wJ>th|OMIPaHP~kX1mwYY{v9`zsTyV{TpwN|&^e zwkY(W$m>rA0@y?@kgAX;N}8^UU!~_1Q4rdqiWZDm<_A>;61LgWp~KACzFr%>Kx|^g z<6(IOZyOI2Ut#J)MWRq~)PLjoOC*~cRsknHC)=JMe51&*u z!4;PhGEw5Tc*hH}o1;*hZ5@=-G$ROUtE~^EuN;YrUd=(nA?q==wujz>+8t2yrE&W) z-sYEHwaLMJ%IZTgM1P=Yn@EXZO2dF&!b__blH@n9$mm%pr6bsAJx{tw}$08@szZ=t9$ z;KV5_ur6Q{J$5ZY^pD3PRPiMH3+4Vzi#sq(5?6zu?DB4m=LLO?(?)hx*yf5p?b4Ru zVQ7+DhaznJFm9}#<{{N8d!#wU-%hTqOFdD1)^;)&qC|rou=;Grl%)sG%z1=sGI6_N z!~Nizs_f(H_18novk)GA(g2xGHplJJnor|?%v`K|BDRv1$%im z=nw5}yjO=ZT`~rO{hYzRYVsTv*?v|wEVEKWT6MA#h>fGf1voWbD0nP0eP9$IP^LTOY7p!guM<$gD4m)Y%aCqZy;aSy zsc#)-*VVDkC^KwiQC(LnWnW7!qie)&Q0-gLV;UWw8QMNtUmpuAktcChX8v{N6c))( zHnKRjji;|N+Y+Cm8`6!E8pM!goPdG-H4H<~IN7B->|u+KnPp}a0hwpmz!;-SXM&}r zn)N2Re_UaM4zpZ?15$q36c3JIx#Q8xFQ2n+IsGO$Gc%-zyJ(jQG&j`;z1sbM89C5e zT?a`8HA8uCBwL`WqteX^JKmxEsl}mN{z!3svM_g(ZN$2qwK!8cKj^LUH=v-MI?9=-1KZFIFzTh{6^W)SHcxh>%^{=lw{Y}U6V&&_(xd;rvb2|PN)f-O z?tb|aS{!{I&4S~!Vz%I#I+o!5o|Jc)`;$>28YZ}hC~4^-mv8}BkfcH0^nb{D$Kc4e zux)rIw%O6dwmB2q_QbZ?nb@`_wr!_lTN67In{UoJPrdbi-_t+3YV}%s*REZ?Yv1d- zFA$&LRSZ~ZhAq{iRhyCj@e@4}n=i|_l)a;0FLT{Rbb7CdvO=$0m$i47Gp=spVS^A$+xN+z zEnAac^cUV7t#Ic_mHi#9p1u$r9l6xY_Zx-<59WA4dx+>uJlJn$%%&{%BRrw1Z2Tf| zp#+t7QmMV*yq*iCwc*_?xB(UO?{|fK^{0#~%iv+}d@2KkxFVu!e+)4z?O0zQIv($B zjqWo$Yoh(J-4NC@Ppjc64*9fO(^y^X9V? zqvJwE`tWuPRz2MSQl#_Gi0ij-@Jz27@H6OtDtNgkELZS=*`4)d0Wun8KE`kz$r-|@W?SSc99zwO0;$DOKR zv@rk8qf)~HQsBuE;G0qPz-s>IM+bCpK+2{m7#h$@Mdwp~!!T|iGD1$4fFkiN7=;KN zTu?R=3JtNE?He*4OsYl{Co6Uf&v>lY#lTkn9jbogoo-SCAZp>$o4`DXs`6rWQLA!6 zV4=)v!F7S?uh!dKBU{tkWEv&-ym)0L+7wy6!ot3rE)P?nJrbp!<;L-X6N+ANG%S8fv`2de~i=5Bj#v{Mg=dFWQmm*hf~ z2q`@YOk2oXv1f9jq&9y$E3J?E$%dBB>PA@cq?2S1C3_0gydGgt=Qqld0%@61V{a3WZ+S2w&{0- zS+nJ^5!7`QT*);=r!SsciJiBst)M#gfRa+JDa9_xYCelTHqhp}^PCBt@bA)BQh35` z@2pd|wpo}CW)0(9sT`30mS;eonrakmg-0h%WWi}8-eesTEayy}Y9~%#>;N>5utkP4 z`JMb|w(+S$>>4MI{Ys2)%klDp`0UuB5n}tb)65oJ#1qRiNa;5Yg%d=+VJ9^2vH|fN zhwDq{Biy8_L$-N();a}!#>^@x^%no6US_BUL&c=7#X_OEEoy_A6pbyOe~{l{!!wRa zx1RyRgx1BrEBsjL!0z{k`x_8x25CG}>F-xBxzgJnl`Vp4$rk%iY7|7b++e0)42(L6 zHS2sulrr^ZYwoZ;l?Y25EPyEJPmV#Lb?GdtIqv;WHvDTp#S+*6Lay80ho3QE>QAFl z#;@9uds6@^W^a0INdLI9h`^Q`5=Ly^{FjwroOm+uJQD z7VC68*y{{{Ek@~Ox@&@8K0FlWjwxdE*5YICTzQC5u#8@YMw@PbvpsZ7V5~*$hBk>q z9YeZn?2(*LhC(-dJ`M2R>XD;M_`xFcuOc(+XCkZfr_semGPl4W3uzZLw90z*lsj{ar<|ei482A&H3Je5uVaHlLR~I)H zS_h}oT#>uP8!$)Ct4nCVi|_qaMBE%gUY2v%V4ExImana27Qu24x}s1$jg|^`$#09(_*QINtYF}F;vO6s zlZGH7ld#Zs&s%1Cs=M&Iwt+<=43bNGr#m--zr?0Ix<4bTd7-$CZ`0NW0OiC z(`uwm1mn)DZY67T;h7%Yvk*rcB=p(>wYABi&vt(L(*O~Zduf+r1?{cRAgv{9V~Mp; z=Sh_o&1>MiG#E+e(Pby!b0o%se{wm<-nrgfA_6jG`53;&r z!DT0OXX`7F$f@}<=0!Fe2^~btZ8GGRB4{12eL4XM*oIMYfuUER#Ci0^G#o_ zPZq%NO$N#eZs;ZP{(7ZJac>zUjfs)Oh%BtwliUCZ0E2S_gG^pAX7QJ{={nJ$_7FL% ziW5U$cnd?EIFn1E6?Ig_PJh9UZz8*$Z~JhM=6-lneU#~%v|&xOVA8vXVi5|``pVJX7^dDJ z>i~AdUt20rVNALs+`TBqHEE{Sd3?DkvWJ?RzZ}N^?5Y@$r|)AIwR@n^8&Lxt+U~Zw zGUx0aT*MCu}W{@daN%EMn|I^-b~y8}~hAO>%~78mg;f z%yiK94EkM@!e5p3$LCXs10A89NuUbMNPyIj5STQ2n8Y`P{hj{N^tahVcV@=JK_)MA zSCS(nXxrB6V)JNPW>GR@rR-O1OHkfxl=gD^QNtpBaEH*|#MJi1kZ(fvFlH}Mr#e@E z%XLrJMQsgsztKc*`76?uQls%wpx_2AHMd9ak8K{BN_SvtoS?mc3ut>wprpADDFa82 z$SDPVA5pe5^hsOru@kaVwvcqf72gH?XfMB2 z4dl1LB`go!90Ae>&`P@U@|O$pF3~Yc9+T?g_ufJw9~ak!`2x>(zdE24@AyXdK-UBX zu7(RQ%NdjSd+*_k1|aPsf4&bB!#2%U{HlrX!4=wc2JV*l#fY5~?f z7`-)Fo8D5xqmV$XGD}zL7XqAem|PvQr~3^1khjm1XSx!9G<_r!UrY?t@>@6g-6LP| z+MW92(<_V;#~HX&vT;vs&#P0+Se@*nSHJG^&Z8bj`)*~CQV=yFIT&Wajcb55$K-*jw!X&nxpuua?Rn@weyuhF>p8l<{50-H8o6bVBblDN z6p+6C>hXbn{a(%I@(y~~K;{noz7_k%J9PdX4Z_JMl3v_{^#MpGzt#NSee?EvZt9_V zWWS{ms%&4TIoYFb%J#4RtQMhTgi~Rwo64R+WFN7gyD2W~=$9_w#_X$y(j${8^cWjcQ;6r|p7ZVtDuE7s;vi5o#vg1`nDVUD^^ zu9uiEG{}W05UI{|PQ?MKH)knBQPGesK}!V-!5cU(f|$fbVMS3f#1iZcT&OUt^EX;N z#=Bch%|0r#kuDw=Q5O#O#i3@T*yf50qK@Z21F=D}(<0EKOTQ#oy_%BPIO9?S6MHpG zS++Upfh1}7r?7_$-rdvNOHANHtahGm&2c~d>cQ!QC{F#wjY*!!;q}$9R`; z<8I9)+8pBjOWEI(u)^Mf?6t-$nA29g0ls6Qth}ZJWvHV8fHD+A+u4zd4u9BR`Hi!2 zDC;N0Ja{RWAOQHA~kVXJFW$x%ri|%Q8!@?R@ z+o2Kaskj04t0k}G&X75|M5An*E>o7BCA%eCZ!BYaA(5V0_z%@(gLjnwNMEs`jEj(R zeX!GXUxz69<0<+KCS5>UC>(j?uO0v18*#PeG6U|eoE~&ZQ2SltOg08XWKOZ9M8))U zu&b$F3|cTd=~Xn)m?ct`W^%3uK+s=B$ld0Wps2F9yp}*O`85EQU}vM<&t%-7K)|GE z353|^C@DX1BzGg$dPNTDQhuV|z|ok^zS+IpYMzzxrfuE|+U!bpi~io$%{r(0_aYj% z&E!#8%#9`KKI0hhbtQuB=*T#$Ev(m>PVtNEAy$xRMyMr_sYl9lnF0`>CNht<{`8~X zs8YFBt=GMjB7wu`R-n+%mbtP4TUUe9zA;wYeo2LL+-t!!d!XS*XYEhg1-G zji^e@1b5=Z+9NR?BI;@2NmO27hFEB>@bYSfK}186LA$}{hC8LC<+F}%$u#7S!Aq#c zDNL1z(nJGtrlrzoTlBsd(1V)DU%Q3+)kT%>29C1M%KBE5099y3Qahe8!^iA^szDbB z1SguZ-#b1Qth3UdTvE{v&*PW)QWZYB{hapvjg%}7rJ1&Ja2O`Y9A5UMwn`55!P+%Z zD`Tg!uJSpz=5riGth*J038~IYp#_ALgqw>s1iU~Ewz2hi0%TeL4&{D^^-0zZYzsS@ z^hl<26!z}9b29_MR_%WN7IlbNnZdhM3tUp@p6$Afq7?v`o;UJCx%-cXSN=2E_)VEb z4&%iNW+gFa%!{xd1yunsz|u)6hmkNyLIj~$CvoI@F^t7qzdzt8NjLi~Mpc!Gd|FAz zLl+ogZ{F>%xZul4XjG4RGCFj=Xt{6Ja7#DUr3*jC>hV|2o-8Fd z=B)O($Uqc0M!D;5$UJVvjXfM+*y68 zqTP10NG_(lbWoxy6D#nxf!>OdWs-XcI2Bog2E@2@ynU1G=N0( z%uw@)NMou?Xx5#NVk8+kp9rF#!z~#PF#)w39RTVgb2o;cO+1?uRj!CQ0#Ho}v^kBU zaZDp&ZCTsVoVi4e76vnh{7E)EiGfM(b@noNursN={sei%8qU8R#GOy>xjBt6p%s0K zC@YE`g|Clzm7Gn!p@bBr6w>5p;tF0B?F-wrNbjACbu~Ix{k;48l&IN%nOiK*aw>&~ zg{loYpQ96UsvHT;P{^)Dh^TQy83)jX4xGJhtR;^Zkbsnw6K$PcDXUS>>wq^UXHi=h z#vL(a7_YL~?|RIV>sr3Qe*iuNwr+^{CPZLAz%5lv+K5I4zM^~g6swn|iGt82pC|jxwmc|{5DjNfeDO~+Rzr?eeNvBkA|1hQpuJZ!c861bs=1;;&I+_$~=d6;Knk5KB>iv;sW}S(~Yh?h5|r& zXH0Ugtzbm`{C5M?m!Ya_lTUi4a(lM>4PV)wpVmT(o~lL|mhfZv=+>f7EJ*kXyUo@Z z5^rAqaxF4ap;NR=J+g)nOD#IB4Oo1keVBB6>f-W)=l3$HZQ0uK<}KLWKB&huYAGZP zal##ktIGLIy9%GbX#s*Nk{Q(d?qKDVt}bRU#Uajg7^r9(-7hzZmxyX~?eJFaXpU_s z@3Kbiz8+-X?g zz6*3Tw>!|k_>oRNdAT;2`pIu0WgwqrBn_dTPDMj2icxiB+)U!faVo<*Y5Nyp|_ zt$MSx9)nj!=DV)?*3zh+SVXjGO`mp}egt>7t?jm5HZ3x`eoxjn-qSHVI@{rd?BuLC zqT`aMMei|Hnq6|>zL9j^QNNX?s;PBsI(y(@hD_4YHVf1~{yXF*@=mj%=acRA5U1W$ zHhNC_LM!b-x8Y;FriLApkviFKdRW(z=n%kL9+K4)l4af3zRY?4bE*X$KD8d+o>S2a z*~y*Jw$G>FPr!@h>3+Mo2TzaH9ozjdf?BT=&ewzJ?;+d!%1;nU0}l{S9x%m(LdV1{ zPXj}<0m49;tB=btAHkUYVtkw`e#o~MK>=hVZ^GY7iFQQ4fA2^%8F!eh{9<9;Yp+J$ z)Fr3I-Z8QpZk9*Wfef^Kxs2u7gHpI>`7Q);%dGpB8u)dVP!uJmb_1!dQGlW1CY~nT zz7mdjZ2^ks8+0ry9U*EzNkmRs*Lznk=)3YV#@y%qcP7Z0j5j3a=bT|p{dK{#@MzbD)GV# zX8?st!c+E>`ee6Viq50FFOpd9=PMqH<0$B&6G+?Y5}j0B{sxyDPsK{FbaYe8&KW+D zcx=r=;lgaBK@rfntKT2@mVD$NR9J;I4MUsL`PYuFF zY@o(kkI##)iAZgMe@$TUtlaNX`O{=h<6~5+(2|m0G{k(RUY*LpX~{LEmEYA4$Z`q7 zbCB>b=gUKPh+*#@N+m;a&Z#%%`TCp40#^;q0%h~VW&6JEct+dEW;>rnqHva)W9LvSUtu;sBGdj&Za9gr$PBX^uP|Dm|d%~l8--NCI zxD2H1t|gcf4$jpQeEvgN$b=(d<|#26UJI$*9cp85giXiaJ+(M{$+RK5!Yq|wBRYQq z(LP@~=SbB7!Uv6`z(rnKwh}gqDP~&}@{J~Xw;hd;#t8NcL!pwtcqeg-KeJYLg1LkHtEb4I1*$%ODJf(dYkpdP z+Y)C6tdUAzQ{r%GK5p_-87%THYdY&>wFAHYoegT_cBDVHN=In@czn!o4X z{8E|*3xcIeLvyfTG>xIIfsE9$9!D(f8b?H2ph2wG)X0f}&d+z;RW>@vCK&qu^^~8; z_0N?f*`KLjhHITX1+RL7{GxUXCid$0H ziNe`qV$L?xB!;`wRP0r|gA6ex99=~R%%x?m8-wM=l5JTRGqVJM=E_YE8UGeZcK{LX zV_3MG=y%P9O0VKMnKv><7lQKJhVmCTV5WeM;Jz2lA8e?oXKSgYxvFk%mi?piM4O_1 zjo2J0YQkpvEQ|NheP6{JCFSzLost+;x^OLc>^|6CD33_dOKRVutwS1LV!nmSGW~?{ z`jfdfE2b`z-u~*-}Y)eCc3N%pqG%F zm^DX-QqEjQuqKZ3I*hLkTZyFaw1IRZs>UhJ0wan!VmwvDdplP^eEey zFkeTm^Ix??j#=?KR^MLg7TqJWapw;OhY$&*g7KdnV!?ka5@urnU0Fmb(lyxEW zv8N1fNND!8ujpx)l^mOUi_c({I*}Jtux*87%Pc-Teo-B#PO-$I%XRa|KH@bo?%aF} z&Wczj>Nr2KjiOusVPi!SGQhV0w2z3^Dv!8x~AM`?oJ{`gt#&!hPa$as9krs)zC>Q#>S2O8<;i#>B{y@z?u zdcbufE6t4*OUOkBV~jKv^L$I;KJb7x1FMgsMQM&KFuRlQ zjN42)en$dtn;baK41`Xh@=8-b!&G}S34WmI$_bWvGkJHMghmYCq;^6gsB{;&B$gMY$=~f+iNDA6a1!JtV ze}s_2b=yj}@Wt$@i>FVF-e&O<@{!9gK*S)Ia)-@(;VYVxG_b@m8E)R6ep!W8|0;^2_ssA| zPo#rCPC6Fxu4cJl3Zy3cf)ny~wLeMI+j<%7vXAcWP!6?nuI(ln8q zQyuHrSVZsUv!+-OfC4s~n%@I)gWK$_1G;Egw4%R^l0%rN{4g!it;dxxI}0KnY-;cb zP7jdcDA#H-1+4hemyaJ=#{ZI)SQeVM`Zmpa%{UXfmamwx_#v*<3`G%smT*eix4{R1@LE4284vLeG zSf*P*2~@0#8a5YVwSbRV)j%PE|}f0GdC3((}1lj0)J54c&dHtgS;uyj*-Kbaak+Pl@u+QVO^--T2N za93KFv|%<@tdC2>v+O&Mw?7Y)X%C|w(!3o#68;__&uLeVbvNL_K#+Kq7kj{hn`EgQ zMpb?15qvQ5Y(Mv~!#@+98cB?x>@LMJ(!YkI6WDeMM(!2WG$jKxa~I6AMKFYz`Lcsx zlAtW8(_0eAj9dLPb5**=!c^PN)>W->elN9f<(2&v4$?MusOXOHrHWQfr!z@83W6Y8 zxj@^*^1p|tjkGrwi>4GhV ztR=-5R-Kqsejg6_GkKPYU>jk{#JokYc!Gm~G}vZ4O5wVil)g9C;F?smk%53m7E;Pk zX~HtGedlY;T6h+zDEnV_Q6kk!I>~C0Qev7HbN}UVgBTi5xx3ycqxl%0d6)shIRqE3 zlx)SyG4D|n|7A4Jki^J#WXl!lvMT%U&h8C#xCtqNdFbN6zHz!l!X2TQ8NucWL9o?V zbI*SCIM{UL`P(-wE%rM9s&J=b$2LPuC?d(sYGysd^8%^Nv4RshZqJG9mSmQrDEja! zlN;gHPRSo;R0YpybtNX;@1=B_^jR~FE0Bu0#DHDCzO3!#1Nt>~RNTTngmKFGNSrw| z0XhV5mgs082D|Y-*-o@6*+6gtZ-y=&Z~Zin|M%&v=?!>t98M=SA%b~##j>RhEOBn| z`_&9PXhmhYHJ5hWUe z3y&;K@2?std*&Np$dw_mz7SC`M$xXSKg%1a6HsD-!<6ipwnoikzM+1R*-5h5d`&aO z0x<+JfvAT!@Fwt;H=@H9*h=k$buc3@D0)-*hEzzmsW81EbpSvj0(^_I^O*~N^*1Jl z)Z|*T(g6qF%Ia+w>{$ue^p7aG3BfuO5NY;Dmi^B+U=z50f7~x;i24 z`V!x1LjoP+fr>o~L+Ll>ngjfv4f|K?OR3m2VN@Y4){oGc=eM46PnJHF1s_ntm5p6| zZN9xLa=?HOuUlsc7qkzS%YAio%ggJ&svJjPhelAcNr#B&Z&EudZqp?Ci z1r$h?brK~;cX&itEJ<^KAsxprJ8+rw8I$BQIp$Z&??=S|$=9#%RJ&;=(k`Voo<%R` zPNsjH4ql(%b}9YXJ9Z?#r3uo+um$6U|Kd`vy6v1wnmG7Viw`MiFO`(n3N ztK$mic8Sagrj_7KgiQ_|n>=eNBOhBp#^kYL0rQ(*!Ge6UPYubko248ulS17}@XMq1 za$2UkjY!118BBLH<*5Xa@+Z=x;N-Cmceb3u<*(?#%*>vYANMpJwVhhDr9oVnJ zVE<}qGSi||t1~ANXQb{dI-@)9;x+@RqqwBI?jnlKtp)t}@Up8SV<0j}efj`?Y<{@u ze_YP46#s^-Nw0$I0T&G@%l~xa6Ox?e!U#(bdu$xbAg#>;hq!o_pfl8!C@Hm_BIIy! z{TmuG0dn}kz5(zKq+Us&Un+<+XZeEom0)lhw(GMydK@9rA9#JTnC?&lV@>XdCNsmN zDo#BLqdb&@3MNU58gq9pHK3_h*k;<@!m2CIZCZ0yv?r6Qx8a-QFbvcnWH;;_b0h2+ zMbM05e_>Zaqj6%39?CC5wF(=GPe!c=EBTRBGe+mH)v15PPAOkaU|MaE=5O$$pRcds zZ00;Q4(BX%KuOY}~tnlOx1zS`{_(X<%;%Nxklt_sITLt+}Ytlg|d!}ji8FJr19prM(mSI zHDW_r6=STe0fJQFplbG~lvN1FfM~H_nu!1$CUgMD-byaJHK;;Den1AIh7ixiS}1`Y zbl~2N8ipAj=K_S)a<&Fx3Dv@2aX8!YF;mgcml@#Y(s-5A8UP34`L9HPW(B}+fMZ;Q zpR`&*r>lEGwzYOkGrtJN*BxtN7j_44MXt|g9he!2W#9&lu*R~Ty^HFeOqN}am;bgr zp|M(O#JSV?tt^v5tk9D9_*<_`sSRhJF_U)sB;%gT+(nRaCnM0VxD2u}Yn z8tcO%nYVcsU%v8w`&0RSNt}dC8y=X1VfjzAs zk{>F*!Ua}^K^>Md*}u874f)|)M)?oKeq+|LpQ|iF|8u+jHQ68ldFZKF>{C?ud-wT< zhpL5#1%Yx}=Y9wfCX|k>kZgNuM4ocKo5rT>dc5&(7aYuViMj)XgD~v9q-8yx?i`hv}BdsxTCDDWCbOiS*Y2 z^t?{bRgpR`4FpzMfPG$yK*g0aTe_BWfngOn{w9^Y`_E(b`l z=WR@eDMoH?)iL#S2!WGcS&gi%gF220YK>G<(MWFy58zw0yLsh=Wr~mQn(X{d9iX`A zblkvm2{L>I>z==)CHNo?aH4}NA5St0@mNM{`6%7(7SU8TLV(%ge6&OS$lq-SKI)%y zd8|5EF!gOGm&8fcm3A)J*eI=SZrS{L_p%*a;1KEmICdAeXEc~MHWN>|MfOt8>@45q z?_dml;PpknK{gP~X69`JN!m2cXlBkW{}tIANvY0{=%piK)IlAp)Dsd=a-kt1@m!8{(8ICLr^IT#-mvrk8j?Nm{q21fz;sQ)V?Jk zTYL;w77~dQU`=YjJdKb=v)3~Mt;0r=N3~K6m>9QO%<_pNEEi6k4{YI@5U(E`s3oRy zb#j4&gU2?bU;mr`l-YUho+}qIP@BztfO0p3w*3RCIw!``9ajfeM-e>-$fH%J*eN$= z&OKy&o@ncmL5wRqsP;;7Q?n*ebV#WPav*O|DpqyQX7dz3Wgsk|sNl#vbrv{9Uq`u} z)6y!Qf#hLVF!JpN$Y@baDM|4S=5q53TVb;{q*hwoazdGd>z2%jWpOAbWGFvzWg>zb zVn@j`Rn^ncd(RU|QfMXse-2Be>m2&$*&^EW=Fsz*DkfZ>a%3^&sWBME84qnuYB<{$ zFPKsAkV5BsE2>4kS@X7UULa4qe){PN7Zb23J4$&Z@}eKQEz3AMz?%USicK_13*2E- z@c}cotZ~Li=Zh1WFy{(n;{7DcA1L*faW1t5{AjFypE{%=Fo^NMHL#c^a`+>;CL79pb)CR6d_YV=DPnYm|&N1h>JB5n8f&eWGxlih~hT)Q7(6m&MlM^e3qLhDUcfX9(JLaBI)=+ zY_fXdD=lOuuuh%DeXL#w3yxSvCS|17V8|4AdsgGmc_za}i5J=-y$>2Tz84C4N0;By zA%Rzp!fyh!Zox_w{hnuHnKBhO3HJak#;@w?WlH`EZ#NphK|zS3Num~P$oc08P3OE( z5rB>)y|1ebauC;fY_3R$HKp?TPB8F$Gg@}7OF)@y;N%~5AYh|-wDap9?1lEl4bDK% zAfqhROg6jIL?vGTCGAQGQn4>4=v5c7gde3I92Ii`!W@`stczoX1OE&G^$~cd(N| z_UIW1tgK#FKkozq={O~vT+oKzp5myusWs(JejgURl4r8;3}(G7VP*ZGD*tUYDoTRZ z)INGWC=D>U4or5^M#?fzs27cl;n(u@Qi>o3wt{a z^L(Tzazw2oIz=MInD@IYi0lmmtMeB|XUr*|(-rEJlFo%@Sd1sYKH%_+?frTvX*TaA zkan{R51V~VzA;|6ek`-<=8;TzG;f3aPn6zG*S^4L&^BRuMfKwIhlW91ig zlC*;kvx89BF7ZB7SI&BXc;cbGk_WE7qTXQsXvSmNHI`f{AX{N+OVWikTZvIni{Ed~ z5-0xz(OnGdfyz{cL9@}AOPR-8^{C;7S z@tR%vj@q?wu?_d0IXDQ&D|<#V-J{#=Cw{koSbiY}EWvlIaq1a$Fjq7G(OJgP-`jW} z@9do9Z+;|l*f}2VFL9>LfEaPY9Za*|=_p{+ zSpwlgt|e_1T?+MOcWe1cVdj&7MT1h=3s+GyZL?-%KSsa^8ytux7l~5xuFa@uf-n}C zF&N{Fv099SnLWU8f4|vd5RGvagp5I70(cKx#zA-*!M`1tJrWL!_46>h`xtz^E{3X6 z4~kvz?Y1d=$u>cDd-;z9=R<3J2=9cHSI`Al;vN2OSD##*n0F`l2;EB{hx}i&CkJhj zGUsbDj1-1zhCTVDP2L!!&rGotT~PFM@F|ruZ-TLn?(vPs=&MaG3xfNMD#-O!#+AQ4 zb(0ZL6pxJgdXOdmbzZ@Nu-VS3M46Zq^{1xoW*O~UG{om!gK1!1mr7m3IN(TXO=4+g zIpBz5{v@yv5Mte63flvnIHu1~oRpJ_Q&YsRVv6ewjG!ZVpIZ;PJya$=VA8`3%Y-bqC*y@rD@wU+%OnQFLUTp1#7+EEi6)J#(ihNnX+I$tsz?yGM*MZJRiG1gD-EA zL%h}%KTyY05pPq++oQTq$C>N`C86Wr8Qxj--Dqs&s9N$NgjWF>undJNYVWFOA8Pfe z*U;{HQbF4LU4FHToQ~&7aZWL2{m#s7FTPZ6Gc>53 z=tJJo9ay>R`ubjdHFdx|jPKmhrASttC4EObP=WSE%}E8m;r%g$$^5;g+D!yuW{C;{t#O-Fex6YsRr`xYS zU04%0ye@5BZiVxrpBD?5ik(CZ$E(;HRj($}aKr_~ z*%24FAyCg@6Tm?g%%&hO_p|0+r((A?GLb3r-@KMfPb~E?+0K%ww{=Os%Tt^UX0}QM z>!%_rl zy|N3Xuo-~AMR8k}x$J+%2Q8TrHmmGQHU8OF+|QO|d$AVA{C;Q}m9#lohcY^1%zAej z(1J}{f~-yLA5lVN5WY_^~Pmo>xB`vLbj3~)JPs!Rzr_0wQupS|< zaB6!}YEG*!Ke%j*JZL4@_|>A@X#{Z?<7CmBDh&^GWTdCBNDRrj=EKVov@SSxK-~D| zav71cRFlFgRw#HT zvG+r@Oj`w#&o$RIx{{)Z0uM-8=LE+B+9;!|WBA&_Sl2Op z`>LPQC8$_W45-wy%1=fKlSRmZ624kPW7u9b;jI6Z^>^p%pV?i4Pd01~%K(1>m5S%C z);}}Z7=<&^)|YNFZ!!-v+ktN{$MRp?YRgFd1rQa%-*A3PJT7V*I8D7#CzR7Mww>}# zFY_oG~JNhEG+*i}Z_ zaNo(0Uj`~qo$T2R_b|z^4xI1}+rfG1f*8{I^Q2D$$-a-qo{3iT`e`mWK$)>;vf2~w zB9Q7*LFqnvEM0+*!Qwo}A6SJw_4PpNSkIJcxh9mC$48F=Tk;HMdoa4J=a{-1^=c~H zrcl(=rtIJy-6&Qf5`)VTcEy*uml|95@oT1;qfS|7$b{LRv{s98CS7>at>U%T=L|^b zEA6Pl7jRe*`v0C#7S7m!>u)11EL*a*2=i0V^y9mDE~T+%?Aw;2@mEeP4CyV>7e$SR<-Ij^1*Fds40=r z+Rl|<`NxJuH+Ao1u<%hFZ-`2)!GNv^OnYOM+qs|T)cqEDvS#WFu3-O~?zsgYD3_-3 z*Qh)LkkdbGkP3b3VgFjE)%)M|{xC4=?0@$K9 ziTX|;66EIK>LP00Qa_C_>r-|=JQ*ghYOV~XhE@2QdRvLsB268>t_u<7K$B#B!e=vKO@DFup$S=)5icpbU|`+~qK zk*pvwM}}#sgDwf6Cze4ZK5?PA6Vbs5p(z@tn*;6mne9&3daQCf8nXGaXp?d=U)0nG zXA+pA$Ew&qq+YPfJG?fTb(kEDh5#15BUqkHXi$@RwE}-|RJNZk$=MCZS$NqY^6#&N z|2(L?Hf3~PpFYrkq5ju{Y7hL>V2|^HV*^z-l<`zCK6Hm&h1(L7;}v?e3K~s`Q7Y*r zgsh%u{J#b&pp-32J4!ZNyY8L`WBtDCRWD{-s73ZEoqYTuPRV5ono<8CDc%h|v_=%5pmY{qg#Y=T~koZ2luZ+z$$p5@%JX%Oth0mS_MweEm8SQJ4#XQVfVN zc4^BLDWdEWHFG>h%^>T2-9gw&{4BEghdeuFLAyN9cY8N%d$N@Hv8j?IaDG=X_@+K1arzm#u~ z|IMRI(uSKTYlUb(2g`&#l3DW)SHOGx4V54cs32H7H4o&8)Vz+kHo__rb7TM7ah$ry z6z~AcmOUXw7cEp&U7Bh#eFD6{ncu)TFzF*wxSBEYqE0c2)6#uNxySDxjl#5m-1DaU zhBaWb8c}lDT%=v6#^xQWswFQcY^*5u_QG1`E^#8Rp;|0?yc6wwHA6h6MgL)iJ3tBX zf7m+5;7Z%JODEZ}ZQHgwwrwXJ+uE^h+qP|W*d5zO2Oan1dEU3C=9`(?zwX*~|Jhah zs`FgeTI&$;DB_DyJQ@e_t67S|H>Sf}iq!WR0yjZ=pTk=l*G$coI2_J(hpY+|vNd7SBWYHCUr!{!U#Ov- zX}KTnX|tW>4F2V5Q4z_>5?F=l1l+;2WD?cCvZF7omP z+Dh6$e!fdENKxp<3>l>!rQH8KeES5H6CObQZ4O!5*_D1|OFDnU$+bH@cKyTuifO0; zQ9qYfSbtsQQ0K&qj5s2L?HSeG$Sl3{N}zAXULuy_=Q>w>!+e>pG}IcR0~~WKZHf2| zm(-0d5B}xdw}wH3X*JxwsTE5>CQ`|}O6`Yk`0k@PB~^>+@4{z0KCX@F4q$LK5C&hV z00f6@GGk;6$dg-TOGusYwneUM!yaiy!5{&0EqNCI(V3L z8!|k+cc9x3rXR}v%@HIInIqSWR*+dmezWUI14Uf z-b$xK{-{qPR~_+k zyx#0}k@2WPZp^3)tAiSyitwfR89n+Hl(paW%w5je7FuV+CW0i4qd)Uj3pUyvA9N2yf zO=_8>Y^6+n64BOHyr_%=H8TpGRM^ZkYhR*dRx}Egry20dlH+zU?ZcVN4-l{W9#t-& z1C3HSrnO^e8VbqE6NH^fbD6cKb%K{XvEjfepV8@52;^iXk3Nr2%>&yIuzJnxN~D=< zVpdSx&E#e4pbmQd4Gyn<%QTky~TDZ?}UrMVb zI_sG9SY(fiI)!rAOZ44-JCCTHT*W%`7t-SP&ZH>5j6JCg=+8!Pz8H}Xap=;IQ{>?v zXAZTJtJ)xc^FbAl%ko&S&Vo{uX*ho_hIWK#=@qf0JgX;Z3TyinrWNhsl~Nq*tbYjd zy>#XTxE&Jh@{WrIY~TG^$uu7$>uiQqcisyc6mbw>X#L{oGTKzn)2Q z#-P{oPY7-?h&_jIWkvPu&^}^A?>XTYVM{xt`iB1QG`L>xK!G3=j`hfygYwn>z1iC` zKBhY_)~>KiSv^CHYJ__448wVUIy~smmpkk+lo%tB;!XX#o`v1Nc;R4M^(bZNM0Q)H z(p^7?UJ5wT`LQ<9e9`^h!TG#9nZx^FqQ3wA{Pm_ftc0bO8Sml&u*)#Qv~MUWJBRfB zON@l4z>`~)4O<|R`iRoTxJJWQksTExUnKGjYb#lIFuJxP zC$GZ1*la;9Mi30HQ~DEuD>rJeYfwdZ3)WmIZvvS?KA#S4AwA2G)3|(ni)O-X zoRq>qJpG+zR+2?L{zR)bx<(U26%Wk8ku*d%Q0UMoLkRS)TNUYo9<6e!(T7alE4Azq z8I2$b@3{Jfp#xukuKOJL&l$~|YC(qk<-NH2ANcG4O#o>hwFL0P{wE#);R3h<`>!J( z4jeZf+5O9vp{cfl@riif!8WX(!Yu}a>kEku%^A4}MjDY(RDg*d+VX392BLnp+T*&S z#43xE(`vm$+EAMK5oJkgX+6Y}cXgh!@k&R(y1(#SiQ8Jq4v$NCppzbh%@*6AoZdOX zw~eol-sj!Rcs__H7!aWlj1a+qK=2u&igiqz&VC(O=~641940`qd()DXwnU+{#H@t= z1W&}15tT_0ONI*uRvn$>=QQjzV+M^Y!b@BD^~aJg|C53dFHQClYd#}orwFaCRchQC zXU*R*Q&vrh>{_;H@sNTeK&I6FGk>pg#FN&41Ur7IoW+W!rWg_l_LSeZK9xBchb|TU zmYp5=1l5Sxic7et9R3Jat$_DEcDW-lrzA7Rl(HgqiWh7Tl%i3kHr$Tx44$veikz37 zpZ<0?NdPf4*{5mb`#Op3fCSF8{CPzpNE@{64IVBp`%i-%kGxqviyA>=$GI2pXu;8$ z*GS)ybE>Av3Q?+!i_%m(UP58OfkVlXMN%Qq#tNHSpr!aOk76Yr(W*!~D>-5`=owo2wL9Ej4llSLzHmuKR)-%OAhU7B-Fwkt$=4!RQ*(QC%O~jSO61 z18d82Xe{m%v&(4ghxB+3`&Dmch%p7nCB+14wW#Y)_(Ci^(bGiut07Id2h(rOHX|k! z5wL{>OUy!5SawIb)A?izVItfCqDhqD5Tr-v)&=m87*z_|wZmXG(LUa)k*>7aF-MAt zPJC6S;N##T%4BED2OsAia_8~q*u$#8m{{3SH071UNPbm_EW9aiwXyw-2WRM=`8)X> zp~h&)qyZo!F;WH8u~ElW3n0QH$rTH9u56*^(C5HqE4j<`W*A2p^5zz8i!jvojQVM ze|OZbcM}f3CG{^k7+)0lF;!s=gm%8dAow;|4c14$fm$2+;rv+6>tCjEQ0dYHraziz=X?%pgW8=eT~^(SH@Dj$1s^<$Y9DI%woS@wHiwTN>z2GVfEpU85O16MhrnSgM=(9Uw}s?@Dfv66r_1% z2Yblpx%SJP)xj97t`6_-kaKCiH#!p|&KFHi;0{kEJ4idrKqhFi{@b2+eGamvD8PCo z;=4T2Z(z{bwK|s3uYgqc`{!TglEUn%d9>#Cpp*!|8%{HY$*!uPST#rq+9^9IxNYSr z&mw;urdx5FC88vjmK1BTsyeaBEVMg54ckteIX_)zx&nn;pB15`N>p3G0Hj8RJj)+ z)X7~dk3B(_M03nmqLnR8hNX3!*iV?10I|qwF3jjy~&4jh7Wh ziUE~C4`t$O>ag3qL+Yh_#W970n@&7#p5Su}ku2dOFq070yGoC8u1j-D%6e3h)$HLj z_Z{ARZ@iwcsmCS8q1;b5L5!HHvI${ysBDGO#*<|TtnBu^T zZ)^W-K`%ICFuSAZ{A#C&_-qSld?C*#E%_SKzH12pVVt?7kIOQCv#)2a>rWu>^Wcwo z;g@Yg-^jtx!N)d$@7a>pMC}rQlM|CT_+U*)5RzRmoGveBE{gcZk=6TfEtQ^Esyv=- zIesKI$K#Z})3m;;GmN_Qiv5L%d#CM)=gL%hOy^eE()`e?e4WOBsh>k-Iss3XNp1oyvYQ#*1j+`_WG_i=|D0-cnV z;gi}8K<&>MmStPjIbf>u4M|T|Fkll6TR84VHad1#S$VD{6u+>_yT6y}OYRZG?F!|( zc$qmU+E6APm6#ue!|!gKMKm8lHLMJFmVAxv}?E8Yn=OtJPG|6~Q-E}r5@+rQIyHH0^`z4PB zN4!(UqeruREK~X}*!>E{Z>vCX9#}D!uYQB^9D?-smveHfC~WDYi00qc%k!5Ib`8S= z`H-vL6hE%a&N!2Vj{2F&~k^g^U7b|eX1x+3MZ>~kUeEN|JaWBj|m`GBa8cJo0xE0*!GAbiY=rULy zWx4tEKT(9xeF(MNYdpb#;@MkbCVupBX#%!`i1^pT>VxjTLBq`Z9-P^2B?RH@F79(4 z-*#?1`X1VWz*n3BLf^V#SQ3ONP>gD9&ZFlTE0~qeRe%0DJK$Und+2mS)kcf_jd|Gh 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

FA@AX1* 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¹U^DYW`BzDFgE3V0V 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%0DLLO{wY-I1#BZS< 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

vYWE|OdEq`&}J~i`Tkrd_K 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

*X`{`}x9iS*`=d zY;yEdOlV>8Y>Nyx^n?}W_8KOdz*T0!IS05S5rcmdvBrpAG#7Qq%a`8PGaaTj;u;id zbk)v?9C-Tr&?kf1%;di+|DjJ`v>M~(;$C7;Mk!=t5Jix$&rD>{9NrI4>K7n8!=euC z_@p~j=bX2J$cv>HF$0r>>yEv9Ry74YkE*Bf3Ka55G+v2^ZUcwtGMMN@hq_CXY+o%_ zvqDEPj2oZDhUHx5vP9SCl$4j!^MT>zD!8vEyZ*ye#&S=Z@rs&r zOjG%Es5%t!29nc9l;gZT)3gVMG3n0Y$5oOFQJkAS?o-Q@tn4H=Pe`A?1R&uBxPB{# z6khn+C;hbu8Ddc0$CL_y_<8>>TLi5vB0LybGn@=OpmedBCV7fKWM7AK(M`z)8-@2d z3U0Y&y!~k|D%a{6LXq($hDU74SW{M6W&?Jtl6h&u5T2O3hYUSo_0lXeCT@47P@h;- z`)U_j?DX;I7M5N}2XD1f+K|!Iu9kNUr@gT6|CsQJ=58#zaxDJ@tKI=~+GM_=zH#WV}*8go-G~AKuS(Y~1h+@xw??1s zg$M2uGI?(trVXr9f3uPdYOrY1PCD=O@mu%T`vrFbE{XYvB@qPuRl({}(P|11mdx}O z!{x#Y&&=4}VT-PdH*NrB=H)Zp{WH0)_sc=%hcAiIHJa6Ra-qA(^940cWsb|YMZ$0c ziI(PitJhkj|Mgs}9laEQf9ETXXfigf-;R-HTafJf*5?IEX}`2;iEohJH-_OO0PQLj zC(}20!~M25ba3(b2Agz=OS))hUy40EwHUEB0)`JAVLM^XT@4U1Oh(d0oO{x4cQ_*L@@PkJI4+E&)d#iV!h)jC5NIc>{&{yD zp4$7twcu`ZK3J7|_+4e^y8-1*@vY`HDo(?bzBO)4tIdeuWXxOPai~kkawA1U8z-VZ zd4BI&DbQA7mJIMRUOl5D^m@6*YF`dN!OrU0kZo3d%{F8Xyl%uw{>BEV$Gk|%d~JEI zTH-XYa3$rh<-<-_S?>pLkxbfy*PfV3@XW-6Ym>{ECpsl$UkQ>12AK@a8K);|^-#xP z2IgnM(Ak|5#uq7>(2-dD@*v{!^mO8Ks!KPTBer~fxdniNzq&uLZ*Lzx;ttA{-rhqw z&wdO`+~d9;_KL69BI1l~eb!EG`E8Ze$j?;jz-WuzP<_5mXD6!5E;svHjk}pS(q{B? zJ@sRGnSuBI72)JNv(lg>I4)FHolV8aQ&Ke)ryUT`h}1H{wM~6&6I;LabFQ=18_3%Z zvy)=eO$6wA>($hG_u}=Sm>c=g*6@UzqPDxdcAQmY-zp0bAzqb zqsolTe`8>UZlgpCeXB9UALhm5ZoLw1i5mHtTN7Xf3L8<)t%@?&kYaI#jmQ?%N1DST zMQ;i3V-+BgVj&ecY@N=rr}>ZcGh;z8&9bKn2LiV7KlgT)sRVk|BtsW8>{O=PPSZI1ID2{#~ z4+#Y)o&NceVmR_r6-~rMmLCk$8eJp{rO~w-CU2(Tcs(k%(UIKw5jpmudw8Uby(X$> zs{x8sSbUfiv%R0!uhA5r@hUcDRj&ARy(il7$2+YJ3IMS#NgfJRq`CNi=MBd}H5<@p z=B@I2?z(+NKa`e3-85$~7iuvr()pbvukWkU6OZRBYQ_{<@J)iN99^BDzjUmHat&ZQ ze(K!ek%zj@V?Mv*A#gIGwIa04r+qQqtO1(GtI8%^ZBx)Rl(bBa3P-}0ohJlshcIPH zVhQFd3Db{v1f{(-E8i?Ze=|^1RcHZQ>d97`%Wvlu+D6_-A9F(RMlIe*Xm_BQ$I7Y- zodUMbFGnrKE3y_+a`iMk*)DG-%1T80{QyWB&lde2MwEkEcEAZBZt^e}()f^X;hbLZA~^n2RLj_>WaA4-wob!&F$CQ3 z_VV8p4w%!he_f6(YjjgJR!fv5)crkhhBSbwxICnnMwUkYhF7_LIl*r&Ik`3 z+7DdDbgB~78>o_G>SW29g=2Rp7>@%srV$Q$`5$pk z^EB@WGhAwK7}UbUh5A{GSxKZ$qs;y0M;fcc1viyjGB#%;`I`ef&XFaoWk?!x_;j# zcWfJtZL_g$+qSc!#6|D<{=Y%0z^3N6os+|HD)Y_rD#%?R&H9im1bG6l702epHp7-D)> zA)XtcPww6ri1D!*?t2+B=cqCG1gm%}^-~j>o$nkon~Mi*d)PWs4!4)1A%?|}WJ;OI z_x7ZC{4y0QpEB|0BojHg@-}_)>1*{w2qYS{hzQP5ECX&0W9lS+hg&pR?Xt3kY)S!z+LZ+|hDVuo zrh{U1x`zmYfEuK93-rNWX8lq^lnyM9iydmXBLt?T zlqBa-VvBua%gy#58Q~p=9MI|R%hy;Xv@7EoM5V!@=!)=rjj=MSO*S##tfjo_T=EZ$ z^@BUGHpxE}nl$YQDRC!%x;&^~M-`F+Rt}Kujg;$l*o}IRT?3MmboE*lFG-YdNs(oh zeLZ6ETKlB=uI?(}Br4aDs`r_^agCCbG@M}%E;D@|Hst4a4!8EVPcJdb^$^&#>=!bn zT(pNXu>7GC6u`u^d8^;Mx~6D3Q_Ak=we7xJcPH$__5Gokh{23-=giZ*)tDmz1|>Ws zb?sauXXswCNz*$92#mix^}s!|$5Qw2?3iw_#TT7(#}3 z@@IFzjcENd;HPIJv&H>8Z`d9H6P0zQSoH1!J}_kn#r8yv;;c%vKiXjGesIQ634UV)73Xxs1cAjco%3*5g?E^yYLJ zx&tfXTp_0D`s&v4W}f_)p&?FI+L5SAx3E7J=uQd6!8v;Feg&-T^ToPq=~=sGc_n!A z)F@x)3K!uV>$Q{O%=6O$C7o{CwpMJ`j44H5cJboUy9T29Or%aRF}oC6ry3-$EIj&e z4vR$YJ`dHXh9;~rMPY^Xeg3alKxkMGzti7L9olR78l1%8v8);3-hme46=9S!YF#Xm z7*l1W=LM196g$NQj`r^`&G5+@~|%7XS&rz@GF_{% zg8I9Heb-h4{opT>&&-mg#Fq%!1LO8mb>cNquRWyFg+X7BMZIr7ecVxxk7J7T0!0Ne%Y5#(MC(iQ0 zjb*aAOHnZ(pD4g?ZCalf*w5ALBthhI>HY}faaTFt;AOP()z$RYU4B2z>#tkLX_KR| zvgDIZhAnYyd0%~_ZD})i@bZdSlRRPo?c&&a!^-%p zMj1m{X4>AURwR-)En=rJh~}))l}ST23{|~v0lci76uIGU6 z(*P1-h|&<0wM7ejqb2zZwkR9lj%ZqJGl5(-tPUMvSC^`q3l`SB zM}UwzTI3~4G(py1Ip;>0>?^!Rp}jtq`0tTohrU9Dq|mKAl1RsK?Q^WQEKZAY@hYKu z_gy=j=d!~WblV@a8gXk)7!4;>yOF2BdHT8Wf(Y$rkziWWs8MS}CG30|amShOF559p z48{f!+^Q=InPWBq#9h&B+Y?#v$+*day?~zpi5+?p|HG~7r9sqamyfqWe}GWu7e2?r zcsxFj=iCfZ6=6mxq`R3`u9e|C-ag!CcYUhN`v^C_nH={O;rMCGcV6 zN`yMNg0VdkJ5|<#xGX0ZEl9;}D4e!-uK6>A78J(Zq<*(ha^y6U%?Q?=W7y zR9)o5n=4^nVtxbW{bNbg7n;uF&OD7i2nh?g@qE4XD9bx=N37*$Dd};#X$OxWNodFj z+?`rgR(X9$KF;?$M5lBs>P*$V4gfd1Gsa|(Cl7xh*F|99oM>caL|G{QB!NR$;O2vN z_-BjHlh~@-*~e{~Qygd_h}5>3+dI?yenSHb2s9@vGA7w~dP9wtL4-vcUyoNN=&u4x zJLmUWn@Cu?Y$bUAj$S#0CTRtXD+P?tY{|}`7_sL*1|)HH4mv)uankcvUjcbj^Z`gc zyEZfatu|pJcl3b4b#*O`=AP&SorKa%l;K&Fkgx1q&sW_+JO7#^_gyKP-FUZdSd}0{ z3EZTesEmSVS5S&!xeWXE0L?A5s4CRM&=G%M;m1ZYS8U++q$h$U*=garo(`B+&(+VQ zZ7J3H3-g~9QZiCYCPRb|7$0)5|L@WHKllWJTm+>549@-4hw%O?HJETugoYsngCH25 zsd7+xL7yTiKUuTDP~n0)iF05W96b**`mq)W&h3P#2xlVcYHO;z2pDPsq}WT4fA0Vqp@pLw1t2Pi5HiOg|Eg5 zP6`oV_tdlqus7pTCyM9tfJM|Jj1RA-geVR6g)y_4s2tYLQQ-ttG%X<|^wOM^)O3-f zbL|^~_m)@)vxBUPO_uE8rPe{ipmW&>Qu6xu$BT6n6mz^NCyFdcV%!chvSV+7=VMh? zFF&8@`jjgV;QI6t#IFn%xyU8xqU)Cw;sOWBn|eQ_%L^T=5~V2d-{r_YJ8sr#zW1;- zmzYPW%rGlo=BkgFqKPH&#Zs9>H=U_})H1Ff%x6lx+2zJ3@R+zY#kZ7gib@Xn7S0B; zaX6S%6hz0NL0oiNZaqyy6Kt<bzNeEwBAkhgE*I#rM9K5?VC@MQK`T5-H!-U6*&~CgEwmiU6b|s zm$+&os)LXTiF;rD&@YNqLEFHbiTK$~^dm^x^*fy)$Q(hLQYM#D#-7NXJ&o`0!|@va zbYGi$J(e6XvS;|zPK?umKR46tEs;Mr7Ijv5Q3U@X6FO1q04-J~D~<)`MmraF&TV*| ziSMmoaIW(r5Bu&A%B>i8i%c4mNpC5ShL_{2ai-*kt(s)AyWZPCT%1T5{HriZtKQwmx%9JU+fFD6yZpo-sZ`%v49hf|FmCrR zX9qPwFe@y)a$TpA2?Q%PU_;&clT)pQ?G}L|r+4sF+L$%x`BgZK@DXM5AG|Ti)NY^E z!ad8){>*063Dc_JwmV-9ucL>CtY`LCZj&nU1l5E$BaoI?fKtYq8j3DM zck|nx7MsUCjYEn}J-Bh;bPf#Dadw|rbx$?0c3*okXM-kI-z7ItTWUhfpVmB$EG0%v zVcjuLhw@9i1$qZT;&B>`rhU@aCEuww-Ue1;qIiSElu!wf9sqf*$S1-}cD(pV5Vc|RbGF%ZYbz_9eQkULPcxhs-m71f-FC2L;2RcYS z18#Uk;jr$x+sm58AWMH}&8kGkLz~Wmy=U*F)%#T5X);M#^940nA8(xj`WMJrmg@AH zqTEnk>a$ms0l=<7>!=kEZGeqXwSi&9?+$v~{eTh4>42yOe0Mi}a-lL*PegcF_}|fJ4zdFX10}3BY1^^F*eXcY1(L{NhMvdS4B{ll(8U`x-uY%k zvi=@yM+I+jrZ~A7&Zf zQ;AaWa^JC!*wGTfxC${i<6m)8j3}r%Yev|LUc7f@(7e==rhuRh2JLPf(^gki)*eF% zOMnl}3YASUwv{>cu3@*fmgJh#Vh!#vz3pW!2CW178d(k3;?=dF{w6L|d6r>iTEzS4 z^%wMQ{3jzgMwKQE+%=^9{epByEoS{S{xn(SFFHkGJA~$O2dMOeVX1XGM)UZNZ^vtc zl3r%XU4$1~+h%ImaIso32FSWD@QfMOx_~fMwaeAep+O4;eBaS59=wSpyojoFa!Twk zRz{nauFU$0dLxM7Yj?JLW0G+{7FD8~fhxzB33Q$!lE&qdg}Q2Cr;IqQ?KlkkXsPWP zjtQZ5isr3g9b28`UQt@vI*Nq|bVcD7{ZvX{6rrtzd(OTt?bPHWYg##1A9-%3R$z_j zN?Q6<^GolQC{zkU>FOE$bkCO`=bvlvL&oKskIt>&yv)A05qFSM4<%mbT`qlB%WY5M zryBXrJc^gX?(-Wd0^d%T8-j}|10&Uu))Mm7A~)Iq@@`?^6#BRb_92r`%9M&kYh;&( zYMd-Lo-WLV<7Aj}Rq~XxqK|2@0RTv1sH5(f&hOyx>qz4IL#e3NWmWoq=ySxp_jFhF z+t%YzMYZ9_ufU(bQpaD1 zwhn_Q^QOL|>oN$|B9`ql;2E($nV#)}gd=t=Orrw=C^59sV`&fkaFyWH_4uC)T3~)2 z7;u|<3!g7v4&9-QLsAC>6zuZk?;vP9Gab6Uk(IU}=opfGdw{c0yD>>i2LGU#P3(n3 zI(nY%yqt+?olw9%L?);eM>&RqF^!}I-?t?Jc~t(kKs3L1$^K`sch+({Vwt8<3TSBey!`$9*H55)UlL-%2CC|N>?X-g@_@-9#7zMa@vzdJ+hjQi( z`c6@Rb0o6kc`}+7p5yt`7H(Cr;M6~M_Zc7mO;?g{ZJ};tk58zxb_9R(v)fMC)M_8j zyr-}2=GAKyXO4mfxg%|En9vK*&mi>v4ma*T?j1Jcw!6X*$ZXUB< z#jkj%H&m3hXQ!Si$t!^Vm3v_nTdoU%*^B4#i6Y1a=6F|;;kc8zQDrnEl(CPF{{y7R zPBn5q$TzfmgNVykIC6sL9QyK8ZAapaRG;=Hk}!G|w0+clQlfhe&o**@#Bb+_`z5B4 zO^R+QR#`XLk6zRP9vZW)S~U$BJVTYn1vIq!E6M8Wj|JAE+?{}!atCz^G~}eo_2!M_ z*zRvg{gCdr$w+M!n+`wg;NQ3e&uY&w)<0m-jAf_#$h9M-bYMsZTm=*ngo8Dgg@}|s z^?&n6$Q$zUj)!{{NI8MBKRMX9?Ht7Q&Fc1rdfwL%3O7`nOM#imh0LUbccaFNUrjJM zGodh&Z^6*JVxa>NeqDRzN{^8s{v!75%mg8x4X>OHbF;uZsn)k|G^ZzLhRZA;ylt-kZ+`Yb|uw&MO6IjY|N$q|3cIz7j)bc$kNZ$I<4FApy zM_H8;GM{;gj1G)#ei_WuZ-^;Rn2@f@A~Tlr!%sMR?JNLDrZBISV)TcYB3wuem3Ft5 zKuEAwp&>&|0K^UdF<$Ygf3&`ko9r!K$KXj7jFEXABhe}TlIKe1Y6Oa(@@hm6>-w)- z6zpdqe^0Q?C4GmgIgZ75l`46V1E=L|_5A6!F&@%mE$9g)kF%%D9EPnwM2SH!``~KB zP3^}ksR7_b4c=ui!;WNtbKynBBB~My?N}DM9*2SDUJpCj2tx>yo0o~stTNmdVr6Ka zZe9^vz$T32g($IRuCq~k*H8$)MOGM`xZ&klp;8qiQ@vEz(XcUzxJ-vAENwczc2Onajc-Wxbn z%FU{yt&!f+(nseW)U7J2LRP7gv%_iD{a)>`RoNV)tJh)u9d`a<`|p^1zwyNVNze0j z*G;$EOxN=toSwjYn-A1crozAaiu=BkBdkIAxR^C#v6{_s0x6byPa#~vms#l!l!|CH z@EYaV6BpRi30zqgcxBPpcDFwo)NNL>;Dk9|JRT#McI{X(+%&b5sDeY3EmWY%Ro4%s zh@ow9OUQ%#gGHnw;a(1+v=<$D>9I?{=PA#req$Gx3Rb_>yW>^i&ttg^%Ox%|h=d1@gE*FQtWRmuMr8&yLW=w~UamOTQUe~+(i9Nkk#)%pm*JzDz&Nx@Ec^*>-cC)X22OdB>c5mrtP_%uccgg8k01sUR?ft?Y$&+cPzcJ_IO`yn8JETDkP0@eZ>&#d z22~_Cz6-2rH71?nvzM8~_x7d+4nbW>Qd~E9H&j7A`Gj|RcvuTiMuhA?U=0-B8H91M%~ zurYqDYZ~~o=uup_Nk?}c)kt%&dwAKF#fl0{9Qb6(!#+GxBj^lAWl`1!WR`1;?kuUq zXjbVBC;I|OCl}iBPH1%Y>E`Q6>+vllQC46T$LR=fmUYRcaUUQd`NUkDZNKkvQD83NR=4J$2D-iv%>qyud=3!rm3O{b6t|mnYJz@^KW(r;`7Ywy7 z@HA+g`pAJkw;Ef(kuf_Lzr^4KZDWU#F(0c(ilx(mJS@Aq2A!N}cu z!k*Qv&zfO%H?^Xmt%cEYxHNi@(Uc1S*zJYvKxpf^X| z`GzA$rnE!24&182h}`v9Rmt4!18U_oH|dp;Lq)MS3X#9+vLs9uXgA{Y(D7yyNm>t( zk-TK9_*a=y;pq8nJUfb<)dD7EM;p{~*T2A19vLJmY+4t6GPZaqqW$iE9UKlRVKL z9?{G`?|5mvb2=Kkt{SctPsHF$MA%`fj?inQjiI_|*`F{BcHX;?+(hFp@k^e-EZzkg z1R&OfKd$iI3i`KdV28ut@>H{_d_8;z>-yk>blT3v%Ll-C zm91(;FAD4E$_|GB+2(I8y+&H>oy1E@yzoRc?Z!$Gm{(6Bu;jpuH|s!tx|SiMG5_?% zZr#3_{r9){p7JTp>FTFFAitqRQp4|6e&pnZ85HoE zh2VN8)yr)f19qX#y8;F-|MK?0VFzmaDK!R7Ylcltoy;;rDm6btXZvU}n-C{;99-N- zcvfl~Netfh+X*B$wd;nupVrwb0zy1(qs-8e0t$$WL!>_EolOvEfJv4qrw!WyqN17- zXQdo&)DyV#dnW5dBmB}sRd z2>N(=H)cAz5;nz!AO&3yz_qzkDlI9vvs#^z#YtP&kzS|q89i3u{ZM}AB3GKI!mqI3 zw7hK0(arb^Zlw0mZ-fXt)VjS7%xIX9xjJ4#1>YsY>I>PMzgn#ixw zjObU;hzAcmfy)YH$0;rl!p`F?NDt0zPLB)qnZ-wdxi*5L7(tJ~@}1tU<)jF;FsrAU zt#GAwy4@|*G`3F#7Dkzd`XPxY*Zbe`Zz2!A6kCEQ{QEy^D{0D!LP^J3w8l>@L0jJM76^q0@xB z=0beCLh*4YA;x>bL$UJAInJA&=&UT+s*+h6+ZKcjwwT8sFmss2SS!h1oxSpq&B zaz{hhM$Y0ox%k9k9lnRYd5*q?Xd44rfC8q&_e0M6C~}3pm3h$FvtQKS_y;(Xqa9Sf zuNvZsSKpRYav%0&&v8oHpBc%H}XhEXDl&KPUt=S@MqmHXCfIuaPIi)I3tHu zyEVo}mo2qT1_5Qts@4Iog?kjl!*%i;d~GM*_TKi%tvL*K7^G6EfZYC>^Dd05z$Sg# z*Qk@WcOQgLV7z?WZw7dJZWl75WZol_HU{CVW-uoM5$lQ@AF zg-bYYGepO|J|~MZC(HDm;i_(;@&n}DIDQvoK4X?ftzD);>Ao0elF*hfEL%!()%pQJ z#W3|To=+wOdBb9Ku~4IYVGwvjp)8z-Sj4@(kd?um>tY8@sBcv`Hb!tTfrZk*Dt%aT zPOTRPqhMIVEyV_2zZ72oh<7p(;@-6T`sl<-Qq$UE3|9|4OkheDmy>1Dl;d?DXTL^FJN;(wu0{Tw3z)3|AAh$jSn*`fE(BP082HNLysbukGI&W$D@6d##1(Pg zmOoB)AQ>uE((rNRY4uHqTVFqP9u2DH1toljFt3!s zfOPMfBn-62!yhAd@SmXTIl$6eP^~fCoY%r$<1Dd?IA);%pSl{#|e>Ro_o{f+^Fr#JzM#2ce~_#ieGV|+BRkmNcr=`h&|A%6TWRC**!7ohk|kt;Ccc1G~aqFU}1PT zGAi|wXoN{ZKZ>v?9A*RHlgZb=hThtN|B|)}L_*v==0c8|)!boI^{{NdOj8q3Se3Qk zjpD2|+=Qj{j~IQ4+6flzIsxBEok_h*)>|Z8+0 zh0s+!^lT5?2)*$9v9~D=^%?uuS+wh?X8lK_{}d;cb4WGDi0`X87XPm#^M4pkt=E(w z^#3xO{@L$FOb7D(AEymWpz?pUmhUv6@iXxFK}Z>OUlE{zFIs=RFpsbTsovYO(q&+S zQDOTSNX8x0Q9s^=lHx-2^`a+znFXOmn8PCEd}ZM$KukA<(yRONSg?v-0lSzUsEmZo zy^KlMyp*072&^nG>m+!ZeWA``UH++!aZ6S%o zZN;rEjbu~^@J%Lw6q}pD&B%;nd4+^qGb_NCp|HSQhXJiIgZ>sIMils>T-jf10>J^5 z;&lP(Yc?J~M3BQMM-n@j+yddm*0Pg$??5+>B|nyJxV7Sh;<$*>6;5Jt3+tA`p>E1H z^dpZLN~15b39nrKfSlixV9QgjVj_V~UPGnY1iy?PsF=pLms^#rHHqWp|75eu*kO7{ zJh8jNv7+4_s!)iG#f~XIu4@zTXv^(~_>o=BcvB>HcX^Z%LV*lI0yZ*p%5*ZM742I; zA(ER5HPQK$M+F})-D%QnCUvYLj?*WkAF%YdacA%)Ey^Dmgl%UFOg`dcrKOfCld4uMV>iSHy z{ca$YKc{xto=75t?l6HPU1r{ia=fA%Epe|Hes;a8NK$=bE}gUDrzY6}TPf?L{Cqoc zFtH{oU25n?$xuYIs2vgQxVI-PuwrM8<3m>t^n}PQ2N5UWwpF>4?xo5qAh={Rv^&3nT@kl`8Nw~U)dieFGP z*dRs!_yO_eg0yi5x(LZ3D|RTyjjeQ>j6o&SsVe(Ddnb#Vr=60Sa`uN#}$_IXPYQY9*;AKkH$LN#vm} zS~#5So$QPnIqLGRRmhBQ*dcvq9J@B8S3k-%g_x73!yaPY&wqB!$clajp$`X{KzW{- z8<_^zwQGfbDUpuW-mfQcB?vzdS36AyC|7E!OvotZ5n~q!?Ktx*f0l%cTw0l|mo<)U zV|QwNX~-Y?h?T$KjH;C2G4}dGtNeRNOMtcJB#uaA{s$gXgmY$;G(7SoLQ6pV2%hH4 zEfkUw<|S=?tdLtTDrKPhfLl>_%)znHfa;w^y07L+9B`-b=9kSa&ieO&R9L+eC@8q* zB5ECych?J_nimc~C~7e*`eUq@vjFNT+XID<-e@;y=#xpR6NWyEW<;yOAHR_lHwgc7 zL4Q!sou(&$hW;iZJ+$`fX->6)&JVR(5bbp6&`i)}rq|!*Wc!ltTtha}HdQncHRWXY zGW{|Y37dnmWA<#k9|G|vLt%u)w=@lPj0#)X&OT;! zCM z5yVP(Mc-(j=p z`#$IW@a_3+fFJjR%AMZ=Z>@i-M?3>7a@5slu&*k}PicJ(odyrA6cRc#2rs<2yl5LC0ejE;A*X_J<)#vsz5 z_w~EKLOehC#2HDvP}03jM+M*X?91W^s5)ByflYPBKbMh5Oem^y17R#wtg6m5)8dq# z*Z$Om?DP5i50A8LpeEQ9U z#U;Oa*fLgO^qO*De`}lgj`+*$LWvk^K< zA0#nG#H2oO|D_c4AQRR*cE%cf<-n@07{I4`H3_M*K-L7<{n4_5WxX8>a`Ci;&<0v= zgek&PehM#q>xqTZS{rsoD1T#Aa)V~y#E?`fHpL{G4wkyjGP(B38|?5GpvuKAd3?$h z^UHK}@`HH}v+Gjgak4qRLb@^OBVduNk9a)$E?+XIq`)5+U?YH4bF?PZGc@O&Zq-Sf z@H4x~2igwkCmxxlB+LpqNyzU{z8v4DeHp*YkYJ1VI36V$OX6V*!HFoXZp@TltVM=9 z&%LDB=oYFn7h8*#c@4l!L6ZnN*cMQ9eV7|-xHMgEF(oHH$gGQd7&=&;LFeu55+j^3 zltK~f#2_icAu(x1d{$2dITpwd{x)kelDZqw_WBA~lt{>7Ecn(ep&xnGVEMM;~$TT^se`e2GImp!A?p$6whu^e0dFY(8GXgne`P{>r(++Y{y$U0g$^L% z3?hCI9rPpB?)eq6H;}4Kf`va(B@og&UbRsDG3}X3ar$a;9%Mob7YDhyC z^Vz_Z0NCy@jr4s!NT?I1|M$yhR^4@F`RFoJnJx6&^g}Kv52kipxgHsMyg?s* z^XrPw4C^H)^OPI<^?*xoif5vR+!B?gf|`)RcP#oy++o~n^gAh9ncS8rRHg$lSyhpG zM*4u-?k??_ObTkh>%W?p>Yg0y<*{ZzySgcW{BtVN~oo~Opr zz5X}5+m|~ypMrDERN-<_Fx+`GlT7I%+>HhPnJ;As_IVak7n`h z)Wg5>!|Q@(K(Fb0r?8JwMy(Vnsh>w)z@MEYST(*`U^N!u{~A~n5MhK5yJ#Mlt*!*z z`+s6!ZV_UM6;M~7N2@KtxQZ1MI8DpE{EAD9w}1*+R9Ih-SJ|TIUD(9AnkSmZYnQMqGhIno!_H#NWUaJR)KTVr5Octp z=Sf)r|F-%0k$4?F<^=-6=GS>I(Xa9@%bw@e8N=kcz#_M(ZYm#(`9|tMSTqtK5X$KF zl0FPLI__ipispS5JC7&!!Nr|iB-syq15qc=VvqE;^di>)MBRS!H6r}vzIN}z#|}Q% z74)<@i0aw>i}p3|&tU%T4xZa(fM4XSU1s6a?!y~It5M^=)rsAgR5B`bIeh}tD>QDA#hUs6PfVD9(Akbp)xBm{ZsnRS z>GtX~(g{(=j&mPZ>B%Qaz3K(`8q+v^{RZG??#nN`$ZB7dBx&k>7+hhXSBgF=+@kgC ztsmxSfUF6$(b^{=va^+!;U8wO{lho6*R3oKE|6$K~wptXL>1Xca}qWZUw|Fx6{eg*w|?VTixpOIS#LIpG&wD6@c1EFUn z^f^V$@a>ADY#KXhd>W~S)FtG;Ln*{$OB+dTo}RbMdEux5(LW*o%%hy~3MQ(}oS~d1 zoS%I)`6y9Ac*Ej#{jizQ=Jj&2)AI&>3!+8?p{k>*zJrm&D<+f>)x0jbzlB^|AlemA z&hk5Hhd=X*$xk#-X8`ay7f*S4*9FlI^swxRt%{nAN?!V1hY|&(MMWfZV%|p2=_rV9 z2`1`#aUP`T%YCrn&I)}VSSpC@`aPz@v&@;`@|%rmS~2CAYWP_stYYvOi*z|#5Qd|w zCL(vU_H|bKzKf*aM z6@9TdHl*2B#lO!|LpB$f*|-xq@M#l=jA<|o6-8ZOkUU(d(ssB;+mC4g>8ePtN4p_c zNqur(t-*0Q4iH)3!}X%V?N`H^xy4&5JBx2H1$&GgAT&5qd^gU6IQK3K%JwesNImI! z`V=RDB{#|fdW=|XBD#3iM;yb+=nJRpHL856L=MF4i#}a;@3L^CyVs_c9%~V3XYTSVV*r)4y@ee4R6l>Hp>!O-QM9my#`{W4>sFNU|;BS}kYT8}8gK z@&p^^DGr5k4#$Wp`3_|SdM!z(nH0q%E7Wq)q7$}DW2!=GmC++tTMd%Q+bSeKWnXLN ze=SN)b6)!~0r8L1ym>biZ-b)AZ+6;3z)19}rA{7&2v;@n3p+8-NU-0_6BUU<1YZC|L`b%t8{q>)=@R#ZSD9!gE4)OmD;wc!d*no_qyM?Q#i9M55gLBHbBAWdeGHZ#7NLbsxktL>fbPSpKXrPo78}s#pu&jX0MVC)z zqm`%Sllk-2pPyL0bnwvVv+fiMO`jx2p^M50&-_~D^rS{$3?;DPz9Ah|I;SYtJ^j6^ zZ7qPeAOfy>`ehwy{$x8Np0dch_fs?(jn;X8%Y`@TrNh!a6t^X=$(jAzEEYZ;q}&wgRnD$?G>V&nh`w!4Y{T7sfyS$>7GKx0eizD08Yl zBj5%^v<9BT@}v+4uf2KoM^<-YC5GF)oi8B&Q;J-HZw(?pe)v%G4kiEJN%)_6-_F#MT2ei~kLqS#y&LvH25xUuW`TmzMka@Yk(QAcF5~w$V99LrC&2%X`f9rKZ%6H4 zzk4+&p;y?TDGtmqlt7~FU;sT8oi61Vjo+4XpS#&}y?$#UY~GXKl0O3jpWv5k1d-SP z8n1aP$`p}PSbUlY5mcq|BGzNbOlBmO zSA=0$mDL|l#Exf{hYUS~fQO_xj7_tFJuf*L@PulGUW6Kyk z7QYv#agM`nSgm2C!~>jMsoChQ4lH$OIjeuo(#_%(>4d4PGK-Ez_2ny=VkePZOg`x8 zOn4+CW#F%db9wfr`i$Nu7YOfki7EESD_|l7)Z5cQ(DPpWLD+}4Uzsy0z%U52;9U$} zToj>CdWfPLN7dwbJZ5JY+^<@@w473e)H1~>)JLCkuZr^C&jegQE1@!;ayn!Eg4KYF zVXTkW=4CAm`HUi)`ei35cnjA&gM!g&*4&9NxlO`NI8qRIp4Hx%SrWd|SlJ@1WGRso zKf&dm+0q7~K@+!gsyDDOee|XYLxwuYjz<8E$jPdbaH5Nq-KAbNTLVX>{R9vsTt zM?JZ`8a2L>rr6gi$x-U}z)j>_@qoB(<|?ub3x$XX7nzka)Op*M-U zGFwwMETziG@@}FPR_dUd8bsxWrRSpa$^7IQrLMnYwX1X+*fJ2+h@*og>L6z1LhG0;?w74(42 z&xPL$$=aE^POV$RZrcweBEZd9WTTwn53he z1320Odo&t@J1y>nqQCWWp{D1^JYG|RZzhJc#@eYPenqfD9A3ge2S$=av8mM<%UwJ4 zpF{ll9T7tz5uX8@UEsbTfawuHdNm?$D(_G# z`8(cQ3uPOd%?jP7ID5AdqJN2Z;5SO#S{)X@gCh?TOL+n>Fbk?6;q}1pYP9`Xzc>P} zJRqGSz2d68e01S<8BVMQ`pCyB$hF0xe}cXX;Djc9uyJK|eq$ehP`6D~6gWM*EPC6U zMsu-pN=gLLjGF%-IA7r&hx)@&PN;#~6iEk1A9K7Sw2^fwO+>`n)@<}NVwEj>Bg;2a zfI9X%%4Dfl4a(R{Ji6o=cbl4*zmWrYJ)4@zlUNddtjV;6U06qnnCQ}Zm4Mk3*jB!r zsQk#w(TNk8IP=GY-7;KO$rV%Ce-s6pytc3k;X;Vq^dpC?tfw#5&CJwT~#J3B&}}hG%`(^&D}|f z8^_DiQEk8lZW9=6_xRSWvo<0Y#!rSkf!PmJe0OH{F!EEry@J+1VdyzDS~>9s?Rp|K ziswXz)J91`>dJ+x#yCzA#l-{g5twjznhHAuI|XM7&_m zCg2EmG*Ux(*()(nvBwqiC3tP1GHK5S9UGB4Hl7>JR+Xs4)4)wK_cU>gBonG6@%C1> zCP;Q^F!Nw4QA$>SZOK%pk`s-AJrI;Sf%aBa;?yA+bdR29IRsXZr`aaL+iTAib;PPE~ zTR9fV6i`LBvrD01oWKkb9v*yumEQEWoKJSTy2!zuHsZV#x0tirR<6I}g{zhWJVCO21z zQH81GH`wuI=pt&30U*r;bASHqB-4Wp>nH_Z!FS$Ty(amHmeer0{xyQ3W~jcvTFY>` zxM|~Zoc&cCB(IxsU?6nGi0e7PP4O$>e4NbXJ=DcfpG1pwnr|gV52k`gqE!7x?m{5; z{;iFOb7f?)GqU2?)NUASE0DRDRDTRO%;gsZdjC=q0FeYDv%L~L|NS+?HWWj)J}%}w zE`>r+#;z`LKF@~;JBA565nPe;+_V3OdtNH#L?{@3c4CnxL1oe3F*}#bgu(k${%?syKyIk!&RAQwb8k%d)$kbn>0869vs<;&fCsA#s4R)5H`2-A zu~)s`U7`7BtoAvBw;*muq{glOPk-}h~M!RQvdpKZfJeWZ4#Jk;%pc9BL<_Y%MLSx?DjJLw3?xF9! z*;ppLQP1h$oS^*&;I8)R<3M}q$g=x*s&v_ta&dS&2Ro_8C$?ZD+Ut06X6mnT5eY!N z=+yMsfo;A~=lVsS1Er8KGaBTyi4D7Hgu(zGc(99(ZkNUA|1(G7+UE_P~IC{(Y zg{qxs3>pU4xTpjupU|D&h3JoxVv=&67amzE<67@#JRNa-SYUnk_A?QB<>m=<9Q%7) z7fsXOtxG?We)V(RByJgrIjetKG0y|3hbQowz)&C%@SC@jBUpmr;Q;p-&y)4DlWM5K zCfw(t=AR=rSI<~Xp|C?j&cGYw=)-0*n8fQKi(On1blyaL)%{|0wbxI&4 zfH9}g0!&`*qB$`mk$H};EfaZsUSgm{WwUuMLv;(#d}?Aqq)E_&9(+IdYq?c{3vH3iT*DK@Wqw9s9b`m<+S1FRkon7-qZ}$>dH#62;LuAJaK-5Nwou_9E$Mx z0#v`mzmBEvtw1E2y=R|?1sH!1LL@gVd`A; z%rw3q#Q#}3+a$@Bw<3M})<^jNE}j3gfBkHcSUi&|QLggS;Q3*B&tS=}Ox)fh#2&l;DR#ra~StJ^j?2!=bDA`X>scDxf5~nnIpvQS{^LI?x zhlmXMR-;NrZ5zV8d8>YWPiRy%NjctC7-S@3o}%_DILzU5c25#zUqbPVEe>fb^;~^; z5n>jSc4CC}n(fP6048&Vx@%9LW+a;0?N8{#8t{7n(s$I=1gS?QMcoyBhWAw1F>Lqr zWkXGAiMjF&R87$7wOcmFLXkoh?V2~1@RWvMn*MF*+s74$i6w~7W4P^^f`e%O<#98+ z+98R`WNeP+Hp-;EVl>13l;P;s0@Dt*hg)~X^(9Z7peshV>*##r52bf1{$kSQTdghB zaLGghLNGj}!9b6h<;q^l%j$j6-lR=+>ZiUxOsJt&qw{AR=9$i>$XNYz?+qH&Jxy8y z%lc4w!Wsx;Cr|PTE&EtU$oZs`xevxhk8Bdza5PuIJ(e3oM%U8GOUV0kv4b3LdY)*C zc^ONj*el^A0%Nn~`4;^{bo^t1XrR2XYNyTV`Qq`x zqC+Pce%#>cIo`a1!y)hHa+0{Od8zpVbj3I~1O{k3D4aaHu!mc-IP3%qu4%d_y5<5I z6>xyLuYSD;W?*hVmNT9>RuF z!*4l#>wMzFme;nSMvWR!{r>SqbF&f4(R?cL>OZQy-qq2pH{?HChoiRl!umN1umzt! zvhY%pa}0ly)qQn+!VbNHlTL9FVOb3a^!MOD<@7z?fGf%lSH^nTQJ0=aeA8L}#_b^z z{I;wB6_D1V;VX>oW=>)ncpyt`H~_%&lGz!4g2m4+REszZz^j-^F)qD#&Kb|k%Qr^b zJt4c@`w7RqcchtX3Z(d?cXdq$NXQ1jozcVfIBBo;vgN(0eqjLel8ci{w%q+0815hN zL;u3vsZXAFdZX6Rz9D^*tHFDQdXWw8d-a6yk)?@P1?2WGSx3$OIfHYQ<}No*NfgZP zT1DL7B*yqa24IvT>fmS2A;7}l*U|XOPC=CnT)Co?SeA(2sMV?!w0Na^S4APa#f}Eb)rhBs|`e9b{yYp~C zRi*YX^ewsd{Y$VmvkFTjiA0&Hh#x%39BqXVMPdkd)=^%HjQRA6?7@%E$8>PGjbbX= zW@?IOvA46a*=vqe}z=QbPWYmHDqhkOWUFzZmVSg#2ZbG%~U4y3Xy3zlp0hu_+?ns3qQOPnYd3Vt&Qa;MCH?(u$LKC-rrlng3a zDQgQf8tXU3`6T_lRYl?b*djdhZNK2VS1~NuyyducwzVt7mdY4G@LOZNR_pV;6$}$E z5?_fK=1zqYFmpN@KCK?;u?~;t#d=fv2@!3NcnLr#;qZELAyA7`tYlmy06x=3ji0-7 zk|?-)6ESR8?3Ly}_AdWXVy&!uD#IhHdfG!Se1kc(RmcefU})$P`|Ejtu{RS+Euv59 z0a=4j6Q|8ex&de(d4`F-on}*O&s>wH|IBf#7UAO{m5f<|)%a5WP%$5_&xyTo-42K^ z!T=KD4E7PwqR1y?#0}P# zF{#?rI84S?pq3w&eQR#q3bL6XQ9o2vLkLG+P)5uldU86Ld@2{1&~?z&{i7j<{O=%?qX#@r$U zIvO1{sxatUxOoW*L#R%ixD6)^9X7c&5?7tjS;#~*KM`zY!LOL}oy|hDfx4NL%k4#b zk7bjNS}Ddo_ebMoFerO-BNVRlV_e@GdDtKM^1VM`{HJZ!@CaGUJUI4u!Vm!rt9;jS z2ZL@|#dPaB-0g`wEGq=H-lZOM_mwQSS2aCvwXLjL1n9qx!MPY~de@WcYJ8ms zxWoAxTLj!1-VF|qJVBeW#?!tq9!K!qi)fXUhfkrgiWt3J2oQg$)Ll=Rw-=BLfb(7W zdQPw&h0x(Riw;LFIQ?7#zW^6rP+Hr|t%*MmE3TO9i~MeKaPU06-;984dLZ{SSe zaxu(Uedb(orYO`WmyrEk7P?s(TxSIqd6=kslgGwr9#<^{l;*w_PGm@+Ex z^g`3?qBfuaMg8jVEIYYz+29WeBa1<=g{#*TDo!=4mq0MGBG00(Tb!mJpFW|RtRb#| zEqn0s(2+wo`VT^LLV>pjPdsIMn>e29=Vg&|3hgd>XiaL7lg;6*HEk!b4|{Y87Vuo& zSYIyYYzoVudG<(ldUn9^r#{ppFUgw(V&B(gB7_;X_xsL8+3uOYUs`8w{v!~f0omzL za3uYaa;h;LWmpAaPenhNd5_DSC2EhSZ^oCH=;#dA58SAC-YW=sLunV<3yyi`%qyk5 zX2<#>fLZn(-q!Z)jCN3oDAqXR{gXzn!F1JjxSr`)_>?0a0YHTG!mju^GmU=HKNgLL z#D2{{{@&7>;D_Jfg!X-DkHIh8Q#;h+0jX+(#htv#7qm6(vD&&d@bIs7EAUmvy4OXEOx8L zM}*#i96<~59)RpE#OzT`KQ@;%8r1YD=rmb1dG|hg&Jrl(3uiNOCur22a^we8UU;pk zeFXGUKG0e2fufCiLa6@DoML1gx1YAS z&USvY#fttk!}w|5_0~7Q#~w^vOx^mA3ADbmW01Pq0az&$K5#PmuGgUrwy|n|XufwZ z>OtyA#=v{rg{JoW!Y6frSY7z{j^z$o@=Dl+;v?jHXQ-eT{_-y2P?sleuhNc*VrkO; zl;#lc!Ot9n-ry3ySL2_{chOS2HTa)=|H^46erP_FnpwGGEn<|Ay1p&r912Hkc{AC- zupKO$-2%8g&0id;zhj%hg*PAorSlU?ZqGHo=*~gwF}ZpQln<(y4tX~A8G(rscSj)5 z(IMeQX@xyLx64vw%wqK4PyVPVV{q)JEB2>(oKBb5>V^uVKj}8OZAS%(hbCN*_0|R_ zqjG25RBK8dn*mb<)OrvZs zJ&?i)d!|phh8SG%7=Ato@sG3P! z8F9rdm;zX=tx13BhqA$$kX~%RA-FnZ9BKbLw>Bo0{RVq z{xZ>N?XOOB)%5*+k)AV!TZ(y`mVc)OQU?i05>w>pgzY;J-bBxJwKujWBfD2b(}_8> zKcy|9#;4Z)VdK%ZFt;j9QGDT=wAAOIGAMmILvYu??Vh1CJ6{kpD|K*1aEK?Ti5nD> z&C5{G8MV}xCSQ^FWgRf~ipX^=1)MphAz2l+6?X%FiBur!zB1W(Pd#ufb;4fhF)(9G z*Bo$aW^k}6bla-l9X8+&e!uW}jXuA%7C1YQZ|Ho=$TrJ$nKO%V;L}*8@+r!jck(ts zt1J>qm#6Zn6}a9Rkjbk=c{C>_k{T&aMe(eT$MvyjtJRu&*mHYEhrC1H1pHZbC2z?S z)0X8nf!vI~cl&}rn)&Uvr6}>X?AW~UXkAe|ac{EDMuEYD&$|d5AN0@Ktp`uGtFe&0 z@TO`J)%iccj0whVYy9*)v(48XikYkAPw_Yk=NRw(Z$;nah8I7~Xi`1n@Iw$tZNg%rZ*S(seu zFy`_W7d_YNDyD}d$Hp*?Sj#+5s=MGNi}*h`5p!}=RZIbM99|BkiAsCE*VV+Ugyl)7 z{5AmgFb)xLQbtBsXAr{Oq~%2>@;o`rdSYfOvkA|$tS;Kn4tu=VF;vulwWgXBG1$$& zCB+|cjsDui6O zj^K;&5`}&*KHa869I2rTzF|sFLr4LZVYYW*KToz+`1LOpfqqw?p1c~Q%9-!1H(E2D zvI#QcR^Osn`IjMHsc3mK_7a5@{@}_S!@;UW%zaZQGtW?7!-c|_Pz|{>A4$t=9T@<` zSp9mk`}I)+A}|3TnduDEA`ReP2zC}=_BGd>*XxtRLd?*j9 z;sm^%ylJi>SPgjU7l9c}`EpE8)Zs4|oT?XWb~Hwr`;HRiYiLl=vbm#J0r%&BQRo?G zmiJP=)G)JOs;2*~hyjh9e`)hgW4^-ecN5aI5*XmcL}_}F2Dri^Mz{uz%~}u*_M3F# zHBCJs(+)+zWyIzM;PX9bNMYlCBpDMW&^pXrm$F|JC7t+|C}bL0mkMWmoXdk1A6082 zk6%vf-fnKXP75CKUoA3!y6%C0qrVA+1|uNLLer-)yT-j0;;cR%eMbab)R$L4>#A3= z4=OJe+5B!xCB=!r($45;_Mmu88KRZ$bwG6p!wtV!;ZdB()K zHO<100;@-Wo5VCfL_&Ll#TAYSsx+TSonZlW>Jt-I4wVFSCQH^9$K~gJ;;e&j zcf8T27il4}ECb`L37x-l+=rH$ADF+PJTb{8!ro@~Ddna)vsDB*ZoE(!cSip0TqC~f zOdKdT;tL~YU@ZGug0y;TH=-%mN^CoV5(>}RN}4nY^AKrenx+xoppbN*@1Y@wuOAV< z-lo_WY(>RC$`n={ID+9)a;r?KOIay}?;Rqr&{t^JOA|&oJCR&@8gsA`5iTxHVb|A> zo;Y!6>@=A4irEgRSIBBJ5QRQ+D^{bGz^+U0HR4%Flpn&>X<$=aqT$P4>9ef_>f;^n zef%9_>00^hbj%5MJf!nE|QS*u=qY-F1wKFE2s{#^wUHMVSAf%tjIwlcv(!bya?Wt(%Ln2KK zN%)#lhlFBd$I=!%db13zxZtQxFWa;C4zZW*`4W z0YS&u!8HOh2wj5ayfyQ9jOuUk+KPr-p^1LNKvP{Q37Lvnx$U9sR33okBs-;vk;pX& zI0y_Xr?~$6q0glt0q<1mr`5;KBil7DU#&!C*D{e?$x}LbJKiurTsa--yvGYgisQBi z35K%$&2Sg1Q{S`~LqgT2mo>`49{ua7Q+^VCuv-Az(xiDVI@aH|Y9P-37?ZI&93>kA zP0j|*!zyFw&5MZ4ki*5u4hnl{?o4)Vs!!=Y+8k(eHiv3krBiPfvA_XX zSqf;2ub6V+&C%2!`C$D$qiI{FE~%k#B2Dc<_o8WN*@!Av5+=(pU44V9ytq;jZ=gv* zFYRil)R9#`-Hyna5LE##)(I{iglg)@kD{ikNeXmUBdxdo04(Syp3oz9|Qwd16;v z_Do}Nl;`Wo z!zK51k^4aid)kSouF}*8Lh8S)o;y!DpJ!eMw@R01eUr04=e5%*BG+Q-^$4eNtvEM} zdLCK*roib`{R>aU-8Vaeao_%B=QzM$nQc)*+RuZY1Pbdo0_ zW*X@=4D@~$D_W_7qT$a5P)3B3F%kxINyUsO&ebm2J$E+=Y-msL!*sLMmdKu={$zx0 zkwYdN=#C#I79PPxiM+^_&hv#`_DO8o&81aj(-<-UMG$5`W33F1JG*eSzdoNg{W4|(NX8dTzgU2X#Y zbiti{>ZryXI;;WAoS{xIudE2?lw` zF=E?jWuSz7?Dy=HW?_;S1aGaf8W`fekZazsP=MKhN^nvviD83JMC96f8hJrt zH)e|pc|mHotD_0tE7*fYz#<0#c85zpdh@IuGSEMg(df@TrB8*US!hJezib0vcnyhj zPvt>?f20nlCil6-&?Nw1JNnvrr@3S?!|n-D@Plx=t)lTDyKZ~x7Yb$W3|3@e;F#BI zp(m5+LH(SEt7CgmH>&y+es80*z#M;=<2%ECj78o*ZCK0#3#F0FMwlru6J~1tDf(`p zB)n6g&%K0gD?`DoYPcs2{Z_GjoB4N_U*4>e+=^f>*&mMEW%htH>tG#Xyl@emx#c?M zV5u&pnZ#aCs|#4~xNAA0g?ZAeM~0w=A5TKm7(?n<3z&G!TGkH+g(}xX#WrDcuF-P| zxU!5En{(Zp^+HC?HsN|O9KgyflKLEtv|5N{T_nKRHh57a^_}xMOC7|2Y@MGcOn%G)LM$w| zuHG-t-ibN@KL4D*&0l9@gNfrNf?;nUP_nwm5G_rNtN}*v)W;Y2ZQad8l6wuR@Y^|o z`JI)dF{<;eUI9fCnd#u_-RfcCCSE?JB4>6prgd!PCD7ZJK=XnOiFs*q+*5Mlv|#pSpIG4z0(cFAmlmVej# zc=PJZoX4!d1!Uu_=o>gHW3v7k0v-fad10f5rs|_7DLNiFi+xYEvxv(4m_&@nTAM}% z!`fScD&F39QIYtf`>QPcB4 z0`B*m~xp4}jUJSFr* zF*YU9g9slSD)tm;OX~fK`ipra+@`cO%T!Uit6y1v<1|%l;0bgM>|QkHS;gCSIleho z6qOn6O^QQsVK>&G#qfUJOuTB=^Z-V%fSz zEeCN0O6qKHL+0-a5``Zl2vUb*#l0lBv)>zI@KU;Yr31*Bvlp$Vr68OkZN1i_05)>) zS_Nvod|66oR#}NxPXsQX%nCebMzpQJ8Xh>L5abqPaG+!N;((ZMcp&Af_?Zl+w7%T* z9CuVWCH6SzVlpYC8e?!KO3C)(^xv4Q-jP2&a($o`O__%=*{ao@FdZ|ydub3{I`A@U z+;s^a@gSFX`D7V_zo~;Pc;!b60nzOuy)jRW#hc=sSo8ALdUmlyYFc5OQ38d(KM0!! zIII=WY^$v$<(at(HiL!Z&uf=(mo!1%voXSBtunont)Z25wD%+XYhJb$mNtwERNN{2 z5p)AqGTd~Tz6KpOT&kI~(Uy!Seq@R$llz0dnL+E$(B2bK%8sOhII`n-02jG*8P0=V zOSZzf;EodwrahuC)YVaa{L-zO1XjVk&K_btbAh~VC9n9mEayhI#w-lYb<@Zpm7kNP zrlTH}Y6MyHVjJM=bMMwaZVT8wM4 zLH!Q*5j}jo(MaY>Mi{F#1VBj5#4zo!z}^9AQLTDiQv@p;UiKPE2jGG}5xBQk8Ngi@ zB$~fZtFb}+Rw5Au-$?Jk>>OeDfZ@F`uS!QE7*~%;g9a3L+8kER6v5Sl(OpT>AKOZJ zahBh~^_N8(>^76hUnuKMs@PQ+sa^9;L)2&Nnr7GFPZD*GR*_I{0ZP;a70mWN6?!{j zL0*SWe#{@Sj~0G;+hWzGCX!@fWK($DWQ z4u%qp^ZEA!s?>Sn0CGs-DZG2G;6`@q7TTkH?QF4$$}DONhl$&RBK1@0$k8V{UPzUb zMP})X_^K26N^S(htDMurT6P~Fd~)Xo9e$Z34~(C&Nm8zsI8yd9B+IbZd&Jt`!T@U( z0L+;EuBdK!7)diGLE(}`h=_mK@$^9{{>I48HD<_yU0j(rfDoQQ65pFhF=df~=&kO6 zk#V{K!+j0uf5&3IOBhw_Lp)JAxu#`e+)-NubkchD*JCFqay!}5F1(EkhnqlBgX>ka zb0wYAKnjOCg)jc@F1t@VNp!|!s9%oy(mn6@u3!5{6JeZALj8x3xdRanUMB}viOT8P z8n-E}(^#_FfWo77wr8yrjMG7FVgJ}JaL|e)(n@sx7XVI%u`6w1!S!iAPr;vi2sm#* zSskyyBA~u|D)Ed?W8PJ!e`Ok?WqsF;k8Upzeh1UT0prU2=xhaD@8VzLc z28!h)NC z-8BP?F+ou%Eu~!PY#V==8ZEu3C;?uw(e^c22e|2S3f@%s?4A)t>va^EXt95RNx%1_ z{bc$80s-FqiubJs& z4HMcUlRWNw3b+{Hl?}ZGlM(nH__D9gL-iE%7(GG^e>3c@4P^|+<~kAH@9G&SI}zj> zSfPib>=iuFxN-a)KE`0yE)cia;{-0W*3jE8@KswB1O|rV*I!@C`>Uc zUq1@uoB6YRM~xn`rxHaEkq zqWtjj{dH_-lYbwG;P&1gyKItxiP&u;Eq1o*+Nj?%xghm|qwDZDlxOSdG`DX|1KK`9 zv3}>Gu*Wb%YB1Z@8Jsy1lsSbkLUEy9-{opEFXx!&?5`;GgFw!>hQ0S*Db=hsCj5(A znO?x5nU)*Wt$dw5!M9(J&M3snZo=khUz-ottnentnSouEc)7LcH@Fpm;_rdb0cf{! z0ixfN>Y@nyc-hGQW%4a)$y(Fy-M*(ikwbj{tV{V|ri9$gMw1C_W#`mz?7!cnVYrYC z5av?V=emG<3HS@Frt0v7JaM+2@hnA*pZnFpvz?#J9-EhrxFGKL6jjn(GYb26CaozB zZ>D9ztGgiuv)At_NQgoeurK%W$Vuc{zv+^kj(#qMeByM4w6P5Q0wA8u0;P^uG5%d_ z*CeaPLHWn6f1^e83Idzc19$Hg+zy9Xl8(h{;+E)OdS}4M(6*nCg z3)Wp40b=hFyzq@>rugZsC0c&2bHgHNq}0|jUsq-WZFnpyGV_QA@YF`0wCe^z^E@uv z9ieT<1WpkmBS+GOWxi>N6Z$~lM>IH-m|E&woJQ-FoCp}h=*ZDSRM<6*T!=9t?gEvz;!ykMzfpzi$yosEcaOTRL z-)y|URmfhpPs1#cw!hjGx#RWx!tuW=1SYeGu=nuazD@qG5TO>v?~q#mj~+=AEgHNXh}|9Q|DCFCc{fA|06o^Ltgg8cE{Fa9qdqy!%% z*Z+K+iXA*2$WQ_jswGzxGXH-*=KtPA2f%w_EaD0#ZJMWAcvXdbgKf<-ts z>i%sn5hdtp`H*0KbN4zXb-2}bCp-{C&=u0~k(MH}@R)1aA; z*Sb?CgP0u~5l?M83w?Tj1DiZ5O30=&qVv%tnH&j>TZZCxa7f9&VhN&?QE*69nDfiH z@Zxmc(L@it8TK1=XX(yk(In+40P6c{;}w)<(ILC%AgV>SLi|IklIFFzSsD%HFlRJB z!VHbSxQpayk}2Hk`wF%kv05kt5U|1Xb0t_H7G0YC@}Mf0pok}N*qu()qj|LSv9zLX z^JKYesU#qWK~sU`2GbFn2}cnLgN-oH7N*=VY4UFj`R0_wROCo@j%kP;V*;ZWDV8d;!!!feUdvtOWfks}HJns$ zNMP3lcE9UjoGx`VjoQQuu(X}%C2DW9H>{skktZ@>fYa2dt%@V8Bto7+fe>Sry0(>G zMVerb$!{7+vn*=T)~lmkln05hRwzjZRw&S6mL6}bF%t$qVmCH9=bm7J#B?84t(Gd$ zIB3D3R=ZK1XPjtbO&GSy2&SLEEf*9gHiuBby(=R(Bs<5DY1)Mfkb@B*WEu ztEM3e_wXlW@cv#WL&}}!XK=7|?mtEelG5Eb*QJ@<%;#$DUm{Zgs@`TsTWY!Qg z?hJ{WHrZ0lFVn}$UMTl#M;wFmH+IHs>!N9T2ApDQ zX%g~Z zcr@ga5U=^YcMn58$PTrs>m3i#6Vrtm?D#z7bsRa$z$h#HCy&w)W0nkrAw+r{rAJVn z36w(1`0p2UfXRJ0Tr+&?6FWotZhzcJMq_!T(3^H&V`N|2=}Q)YT|Va`0$ec#WK|ws z9E28b7?HXHW7%nYogol{9~ZCd4MI5Oh8>b$yl0%3`pgWqxfSVQ--Kc#vB;8pT63|{ zcZCV^5iZo!UaX@;BJp8(FuNr6oa0{v@?(P6+M0_nz{4yq+9*PFYg&yl=IXq9vEoE% z&a$39;{i4cvbkH0Q?IefK)2ICZaJMV)-DFQhl1p+!tJKy^Z=|B8siP_^}>bwMjqR@ zwz8A8ry;`vvr6bqH>hzV{I5&dza3H}dOxo;5v?3uQiiSLels*Ux?r%pVN3zi6$+%^ zJ{3AK0Ba!u8BERFIMcl&@!Q6rpVyUTX{^H$ZFSN3(wQ7O7sfee6*UNau|~?*WQJtN zI^ggcYBROxE1CpI-38kk%Pl`l%s94~rYP#=7WFvQ&Q~cB1v-nK?JhjzwDuG~=|k?6 zOiAwT%H96r#MlbFXj+$S2B-PSHIi5B8c-dv1A44_swc^{hMi7IH>KSkg|FtxqH98> z_A;nAcYJCl0Da4cZ43)4o1o|+G#@ukL53G$vq}6M0F!kt3O^_9UU1gXY%R&1#E|eS zmw5~7fqFA35%&3G3yy(h2NyFP8)1$sZx%x%Yv8MWYZ=ne_Ow^b-kBf$AAFoqUS^Lh z0P*e^?R8(jvpJ2vPI^!yvI|`BgV~4!!n*a@XNr=uG8pxWkK>xhR()0SwfD%!Ze7(# zV?F-hJEoE(>R8(?*T*4U$P@aHU7Qu*tejX5#!y%%ZS>!mNPf0j5*iZul`C)SwmYA&lGaSNtys|_`rr`0oOHh( zqGPMaAl|!@zM;39=o<}D@k-4TthDtjj#Q{v*w6K8A9JP318`IRJ~-_>{)+S$-~}!e z2C{x%oZ4&HdY~Mbc2Oag969q*{-WrmTn<$-K#AGcb2Pj&{2|G5G}{T}h1MDhZ zXQ`)CKW{Pny{9#{C3^iIl5Q>*rY7v%O*6n z*T8dIJousPneqnm=c-`fyWlhFkhcq}u3eRVl~t`9{E*i&E09D}N22L;C$~*+sR?UC z(wr$+Dbx#ceah$E+`5Z(L zJnzPQkP&hu`INROrZwPS%WiO%ZU%Iwr+Q|G0-(ZREr}(nqQO2uNM;MDPrT8*(WK$M zGCP2sgd#M>*gWwtKk+x!)StIk=pqQtDxSO^#BwKlt$*0N7$#)x`a9zhMe`fQjOS(v zs4TNzB?@P!|7jM-;~Z=Pg7-DlfKfm=2W-Un82S_Vs+7 z0MPy(;X385N(=ASq0Dl}KsERL+VMYR)b-5E>JT~!#-i{mhO6{xzMV{6|3f=?&zukE{uXMwg2*m&`$=xVe@Lt+6ak*8#N%TT34Ce+oL{?H5`YY!>$P;n!ov8|%DS-tSF z!HmpjRKE`JV3>y6rY(8m$XsK$vzo525}bUv&&rHC>cOGj6Dwb$U68_XLi6flOqM`U zLg+Aj*!Jw3zMA)2ox?(U6G2GV6|`8kk?YnKT&&U5bFpn2tXj++;LximM?m$8Oz0Hd z?HZ#n+&lEiK69*HehbAvM@e=43PW=X{Zd5w~+1FwD zLyzWFO6grheR2hjxJazNzXBa*R;8)e5T6VjQXjow{c>jjf9Ti3JGncRhWtZxo_Kr< zVWrUtI*lf`{ZoLC1k_aRUs(al-EYsz4{@i$|6X9*0@B2vl5vPg1Hxs(3Oj%JrN*4{ z;L}kJ-PKin)_nd~h2rPN5tQrKYD4mWtu{daRiXHr#Y2POe}AF2D3l@Z{@?jMh+hX1 z9RNt@Z|isR4y9nBIKD=?gNPEKKsNl&!GZi`*+Sk)Y$GL4O6Ot!UQp%Ha$I0*v>+wp zIjc(F9EzEsIHR5709^8D(ObWWigW0wcHeYgZtmEmBRl`x@TE=<0Leq-O0QG_2 zN?_oitnntz1v+ae(HsiL=49;IaX4H&LqstPR{p5#lU`rcC%O~vNJ}egs~Tl!go;8S z%J;kV9&@;FM8Q#2AnGtUIHs4YcgrfPxvW0xAdQZdxD}eZHSu+bvy__`^}8rr<`G~n zP-QjlTC!njt(hk-cib%&vf{hC0VX)FVJ8a3n5ap?_$I`YnwYJ{EF0EX|Na4Ephzru za0|%rq=I>yajps+EJKTyeQ?vUC)8Yb=uMUfZ~W(W87;At$xr@o*Rt3!CQui0b9VM} zs?i#=q8KW5^=@q6a&8S1_*nLg33a;A+54Qbqe!0tGh854iN;Z_+fwaq0MMu{?{F=} zL>^iT-m!{ck-p|%vF;~JQ*MO`GtG(~O0;RNBFB+!kSS9@vPdCb-ti&4hg#ZB5{uVc z#?>Wc^`x{atM=l_h(>{fq|_m^D2$bSv3JT3%_{8BbW@X~zmx*cz?5G4nh+fK^SQXW zD+A9E?fys(g|9AJNWjjF0Vc!<3>S+*3T@{Vm_U3?;F1ad{O;7_nPVXIyIJn8B6>E1IzVG6`0<+SqEcmzSf-HD(ZwroXQ++?i-Em zEcDn(oeG4BLWYKhweU=9h2Y-p+!pbU^lLB4-xngC-BYs)=%$##uRcMu~(UB^czRKDk6S&!g0%-3PM zIUAoO<^FaMf8PGPfqr$5fi^Xl{o30vkfBP@vM5vK^l)>{E?vMk7N2x4VDyiOg$Sc4 z9c2A0!bS~SDtDGu9nF0(#QyfuOFX7R*m}RF9|lss*02^L;0^Obm&HN*wiwz&!jyk< zUcwje4kpFsIQ-|+j2W1DkP{`z4+jc^ma$+!4moV)R9)u3)b$ zaQIpwh}(p687*SANOnu7A}7{yeiYXw?ILwAIt9YMgZOWsGv%MZFk`~q&?656@g;d% zGMNDau}M*z0B-lJF;%locD3Vq=e0j-UOq7KU%oN333Wc}>_dkPTbt1g`CR1UdV|ks zmv>JoD`?5zfl9lrvHypydyK9m>iR|Bv28mY+qP}nwv!#FW7|$Twr$&XI(E|GO+V*3 z=f30I`)Su0^>tURTEDsGf1Zr_Q6wCwg(a>pIDBr8l2&}DPW?dB*kQi`$uj-Hq@?m= z*__th{HCCO8Ud_WGdlab{DZyUhc?NVf+c%?JtF*7Wer8KWwD~{8O1M>UM9?YRN!L1_wt&^1$kr z7o-QTd$sq0KwX@zVgx{4@imh>TJCnUTsETXhpPZ_{?gm)ncOst%pvv6u|UjOQ49ml z*DqSSw>fI^hvm@vy|L~z!T6VWqoHEj1=E1dh)=vmCZK#8mwYm>XCmHTTvMZQM6(!mX3+-Gu4(K7)RB(6 zI_tW^wNByuSr;}bZnrf!b>YY32s<1w6eD8b55#LwD3#lqgVxj=UWpo>% zY`0gUed-J7jx`UTDH`sbQ(AaxX4tvk6S{J%ns1G?f8C12Kme5|I*QCn#W zS=tbMSk`2?|8luzy*uPHU73ud^SVZt+V6+jO!Z`%gBmg3h+2Iy5VdEnJMoi#{c1Z` zQPecrL=(C}iNdzh13I~%&jVV&8i@y?tGu2kM6~P1D+aIYp+rqvX8w$Xr#P*&sCMuT zlIP9&@U+-{F%Z38Uf%GpFywI+Pc&fZ!@}ZHSa}ZUG%Pmi5 zV@JDkJM^dj86`bAk7eJ_wLs<4Oq*<*xgC6kiatGFkOqvU>d*-U<15L=;zs~vhu7hy z8a@12Nv9lqnI<%2>d_eNhnXR2?$pDs7H~P1dS1wDRjC~g;;`7o@e8_MbF$pu(XL)w zutgEe2cqShXnI;pfOkr7>C0HAmTWx9!^uPhZa%`^!uYl5%zzBhnua5Khh$v~0cTZ2 zeW1tA9^B*JGP!NOS{@pnpdY|gGr;Wp=8x-dKqS^1}pa(uI}BF8&DiI+L#A{E-? z;h^81RI1uR`BI9EE1MjB=9$09Etib*3aUjL!a&8+)pOj-V}Wp5mB!|piYGXP*WSqr zFQ|TT^!7q)ixkZF=t&y95ca%m3clcHxr4~>_pIgj4nJUp)67;gUQ!pkFgy1$#(!3zBi~iwc&!FH^*>%uXM|Wp_Tr|=rRI$|`|40Rz7ac; z?MRSQHtssxtw2B9RAVTt8IY5bS4|+_4DJN;z%75kT{^cDW?td*;Ze;h0B^2E-A0tu zzr)lB+|Ac15aHLkI1V83s~qMpzq?wY|NhHd`lqtt`Oi+kdhL=6S#TTn1pS#YNxLvH zvofC5&4@S3<};JOaPRAy%ixpPx$ZjggK+4LK(^|95%#ExEis9X&x{)NU*H0B_$ad?;Jq3aoz#JOrQs1JM-T|6D# z%gqws1AF<4#t{p3(uZ*^>LGdvOzxbw;m9bd9?u^?bM)@>BZ75$OP{-Mn=$kL-S~a8 z_m=DguoY6kvny%>qFR;=7voFT+hN`K-192(N54~u-kK|vli|Y zd(a|gegqE|>MWZKx>%u_(dDY---|YMk>3~ngqtta>4)Y#fwqa7>esov9?PyJ`g$|t z`=Scnb2W78U$Xp_tU(Itw;t;)ao-Hr;e1w@_aaB|`2i3KiEaueVSxA&4EXz~j|E&& zdp&TSvFPqe;8znkR_IYGe1ag(upsvJ1vM<{I9@dJ(-=F&ON$3~& zQ{z#-;p!`EWn$$P+TQ=fBi%cC*H_o+HZ*Eam5HEc4E0?~>Lz8f&%P*weE`iPZ0J>2 zZSUCx#E*L8#@q6Qwi*PG#Ic=p1xl-ij+GyWsz*RfE6^8-hZ%&S zXs)yL@n`fzNt@vOi$rdnu_0b*&b8CaWB{T_UMqLx^vTHGm(>Rn=CE2-B%Q{H(7raA zj?7Ee9eUT$TJ;XQ%@=Ia7HD9+4zg}=+|8KXx>Iup-f3P(ysN6=gBb~;hcg+dY;-7% z-vwZ%Hm2g&CwH_mG8GL-nN|Z?`@%_1PamV)PGt!1QzhrrAjDUR#BgPCZ+NNI#B`X% z3gh$(J_e`^Z-jOtuahmi(htnn6*6Jp5V6grTrY6Mq_f>cukg2cbMHSl}!D#Q=)!VjnShluU!(FC<)LrE!h~85WQ8Xk}!EDtXbD`WGP#6VMB<+>I68? z41%^rgxI08c3{K&)gvj^kVINuGxAIlTF5>Qa#vBWv_xHzE1*NB4tq>h>O-P0Cy4_X zas0*QJ74UO?cQRYcae`~Yt(OO(52IcE!C&Swy7>DYmK+&$UqQAM+}2u47nE6ym%eH zM`EetrowMV+t?gXst$Q>&)yQS$p;M8vAnf~0x_nvs~lnJ<`QEvd>q08k3dfP+{sG*4yov{TMpwZc0$%$iU za(;t38bHKAT3kGLfsDyG7d2FA!Gj1jVg_b(Jf62iMVR6h7n#o$iiHVJKLoBomp24# zO$(%Mso5376R4mh$h@hhnYqZtjU6ol;Kd98{;n=dwQIJsNllBx;HrA53G=V~woMnJ zR3=qWIhbrB+0Ak-wlo~In2!%imnc>>pQ&6C-M9yoc%1SmUZ z;N_YzuUax2RYN#Cw#R^jM5l=Z?1~nr&taAS0P1H}Hvjj1=EgJ30&>)S*Xx@U6%d^pamlvS3O?Pd^z}&@2 zEyR+)?6QmvIMo<@>LghB8s1o#m#@^rxHRr)lRMO~Z=|}0EMAV68twYOLB6FYW))nTIKAT}29w6LJ)64uUIaaj-({NeEXD+NZOM2){&hN`#wwM(MjjulNDCQ6MJ9Eitd6~8sc zhv8g|q7QY&!_ds$VRa(DK6R6tXE@W~x*{?c#dqY}(ogl@o(u3Ve zz1inq47G}kxWoA%?C=+uEr)2GfKD~1`ELu(c`)!m24$FX(6iov=nSJ6aF~m64OB5w zX3NdII&==eic~Z>g87vlNP+P8tBN0Xk`TpVMP=FFs!t~OtK+-?>XIfeOmGVmmci!t zo4q2b^~{qb-Y%@31e)D6R3zRjB2&?<}G9v*y6eCHR& zKVJprO*jbiI8Xia4Moqq;BNcsz`_Udn(+z(Tw_j#p`g%j=h94#m21&kJUh_r_+|{L z$&%Q7M!Vm0h9&dcUwD{J+HS3((K_l<(S;==AF4Un#$ZD@#E>)6>6G_6-^;vGIupRx|X^fShhyKjs1S#DV$ezrm8KT zbG-yN3FB>I5Nb@|A4wZ!dgKf5^#Z%sHvl6xyS;LE!ut z0|V8TZ0<)?Xz>CfX3Sqm=62T_P3Qp;0oMWx5M|b^EV-!#Ceno4dK+s?HVNX%L5a@2 zq2pXxMGEa1V?ha)h_pFtx_%YHx~i^s+igis-XHJV?9eU=hJTjt-sKLeqP1*ti6UD+ zV0T>rfY~-7?+oH>#U9q5gs~e_5e%AVBOc4?un8gTYMrqa7SA(QPkpuVcT!WgiaG~q z+13P(Zs34oAH%j9h<(0O9LE0CUPN1JCpY841pGt(dST0#v>Bb&7n;4#aLj?X6MYUG zXveffSUkII;NG87@5-iTEV=WOJ|mMBmS#l&Cg#nSlgudGsjXs{0vc13B;!NoblAJ! zmlX7S;BBJx&#DgwlkksPR(BMcd|cXn$vyk_)1l$081JlZ16@Tt0d>4-wO#J&DPHb0 zx%zqYYeXM$6v&e2+7ER zjWyuWha91@pM(U;o?ObOE0W`u2s#k)M0fBCV!P7syl^tZ{szDQzKhRKMNwIdmIxHO z)b+6rs4A1jx=~a4ibCPOVQ%6uESC<)2HKa9ItWE(zg8nesf4g91tmJ;t98qt&=eYSE^o~@pa&T&a+8-awE(q3Jl z^h>)jl9zcS=Cv8-PwJn4fo3EgT!!H6N;9j>R%l99)#WLBmPfbb^o@HM3cEKtt%vPWz9dv=P==83 zNqfcUkBroiqf?_Z5%!5@oCiDmTG>_8decVot*R_cmbN@%(rU|6tIkUXP`_#Kl|~tx zX1_;*1I~4rp)Yl+spw7U63J|-(wArgmNFU4*!wGu@V4)feBtqX z8^Xbpmf*b9GQ*@c+S#fNU{Z@(HZT4MmC|h9v_i4Ur<#7Ybysn~GQ;R4v3noFkrU-w zu=2TBh&|oF9|x--6SFxpK5U9&7~S)h{IJU8%#7(pEoao$n66tQdOl@z$v6j~Yt{KOD^p8~qqMdZlU|fOhd;F-wHq(s~+| z(K%VCBCExT4#$Cn!?6kd<^U+()vP`K zLEViv2co{+Cj(G=z}?V$cJP)BIRet+0CZeHR872bA=YK%G5`gwhdvuI<{(00YsOn1 zc;oGez_W@NDD?#fm=-8PK>2V5sy?alBghV{w+3TZw z$CU1$zpf;Q&mD2YN`HO+QGu91Ke#mJ_y6KxxFUy)?kSm(1Y~8e3SVxIycnEG2=iUr zqxO;_kW=B0W_)-k@&_k?*1UGgk4c6k+GBpjMRK2*RQb_9OtpMp5(bM^YN^7+zVG?B z-H_YQB%p`=@k8qWGuQXuz=oDrXRwI>IV6az0tO*9JQfV5rPBkfadtY(xJZC#!En$4U zp6~p~>dhs#5E2km5QLmUE{JKb#L2J)Y++-M$>p}(t(OHKE4P<-l#&g4{lr;T4o^o9 zo+BnHFu*~D`fftOauuaNjj^MXvf!`eiZSbGH{~*JFPz5F(hFq4*t^1m)~ZwPXKPTw z?5f7`)Mh3F^+K`4QiQ^jKC9<4DLdYul~@{Swbgb5wOu94yMC%P53b>b=9;Ah5OtQd z<COQLe_e1~-EJNMuj(4$LvC`j?!;sa5d!M>+ZLxPKi~9 zomzJOjkKZ`(R>W4?>G^oUBVUzsNp)X5-c7_Znbk#S?b{LHb|cI(Rox4J0Mob4J3U{ zS8UQ)l%Zmth;kza4}G95_P3eAR4* zURgbT(RgFZ*H$x=q%Nepu=#%C-ZKO;Gl_-77+1<7blJgWQ_|8{G^g~Kz8}_>KKtnLAmLZMoIQpApL^T zKS7h(!-7Iu!ES)=Zpj%2D3zPJ%eidp=_tevv9$b|rpVk>m0hu(Xk##26-_2=VWl55 z1#1AN6J{vBvfY{txy=eLK_&8yT#h+Ao9?%wBCf2VYCQ%)KBQW{ZybN&YYSh(tv^l; z<$Z>MMt96+-i$jQzWSmFDN8PH7pBf$kx|#56}7(#$ZfSuD4oU zSh}NaYiDFJ+BiEax@w&iM`AZ!g~oNnY_vBdAv%TJY^0&o7^bBff-J~c2p^6}snc?2 zLy}ZnxW zDYvsCW<=_Xy)niD@GIUZcM=#UC1 z>#~}$XuJFwV&S&-Zh|ydDJ%+6_?rmnu~@jxRi3&2SIJNh(9lJa1;bg5mp`B)yrxwjyRzB9#HtB2(#;k@3Cw9QSq>|YmBLV1rgfk&^OtU@CB&-`hbB1 zH`=c%3bYVD$??KDYt`VMF2?HsVB}F{=4X}Yc~ck$D1%p`x{2Bf@N+TzF~TtVc7i$2 z5mSL%{{EL_HWYEy(IQS_=X*ZoHeEMwGOs(@PzJ9q{z2jhje5w|K@s+D2QwD0?r>r% z)x!&>yx4+K0l7y~KX56bvoem{{m*d}k631*tB&`RsZ$7m$mxi?eDc9Ups{Eu&>ov$ zJ%N2cfVKYw!eiLI4k&e1XCV33fehOr8fk^YF`KN~Sts3Bg7LZo`vHlkBh+{7bcm}t zHDQjEu`Wh}>D4FMoeV}76w<024khZ5B{o1(Z4CAPwzAX@QC2+jJgK!AEjrSbrP>1s z$I?X7ID>^QVHj531MG!m`Y&25Kb9(3uL+C#cVKYna$F7OV1Q#fyt$^J^J>sZEyBzS z(UIkG2SC6&{hHe^{H!PF3dW5Dg=1?$Khzat?K6jI6JTJnt)AWd2nhpf`e4BX8`tnp?G`)g*NZ zz-ZFpiMaI9Go-6F!f@Rl!9N}135_=vyUWThHCQpY^F)#M0As)5vgeO4wQJ-NkP%b# z@`uNw?)#|HCw?arlEvGDD+s81dxm|u%M}wlJXHRP-7%RxlP4%W^WT@NPVb$zllPO&uPkQ*dEYK;1b<56ksz8@7Yp$E zc#_>{K&Evd5j8q*%kOH>xlW5rRr)w)UQ8%*D=@JX)*Rbv#)@|2J_S`>8Z$R`@PqJ- zyA++)_=*8zLWI!XxW<$c0}+Ek5oY`rqi_QjIP69(<3-8XhBq+Y0w;L6Z1qYtkZ5!(fm=I7gQ+!`v7SsX`5PjqGYBmKD*OS3Y z2bbt#<4^%VEpL)O6Mc`-&jm&Cd&|Z9%BRp#s8M6BAbyCrJi7N zV3n@kS~3djvXLBnF<_LQS+L9odjbx{Lf5Nrq^MJr1hGS=mNr#%*uLZA!=#ra^wBXn z;9$ygswX%eV-p_MVnxBxrQ2}Nv*?&nQ>ClGPi1PSw)T?eW{K0QVkU?{453zci6)^#t0b~e zXOYOR7X+>31_R@t(se})7=M!7v>~Bj@_X;~|AncLMi;MaYD}$Nm+B`M{hmNcLbhj6 z)Gjhk4(nq0O?Kv`Xol~xp)Nh~Q154th4b5Us&KdmW~u+(g&+ zmADdf;NnF}v7(j^_nF=mMvlP!f~nyrJjI0wxlwsn_G{9pLuyz6H^!9dTSFYfq*cEE zA-f>!|4nwx|Huwi(b*C2o9qe$WLrOL8>ixsN9$t@|Kj_fI(HLrV_7vLH>|jM{rW@)Y1wBB=MxHqT7;AN2)H+ld(Dj1ALaUzRs&Aq zO9lWiq_sC-H_2?V1ffXmQd!xr41ox#i&x=6p7;4eSdE4P1CGK^?^*|9CBHCutv5aV zw`(y{vWdE`8Ea8`kTElUO-IZ_)7I;x83q)5zAC}e+B+Jv&$P@(hha{d9wme#;CP5A zsVSB5G0wnh+r4K9k=b1o4>^qQAAsld+G_$-7tl>7mlvlE8m-J$eygfYT3MR{CB9dTs%Y&P4rgc*R7vzo4TX5yXfE06G2B3OmN`|A z1tdoZ@*lDNP91IZr&(o86dyi|*Pz=<8rNgHiBJ)vPY(@u?UU$@UO5$QtA7j)V9y2+ zN@(9TLD=uv;$35UsIz6~W6cV8Hq6ejQR9;aZdZso_sh844lzsznU#fP?Vat1YIZ&q zz5cRNSgZX4#Zs@SH?c5gFj~VCS5>{rYwkTGZ&*k_VT0HpStMwfe>`^}mnR?`vl@fL z%dOLba~aG3E6~``VQ(qfGYvBgCB+2TfE{zoGfItX!K$*c{Hv5B%Y%6Z3#RV6(Y7Fv zFTsM&Cfvv2c>K&)u}rMMd4p&1`opy<#TjbIqgt!Y4;GfHoqRelp?9z z>@Lp)TO`u_Y2AORy!tnn=e3ShTbH5VH4YfpP_2wL7*Of$@(@k)Os(i95V!-ti||k< zpLc4mTBA1uC28c6e0xlZf4E`VB%Y?TZl702umhmh@EjJMq;ADW(8sDb*Y-qYUV5uO zj-mSEO?Va34Mp-U2|L$JY|k!6^G9%RfIBHPmg9I}s4nU4rxEORE@01wVvtC#-lf$Q z`Ue5^t$b4Y9By&?-GDp=07y#B+U=Vq~MbdXZ0yZo=zU#{`*>v$lUq3cAFL#m`of~6+J)2@$si{tl&uEatTaCgZTg*p6b}O2mLbx&l_4KFP>rbM z&7nWI1UWAQ&I#*9`hdnEeFA#S{l~BoW#C2tMVphqLqm0-StK!VbeVOUhVCp{3dZ%b z2Ipe?yO4}O&i*3ZOeK-VSSK%_XsvX>TQV0e?4uNl9~bR29x%qN0-e^Xr^;Y-dJ+|rr;dj8aLuE7fLP9Sf`F~=dD&wW;bPr zluG3{!b3@qTg)_g>lnnf8CB^QFD*rD%mDe*VWb)CMrB?le7gNB<=0@vuCWCV=urDN0sfZwVBBW5{(~&!=pL$RhwP{OR!B7D#^HbHzdX7^z8e z>f;*$`QsLOJhNRDDV94~6m$c8`nmhHSM6lQgAT+iP%3r zL@~r6FEjua#^zl@F>BX#AlSWi#Ic&7B#M*ZuL$_NjgKG0tz&u2mZQhobptIncNUiV z<3pUE4eSka?n-qUiqkzP6J`wU102lW!W!}Ldlpnc%S^#rCU2fHANPAhU^G85s4$#} zy8AKz06%_Ne+PzsRQ>8!TV5C+YWxlu(vhN0of`)neN^2j57*V}ea3!^oi204g-&%f zh0(XzUH%ih@FjM`NjnjZA+D|yQl!$0Hp$A3@N0&hhS8iZtiOCIDnM+ABgvR!6|R)k zM$P(D1M336bt-NS1rtw{IQry#^e*v4ywhjxKC8cnPIqf@cBtTKwygF=!8*pH!bVTUr zb$e|A8FAK&e9PiXd}Qq`3N#r2YNtFr30a_~cd}4F4+cmVrWl3JT*nzs$h~(eX1_wr zqg6q)u&XK^!$U3Wx1qS(T@Qqi25kf(bpl3HZ`_gH8q#?r6c8u{!0Wq(a-z)|7qq@) zRo=T@gg9cTg2VAxThv5 zZg-wN^HKcde$CsNxMfV~9tppK8a`*l4f+}WS?&Tcf%bpIj`*M0?fh@C6X#@bEh6f9 zW`{P2fIvY*Fq!hJY$Xtq3{-#L{&`fSH1^Wf!;NbP*7rjm<(LoulsWj7hWf#|a$%;H zjb9$U$DiyySfkHt1Ex!bgVO_1pOdt8KESUYxYeG}f94sel^$i64`=rtdbb~`MH_Wp_8(D~%Xx7gi0J<)~V;G5n3MeUr4c?RO%46~skD3;2){(r@e6JG`4pV&SA zFR?p*F@Z9EqcncQGJgBM;52>{?MZ`XTlw;Rd`p0DUG#kwb`49k?scf)4(GQGoaT-> zZb$IK4(+ndVoHssIUuz{pC9=?@TmW9zd>;WLG%AFcB%jAMD~gW>;0cF$5RP|2nbR8 zA2bJ>BDe}3W)~Je--LYLK^<|gjj+V{{ zE_tMXkK+?_8J8jGX$B~oWt8mbR?)z4D$l%JU3H!0-23iup6Gp?_W(X{{FPsPL2V(+ zAgv(tbp;zMYcNY302kaO#%mMIZhBGF7W~#4q26+WHU{mcyvb?T0+@JI#Mo{E%C)72 ziF?BZifonN&GjP>PMRFmhT2C^g_ZOf#5Dq%zZ~34Lv>fH48l|?W9V_rwvkc-dj*KA zh=1pulyn!wrnNV*FsVH={^4jw5yW_sIQ8Z|_xxj>8;bux1%RZ7TDd24EJfKMOkECu zgwN9-5`+swRG(ckD#;trr4HY$AKg-#ZBY%p&~lt(qnD;C9}IkO5gAaF6fwSmDx|1n z%Kz;l)YlCjR(Y-ve~)H_Qse;Z-H)lDkd~F1nT-=IU(J+3edicKgiBJI=~$=bB%=8m zu_3qFJm}DU1<0x>*@F(7DUchfa2$xhV0R^mz_^G=jy?Z8v(N#@U5pzMsx) z09lAVkS5bA@foH3vmfljc(*#eHk29s32@^p-m~Nx0Bv)#jVEKCZ4YUl*>8+s#_sl~ zXG=czU%j{BgW^^mT*{;6u(-Zf^{Fd9$QLks$T*xB0yS; z_Q)myj+u)1<{<6uM_#lIh{L989<-yndm(8n4yyg8kmDEItd%;LE2xddkbg|IQe9Ul zFqV~&EI-iTR(u5#vKrNHtri&LreP*np+hU5Kr|NPK&-1Hc@vr?JVn_X`c2mwq|ZVW z9O0ZzCLJG|EDJA`hJaI4Xsj7byj|^$3kfv<{=Bv>59h^+hgg<(O#WM3llfHC?{1&pNvaRb z?>a-;*xM-~jn>j2X*_Fdw4RD=t;YAirrX=K_xkPpaN0TPaXk%mCFSEByC6?o8;FI< zJ}8U$uEJZb*J}r5id!jguRV^0rs=8xV8vM%|;GJIy#hBlN{v$uBn`5)ty>1@A^Wa7nf=9JTlWW9hE% z>n#8v!EPY&FGyFstsvD4*zQ=o*jd+0qV}&($UWj z<+jVd5~Ir;x)YAOw4>jR-Z3g5K2PL@<`o?7O=7VF9!y?}ax9>+N*cR7DpB{(gP;ID znSI}Bi8lUSetT;Emj)$%zPEGSg#=^SP{Tj}IF3K`oOt9d?N-;Oj|{-h?$C9*C)K!{ zL0pXyZk^G}q|??e`OR@$dn9SPBYh?;8-q_$Os}S#bpaAg?FuKl6G8+)zzsCh(ov7d zGeMjwTWGM%!@RM8joT-3vTA#Ak`0jqGr> z?At^2GZHhP(~k(MM1U(}yRx2$%rAdd>&~#m99f1hBChkqXGGa$ zh9M!<&GP+{g8Vb?0(hTgHYaK+~4)GJkEuZ5`D zC$x6?5m~7$2nM60If#4`S*zG@+c`#kNZXnd^EP)&X+#A*4k$fUGz3F%^$WcD3EA`* zoOyVpd137|cRemVc6!caId+;E{r!{=q+rJg;ulb(-obZRp}l#q;tg)mUJbm^KE1AS zAEA-YqQR-(F1VKU!GVGR0@n$3Dz*mvaGEV=?(ql3x9_e$|1)Bq)#|2y;~V7ozsp+x z4P=IZg!~bq>ZJOgHog}5OfWO7|CQbGFNdRLp%JX`zbj_nzYq|NDj4*Z-)&%2|4j<{ zPw$^;6%29;~QkkQ>%VQ9{3`Q5lXi+93OQ{bo#;NVn=wQoyeKgX~>G3Ay`HnIXrT zvRtV?C3Fl6#_R~Za!Z;F=m?sc3gpB2IbNo~0FjJbasK>rX%?kg^!W18)ZC4P#5G1;0UG_@jqcki87Fny&znGOh-Ph(FXjc*Y$8mk* zZ~!@r#JD`ri^V}1Y0kw;Y9}r_Zm375`ZqZCQb`uhm6GD?>#bqD=QLI3OhENP); z-(QP(1v|z;RcAaRzy`I>EcH9tbEI&U4z*z@qy{6ol+}O~Rt2gKp#dYOd!?yY4;`Y~ zdf_vS?pFfcT5|} zT7t|2^u&nb91Ss`JaFO$3u>HVG7Zy6nQvYVNkmS|b9Sl~5ZrYdKyF+Ws8?B-7|A3} zF*j{68)0S+MW^lnW+W0j3e}<12!3z0WQXll(4yf>p~e(3%Of$ns%2=C8%P~eOt!9r zRbE#tD*s~e3woJ9rMmi=h&Dn3N)DrUoe+9+34N9;WTgh}{QQD=mXgCx;YM>)0=}tK zT;N(`H~duz5FHI|*FQz{MT{fE-_eelo2u9{H%5jmbTxbF*(UFt0unEP%djo&gl zujWdeUWXcUW6n~j9rS5Rxy%)4G~^M^T&o=GdK2}67V&RR!h_=r@`@`T&A#l`$Q!1_ zhsc~F5OXl?2y4wnvM8LQND}<4bDsYZsElS5Ks57uyc_{WwTivgu z3^{skz(fP|lL7tx5h`o)JZz%2^29^ZI^F`Nc)7GoE)m#30iqltol^Rkq_M!TvxvN$ zTUUd3n<43+N8kQ)rkvYd(FmxB1_H$CH?M$u+~7}wlP(dUQm-56=%|PS+p@|P=NEU) zO};N{Xg!RVd=M;I=b)TlUN_+P)x&`+EvTKAfH(DC>bKVonS4&v-dZ1woy1#TF#AYB zVtR}XRpl2IX5`|9ngL>zqV=Ws>-*6a^rrk zZsm@jr3dFyzHs^p%9reyki~hEWo7Z_HMY2+-hyx4NXOsD;S-&Z~!tk#n|5%SP#d{U1H~#j0lC$sF&dehN z&m|es{@N!N9z~XVG!wS7lEG51ttgRh1l*%u?gtc5!F27EQ&zY->-u{6mRcQZ?ba<7 zpXx}Q(&!T`y;fet-PSRqICw9N&#_nHw7pNPsImJY#}v}h$7do#DQZnP&rV~=4nMud z_>7ku_ZDRwlslwnU>c9Fie-eX=vXg=Q-GByYeitX>`u4R#tdIbuCL_C;3(RL0O$gb z4IepWvtW{C9*_eIL78tLf{FHGm(S!AOC$IDPYxsx(x%UI+qkfb-+>MlIG8{!Q+v@q z`zvOUl|_fGls+SR)^LP2X>P9w0y@c6G6L8S_e~*D++(h28#sdRdbr<;(lECreHV;o zc3Y=B#{6jXwf68ffm<3E63n|`0IRV_aQWjAuq6n_DfdrB%?g+JDo|&@>b+#>NOhQ- zSw9Qx4A-LS4SkH*(KlIM;ye_&^mE8(C?<9+MT1QQVhkBXJwLu>!NnO3dLlwB!Mc zqwE%E=2nKFX~Rm-c0#A@PQcy4z&3!{9p)E}^ZSm`$Ys&8MDX^Vr8g3iyegk7{cq4Q z?w21tNHuwh7p6ZdRaHq(YEfvpJ9dwD&qj(}mQ6*p*^h}Lz%7>Z(UNfccydyEP%Pno zs&15=TPF6Jci4`T(Hiz(ZwHmdI%0)(W6ag^%LzFp#lgn*Y8)IX-2mYFPlb!ek;l3LbKmo7Y@0s9m+7P#$F0}=&TffyB?bUoyFGmlU|@}vry6&M zs0q8-v6+0?i?8yA>HpMbYPD@bYiFR>hkmmO+SM!h^5u|$$M_q2b6p0yvAAJ_LPrRFO@_~gU@Q%;{h_}{7Bu3aYm3#w zYQBk*LaXgO%n1no)wN2B&Ux?~liL8M%ZZ_NaRvDYI~rPUt7}{-!OVj%x=1} zSrhLe?#6}TVkcfXr*CEWw0Rk9z5eeVh3+jT`GKQb#${U2PYsaV!&+h_98I{1AppiL zpEbLiecz%2IM#Dv8bhG(L;vU}VhDeaHEPI+W~Y4J_qN_Z(tBM3dh@(%7C>vyg zfBL1=7Yxgk+{nkL{jZP-J)80NmRfCIVHD|zzJnvi8;>SL{F>u|ph$c4pb^3(2Yu@v#uvaE?rZHCj~)wZ2$g?2v{#{>Wn$LM{1GI|3u{dah0o*3qPybvko zic4XI(3!R&&UmWVC*`ks3QG`we?w>8^6?~KsBbu(XtEeY=w&hz&vy(*JKF#GfdB9J`~M!2{O|YsW@^q2BuuK`Bp5oNbL>Wf z&@d7dmr#lcija`da6(9c0aS(PnzUPMzubpCC0AwzVI?|YwB0qv$p1go;-2voEC~k zP{`@M;YmJK3MM0#M?xO?dd2fYwdz(X@wZ3|R-J>)FpTW)_}f{)bQu`Nx<%E4cn~qJ znR&RQd{~bKn)^^tK4tP;89#4_ApJ)<#Vdbo8fussZe zp0fOs0HAPZ_2LLXSbd#u#aqbSkQ2Y9A0JvFQ(}uw1tQNf5|_o2*VbR-b6E}PTq9pf4JTLuJK63iW?DkM zb?LZYm?&aYEL(u;${x55yP1h%{io6%1rUGh;1@nuE-^U3l`;A%+g@aKaGiKACe%RO zoMN?kNZ654p2(KX66XH_U_hV0ZH3Ze&Wtt@c>EI6;4}h}PJ=Fl!Fxefkx0n$hm$_) zp$q6@;rq+5b@6IZ$2My7(001ipvz3UTz1JzW4WVM@+ACh2<&xM%vxx{1I2S=23^TC z;d8jJ*$i1*tyT|RL4W1)bB#&Y(sf8G@gyo!@qktu04BP)MjYrylWr0&J;7K~DuZr8 z=Io!Hs=DA^7BckBl;Nh^5Z?=^Z#(tm^W5E4-*K=DxcIL^CL zQtHFvGg$^b+Q*IStjhhlo=hoEMFRw56PE3^>ZzMd?3nRuY;KjWi{w;unws=uR zMY=+*-WJPi1>@_i zsJA1v-W$OvwU6fdJ0`s#PCY0XtLy5pAf!Je@E1*b$$xS7dJ8#DEAo}zT~fPyJGx?V z*)5!0F1tjXHU7|KvDd4jo2^pvUKMY8-K6hp;;_?7E7}r?p(pquyc2%;9S*A zADQ$wDMQ(4i&prfmSm~F_sQ0kVWh^7X_uS+1%HF;e#5)YAM-j}Pxjg%e;fK5Zxl-P zB0Ys*TCr%kM|!V&<>z5H9cC*1JZ!H&-0Dr%j&hH5BcGXcRCgo6aG z_~z;G$ObF!VIPi*JQ<$VyHlOju6wR#KE>pzQkwK8fVD@WTd;(un|!LctJ|qNF`*Mg zm&dbAK8#a-%01QJaxPUX(3uC_KY(yC|>#($c# z`Z#^0n{oEYUbdue$?`hybdQHCxys;bbR4`8K{znAURLc?y3QYMkdr|;U?m$8tZ{bE zrtQ4Q?^f`5axr9n;( zLyOam2+*8Cyn@d(xZdOjhCK%NnSX`8ge^bZQj$#i+9eJg1Xl7YgU>d(N%ySBqM&df zP1PY)3vRQ?=kOZXF$_Te7RyOpZeGizCV1WKN1^l1^NOSaoPiiU;mKdn*`;W-;TZ05 zGxB4O&$qI&eo19jZB2vE=aHKeVxZpNvCo5kBV$!43G3Xkt{;$2W5uW>WZ5?tnHoFCL0 z@P9EH18~2*eql|$w^^L|5|h88?_ki>cXg&6^4)wX95jXO=F4IGhQ`XqCDm@mDS-jH z8eWjXu;+woAzy3qb$q=(7JoyW%1|hEES7emzo!bnH-ZJ9uX=eM@^B?&7Tt;m-)!$2qwH70xzr$G!G?9(w**>SZt zz%_xJ?}XR-d^O7#fg3mDC@@0YqRZcId69&5@Ow|0e2TW?y(Zts=zn!Q@kny6*GdDN z6T~N)`D?Q3L8dXsN7VM*sXOw(I&XZPKMr0VN#~`ep`oU(x@Mwxs?Ce^5Y6(logX*( z35lg#oq-Gkv)U3=HUzJF!d6wMbLtpxUX9@}|i zXv|`5TjpT=0#n6FUa1eVy|+U*a-GpgYgfR+31W-4LA#r`KC;Q%7L9axYhp3U<6b0y z4$IpnbK?Imn*5Sn+Ig%_nGm>uUorW+`Yx~2AN6+#)Xm?6NV+N1FiUzyO~%cyBcX$f zP*VHh;NeYk2$|?YTcN`G=0@CK(nr{y_BgBbj^9%|DScKY+e;xc|)LpYtzJ zUXBU(r2aqG!IzY*cJr^8ir4&y>J|5Ig)f zm7`ha-=zQ zfWdz@`7iueaM5msrEsOL1#7|x27MneGQH_=8XXCBga4Lx3|g|hW^=&ml;mYFjv8ii zVv*wr|1|ku;s^%V5Nmt*WBx==|G$&B!zLe*5Y4hSqwR}fseddQYpN4Pg3LfjADOqSai$utHQTmT z^CehCraDQTY##t?9qO*)rAW}K7$r8kNsxS|DitJG%(6BJV3MgOt10j_oMv0Aw#4nr z*ebW0%0z~mK0v=$4@`Knnvv{+9FyB{k2+P&63v_@ZCGtOg4V$_CD-3-PM>0HFLmbU znSW}&zMvA8(BVPr6%qvQxRExC&+d^Hj zbsn`uEj82`rm9uT(tJQzw0$Faw$Fq&Em|n|IVF7rS!l%q(O{>vg&wtBtuWM?rmB}6 zMhuK53g3dv1zyG)>a4zjyR1Lr+jFvYyWD?nS7B2{WT)ZS32f-hVx{hmz>qrMRDV&q zt}xLA^-e$!aZ`0kfrK8GEm`4Ko8%~>FR!**9=F2D+=#TSFZWKxU>oA4p-Zp!Hbwxr z0JBwcYaa7>)J5uILw(s)mq-hirf`tOI!)fjb*t^zWU)?%A$#Rzrn+1&(`d;lw?cF2 z_EaH};20-(SDWe@!E?yz3Aefq?0bwhb))EFL@VMN;gkBF*MM_Rmt1aC zLphS*;p%mAH4=3`u3i0qJBt5*IZQ(p;5V=V=PZZ2vFY6PyV^qBK~ZvPW6PG`=i18d zVG+Hl`T;FuHw4?mP>6i(TJ-;RWSu(z$MZGMZhfht3&)6oYMQX=8(?DYv44u1uaUE= z8kfP@!LI$XXmy=_ueY2Jb!O^aPYsb_2in70e=IHrhA#SpG~x(}6x|{;*p1qvNK{YE zIR2^Nc!?`rbV()dxq*=L$=cHp>52v{S%HBz#AG2uGVy)??Xh{z(tCe97tyq>Ze@tnD&b*)2 zmySu$SqG`9o0|0N0cv(7Xw5p|BYy1`A}x-g3rR63z%>2r#N`sSSyN1 z(588XJE#B*ZGUUpPZu<0^w32;bO{W*lP2w@uXNMs{d9%+<5hLONm!DfpsV$4uCLS{ zUN2to6pcGXb2Mn2291+9TL(9E)42U~Gd8_7@2d&A-Nv~yLHF#X2YhVf79DaZ7U|_h zc&ko=sx_z@Zxu;Ug$7mNZF+)s_Udr8j{NP2(93BEU4IR|T!Tozo=%|~;72z?k2fJC zZh`;Y4)5xQ_w0aH@1X1GPP&=y!RTIki0-Gy=>ghDJLv#DOs~>o^akzHdd?-|2>A?( z^O!;N^YZeb;wOP@yW4|Mu&5ZCe59!q_I)g+vnNtY%GIE88k7=zk}dcXw%`>>P=yAG zlp{;a5`XmdUO9a_On2k=n~-=9jiCf$W-sL2M{{XE62Z3+?9b8JbU^d%p^U>+V$dU+ z<$bi(@rqNNEclYm$#9#G-L8AcleY)v$=GFcyF}+Eb(vRRXKcl;q{47Dg!W*=Z zpnw0#n5T27=s5o%ZQGHaNo_CrJ-h_r=qY`Q-tQ*EwUb;K^K1inld%PyamV0bs}B#+ z6rmz2IEN#g#~V4HFX3T)GmqrEfW41L^D|t?2Y-1i zzlfFZ@C5#pi?kaT(FrFVrUD+3QNd&JKTR7ZuhYjQf9Rx=k#OzXkRI)fwgLG}(nG@# z&oiW&GDQ4_CYOX?LsO`C0lR_8WA@(wDZzE@{c3&%zuUrekOtRpoDkn0dg-ZvvWayg0pnYV?0vl1I|v4 zr|Y`Fp5%D0&JjE)mAPJ|!Dad}Y^R-Gt1(#Dj&!zKu9>sV*-NXy%7OtTCxstxdRrEYp(+j+i-sKvcuNQG9 zFNVJ@(cV%>!v`OxVFtN#b909bX8bu1{J~gx>UPIiE07=uN%y#)+)X{4t6PiG1P@sz zb|_2mu)6&`vZ=I(3#3D`jemDSf(y$txjf6xZ$mYFoCD9&qatS{J~S8f#+19cJloDG zHhzVJkPE0SBO9i+>*GcKSN6qvv>o zR^(K29i^pYK$H5f(4ff%k2I(mf6}B*(XX@cdzb`VhONJnYTO1R5VAn#cAbGv6ulgz zke!Q)4sua?9Rb9Z;FD9G?SA&bAZ2wKGhM@7c8_~T>2R0bp_XSBWFF*6-885mQwlLStIAS~bQ9}B6T912wwGu2X<*B7a3b!6C!SBG9Hr?Tqd6Q$ zN7@B1+(@f=6BM=;&C@p8#$TcnO_^Fv(#jg_LvA=s6QGq( z=w!6DaJ;#^85`cD6Pin()ZD((LQZgb?+H%+l@9UcWbhTLTYsMom_O2M=TU~P-G2uR zYUK~1Gy^&;&FA?Eu2{93YZAO3yx~}WfCranmO4cupU*{kfQIPy zd_E7qSS$K!LF1FpmQy-FbLY{0Am1*pPG|%jmkt5mA@E5rQjRkh*-0w_jtW>CZjv@! zIbd;(nzTh}Mt_1g0=h+@HkzyTel5y20ckrukI@Cr&WJNp9(v)VL$nBU7xml5*O&b9 z$i9&zi^AIh=7Y8xTYL%rGN!gWJ5EF^D^+@;R)eN-nY`k8g@aO*6vOJ}ax{ilrK#(h zrqXga(3rfxD(*4?GPy?kr0aewcSWxc-o3QdFYuYrSHOSybK z0{aFE@Qu{QH&d8zp^bbiUC6i5Wqdnb#ocr(-${4zUGxawO;4gcJ;(Rbi+msb9I)T; z1N0t0M1SU;sN0XyVSWsidlwJk$5Dm9&QtL|i=X5L{1n&0PwROvd}$y1`DxVgXSs_H z@CE#BzJH9L=j-?dzLj4>Eq|FG|-L@K5pIulN`IF8`80V7o;< zneuZFlWFkEPiV>H!{p)Fh!z8|94?W!NyaR1PEKzys2y4tci{a#zTc_$n-ETNIU~My z7yLJ=|9kp5&jXl$$eGu6c%amF_%scVmunJ!8-FSET^ho_r;+>~>eTyG%zvb*`~l78 z4>ji*#BwupA0?T%A1nwH%}$urg7(8gyVNf8k2)KVb9@U$<1q(R;eaX}P?Al%zjj~< z%HBkOGG&9yzkk z-tfpx+Tm$Cq`uwPx2tgUB|b`7;3`Kc8m3%Ss0=DnZYonAnxRaZr*deq%B6ahN6l(D z1=L7duSU^EbplDJA&WQn-IUFv*4j**L*wD>C1;` zY%jvA8sX($grwu(`C6LCecw^o8%agI34|Y~5V8{dQ(5xMG+#(6<;|p0`naPmPHF;; zRz);dokR=OM5@0RZ7KPLE3 zu3f0mA2;phfAsLb>n0`mQ{*i?K3kQsOZVNg=rrg&?Z~edkfADQu&RVb7gDKOOf%K# zbedX9vsEpGT1G2Woo09_xe9Y?4S)XV2$~B1$l#BikiQ!uWF&6@XeW#)HMG_~WAnQS z#d}p|x9%^X)*Sofui+36$1Ho`cI~R|Wqw(i&3suJ^HY&j`!atP4N|LUlxm_0s+mgE zIdqCTm!_%nXu4{l`6@t5Rcn&@31($F^I-QL6l`1X3*@p7&(ZtUpr+kwaDToU(xdWf zeWeLCe2*%?V@z)^kS8Wm8xRU18lgJq1QkwqXm#)L$a?<+vgdHRP9c?(Vu6(s1p(?v6(=`vh%orzqmP)(n((R_xUDn#Gb{>5t z?eJm;+e741J5d83h7gaCPdy6eAER07ahju^ptArwS3RkP7%c~slkB!z{{6C=h6iGB z%qQgTBa{b3ZJ|y@gnvuc7y=d6lqJ;Z2~~&JhW-w>2TUXo^*xlU_V%H5b}9p1!J3;lFz`B&mvVGpt0)PP{enjh!>DD4{5=N zP)1?@B(pP_+!TGdc z6y_8Sn^1Y2Qh(BwYJ~PWjay4v<$zPfcA|pktBrR5t~NW*t*Jg9C>Vc9!+m?zg&2G# zIk*&qE0Tk&Fu1mFuVa_>k09mWC{O(ZdF`JxUVQ>He+o&DAXq=61@NxL8BDbq8Pu5J zqNa>2@@E*Sk4Cv^j_F3cBtIXWs&$G$$a5#u^*fxK#WZiy;NI=CY~RzQGD(>gjJ1#G z=|}$;P)i30T=%HJ;~oG2>pK7dP)h>@6aWYa2mp#za#fdcF$No#PwNF1e_&L_7BGIM z-Md*XArJzD8jzX-QUnY|APEvpLJ5LF1(sw33rRL)H#7?ttk2#PJ5P=MDPj^`3-)KP z&)(~^muE%F@0_`Jckd<}KELn3AIg@QGc#vSn{&>byF9z^frkNLl5v6;I0zG@1quuX zX={BOeB)|-b*snCU$xd>e;Hks=ILJTrW^vaFlK+U+> z4Gq4{C4o?Qnis))S&&Ys^{8(MR{BGs1r2^*?W!8T7c!ua34JZ-e+QWidc~J2sI8h? z<6Dihrmgme3xl<|0Yt39R~OQ|SVq$huwWof+q<&H7Ydd5H~4FCP&n+b3)HP9fWa0F zA%H%Cx=`3xSLw%v;}GL%`JomJqqTeBGDn3FAXx8P?F;*9_;3qG(D3e|^^LyJ8pHw# z6QZ6`7L0~5T}?cJe}NpmY|IjZ%&{PsAbUk26EPfX!8kaWL27+46pnWxTX2Fd=$Qc% zESN}>riT3C`HkWF#_%G)uWB=O9b&;`>gtJIv#XIYvsbTf@Y9Y`U@9DHLcRslU^;HN z17C5r)iuFYzM2)G&9$q7HAv^aF5Z{x#>GD58cM)SILw4ue-_M!Imq{74}EB_^z4Fd$CD#iXv)f5C>@Qr|j%xvv^2zZ%w(nOaBd zb+Rm^F{`20f;tEiYofy$jCKP%Y{V^gZlej-ThIU~ZQW5c$eQ^#g$u%DpGGGeVM1eq zGAv!=Z$L!Du#phmghHEiZA5ho9B;x27Mutt;dYWqHUraFRaN2(btGAoNl3Djlas7G zP+MOUf2c;C-U@91qmm}B7c32uhQ>Qw2Lgb z7%o9cBWA2Y2_%9RCuiOHa2e73at33P(Yy;bf1FQy+yX`P(rm$1a5aN&4gT8T2LIeZ z1Cc&av>ntva4j+=nZo9qaD9T^h>^(y+b#Gf2}P=Nk~v)_+(gzmHezm|u8P20EVzZh zyE)*|_S-DDo!Tv@T?-u@tan;)7yJut;BY+A{0(7bWvDO^A~S@PV`zx(Ns!jV$+DVo ze=l+&zQftkp+%&zUf4kr7!FC zE7Z6u6b^(N!;S@wuB7LE%!0@1(DtHGe=YGhtO|zw9(a<$Ky62|R{2pa{8^1C>D5_l ze05bd#8n#jv<3erZ8huBWQA+$h%C=q@Eo1;18kWo^`SYlwZvbgzaXvX?0mt37vUx3 zWhL?iZ4*v_MkPI|B$vV~7Q9Laj5l_`Oz^<#T}a$mBFr0P_ugbM*e&~u8~py5f1;!D zCdX$gylufdgt8|Tvl1Ebo(1m{QF}HQDzppYJ*nmDmk*}d?|7dGMRgh^(TWPb&h z5%hN!d=Ebmelex*ixwrB{+jR;fATGfRl|cO6b>!%q5S?xrpyDsSn#X%BCGsJ|KR2* zb4>W1!Jvfg6xUUfjMjxq@pRRK_Z$3a!EV}K?^-;KVgQbE5drsDu$Ks!js!fs!B@Yg zAXtNLz#Mc|*O{=N!O$dV9$tXj7Fb1444X&s{ovI9bSvO{xth>chi3aH|T9(c) z)F9|1k(*Bwq*<&d>xFV23f7RMCCX`eu%-xgcv=eU%`!~Z$6|d6xMwE_6qnNC1vFu% z#rhLQeL}wQidwBA=u7yke-XRNU~N5Zd7#Ax(U!a6mdnwRB?_5r2nuvkkAS8qq$#{? zFheg~v0?gfIuR>dehd7D}lI+j~X-)#-WmD0jv#D%4nT&NN z!^p00vc1kUlt1v;^?z+{EVB^#x`28lVlrlu-Tja(|A%^#kCTSwT# z3ktk!uB`z_SnNnze=p5muh5Sc+;4BNltEUKNt~66HdXrTk=P})-h$-o&9AI%Y(Ohi ziPWA?r&|Uqx7cFW{^kUcUYc0gx5Q#gsV_BV8Xf7ZU@#=f^mBs^@$u|vLgZKmnMu{Z z0AOCo=*Ssk%aJB*Ia_71N)lJo5m%G>f0OU8#J?#<_bQrtO>!QQ zQ|(CS{5qt?YMb`!ELIbxJq49p0(F(nj_Z=|c#$7Zk=T;8wB&kp!;(N2YK6xWw~WLG zRZYi8URFNeV^+Gw9)u`{CrbvQzxjkYm6 zo54W`nk7c!v+Rk^wb*$yQFq&DqL$2UtgAHH1>@gnPpct_f75 zE?q=$mnGlff`(vKV`X@8u(YuTK`$l5O4*ebYocJ>f1>nD00qpBDoWW^7Q31{y5aet z&vqm@wO?zo>lpgYDL6nYPp62hxGr4p3pC)dvz`6ZWH(yuCU$eevEx86P>mQAQwHh? z0=~s!w-ThP32wx2o88XtFxj0JyNmrRA^Nbr*n*(Ww9s)#Cp{8p^bu|}5}~GE0?a@gH)naSD`mMA*%Jw7i_C@lPH}L`G(2{1*h{iM7M;7~-Vq&Y#zj1csrg{Dv+7nXbQ;U5Tbpx@ZELcbS ze@1rPS7Wj-61YHzNo^oR5g_|-f>&08>@Hg0=&SLvFG*CsNjw{ZsJ{W*aDHw3%qt10 zA1wAGLx;G(uW=JXU^tEOJkr7z108cvaNarjk}MsAkplal#eQMGB2y}Z^_vmF1ckI6 zEZXz$7W*SA1&Ikow%cNVMZ=0t2}QQoe`5O>y2cV?K16MZYxcR=f>Ksx=Nihx7?MrH zA)Hy9lPA|R5cR>)+iVQm=7md(EA2%FC|E|tg zwKCd1yC!V%!xN4r8=lVv;o(Q%nVF5Bd5OhKc^S@GZC@%N2wK;Xo#U%ymIEU`zQE!O z`64`Y@%W)cN2W_0O9FN4{8jUOp*46EAfFZ^$!8bj;Tn1Rj9g)7h*A)bB^F=Gk4A~W zrpge?4lDNZW&9YEA8YaBfB15=191dMV^-6-Z=%{X`sY_W$-+($)4Y5o_nCZ^#VdJL zG&SEDHx#gX60oUB&Yi!N;Pi0B;h==Q`D@VR*P#ijTH%l7TSK(hH5L!hUOkoQ28409 z9*z-y--OZOV3@900$cnvqSoSdG@_esuJPBc4zKZWLVHuN!NZXfe?6ViM+X}ms(LtX zXsD|>IYJ)30Ts&y7GK%qn-V;RVgzx#Kri2j;S}GqV#-{E=r>4d}S{CE#Phe0n_S4^-@ z=Sw{NJk(itXIGp#f1M*yFGMWez-~sI&TCD6NrKC*uN>*VF7Z;7G~+UhUrxD@p5)Wh zDlu3OzmfqzcASSdqmglFKR?d6tI;aNTf5@hwP;}DP;opx9NlX^?pP1s9+!*RbyczH zZ;Zj7ZDCA)dx9+3f96Q{Yh!jBG3_>D8hPb* zN1n3|0>oH%8?kN&9!{M>x?`}u>6qZ<}=&|cC2vN6BU>be@S4zL?XHRx{{O+Nm9N>O1WU& zBJv?=`gaM5YkhcrOGtc6NTB!arNPnFzopfGL6@8wyIS^JTK0E5sR_uv-nS%@yBW-| zZzgJeo3qyVHuz&s%&N`gFO1EyyX~uw2J|elFvO|}RBEpx-)r(c$<44GVer4$P?PUZ zo(9k$f11x;zE3c^U>k#0ObAOzI(n=yg&`~K5(iTl$rBjmYl017o#`ppfL@`{^ox|_ z`5p~O$%p75ukh%DKv*Y`jUoSv`d|%4N8!z;=#@Novp7gu ztp&jvujol=WE=<#m+^|;NFmWLc@ED8^NPM~e<-0cz!C!qm2Q4Jv9@BhuhJBQ6XG`~ z=XUt)0e=`?njB@UvoJ*rXm=xBCS!xSSD7&upV#}r2lr#Xg;(UurPmjbEP z3H_$XNuIT{F}D*?UXg8+c&sJHMJ;&Irh0TqqkJ&M_~hJ81S57GOk|yuT%u4`7Y7}< ze~AP)B{^JSU_%UUGQs61hg%Tb7=t^M;ASLGemQqJG1%$)T1d>Y#B5!qQ@y1wp}0mA zSfY@6QfnPw-wti5Ypx{@r>>ORKz+Qm*b+xj^oG_Uyr9AF>M5~AsohiS>M_Oq#p;AxZ_0UiMKxUJ5o;L?o?S)4o3#;f$O;h>S@E0G{47({L<2SLe{kDr zf1IB5sLm2WQBQQyJERL`M5S}6Vv2_7%{NAS7?1jG#yBCLSTDk4@TyIL&TyY7+#Jd? zW8AuwuHG6bV)Kmil9ZKIFX=EqAW`c%AUeb#)y+G zaf&!qSKZj0L$ehJO~i`sy=cyDf0j6%Bt%u$G?Lj}FV3{YS>kMLq2zucl`V}aaZ{ks zAF6B!)T8~F<`w@C=bGX?OPsIE;F5z;ZPn(wN?PqgOI)N^tE|DZ-4vI&V(H@fF&25m zWf)5q1RHCrbXh>K-d|@|3ZU?3*?Y?hY66Y*h%3-^79g4M)N~qcSdVDJe}kGvRCSE; zJ>n_`K&o(!C9b7PrIgs!4axZRmbgKn7u+4`)mZ7|OfX0-`CF;6B#MwM)#4F1Qp^zB zWkX|~vp14n)Q!Q3acM(CV||#4a2zTT`nOm@yVI0LU)1QRDoOb5mbgO)5mnLPVUgdt zE#eo8yGW9-cUo8RdIwY!e-(LyEpa%{J#^t@5XJ7b#7=P^S;+uedPkE(9U|lZ3yM*3 zqiC~4yLKv*`HT8c#hpH2iAXf*ve+MrW&8BG|BxjfrYh9#x)cJt^z^3KmHeP`?itHx zFD?u;P(n^Tf`kodQ}w9SYEfKQ9VC?udBhvoSQxDHyRbLKTgk7cu`ljHyh(I;lj!gs zgF~V;&WeSmI$f3(f2^z7oV797ur7ojNucvWT3mE5VfKL~J{0JxTQ+94FxlBlmx#?? z>_{06`NR^R>Z247&FF!dAwIXn7ts3{`F7C(ZYHV?kP!PWn z^?rj|Q~Y(n3vTU8?k3>fRCSgi_FEEMn9o^aN}k-yEXR0Y&JwR=+Dntll18+Icg_Zc zLUM-Cm&g8EuS}6%Q+BhY)uGm7P9VI*U#V?&cd83%K<@gnG31e{U5Gzo3{z#AC40IA zwREvZrjtC!Jea(^sC)JIO={9SJD&hg zd&N3A(UOzoA-bSlCzySe>yU+&{`j3!hg|j;6pSeeVdvsty;n|#jb0>mz9pxTciF?X zKV?Xa5FtU^o?*$EM9kFawxfHVAZJy7Lj^kxS6;7#l!aNUI)g$qHK4Lk)UO@W^8=)pB(-LG6Y> zw6q}Wo1LBsbC9*~CIfPh@pO%^7zD9!oC;Ql%WA9 ze_HY+8ergnBmJ9Ad2;eA4SU?;;Oua)HsqCC<*6iur|G+fzvD-k@^pmla$+dVmzwf2OI}Wwf1DXfp%`%gc!Iprl1&80{S!z=ud?LT@*4C* z>^tc|O~BW%IeJsfVCLVgigp)W#Oeg5new{i1>|#s4ZfP1*>xD!
xE3XA%%I(Sh zFjoq9ih3x2&pPdKXsK?L$@he)v?4&7D0LC7Wup- zU!X%x*CQ9YA3LCn@{u0-GIAj1vD8J&C$j>!0#kXpU1*x0<&m%A$(r58ACG+9>CMsw z3R%%-C$j9`H=@1K$H<~lC?Sfz(OZ^$TfRf3+QBG9JTOo401er!_o7zWe~G5;pq&n` z4=nj19b8sbFrK{d%6A0@D~<9K3zo@Gk(ON^mt#8S4m|R62BW(Qwma-;tSP_jvK*{v zy(6e!kf3~>{J|4l35dGlm0yvRe3u+*_NtHu^vZ7u>c_6U=El0Pv*r)9=KqqzY1hn| z?`N9tx8xZ>C$Ai>$CbYlf9#*h1>W)4sXW6g|A4i`n?07?OT00wx7ch!?(er0D5kj| zEtSMAcbS$Mv&5ss0r*kv%n{>rogP4@pcw z#OAjHxBM*JgG#kj4@ZKdWevDp)zebFv?xaNpW3riy$^tX6f%x}f1d>OOXCP;fbb{^ zeWGKqiEtj+3Fp|PahyGBu%(71<_=s}NyG_L4NY*EvD>S%FnUs1;vU-G2uqFB+^h}M zJKR*GEj5O?sgM%I3p^?Zja-*`s^SIFZ4w{yEHzf=DKP%A>oudrn%H@;rN(Pl3_Ix{ z-x!G1a++%50gFAHe=1Wo0fkjfPHxI$^`XeVQr{-8I)s1^O@6!LI(+SMUNx1#rzck$ zM_ce%$GClhS4|_>!;&9nh^Y zNTleNw!Ge78NdTrEhOlpk`qfmqJbfBW9MhR6Lg5@u)hw_DoP^S|_T-rXt(oJ_Wrhh{v1? zs*t6^LmW4VK!do2qmTGZAaErM5(gRl3-tPDrw^QrEstveZ_4U$wD)onom| zXmDf;WvUwz z9Q9a7e{}fu_V61mb(6mO)x#^u$D3fPmV_8dw?@a^Y>&ImQn$M#cdoBCP_x;i?$n0A zjwW)9De&Kr1) zCVYxP3O�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�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

U4-pZxOe0h199k{ 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�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 From 1b739e11d1f05e96d5c2c20979d88afce73640d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 22 Feb 2023 11:12:49 +0000 Subject: [PATCH 046/378] add basic test case for concatenate --- .../basic/concatenate/concatenate.essence | 3 +++ tests/custom/basic/concatenate/run.sh | 4 ++++ .../custom/basic/concatenate/stdout.expected | 23 +++++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 tests/custom/basic/concatenate/concatenate.essence create mode 100755 tests/custom/basic/concatenate/run.sh create mode 100644 tests/custom/basic/concatenate/stdout.expected diff --git a/tests/custom/basic/concatenate/concatenate.essence b/tests/custom/basic/concatenate/concatenate.essence new file mode 100644 index 0000000000..ead78910b5 --- /dev/null +++ b/tests/custom/basic/concatenate/concatenate.essence @@ -0,0 +1,3 @@ +find n,m : matrix [int(1..3)] of bool +such that !or(n) +such that or(concatenate([n,m])) diff --git a/tests/custom/basic/concatenate/run.sh b/tests/custom/basic/concatenate/run.sh new file mode 100755 index 0000000000..56a8535764 --- /dev/null +++ b/tests/custom/basic/concatenate/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solutions* +conjure solve *.essence --number-of-solutions=all --output-format=json --solutions-in-one-file +cat *.solutions.json +rm -rf conjure-output *.solutions* diff --git a/tests/custom/basic/concatenate/stdout.expected b/tests/custom/basic/concatenate/stdout.expected new file mode 100644 index 0000000000..12762b53f8 --- /dev/null +++ b/tests/custom/basic/concatenate/stdout.expected @@ -0,0 +1,23 @@ +Generating models for concatenate.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: concatenate.solutions +Copying solution to: concatenate.solutions.json +[ +{"m": {"1": false, "2": false, "3": true}, "n": {"1": false, "2": false, "3": false}} +, +{"m": {"1": false, "2": true, "3": false}, "n": {"1": false, "2": false, "3": false}} +, +{"m": {"1": false, "2": true, "3": true}, "n": {"1": false, "2": false, "3": false}} +, +{"m": {"1": true, "2": false, "3": false}, "n": {"1": false, "2": false, "3": false}} +, +{"m": {"1": true, "2": false, "3": true}, "n": {"1": false, "2": false, "3": false}} +, +{"m": {"1": true, "2": true, "3": false}, "n": {"1": false, "2": false, "3": false}} +, +{"m": {"1": true, "2": true, "3": true}, "n": {"1": false, "2": false, "3": false}} +] From 0aee54c37ad1415be2820820ecee3db13c34489f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 2 Mar 2023 09:21:30 +0000 Subject: [PATCH 047/378] rename the main branch --- .github/workflows/build.yml | 2 +- .github/workflows/solvers.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- etc/build/copy-conjure-branch.sh | 2 +- etc/build/record-coverage.sh | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de28626036..c15d9ccfe0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: # can be triggered manually push: branches: - - master # run for the master branch + - main # run for the main branch paths: - conjure-cp.cabal - Makefile diff --git a/.github/workflows/solvers.yml b/.github/workflows/solvers.yml index c9d3447073..755e93d688 100644 --- a/.github/workflows/solvers.yml +++ b/.github/workflows/solvers.yml @@ -8,7 +8,7 @@ on: # so we build the solvers once a week to make sure they still build OK. push: branches: - - master # run for the master branch + - main # run for the main branch paths: - etc/build/install*.sh - Makefile diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index aab5584587..139990ca01 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: # can be triggered manually push: branches: - - master # run for the master branch only + - main # run for the main branch only paths: - conjure-cp.cabal - Makefile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5c871bd101..b63c3266e8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,7 +4,7 @@ on: workflow_dispatch: # can be triggered manually push: branches: - - master # run for the master branch + - main # run for the main branch paths: - conjure-cp.cabal - Makefile diff --git a/etc/build/copy-conjure-branch.sh b/etc/build/copy-conjure-branch.sh index 0f02030729..56a7804d3c 100755 --- a/etc/build/copy-conjure-branch.sh +++ b/etc/build/copy-conjure-branch.sh @@ -3,7 +3,7 @@ export BRANCH=$(git rev-parse --abbrev-ref HEAD) # make a copy of the executable and call it conjure-${BRANCH} -if [ ${BRANCH} != "master" ] && [ ${BRANCH} != "HEAD" ]; then +if [ ${BRANCH} != "main" ] && [ ${BRANCH} != "HEAD" ]; then cp ${BIN_DIR}/conjure ${BIN_DIR}/conjure-${BRANCH} echo "- conjure-${BRANCH}" fi diff --git a/etc/build/record-coverage.sh b/etc/build/record-coverage.sh index e4ae6ab864..4ca00f57f4 100755 --- a/etc/build/record-coverage.sh +++ b/etc/build/record-coverage.sh @@ -51,7 +51,7 @@ if ${COVERAGE} ; then git commit latest -m "Conjure commit: https://github.com/conjure-cp/conjure/commit/${SOURCE_VERSION}" fi - git push origin master + git push origin main ) else echo "Skipping, COVERAGE is set to ${COVERAGE}" From 6f429ae841310120c37f8c5fb17ce3fed202b0f2 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 20 Sep 2022 15:43:14 +0100 Subject: [PATCH 048/378] Added dist to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 99a0084a9a..27f214a864 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ cabal.sandbox.config .cabal-sandbox .stack-work stack.yaml.lock +dist-*/ # test outputs tests/exhaustive/**/outputs From c5bd32138431ab2c46c7a3372f576549b56535ec Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 21 Sep 2022 16:43:41 +0100 Subject: [PATCH 049/378] WIP updating to megaparsec 9.0.2 --- Makefile | 4 +- conjure-cp.cabal | 16 +- etc/hs-deps/stack-9.0.yaml | 9 + src/Conjure/Language/AbstractLiteral.hs | 25 +- src/Conjure/Language/AdHoc.hs | 4 +- src/Conjure/Language/Constant.hs | 1 + src/Conjure/Language/Definition.hs | 3 +- src/Conjure/Language/Expression/Op/Active.hs | 3 +- src/Conjure/Language/Expression/Op/AllDiff.hs | 5 +- .../Language/Expression/Op/AllDiffExcept.hs | 3 +- src/Conjure/Language/Expression/Op/And.hs | 5 +- src/Conjure/Language/Expression/Op/Apart.hs | 3 +- src/Conjure/Language/Expression/Op/AtLeast.hs | 3 +- src/Conjure/Language/Expression/Op/AtMost.hs | 3 +- .../Expression/Op/AttributeAsConstraint.hs | 3 +- .../Language/Expression/Op/CatchUndef.hs | 3 +- src/Conjure/Language/Expression/Op/Defined.hs | 3 +- src/Conjure/Language/Expression/Op/Div.hs | 3 +- .../Language/Expression/Op/DontCare.hs | 3 +- src/Conjure/Language/Expression/Op/DotLeq.hs | 3 +- src/Conjure/Language/Expression/Op/DotLt.hs | 3 +- src/Conjure/Language/Expression/Op/Eq.hs | 3 +- .../Language/Expression/Op/Factorial.hs | 3 +- src/Conjure/Language/Expression/Op/Flatten.hs | 3 +- src/Conjure/Language/Expression/Op/Freq.hs | 3 +- src/Conjure/Language/Expression/Op/GCC.hs | 3 +- src/Conjure/Language/Expression/Op/Geq.hs | 3 +- src/Conjure/Language/Expression/Op/Gt.hs | 3 +- src/Conjure/Language/Expression/Op/Hist.hs | 3 +- src/Conjure/Language/Expression/Op/Iff.hs | 3 +- src/Conjure/Language/Expression/Op/Image.hs | 3 +- .../Language/Expression/Op/ImageSet.hs | 3 +- src/Conjure/Language/Expression/Op/Imply.hs | 3 +- src/Conjure/Language/Expression/Op/In.hs | 3 +- .../Language/Expression/Op/Indexing.hs | 3 +- .../Language/Expression/Op/Intersect.hs | 3 +- src/Conjure/Language/Expression/Op/Inverse.hs | 3 +- src/Conjure/Language/Expression/Op/Leq.hs | 3 +- src/Conjure/Language/Expression/Op/LexLeq.hs | 3 +- src/Conjure/Language/Expression/Op/LexLt.hs | 3 +- src/Conjure/Language/Expression/Op/Lt.hs | 3 +- .../Language/Expression/Op/MakeTable.hs | 3 +- src/Conjure/Language/Expression/Op/Max.hs | 5 +- src/Conjure/Language/Expression/Op/Min.hs | 5 +- src/Conjure/Language/Expression/Op/Minus.hs | 3 +- src/Conjure/Language/Expression/Op/Mod.hs | 3 +- src/Conjure/Language/Expression/Op/Negate.hs | 3 +- src/Conjure/Language/Expression/Op/Neq.hs | 3 +- src/Conjure/Language/Expression/Op/Not.hs | 3 +- src/Conjure/Language/Expression/Op/Or.hs | 5 +- .../Language/Expression/Op/Participants.hs | 3 +- src/Conjure/Language/Expression/Op/Parts.hs | 3 +- src/Conjure/Language/Expression/Op/Party.hs | 3 +- src/Conjure/Language/Expression/Op/Pow.hs | 3 +- .../Language/Expression/Op/PowerSet.hs | 3 +- .../Language/Expression/Op/PreImage.hs | 3 +- src/Conjure/Language/Expression/Op/Pred.hs | 3 +- src/Conjure/Language/Expression/Op/Product.hs | 5 +- src/Conjure/Language/Expression/Op/Range.hs | 3 +- .../Language/Expression/Op/RelationProj.hs | 3 +- .../Language/Expression/Op/Restrict.hs | 3 +- src/Conjure/Language/Expression/Op/Slicing.hs | 3 +- .../Language/Expression/Op/Subsequence.hs | 3 +- src/Conjure/Language/Expression/Op/Subset.hs | 3 +- .../Language/Expression/Op/SubsetEq.hs | 3 +- .../Language/Expression/Op/Substring.hs | 3 +- src/Conjure/Language/Expression/Op/Succ.hs | 3 +- src/Conjure/Language/Expression/Op/Sum.hs | 5 +- src/Conjure/Language/Expression/Op/Supset.hs | 3 +- .../Language/Expression/Op/SupsetEq.hs | 3 +- src/Conjure/Language/Expression/Op/Table.hs | 3 +- .../Language/Expression/Op/TildeLeq.hs | 3 +- src/Conjure/Language/Expression/Op/TildeLt.hs | 3 +- src/Conjure/Language/Expression/Op/ToInt.hs | 3 +- src/Conjure/Language/Expression/Op/ToMSet.hs | 3 +- .../Language/Expression/Op/ToRelation.hs | 3 +- src/Conjure/Language/Expression/Op/ToSet.hs | 3 +- .../Language/Expression/Op/Together.hs | 3 +- .../Language/Expression/Op/Transform.hs | 3 +- src/Conjure/Language/Expression/Op/True.hs | 3 +- src/Conjure/Language/Expression/Op/TwoBars.hs | 3 +- src/Conjure/Language/Lexer.hs | 274 +++++++-- src/Conjure/Language/NameGen.hs | 2 +- src/Conjure/Language/NewLexer.hs | 575 ++++++++++++++++++ src/Conjure/Language/Parser.hs | 16 +- src/Conjure/Language/ParserC.hs | 6 +- src/Conjure/Language/Pretty.hs | 7 +- src/Conjure/Language/TH.hs | 2 +- src/Conjure/Language/Type.hs | 1 + src/Conjure/Prelude.hs | 5 +- src/Conjure/UI/VarSymBreaking.hs | 3 +- 91 files changed, 1004 insertions(+), 185 deletions(-) create mode 100644 etc/hs-deps/stack-9.0.yaml create mode 100644 src/Conjure/Language/NewLexer.hs diff --git a/Makefile b/Makefile index a68dfd263f..4a091fa53f 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ SHELL := /bin/bash # these are default values # override by calling the makefile like so: "GHC_VERSION=8.6 make" -export GHC_VERSION?=8.6 +export GHC_VERSION?=9.0 export BIN_DIR?=${HOME}/.local/bin export CI?=false export BUILD_TESTS?=false @@ -15,7 +15,7 @@ install: @echo "Using GHC version ${GHC_VERSION} (major version)" @echo "Set the environment variable GHC_VERSION to change this location." @echo "For example: \"GHC_VERSION=8.4 make install\"" - @echo "Supported versions: 8.4, 8.6" + @echo "Supported versions: 8.4, 8.6, 9.0" @echo "" @echo "Installing executables to ${BIN_DIR}" @echo "Add this directory to your PATH." diff --git a/conjure-cp.cabal b/conjure-cp.cabal index ffe0d5e181..8d6552f7c2 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -1,16 +1,16 @@ - +Cabal-version: 2.4 Name: conjure-cp Version: 2.4.0 Synopsis: Conjure: The Automated Constraint Modelling Tool Description: . Homepage: http://github.com/conjure-cp/conjure -License: BSD3 +License: BSD-3-Clause License-file: LICENSE Author: Özgür Akgün Maintainer: ozgurakgun@gmail.com Category: Constraint Programming Build-type: Simple -Cabal-version: 1.20 +Cabal-version: >= 1.20 Library default-language : Haskell2010 @@ -136,6 +136,7 @@ Library , Conjure.Language.ModelDiff , Conjure.Language.ModelStats , Conjure.Language.Lexer + , Conjure.Language.NewLexer , Conjure.Language.NameResolution , Conjure.Language.Parser , Conjure.Language.ParserC @@ -244,7 +245,7 @@ Library , Conjure.UI.NormaliseQuantified , Conjure.UI.TypeScript - build-depends : base + build-depends : base >= 4.12.0 -- the export list have changed , aeson >= 1.2.2.0 , aeson-typescript @@ -261,7 +262,7 @@ Library , integer-gmp -- >= 4.1.1 because of sepEndBy bugfixes -- < 5 because megaparsec-5 is backwards incompatible - , megaparsec >= 4.1.1 && < 5 + , megaparsec ^>= 9.2.2 , mtl , parallel-io , pipes @@ -270,7 +271,7 @@ Library , QuickCheck >= 2.9 , random , safe - , scientific + , scientific >=0.3.7 -- 1.6.7, because of the stderr handling fix , shelly >= 1.6.7 , split @@ -296,6 +297,7 @@ Library , timeit >= 2.0 , primes >= 0.2.1.0 , statistics >= 0.15.2.0 + , parser-combinators if impl(ghc == 7.8.*) build-depends: template-haskell == 2.9.* @@ -314,6 +316,8 @@ Library build-depends: template-haskell == 2.15.* if impl(ghc == 8.10.*) build-depends: template-haskell == 2.16.* + if impl(ghc == 9.0.*) + build-depends: template-haskell == 2.17.* default-extensions: FlexibleContexts diff --git a/etc/hs-deps/stack-9.0.yaml b/etc/hs-deps/stack-9.0.yaml new file mode 100644 index 0000000000..bc5ea6b122 --- /dev/null +++ b/etc/hs-deps/stack-9.0.yaml @@ -0,0 +1,9 @@ +resolver: lts-19.24 +packages: +- '.' +system-ghc: true +install-ghc: true +extra-deps: +- megaparsec-9.2.2 +- aeson-typescript-0.4.0.0 +- shelly-1.10.0 diff --git a/src/Conjure/Language/AbstractLiteral.hs b/src/Conjure/Language/AbstractLiteral.hs index 7eaa0f6f0a..f389d63bfc 100644 --- a/src/Conjure/Language/AbstractLiteral.hs +++ b/src/Conjure/Language/AbstractLiteral.hs @@ -16,6 +16,7 @@ import Conjure.Language.Pretty -- aeson import qualified Data.Aeson as JSON +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -46,10 +47,10 @@ instance (SimpleJSON x, Pretty x, ExpressionLike x) => SimpleJSON (AbstractLiter xs' <- forM xs $ \ (nm, x) -> do x' <- toSimpleJSON x return (stringToText (renderNormal nm), x') - return $ JSON.Object $ M.fromList xs' + return $ JSON.Object $ KM.fromList xs' AbsLitVariant _ nm x -> do x' <- toSimpleJSON x - return $ JSON.Object $ M.fromList [(stringToText (renderNormal nm), x')] + return $ JSON.Object $ KM.fromList [(fromString (renderNormal nm), x')] AbsLitMatrix index xs -> case index of DomainInt _ ranges -> do @@ -101,48 +102,48 @@ instance Pretty a => Pretty (AbstractLiteral a) where pretty (AbsLitPartition xss) = "partition" <> prettyListDoc prParens "," [ prettyList prBraces "," xs | xs <- xss ] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (AbstractLiteral x) where - varSymBreakingDescription (AbsLitTuple xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitTuple xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitTuple") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) ] - varSymBreakingDescription AbsLitRecord{} = JSON.Object $ M.fromList + varSymBreakingDescription AbsLitRecord{} = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitRecord") ] - varSymBreakingDescription AbsLitVariant{} = JSON.Object $ M.fromList + varSymBreakingDescription AbsLitVariant{} = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitVariant") ] - varSymBreakingDescription (AbsLitMatrix _ xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitMatrix _ xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitMatrix") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) ] - varSymBreakingDescription (AbsLitSet xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitSet xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitSet") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (AbsLitMSet xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitMSet xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitMSet") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (AbsLitFunction xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitFunction xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitFunction") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription (AbsLitTuple [x,y]) | (x,y) <- xs ]) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (AbsLitSequence xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitSequence xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitSequence") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription (AbsLitTuple [fromInt i, x]) | (i,x) <- zip allNats xs ]) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (AbsLitRelation xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitRelation xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitRelation") , ("children", JSON.Array $ V.fromList $ map (varSymBreakingDescription . AbsLitTuple) xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (AbsLitPartition xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsLitPartition xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsLitPartition") , ("children", JSON.Array $ V.fromList $ map (varSymBreakingDescription . AbsLitSet) xs) , ("symmetricChildren", JSON.Bool True) diff --git a/src/Conjure/Language/AdHoc.hs b/src/Conjure/Language/AdHoc.hs index af4beddaf1..5c088fa2eb 100644 --- a/src/Conjure/Language/AdHoc.hs +++ b/src/Conjure/Language/AdHoc.hs @@ -14,6 +14,8 @@ import qualified Data.Vector as V -- vector -- scientific import Data.Scientific ( floatingOrInteger ) +import qualified Data.Aeson.KeyMap as KM +import Data.Aeson.Types class ExpressionLike a where @@ -131,7 +133,7 @@ instance (Pretty x, SimpleJSON x, SimpleJSON y) => SimpleJSON (AsDictionary x y) let zs = catMaybes ys if length ys == length zs -- all were suitable as keys, great - then return $ JSON.Object $ M.fromList zs + then return $ JSON.Object $ KM.fromList zs else return $ JSON.Array $ V.fromList asList fromSimpleJSON = noFromSimpleJSON "AsDictionary" diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index 1204516d64..6197af249e 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -42,6 +42,7 @@ import Test.QuickCheck ( Arbitrary(..), oneof ) -- aeson import qualified Data.Aeson as JSON +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index a688a2ac8e..dd287c21f1 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -60,6 +60,7 @@ import Conjure.Language.Expression -- aeson import Data.Aeson ( (.=), (.:) ) import qualified Data.Aeson as JSON +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -141,7 +142,7 @@ instance Pretty Model where ] instance VarSymBreakingDescription Model where - varSymBreakingDescription m = JSON.Object $ M.fromList + varSymBreakingDescription m = JSON.Object $ KM.fromList [ ("type", JSON.String "Model") , ("symmetricChildren", JSON.Bool True) , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription $ mStatements m) diff --git a/src/Conjure/Language/Expression/Op/Active.hs b/src/Conjure/Language/Expression/Op/Active.hs index 38afa7b878..a2a3a48461 100644 --- a/src/Conjure/Language/Expression/Op/Active.hs +++ b/src/Conjure/Language/Expression/Op/Active.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -41,7 +42,7 @@ instance Pretty x => Pretty (OpActive x) where prettyPrec _ (OpActive a b) = "active" <> prettyList prParens "," [pretty a, pretty b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpActive x) where - varSymBreakingDescription (OpActive a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpActive a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpActive") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/AllDiff.hs b/src/Conjure/Language/Expression/Op/AllDiff.hs index 558debde51..d3bf98f7b4 100644 --- a/src/Conjure/Language/Expression/Op/AllDiff.hs +++ b/src/Conjure/Language/Expression/Op/AllDiff.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,12 +38,12 @@ instance Pretty x => Pretty (OpAllDiff x) where prettyPrec _ (OpAllDiff a) = "allDiff" <> prParens (pretty a) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpAllDiff x) where - varSymBreakingDescription (OpAllDiff x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpAllDiff x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAllDiff") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpAllDiff x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpAllDiff x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAllDiff") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/AllDiffExcept.hs b/src/Conjure/Language/Expression/Op/AllDiffExcept.hs index 38bf4db5d2..1eef848ed5 100644 --- a/src/Conjure/Language/Expression/Op/AllDiffExcept.hs +++ b/src/Conjure/Language/Expression/Op/AllDiffExcept.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -38,7 +39,7 @@ instance Pretty x => Pretty (OpAllDiffExcept x) where prettyPrec _ (OpAllDiffExcept a b) = "alldifferent_except" <> prettyList prParens "," [a, b] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpAllDiffExcept x) where - varSymBreakingDescription (OpAllDiffExcept x y) = JSON.Object $ M.fromList + varSymBreakingDescription (OpAllDiffExcept x y) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAllDiffExcept") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription x , varSymBreakingDescription y diff --git a/src/Conjure/Language/Expression/Op/And.hs b/src/Conjure/Language/Expression/Op/And.hs index f17515b960..7a111caa8a 100644 --- a/src/Conjure/Language/Expression/Op/And.hs +++ b/src/Conjure/Language/Expression/Op/And.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -55,12 +56,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpAnd x) where prettyPrec _ (OpAnd x) = "and" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpAnd x) where - varSymBreakingDescription (OpAnd x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpAnd x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAnd") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpAnd x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpAnd x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAnd") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Apart.hs b/src/Conjure/Language/Expression/Op/Apart.hs index 2635051597..eae284b9ee 100644 --- a/src/Conjure/Language/Expression/Op/Apart.hs +++ b/src/Conjure/Language/Expression/Op/Apart.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpApart x) where prettyPrec _ (OpApart a b) = "apart" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpApart x) where - varSymBreakingDescription (OpApart a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpApart a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpApart") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/AtLeast.hs b/src/Conjure/Language/Expression/Op/AtLeast.hs index 69736bcf84..595a8bf856 100644 --- a/src/Conjure/Language/Expression/Op/AtLeast.hs +++ b/src/Conjure/Language/Expression/Op/AtLeast.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -47,7 +48,7 @@ instance Pretty x => Pretty (OpAtLeast x) where prettyPrec _ (OpAtLeast a b c) = "atleast" <> prettyList prParens "," [a, b, c] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpAtLeast x) where - varSymBreakingDescription (OpAtLeast a b c) = JSON.Object $ M.fromList + varSymBreakingDescription (OpAtLeast a b c) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAtLeast") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a , varSymBreakingDescription b diff --git a/src/Conjure/Language/Expression/Op/AtMost.hs b/src/Conjure/Language/Expression/Op/AtMost.hs index dae072916e..55eade610a 100644 --- a/src/Conjure/Language/Expression/Op/AtMost.hs +++ b/src/Conjure/Language/Expression/Op/AtMost.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -47,7 +48,7 @@ instance Pretty x => Pretty (OpAtMost x) where prettyPrec _ (OpAtMost a b c) = "atmost" <> prettyList prParens "," [a, b, c] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpAtMost x) where - varSymBreakingDescription (OpAtMost a b c) = JSON.Object $ M.fromList + varSymBreakingDescription (OpAtMost a b c) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAtMost") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a , varSymBreakingDescription b diff --git a/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs b/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs index 122dea3b90..050e22f8a9 100644 --- a/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs +++ b/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -32,7 +33,7 @@ instance Pretty x => Pretty (OpAttributeAsConstraint x) where prettyPrec _ (OpAttributeAsConstraint x attr (Just val)) = pretty attr <> prettyList prParens "," [x, val] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpAttributeAsConstraint x) where - varSymBreakingDescription (OpAttributeAsConstraint a b c) = JSON.Object $ M.fromList + varSymBreakingDescription (OpAttributeAsConstraint a b c) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpAttributeAsConstraint") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/CatchUndef.hs b/src/Conjure/Language/Expression/Op/CatchUndef.hs index 6121e5053a..3456432859 100644 --- a/src/Conjure/Language/Expression/Op/CatchUndef.hs +++ b/src/Conjure/Language/Expression/Op/CatchUndef.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -38,7 +39,7 @@ instance Pretty x => Pretty (OpCatchUndef x) where prettyPrec _ (OpCatchUndef a b) = "catchUndef" <> prettyList prParens "," [a, b] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpCatchUndef x) where - varSymBreakingDescription (OpCatchUndef x y) = JSON.Object $ M.fromList + varSymBreakingDescription (OpCatchUndef x y) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpCatchUndef") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription x , varSymBreakingDescription y diff --git a/src/Conjure/Language/Expression/Op/Defined.hs b/src/Conjure/Language/Expression/Op/Defined.hs index 36fd0461ad..826e237c92 100644 --- a/src/Conjure/Language/Expression/Op/Defined.hs +++ b/src/Conjure/Language/Expression/Op/Defined.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpDefined x) where prettyPrec _ (OpDefined a) = "defined" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDefined x) where - varSymBreakingDescription (OpDefined a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpDefined a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpDefined") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Div.hs b/src/Conjure/Language/Expression/Op/Div.hs index 3a6e711b12..0d7930dd8a 100644 --- a/src/Conjure/Language/Expression/Op/Div.hs +++ b/src/Conjure/Language/Expression/Op/Div.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpDiv x) where prettyPrec prec op@(OpDiv a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDiv x) where - varSymBreakingDescription (OpDiv a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpDiv a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpDiv") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/DontCare.hs b/src/Conjure/Language/Expression/Op/DontCare.hs index 10fcdc52c5..1b61cd62fb 100644 --- a/src/Conjure/Language/Expression/Op/DontCare.hs +++ b/src/Conjure/Language/Expression/Op/DontCare.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -28,7 +29,7 @@ instance Pretty x => Pretty (OpDontCare x) where prettyPrec _ (OpDontCare a) = "dontCare" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDontCare x) where - varSymBreakingDescription (OpDontCare a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpDontCare a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpDontCare") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/DotLeq.hs b/src/Conjure/Language/Expression/Op/DotLeq.hs index 080cf19a42..7740f10574 100644 --- a/src/Conjure/Language/Expression/Op/DotLeq.hs +++ b/src/Conjure/Language/Expression/Op/DotLeq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpDotLeq x) where prettyPrec prec op@(OpDotLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDotLeq x) where - varSymBreakingDescription (OpDotLeq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpDotLeq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpDotLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/DotLt.hs b/src/Conjure/Language/Expression/Op/DotLt.hs index a5c61b4af7..2e25dfd8f5 100644 --- a/src/Conjure/Language/Expression/Op/DotLt.hs +++ b/src/Conjure/Language/Expression/Op/DotLt.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpDotLt x) where prettyPrec prec op@(OpDotLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDotLt x) where - varSymBreakingDescription (OpDotLt a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpDotLt a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpDotLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Eq.hs b/src/Conjure/Language/Expression/Op/Eq.hs index a837165a8c..05f0c78b67 100644 --- a/src/Conjure/Language/Expression/Op/Eq.hs +++ b/src/Conjure/Language/Expression/Op/Eq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -34,7 +35,7 @@ instance Pretty x => Pretty (OpEq x) where prettyPrec prec op@(OpEq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpEq x) where - varSymBreakingDescription (OpEq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpEq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpEq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Factorial.hs b/src/Conjure/Language/Expression/Op/Factorial.hs index 895c58fb1b..a35fb440d5 100644 --- a/src/Conjure/Language/Expression/Op/Factorial.hs +++ b/src/Conjure/Language/Expression/Op/Factorial.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpFactorial x) where prettyPrec _ (OpFactorial a) = "factorial" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpFactorial x) where - varSymBreakingDescription (OpFactorial a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpFactorial a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpFactorial") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Flatten.hs b/src/Conjure/Language/Expression/Op/Flatten.hs index 5224380686..e4b005f9c9 100644 --- a/src/Conjure/Language/Expression/Op/Flatten.hs +++ b/src/Conjure/Language/Expression/Op/Flatten.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -46,7 +47,7 @@ instance Pretty x => Pretty (OpFlatten x) where prettyPrec _ (OpFlatten (Just n) m) = "flatten" <> prettyList prParens "," [pretty n, pretty m] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpFlatten x) where - varSymBreakingDescription (OpFlatten n m) = JSON.Object $ M.fromList + varSymBreakingDescription (OpFlatten n m) = JSON.Object $KM.fromList [ ("type", JSON.String "OpFlatten") , ("children", JSON.Array $ V.fromList [ toJSON n diff --git a/src/Conjure/Language/Expression/Op/Freq.hs b/src/Conjure/Language/Expression/Op/Freq.hs index 5255c97de1..490527bc1f 100644 --- a/src/Conjure/Language/Expression/Op/Freq.hs +++ b/src/Conjure/Language/Expression/Op/Freq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -50,7 +51,7 @@ instance Pretty x => Pretty (OpFreq x) where prettyPrec _ (OpFreq a b) = "freq" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpFreq x) where - varSymBreakingDescription (OpFreq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpFreq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpFreq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/GCC.hs b/src/Conjure/Language/Expression/Op/GCC.hs index ae1ba9f4c4..1b88caf356 100644 --- a/src/Conjure/Language/Expression/Op/GCC.hs +++ b/src/Conjure/Language/Expression/Op/GCC.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -47,7 +48,7 @@ instance Pretty x => Pretty (OpGCC x) where prettyPrec _ (OpGCC a b c) = "gcc" <> prettyList prParens "," [a, b, c] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpGCC x) where - varSymBreakingDescription (OpGCC a b c) = JSON.Object $ M.fromList + varSymBreakingDescription (OpGCC a b c) = JSON.Object $KM.fromList [ ("type", JSON.String "OpGCC") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a , varSymBreakingDescription b diff --git a/src/Conjure/Language/Expression/Op/Geq.hs b/src/Conjure/Language/Expression/Op/Geq.hs index bd53e34231..46354d3e23 100644 --- a/src/Conjure/Language/Expression/Op/Geq.hs +++ b/src/Conjure/Language/Expression/Op/Geq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpGeq x) where prettyPrec prec op@(OpGeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpGeq x) where - varSymBreakingDescription (OpGeq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpGeq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpGeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Gt.hs b/src/Conjure/Language/Expression/Op/Gt.hs index 6336c1d874..aedb6197ee 100644 --- a/src/Conjure/Language/Expression/Op/Gt.hs +++ b/src/Conjure/Language/Expression/Op/Gt.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpGt x) where prettyPrec prec op@(OpGt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpGt x) where - varSymBreakingDescription (OpGt a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpGt a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpGt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Hist.hs b/src/Conjure/Language/Expression/Op/Hist.hs index 682cf42ed6..5f628884ec 100644 --- a/src/Conjure/Language/Expression/Op/Hist.hs +++ b/src/Conjure/Language/Expression/Op/Hist.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -34,7 +35,7 @@ instance Pretty x => Pretty (OpHist x) where prettyPrec _ (OpHist a) = "hist" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpHist x) where - varSymBreakingDescription (OpHist a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpHist a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpHist") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Iff.hs b/src/Conjure/Language/Expression/Op/Iff.hs index 1fad82a25e..4a6979a33c 100644 --- a/src/Conjure/Language/Expression/Op/Iff.hs +++ b/src/Conjure/Language/Expression/Op/Iff.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -34,7 +35,7 @@ instance Pretty x => Pretty (OpIff x) where prettyPrec prec op@(OpIff a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIff x) where - varSymBreakingDescription (OpIff a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpIff a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpIff") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Image.hs b/src/Conjure/Language/Expression/Op/Image.hs index 1bdb2ff4cc..84530f7688 100644 --- a/src/Conjure/Language/Expression/Op/Image.hs +++ b/src/Conjure/Language/Expression/Op/Image.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -43,7 +44,7 @@ instance Pretty x => Pretty (OpImage x) where prettyPrec _ (OpImage a b) = "image" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImage x) where - varSymBreakingDescription (OpImage a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpImage a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpImage") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ImageSet.hs b/src/Conjure/Language/Expression/Op/ImageSet.hs index 859fe97eaf..e3575abed1 100644 --- a/src/Conjure/Language/Expression/Op/ImageSet.hs +++ b/src/Conjure/Language/Expression/Op/ImageSet.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -43,7 +44,7 @@ instance Pretty x => Pretty (OpImageSet x) where prettyPrec _ (OpImageSet a b) = "imageSet" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImageSet x) where - varSymBreakingDescription (OpImageSet a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpImageSet a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpImageSet") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Imply.hs b/src/Conjure/Language/Expression/Op/Imply.hs index c5b4589695..25ac7c23ca 100644 --- a/src/Conjure/Language/Expression/Op/Imply.hs +++ b/src/Conjure/Language/Expression/Op/Imply.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -35,7 +36,7 @@ instance Pretty x => Pretty (OpImply x) where prettyPrec prec op@(OpImply a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImply x) where - varSymBreakingDescription (OpImply a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpImply a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpImply") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/In.hs b/src/Conjure/Language/Expression/Op/In.hs index 05ac163131..50c85f2d33 100644 --- a/src/Conjure/Language/Expression/Op/In.hs +++ b/src/Conjure/Language/Expression/Op/In.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -41,7 +42,7 @@ instance Pretty x => Pretty (OpIn x) where prettyPrec prec op@(OpIn a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIn x) where - varSymBreakingDescription (OpIn a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpIn a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpIn") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Indexing.hs b/src/Conjure/Language/Expression/Op/Indexing.hs index 1fdc9d8bd7..6c26df1493 100644 --- a/src/Conjure/Language/Expression/Op/Indexing.hs +++ b/src/Conjure/Language/Expression/Op/Indexing.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -83,7 +84,7 @@ instance Pretty x => Pretty (OpIndexing x) where prettyPrec _ (OpIndexing a b) = Pr.cat [pretty a, nest 4 (prBrackets (pretty b))] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIndexing x) where - varSymBreakingDescription (OpIndexing a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpIndexing a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpIndexing") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Intersect.hs b/src/Conjure/Language/Expression/Op/Intersect.hs index d3b50ad9b3..c397d8b57e 100644 --- a/src/Conjure/Language/Expression/Op/Intersect.hs +++ b/src/Conjure/Language/Expression/Op/Intersect.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpIntersect x) where prettyPrec prec op@(OpIntersect a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIntersect x) where - varSymBreakingDescription (OpIntersect a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpIntersect a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpIntersect") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Inverse.hs b/src/Conjure/Language/Expression/Op/Inverse.hs index 55acb43732..88d7061827 100644 --- a/src/Conjure/Language/Expression/Op/Inverse.hs +++ b/src/Conjure/Language/Expression/Op/Inverse.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpInverse x) where prettyPrec _ (OpInverse a b) = "inverse" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpInverse x) where - varSymBreakingDescription (OpInverse a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpInverse a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpInverse") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Leq.hs b/src/Conjure/Language/Expression/Op/Leq.hs index 62158d5582..616d974083 100644 --- a/src/Conjure/Language/Expression/Op/Leq.hs +++ b/src/Conjure/Language/Expression/Op/Leq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpLeq x) where prettyPrec prec op@(OpLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLeq x) where - varSymBreakingDescription (OpLeq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpLeq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/LexLeq.hs b/src/Conjure/Language/Expression/Op/LexLeq.hs index d2d3c41b7d..4f6ff2c119 100644 --- a/src/Conjure/Language/Expression/Op/LexLeq.hs +++ b/src/Conjure/Language/Expression/Op/LexLeq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -39,7 +40,7 @@ instance Pretty x => Pretty (OpLexLeq x) where prettyPrec prec op@(OpLexLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLexLeq x) where - varSymBreakingDescription (OpLexLeq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpLexLeq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpLexLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/LexLt.hs b/src/Conjure/Language/Expression/Op/LexLt.hs index c2eff57bd1..d0cac4b106 100644 --- a/src/Conjure/Language/Expression/Op/LexLt.hs +++ b/src/Conjure/Language/Expression/Op/LexLt.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -39,7 +40,7 @@ instance Pretty x => Pretty (OpLexLt x) where prettyPrec prec op@(OpLexLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLexLt x) where - varSymBreakingDescription (OpLexLt a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpLexLt a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpLexLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Lt.hs b/src/Conjure/Language/Expression/Op/Lt.hs index 7cf72eae97..f7c711b05f 100644 --- a/src/Conjure/Language/Expression/Op/Lt.hs +++ b/src/Conjure/Language/Expression/Op/Lt.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpLt x) where prettyPrec prec op@(OpLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLt x) where - varSymBreakingDescription (OpLt a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpLt a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/MakeTable.hs b/src/Conjure/Language/Expression/Op/MakeTable.hs index 45b600d0f6..fc0c893cf4 100644 --- a/src/Conjure/Language/Expression/Op/MakeTable.hs +++ b/src/Conjure/Language/Expression/Op/MakeTable.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpMakeTable x) where prettyPrec _ (OpMakeTable a) = "makeTable" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpMakeTable x) where - varSymBreakingDescription (OpMakeTable a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpMakeTable a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpMakeTable") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Max.hs b/src/Conjure/Language/Expression/Op/Max.hs index 1bb9596f32..748dee54bb 100644 --- a/src/Conjure/Language/Expression/Op/Max.hs +++ b/src/Conjure/Language/Expression/Op/Max.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -56,12 +57,12 @@ instance Pretty x => Pretty (OpMax x) where prettyPrec _ (OpMax x) = "max" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpMax x) where - varSymBreakingDescription (OpMax x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpMax x) | Just xs <- listOut x = JSON.Object $KM.fromList [ ("type", JSON.String "OpMax") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpMax x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpMax x) = JSON.Object $KM.fromList [ ("type", JSON.String "OpMax") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Min.hs b/src/Conjure/Language/Expression/Op/Min.hs index 561b47e4f0..c4aa290469 100644 --- a/src/Conjure/Language/Expression/Op/Min.hs +++ b/src/Conjure/Language/Expression/Op/Min.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -56,12 +57,12 @@ instance Pretty x => Pretty (OpMin x) where prettyPrec _ (OpMin x) = "min" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpMin x) where - varSymBreakingDescription (OpMin x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpMin x) | Just xs <- listOut x = JSON.Object $KM.fromList [ ("type", JSON.String "OpMin") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpMin x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpMin x) = JSON.Object $KM.fromList [ ("type", JSON.String "OpMin") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Minus.hs b/src/Conjure/Language/Expression/Op/Minus.hs index 6d6e76bcb1..f09278f32e 100644 --- a/src/Conjure/Language/Expression/Op/Minus.hs +++ b/src/Conjure/Language/Expression/Op/Minus.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -41,7 +42,7 @@ instance Pretty x => Pretty (OpMinus x) where prettyPrec prec op@(OpMinus a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpMinus x) where - varSymBreakingDescription (OpMinus a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpMinus a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpMinus") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Mod.hs b/src/Conjure/Language/Expression/Op/Mod.hs index 4baf401607..aa5d804b37 100644 --- a/src/Conjure/Language/Expression/Op/Mod.hs +++ b/src/Conjure/Language/Expression/Op/Mod.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpMod x) where prettyPrec prec op@(OpMod a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpMod x) where - varSymBreakingDescription (OpMod a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpMod a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpMod") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Negate.hs b/src/Conjure/Language/Expression/Op/Negate.hs index 52fce80f68..d4ec20c204 100644 --- a/src/Conjure/Language/Expression/Op/Negate.hs +++ b/src/Conjure/Language/Expression/Op/Negate.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpNegate x) where prettyPrec prec (OpNegate a) = parensIf (prec > 2000) ("-" <> prettyPrec 2000 a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpNegate x) where - varSymBreakingDescription (OpNegate a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpNegate a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpNegate") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Neq.hs b/src/Conjure/Language/Expression/Op/Neq.hs index b79624ede4..dd2c124327 100644 --- a/src/Conjure/Language/Expression/Op/Neq.hs +++ b/src/Conjure/Language/Expression/Op/Neq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpNeq x) where prettyPrec prec op@(OpNeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpNeq x) where - varSymBreakingDescription (OpNeq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpNeq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpNeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Not.hs b/src/Conjure/Language/Expression/Op/Not.hs index c8565c5709..8c4aaa7b2c 100644 --- a/src/Conjure/Language/Expression/Op/Not.hs +++ b/src/Conjure/Language/Expression/Op/Not.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpNot x) where prettyPrec prec (OpNot a) = parensIf (prec > 2000) ("!" <> prettyPrec 2000 a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpNot x) where - varSymBreakingDescription (OpNot a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpNot a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpNot") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Or.hs b/src/Conjure/Language/Expression/Op/Or.hs index 3cfe9596b9..b7cae82d79 100644 --- a/src/Conjure/Language/Expression/Op/Or.hs +++ b/src/Conjure/Language/Expression/Op/Or.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -54,12 +55,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpOr x) where prettyPrec _ (OpOr x) = "or" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpOr x) where - varSymBreakingDescription (OpOr x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpOr x) | Just xs <- listOut x = JSON.Object $KM.fromList [ ("type", JSON.String "OpOr") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpOr x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpOr x) = JSON.Object $KM.fromList [ ("type", JSON.String "OpOr") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Participants.hs b/src/Conjure/Language/Expression/Op/Participants.hs index 1fc9b14c35..b977f7a2e1 100644 --- a/src/Conjure/Language/Expression/Op/Participants.hs +++ b/src/Conjure/Language/Expression/Op/Participants.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -32,7 +33,7 @@ instance Pretty x => Pretty (OpParticipants x) where prettyPrec _ (OpParticipants a) = "participants" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpParticipants x) where - varSymBreakingDescription (OpParticipants a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpParticipants a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpParticipants") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Parts.hs b/src/Conjure/Language/Expression/Op/Parts.hs index a2cf3e43f5..55710b5680 100644 --- a/src/Conjure/Language/Expression/Op/Parts.hs +++ b/src/Conjure/Language/Expression/Op/Parts.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -34,7 +35,7 @@ instance Pretty x => Pretty (OpParts x) where prettyPrec _ (OpParts a) = "parts" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpParts x) where - varSymBreakingDescription (OpParts a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpParts a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpParts") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Party.hs b/src/Conjure/Language/Expression/Op/Party.hs index 164878d8c6..8dcf85575b 100644 --- a/src/Conjure/Language/Expression/Op/Party.hs +++ b/src/Conjure/Language/Expression/Op/Party.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpParty x) where prettyPrec _ (OpParty a b) = "party" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpParty x) where - varSymBreakingDescription (OpParty a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpParty a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpParty") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Pow.hs b/src/Conjure/Language/Expression/Op/Pow.hs index 4968065d18..5b4f7595ef 100644 --- a/src/Conjure/Language/Expression/Op/Pow.hs +++ b/src/Conjure/Language/Expression/Op/Pow.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpPow x) where prettyPrec prec op@(OpPow a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPow x) where - varSymBreakingDescription (OpPow a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpPow a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpPow") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/PowerSet.hs b/src/Conjure/Language/Expression/Op/PowerSet.hs index ce21905c0f..26eeb0d3a4 100644 --- a/src/Conjure/Language/Expression/Op/PowerSet.hs +++ b/src/Conjure/Language/Expression/Op/PowerSet.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpPowerSet x) where prettyPrec _ (OpPowerSet a) = "powerSet" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPowerSet x) where - varSymBreakingDescription (OpPowerSet a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpPowerSet a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpPowerSet") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/PreImage.hs b/src/Conjure/Language/Expression/Op/PreImage.hs index 5257bf1b35..4c68941c8d 100644 --- a/src/Conjure/Language/Expression/Op/PreImage.hs +++ b/src/Conjure/Language/Expression/Op/PreImage.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -40,7 +41,7 @@ instance Pretty x => Pretty (OpPreImage x) where prettyPrec _ (OpPreImage a b) = "preImage" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPreImage x) where - varSymBreakingDescription (OpPreImage a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpPreImage a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpPreImage") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Pred.hs b/src/Conjure/Language/Expression/Op/Pred.hs index a51483fbdb..5e7c5a1479 100644 --- a/src/Conjure/Language/Expression/Op/Pred.hs +++ b/src/Conjure/Language/Expression/Op/Pred.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -35,7 +36,7 @@ instance Pretty x => Pretty (OpPred x) where prettyPrec _ (OpPred x) = "pred" <> prParens (pretty x) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPred x) where - varSymBreakingDescription (OpPred a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpPred a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpPred") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Product.hs b/src/Conjure/Language/Expression/Op/Product.hs index ade4fca230..71a30bc02f 100644 --- a/src/Conjure/Language/Expression/Op/Product.hs +++ b/src/Conjure/Language/Expression/Op/Product.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -62,12 +63,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpProduct x) where prettyPrec _ (OpProduct x) = "product" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpProduct x) where - varSymBreakingDescription (OpProduct x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpProduct x) | Just xs <- listOut x = JSON.Object $KM.fromList [ ("type", JSON.String "OpProduct") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpProduct x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpProduct x) = JSON.Object $KM.fromList [ ("type", JSON.String "OpProduct") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Range.hs b/src/Conjure/Language/Expression/Op/Range.hs index d6baaf8fbc..b4efddcefc 100644 --- a/src/Conjure/Language/Expression/Op/Range.hs +++ b/src/Conjure/Language/Expression/Op/Range.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpRange x) where prettyPrec _ (OpRange a) = "range" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpRange x) where - varSymBreakingDescription (OpRange a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpRange a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpRange") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/RelationProj.hs b/src/Conjure/Language/Expression/Op/RelationProj.hs index 0d5382ea04..0c6db8e870 100644 --- a/src/Conjure/Language/Expression/Op/RelationProj.hs +++ b/src/Conjure/Language/Expression/Op/RelationProj.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -55,7 +56,7 @@ instance Pretty x => Pretty (OpRelationProj x) where pr (Just b) = pretty b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpRelationProj x) where - varSymBreakingDescription (OpRelationProj a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpRelationProj a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpRelationProj") , ("children", JSON.Array $ V.fromList $ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Restrict.hs b/src/Conjure/Language/Expression/Op/Restrict.hs index cb797514d3..4b082a364f 100644 --- a/src/Conjure/Language/Expression/Op/Restrict.hs +++ b/src/Conjure/Language/Expression/Op/Restrict.hs @@ -8,6 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common -- import {-# SOURCE #-} Conjure.Process.ValidateConstantForDomain ( validateConstantForDomain ) import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpRestrict x) where prettyPrec _ (OpRestrict a b) = "restrict" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpRestrict x) where - varSymBreakingDescription (OpRestrict a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpRestrict a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpRestrict") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Slicing.hs b/src/Conjure/Language/Expression/Op/Slicing.hs index a3548d4613..ab2777038c 100644 --- a/src/Conjure/Language/Expression/Op/Slicing.hs +++ b/src/Conjure/Language/Expression/Op/Slicing.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -34,7 +35,7 @@ instance Pretty x => Pretty (OpSlicing x) where prettyPrec _ (OpSlicing m a b) = pretty m <> prBrackets (pretty a <> ".." <> pretty b) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSlicing x) where - varSymBreakingDescription (OpSlicing a b c) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSlicing a b c) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSlicing") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Subsequence.hs b/src/Conjure/Language/Expression/Op/Subsequence.hs index 156a10fdda..4e99fb8f7b 100644 --- a/src/Conjure/Language/Expression/Op/Subsequence.hs +++ b/src/Conjure/Language/Expression/Op/Subsequence.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -40,7 +41,7 @@ instance Pretty x => Pretty (OpSubsequence x) where prettyPrec prec op@(OpSubsequence a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubsequence x) where - varSymBreakingDescription (OpSubsequence a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSubsequence a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSubsequence") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Subset.hs b/src/Conjure/Language/Expression/Op/Subset.hs index 0914b7eea3..0f3d234554 100644 --- a/src/Conjure/Language/Expression/Op/Subset.hs +++ b/src/Conjure/Language/Expression/Op/Subset.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpSubset x) where prettyPrec prec op@(OpSubset a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubset x) where - varSymBreakingDescription (OpSubset a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSubset a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSubset") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/SubsetEq.hs b/src/Conjure/Language/Expression/Op/SubsetEq.hs index c6378d7a0a..deea0f5c8c 100644 --- a/src/Conjure/Language/Expression/Op/SubsetEq.hs +++ b/src/Conjure/Language/Expression/Op/SubsetEq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpSubsetEq x) where prettyPrec prec op@(OpSubsetEq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubsetEq x) where - varSymBreakingDescription (OpSubsetEq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSubsetEq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSubsetEq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Substring.hs b/src/Conjure/Language/Expression/Op/Substring.hs index fc06b83cd0..e618db13cc 100644 --- a/src/Conjure/Language/Expression/Op/Substring.hs +++ b/src/Conjure/Language/Expression/Op/Substring.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -40,7 +41,7 @@ instance Pretty x => Pretty (OpSubstring x) where prettyPrec prec op@(OpSubstring a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubstring x) where - varSymBreakingDescription (OpSubstring a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSubstring a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSubstring") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Succ.hs b/src/Conjure/Language/Expression/Op/Succ.hs index 36b610badb..da946d0eb8 100644 --- a/src/Conjure/Language/Expression/Op/Succ.hs +++ b/src/Conjure/Language/Expression/Op/Succ.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -35,7 +36,7 @@ instance Pretty x => Pretty (OpSucc x) where prettyPrec _ (OpSucc x) = "succ" <> prParens (pretty x) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSucc x) where - varSymBreakingDescription (OpSucc a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSucc a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSucc") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Sum.hs b/src/Conjure/Language/Expression/Op/Sum.hs index a09262be83..6a316f8ae6 100644 --- a/src/Conjure/Language/Expression/Op/Sum.hs +++ b/src/Conjure/Language/Expression/Op/Sum.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -57,12 +58,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpSum x) where prettyPrec _ (OpSum x) = "sum" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpSum x) where - varSymBreakingDescription (OpSum x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpSum x) | Just xs <- listOut x = JSON.Object $KM.fromList [ ("type", JSON.String "OpSum") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpSum x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSum x) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSum") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Supset.hs b/src/Conjure/Language/Expression/Op/Supset.hs index 1a05df71ab..ce67446a43 100644 --- a/src/Conjure/Language/Expression/Op/Supset.hs +++ b/src/Conjure/Language/Expression/Op/Supset.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpSupset x) where prettyPrec prec op@(OpSupset a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSupset x) where - varSymBreakingDescription (OpSupset a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSupset a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSupset") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/SupsetEq.hs b/src/Conjure/Language/Expression/Op/SupsetEq.hs index 151f010984..9637cc4645 100644 --- a/src/Conjure/Language/Expression/Op/SupsetEq.hs +++ b/src/Conjure/Language/Expression/Op/SupsetEq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpSupsetEq x) where prettyPrec prec op@(OpSupsetEq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSupsetEq x) where - varSymBreakingDescription (OpSupsetEq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpSupsetEq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpSupsetEq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Table.hs b/src/Conjure/Language/Expression/Op/Table.hs index b7fcbb73a9..c2a943b862 100644 --- a/src/Conjure/Language/Expression/Op/Table.hs +++ b/src/Conjure/Language/Expression/Op/Table.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -44,7 +45,7 @@ instance Pretty x => Pretty (OpTable x) where prettyPrec _ (OpTable a b) = "table" <> prettyList prParens "," [a, b] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpTable x) where - varSymBreakingDescription (OpTable a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTable a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTable") , ("children", JSON.Array $ V.fromList [varSymBreakingDescription a, varSymBreakingDescription b]) , ("symmetricChildren", JSON.Bool True) diff --git a/src/Conjure/Language/Expression/Op/TildeLeq.hs b/src/Conjure/Language/Expression/Op/TildeLeq.hs index 51368ea497..fb2bf8ffd6 100644 --- a/src/Conjure/Language/Expression/Op/TildeLeq.hs +++ b/src/Conjure/Language/Expression/Op/TildeLeq.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpTildeLeq x) where prettyPrec prec op@(OpTildeLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTildeLeq x) where - varSymBreakingDescription (OpTildeLeq a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTildeLeq a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTildeLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/TildeLt.hs b/src/Conjure/Language/Expression/Op/TildeLt.hs index 0f1ad757c5..6c9c03ed91 100644 --- a/src/Conjure/Language/Expression/Op/TildeLt.hs +++ b/src/Conjure/Language/Expression/Op/TildeLt.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -31,7 +32,7 @@ instance Pretty x => Pretty (OpTildeLt x) where prettyPrec prec op@(OpTildeLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTildeLt x) where - varSymBreakingDescription (OpTildeLt a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTildeLt a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTildeLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToInt.hs b/src/Conjure/Language/Expression/Op/ToInt.hs index 90fdabf37b..e353c7b63b 100644 --- a/src/Conjure/Language/Expression/Op/ToInt.hs +++ b/src/Conjure/Language/Expression/Op/ToInt.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -36,7 +37,7 @@ instance Pretty x => Pretty (OpToInt x) where prettyPrec _ (OpToInt a) = "toInt" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToInt x) where - varSymBreakingDescription (OpToInt a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpToInt a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpToInt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToMSet.hs b/src/Conjure/Language/Expression/Op/ToMSet.hs index 5dcf094ca7..c4ea41dcd4 100644 --- a/src/Conjure/Language/Expression/Op/ToMSet.hs +++ b/src/Conjure/Language/Expression/Op/ToMSet.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpToMSet x) where prettyPrec _ (OpToMSet a) = "toMSet" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToMSet x) where - varSymBreakingDescription (OpToMSet a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpToMSet a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpToMSet") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToRelation.hs b/src/Conjure/Language/Expression/Op/ToRelation.hs index 3b1226255c..c4b7e8194e 100644 --- a/src/Conjure/Language/Expression/Op/ToRelation.hs +++ b/src/Conjure/Language/Expression/Op/ToRelation.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -32,7 +33,7 @@ instance Pretty x => Pretty (OpToRelation x) where prettyPrec _ (OpToRelation a) = "toRelation" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToRelation x) where - varSymBreakingDescription (OpToRelation a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpToRelation a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpToRelation") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToSet.hs b/src/Conjure/Language/Expression/Op/ToSet.hs index 821d7f5552..565ec196a7 100644 --- a/src/Conjure/Language/Expression/Op/ToSet.hs +++ b/src/Conjure/Language/Expression/Op/ToSet.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -40,7 +41,7 @@ instance Pretty x => Pretty (OpToSet x) where prettyPrec _ (OpToSet _ a) = "toSet" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToSet x) where - varSymBreakingDescription (OpToSet b x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpToSet b x) = JSON.Object $KM.fromList [ ("type", JSON.String "OpToSet") , ("children", JSON.Array $ V.fromList [ toJSON b diff --git a/src/Conjure/Language/Expression/Op/Together.hs b/src/Conjure/Language/Expression/Op/Together.hs index df1ac2d33e..9618219022 100644 --- a/src/Conjure/Language/Expression/Op/Together.hs +++ b/src/Conjure/Language/Expression/Op/Together.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -33,7 +34,7 @@ instance Pretty x => Pretty (OpTogether x) where prettyPrec _ (OpTogether a b) = "together" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTogether x) where - varSymBreakingDescription (OpTogether a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTogether a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTogether") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Transform.hs b/src/Conjure/Language/Expression/Op/Transform.hs index addb8a4cda..5783eed226 100644 --- a/src/Conjure/Language/Expression/Op/Transform.hs +++ b/src/Conjure/Language/Expression/Op/Transform.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -42,7 +43,7 @@ instance Pretty x => Pretty (OpTransform x) where prettyPrec _ (OpTransform a b) = "transform" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTransform x) where - varSymBreakingDescription (OpTransform a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTransform a b) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTransform") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/True.hs b/src/Conjure/Language/Expression/Op/True.hs index 9099a27283..be33182ebb 100644 --- a/src/Conjure/Language/Expression/Op/True.hs +++ b/src/Conjure/Language/Expression/Op/True.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -28,7 +29,7 @@ instance Pretty x => Pretty (OpTrue x) where prettyPrec _ (OpTrue a) = "true" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTrue x) where - varSymBreakingDescription (OpTrue a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTrue a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTrue") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/TwoBars.hs b/src/Conjure/Language/Expression/Op/TwoBars.hs index eaa3ac52b4..d2cc686fa4 100644 --- a/src/Conjure/Language/Expression/Op/TwoBars.hs +++ b/src/Conjure/Language/Expression/Op/TwoBars.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -47,7 +48,7 @@ instance Pretty x => Pretty (OpTwoBars x) where prettyPrec _ (OpTwoBars a) = "|" <> pretty a <> "|" instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTwoBars x) where - varSymBreakingDescription (OpTwoBars a) = JSON.Object $ M.fromList + varSymBreakingDescription (OpTwoBars a) = JSON.Object $KM.fromList [ ("type", JSON.String "OpTwoBars") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 44f08a158f..45ad49fbcb 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -1,4 +1,9 @@ {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE InstanceSigs #-} +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +{-# HLINT ignore "Use camelCase" #-} module Conjure.Language.Lexer ( Lexeme(..) @@ -8,17 +13,19 @@ module Conjure.Language.Lexer , lexemeText , lexemeFace ) where - -import Conjure.Prelude +import Conjure.Prelude hiding (some,many) import Data.Char ( isAlpha, isAlphaNum ) +import Data.Void import qualified Data.HashMap.Strict as M import qualified Data.Text as T import qualified Data.Text.Read as T import qualified Text.PrettyPrint as Pr +import qualified Text.Megaparsec.Char.Lexer as L +import Text.Megaparsec.Char -import Text.Megaparsec.Pos ( SourcePos, initialPos, incSourceLine, incSourceColumn, setSourceColumn ) -import Text.Megaparsec.ShowToken ( ShowToken(..) ) +import Text.Megaparsec --( SourcePos, initialPos, incSourceLine, incSourceColumn, setSourceColumn ) +import Text.Megaparsec.Stream data LexemePos = LexemePos @@ -29,10 +36,11 @@ data LexemePos = LexemePos data Lexeme = LIntLiteral Integer + | LMissingIntLiteral --helper for missing symbol | LIdentifier T.Text + | LMissingIdentifier --helper for missing symbol | LMetaVar T.Text - | LComment T.Text - + | LMissingMetaVar --helper for missing symbol -- general | L_be | L_from @@ -269,10 +277,14 @@ data Lexeme -- type functional | L_transform + | L_EOF + + deriving (Eq, Ord, Show,Generic) +instance Hashable Lexeme - deriving (Eq, Ord, Show, Generic) +-- deriving (Eq, Ord, Show, Generic) -instance Hashable Lexeme +-- instance Hashable Lexeme lexemeText :: Lexeme -> T.Text lexemeText l = T.pack $ show (lexemeFace l) @@ -287,7 +299,7 @@ lexemeFace L_Space = "space character" lexemeFace L_Tab = "tab character" lexemeFace (LIntLiteral i) = Pr.integer i lexemeFace (LIdentifier i) = Pr.text (T.unpack i) -lexemeFace (LComment i) = Pr.text (T.unpack i) +-- lexemeFace (LComment i) = Pr.text (T.unpack i) lexemeFace l = case M.lookup l mapLexemeToText of Nothing -> Pr.text (show l) @@ -298,7 +310,7 @@ lexemeWidth L_Carriage = 0 lexemeWidth L_Tab = 4 lexemeWidth (LIntLiteral i) = length (show i) lexemeWidth (LIdentifier i) = T.length i -lexemeWidth (LComment i) = T.length i +-- lexemeWidth (LComment i) = T.length i lexemeWidth l = case lookup l (map swap lexemes) of Nothing -> 0 @@ -488,52 +500,68 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_transform, "transform") ] +mapToLexemePos :: ETok -> LexemePos +mapToLexemePos tok = LexemePos lex start end where + (sp,en,_,lex) = offsets tok + start = SourcePos "Test" (mkPos sp ) (mkPos sp) + end = SourcePos "Test" (mkPos en ) (mkPos en) + + + runLexer :: MonadFailDoc m => T.Text -> m [LexemePos] runLexer text = do - ls <- go text - let lsPaired = calcPos (initialPos "") ls - return lsPaired - where - go t = do - let results = catMaybes $ tryLexMetaVar t - : map (tryLex t) lexemes - ++ [ tryLexIntLiteral t - , tryLexIden t - , tryLexQuotedIden t - , tryLexComment t - ] - if T.null t - then return [] - else case results of - [] -> failDoc ("Lexing error:" Pr.<+> Pr.text (T.unpack t)) - ((rest,lexeme):_) -> (lexeme:) <$> go rest - - -- attach source positions to lexemes - -- discard whitespace, but calculate their contribution to source positions - calcPos :: SourcePos -> [Lexeme] -> [LexemePos] - calcPos _pos [] = [] - calcPos pos (this:rest) | isLexemeSpace this -- skip if this one is whitespace - = calcPos (nextPos pos this) rest -- can only happen at the beginning - calcPos pos (this:rest) = - let (restSpaces, restNonSpace) = span isLexemeSpace rest -- eat up all the whitespace after "this" - pos' = foldl nextPos pos (this:restSpaces) - in - if null restNonSpace - then [LexemePos this pos (nextPos pos this)] -- if this is the last non-whitespace lexeme - -- do not include the whitespace after it - else LexemePos this pos pos' : calcPos pos' restNonSpace - - nextPos :: SourcePos -> Lexeme -> SourcePos - nextPos pos L_Newline = incSourceLine (setSourceColumn pos 1) 1 - nextPos pos L_Carriage = pos -- just ignore '\r's - nextPos pos l = incSourceColumn pos (lexemeWidth l) + let x = parseMaybe eLex text + case x of + Just y -> return $ mapToLexemePos <$> y + Nothing -> failDoc "Error" + + + +-- runLexer text = do +-- ls <- go text +-- let lsPaired = calcPos (initialPos "") ls +-- return lsPaired +-- where +-- go t = do +-- let results = catMaybes $ tryLexMetaVar t +-- : map (tryLex t) lexemes +-- ++ [ tryLexIntLiteral t +-- , tryLexIden t +-- , tryLexQuotedIden t +-- , tryLexComment t +-- ] +-- if T.null t +-- then return [] +-- else case results of +-- [] -> fail ("Lexing error:" Pr.<+> Pr.text (T.unpack t)) +-- ((rest,lexeme):_) -> (lexeme:) <$> go rest + +-- -- attach source positions to lexemes +-- -- discard whitespace, but calculate their contribution to source positions +-- calcPos :: SourcePos -> [Lexeme] -> [LexemePos] +-- calcPos _pos [] = [] +-- calcPos pos (this:rest) | isLexemeSpace this -- skip if this one is whitespace +-- = calcPos (nextPos pos this) rest -- can only happen at the beginning +-- calcPos pos (this:rest) = +-- let (restSpaces, restNonSpace) = span isLexemeSpace rest -- eat up all the whitespace after "this" +-- pos' = foldl nextPos pos (this:restSpaces) +-- in +-- if null restNonSpace +-- then [LexemePos this pos (nextPos pos this)] -- if this is the last non-whitespace lexeme +-- -- do not include the whitespace after it +-- else LexemePos this pos pos' : calcPos pos' restNonSpace + +-- nextPos :: SourcePos -> Lexeme -> SourcePos +-- nextPos pos L_Newline = incSourceLine (setSourceColumn pos 1) 1 +-- nextPos pos L_Carriage = pos -- just ignore '\r's +-- nextPos pos l = incSourceColumn pos (lexemeWidth l) isLexemeSpace :: Lexeme -> Bool isLexemeSpace L_Newline {} = True isLexemeSpace L_Carriage{} = True isLexemeSpace L_Tab {} = True isLexemeSpace L_Space {} = True -isLexemeSpace LComment {} = True +-- isLexemeSpace LComment {} = True isLexemeSpace _ = False tryLex :: T.Text -> (T.Text, Lexeme) -> Maybe (T.Text, Lexeme) @@ -608,19 +636,137 @@ tryLexQuotedIden running = do _ -> go2 (ch:sofar) rest go running -tryLexComment :: T.Text -> Maybe (T.Text, Lexeme) -tryLexComment running = let (dollar,rest1) = T.span (=='$') running - in if T.null dollar - then Nothing - else let (commentLine,rest2) = T.span (/='\n') rest1 - in Just (rest2, LComment commentLine) - - -instance ShowToken [LexemePos] where - showToken = intercalate ", " . map showToken - -instance ShowToken LexemePos where - showToken (LexemePos tok _ _) = showToken tok - -instance ShowToken Lexeme where - showToken = show . lexemeFace +-- tryLexComment :: T.Text -> Maybe (T.Text, Lexeme) +-- tryLexComment running = let (dollar,rest1) = T.span (=='$') running +-- in if T.null dollar +-- then Nothing +-- else let (commentLine,rest2) = T.span (/='\n') rest1 +-- in Just (rest2, LComment commentLine) + + +-- instance ShowToken [LexemePos] where +-- showToken = intercalate ", " . map showToken + +-- instance ShowToken LexemePos where +-- showToken (LexemePos tok _ _) = showToken tok + +-- instance ShowToken Lexeme where +-- showToken = show . lexemeFace + +--Generic + +-- instance Hashable Lexeme + +type Offsets = (Int,Int,Int,Lexeme) +type Parser = Parsec Void T.Text +data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text + deriving (Show,Eq,Ord) +data ETok = ETok { + offsets :: Offsets, + trivia :: [Trivia], + lexeme :: Lexeme +} + deriving (Eq,Ord) + + +makeToken :: Offsets -> [Trivia] -> Lexeme -> ETok +makeToken = ETok + +eLex :: Parser [ETok] +eLex = manyTill aToken eof + +aToken :: Parser ETok +aToken = do + start <- getOffset + whiteSpace <- pTrivia + wse <- getOffset + tok <- aLexeme + tokenEnd <- getOffset + return $ makeToken (start,wse,tokenEnd-start,tok) whiteSpace tok + +aLexeme :: Parser Lexeme +aLexeme = try pEOF + <|> try pNumber + <|> try (choice $ map pLexeme lexemes) + <|> try pIdentifier + <|> try pMetaVar + +pEOF :: Parser Lexeme +pEOF = do + eof + return L_EOF + +pNumber :: Parser Lexeme +pNumber = do + LIntLiteral <$> L.decimal + +pMetaVar :: Parser Lexeme +pMetaVar = do + empty + return $ LMetaVar "TODO" + + +pIdentifier :: Parser Lexeme +pIdentifier = do + firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter + rest <- takeWhileP Nothing isIdentifierLetter + return $ LIdentifier (T.append firstLetter rest) + + +pLexeme :: (T.Text,Lexeme) -> Parser Lexeme +pLexeme (s,l) = do + tok <- string s + return l + +pTrivia :: Parser [Trivia] +pTrivia = many (whiteSpace <|> lineComment <|> blockComment) + +whiteSpace :: Parser Trivia +whiteSpace = do + s <- some spaceChar + return $ WhiteSpace $ T.pack s + +lineEnd :: Parser () +lineEnd = do + _ <- optional eol + _ <- optional eof + return () + +lineComment :: Parser Trivia +lineComment = do + _<-try (chunk "$") + text <- manyTill L.charLiteral lineEnd + return $ LineComment $ T.pack text + +blockComment :: Parser Trivia +blockComment = do + _ <- try (chunk "/*") + text <- manyTill L.charLiteral (chunk "*/") + return $ BlockComment $ T.pack text + +instance Show ETok where + show (ETok _ _ q) = show q + +newtype ETokenStream = ETokenStream [ETok] +instance Stream ETokenStream where + type Token ETokenStream= ETok + type Tokens ETokenStream= [ETok] + tokenToChunk proxy x = [x] + tokensToChunk proxy xs= xs + chunkToTokens proxy = id + chunkLength proxy = length + chunkEmpty proxy xs = False + take1_ (ETokenStream (x:xs)) = Just (x, ETokenStream xs) + take1_ (ETokenStream []) = Nothing + takeN_ n xs | n<=0 = Just([],xs) + takeN_ n (ETokenStream []) = Nothing + takeN_ n (ETokenStream xs) = Just (take n xs,ETokenStream $ drop n xs) + takeWhile_ p (ETokenStream xs) = (takeWhile p xs,ETokenStream $ dropWhile p xs) +instance VisualStream ETokenStream where + showTokens p q = concat $ show <$> q + tokensLength p ls = sum $ len <$> ls + where len (ETok (_,_,x,_) _ _) = x + +instance TraversableStream ETokenStream where + reachOffset i s = (Nothing, s) + reachOffsetNoLine i s = s \ No newline at end of file diff --git a/src/Conjure/Language/NameGen.hs b/src/Conjure/Language/NameGen.hs index 4fd8e07634..8f1eb430e8 100644 --- a/src/Conjure/Language/NameGen.hs +++ b/src/Conjure/Language/NameGen.hs @@ -82,7 +82,7 @@ instance NameGen m => NameGen (Pipes.Proxy a b c d m) where exportNameGenState = lift exportNameGenState importNameGenState = lift . importNameGenState -instance (Functor m, Monad m) => NameGen (NameGenM m) where +instance (Functor m, MonadFail m) => NameGen (NameGenM m) where nextName k = do mi <- gets (M.lookup k . fst) out <- case mi of diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs new file mode 100644 index 0000000000..a2f120b1b2 --- /dev/null +++ b/src/Conjure/Language/NewLexer.hs @@ -0,0 +1,575 @@ + +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE InstanceSigs #-} + +module Conjure.Language.NewLexer where +import Conjure.Prelude hiding (some,many) +import Data.Char ( isAlpha, isAlphaNum ) +import Data.Void +import Data.Tuple +import Data.Ord +import Data.List +import qualified Data.Text as T +import qualified Data.Text.Read as T +import Text.Megaparsec hiding (State) +import Text.Megaparsec.Char +import Text.Megaparsec.Debug +import qualified Text.Megaparsec.Char.Lexer as L +import Control.Monad (when) + +data Lexeme + = LIntLiteral Integer + | LMissingIntLiteral --helper for missing symbol + | LIdentifier T.Text + | LMissingIdentifier --helper for missing symbol + | LMetaVar T.Text + | LMissingMetaVar --helper for missing symbol + -- general + | L_be + | L_from + | L_of + | L_domain + + | L_language + | L_dim + | L_find + | L_given + | L_letting + | L_where + | L_such + | L_that + | L_minimising + | L_maximising + | L_branching + | L_on + | L_heuristic + + -- type: boolean + | L_bool + | L_false + | L_true + + -- type: integer + | L_int + + -- creating a new type + | L_new + | L_type + | L_enum + + -- type tuple + | L_tuple + + -- type record + | L_record + + -- type variant + | L_variant + | L_active + + -- type: matrix + | L_matrix + | L_indexed + | L_by + + -- type set + | L_set + | L_size + | L_minSize + | L_maxSize + + -- type: mset + | L_mset + | L_minOccur + | L_maxOccur + + -- type: function + | L_function + | L_total + | L_partial + | L_injective + | L_surjective + | L_bijective + + -- type: sequence + | L_sequence + + -- type: relation + | L_relation + + -- type: partition + | L_partition + | L_regular + | L_partSize + | L_minPartSize + | L_maxPartSize + | L_numParts + | L_minNumParts + | L_maxNumParts + + -- operators, page 21 of the holy paper + | L_union + | L_intersect + | L_subset + | L_subsetEq + | L_supset + | L_supsetEq + | L_in + | L_max + | L_min + | L_toSet + | L_toMSet + | L_toRelation + | L_defined + | L_range + | L_restrict + | L_image + | L_imageSet + | L_preImage + | L_inverse + | L_together + | L_apart + | L_party + | L_participants + | L_parts + | L_freq + | L_hist + + | L_toInt + | L_makeTable + | L_table + + -- global constraints + | L_allDiff + | L_alldifferent_except + | L_gcc + | L_atleast + | L_atmost + + | L_dontCare + + | L_catchUndef + + -- matrix only operators + | L_flatten + | L_concatenate + | L_normIndices + + -- in the rule language + -- | L_lambda + -- | L_quantifier + -- | L_representation + + -- arithmetic operators + + | L_Plus -- + -- sum, infix : (int,int) -> int + | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int) + | L_Times -- * -- multiplication, infix : (int,int) -> int + | L_Div -- / -- integer division, infix + | L_Mod -- % -- modulo, infix + | L_Pow -- ** -- exponentiation, infix : (int,int) -> int + | L_factorial + + -- equality + + | L_Eq -- = -- equals, infix. + | L_Neq -- != -- not-equals, infix + + -- comparison + + | L_Lt -- < -- less-than, infix. + | L_Leq -- <= -- less-than-or-eq, infix. + | L_Gt -- > -- greater-than, infix. + | L_Geq -- >= -- greater-than-or-eq, infix. + + -- logical operators + + | L_And -- /\ -- logical-and, infix + | L_Or -- \/ -- logical-or, infix. + | L_Imply -- -> -- implication, infix + | L_Iff -- <-> -- iff, infix. + -- | L_Not -- ! -- negation, prefix + | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark + + -- the function arrow + + | L_LongArrow -- --> -- function domains and constants + + -- in rule language + + | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching. + | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching. + | L_At -- @ -- bubble operator. + + -- lex operators + + | L_LexGeq -- >=lex + | L_LexGt -- >lex + | L_LexLt -- <=lex + | L_LexLeq -- " ) + , ( L_Geq , ">=" ) + , ( L_And , "/\\" ) + , ( L_Or , "\\/" ) + , ( L_Imply , "->" ) + , ( L_Iff , "<->" ) + , ( L_ExclamationMark , "!" ) + , ( L_LongArrow , "-->" ) + , ( L_Colon , ":" ) + , ( L_DoubleColon , "::" ) + , ( L_At , "@" ) + , ( L_LexGeq , ">=lex" ) + , ( L_LexGt , ">lex" ) + , ( L_LexLeq , "<=lex" ) + , ( L_LexLt , "" ) + , ( L_CaseSeparator , "***" ) + + , ( L_HasRepr , "hasRepr" ) + , ( L_HasType , "hasType" ) + , ( L_HasDomain , "hasDomain" ) + , ( L_indices , "indices" ) + + , ( L_DotLt , ".<" ) + , ( L_DotLeq , ".<=" ) + , ( L_DotGt , ".>" ) + , ( L_DotGeq , ".>=" ) + + , ( L_TildeLt , "~<" ) + , ( L_TildeLeq , "~<=" ) + , ( L_TildeGt , "~>" ) + , ( L_TildeGeq , "~>=" ) + + , ( L_LeftArrow , "<-" ) + + , ( L_subsequence , "subsequence" ) + , ( L_substring , "substring" ) + , ( L_powerSet , "powerSet" ) + + , ( L_pred, "pred" ) + , ( L_succ, "succ" ) + + + , ( L_transform, "transform") + ] + +emojis :: [Char] +emojis = concat [['\x1f600'..'\x1F64F'], + ['\x1f300'..'\x1f5ff'], + ['\x1f680'..'\x1f999'], + ['\x1f1e0'..'\x1f1ff']] + + +isIdentifierFirstLetter :: Char -> Bool +isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem` emojis + +isIdentifierLetter :: Char -> Bool +isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis + + +type Offsets = (Int,Int,Int,Lexeme) +type Parser = Parsec Void T.Text +data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text + deriving (Show,Eq,Ord) +data ETok = ETok { + offsets :: Offsets, + trivia :: [Trivia], + lexeme :: Lexeme +} + deriving (Eq,Ord) + + +makeToken :: Offsets -> [Trivia] -> Lexeme -> ETok +makeToken = ETok + +eLex :: Parser [ETok] +eLex = manyTill aToken eof + +aToken :: Parser ETok +aToken = do + start <- getOffset + whiteSpace <- pTrivia + wse <- getOffset + tok <- aLexeme + tokenEnd <- getOffset + return $ makeToken (start,wse,tokenEnd-start,tok) whiteSpace tok + +aLexeme :: Parser Lexeme +aLexeme = try pEOF + <|> try pNumber + <|> try (choice $ map pLexeme lexemes) + <|> try pIdentifier + <|> try pMetaVar + +pEOF :: Parser Lexeme +pEOF = do + eof + return L_EOF + +pNumber :: Parser Lexeme +pNumber = do + LIntLiteral <$> L.decimal + +pMetaVar :: Parser Lexeme +pMetaVar = do + empty + return $ LMetaVar "TODO" + + +pIdentifier :: Parser Lexeme +pIdentifier = do + firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter + rest <- takeWhileP Nothing isIdentifierLetter + return $ LIdentifier (T.append firstLetter rest) + + +pLexeme :: (T.Text,Lexeme) -> Parser Lexeme +pLexeme (s,l) = do + tok <- string s + return l + +pTrivia :: Parser [Trivia] +pTrivia = many (whiteSpace <|> lineComment <|> blockComment) + +whiteSpace :: Parser Trivia +whiteSpace = do + s <- some spaceChar + return $ WhiteSpace $ T.pack s + +lineEnd :: Parser () +lineEnd = do + _ <- optional eol + _ <- optional eof + return () + +lineComment :: Parser Trivia +lineComment = do + _<-try (chunk "$") + text <- manyTill L.charLiteral lineEnd + return $ LineComment $ T.pack text + +blockComment :: Parser Trivia +blockComment = do + _ <- try (chunk "/*") + text <- manyTill L.charLiteral (chunk "*/") + return $ BlockComment $ T.pack text + +instance Show ETok where + show (ETok _ _ q) = show q + +newtype ETokenStream = ETokenStream [ETok] +instance Stream ETokenStream where + type Token ETokenStream= ETok + type Tokens ETokenStream= [ETok] + tokenToChunk proxy x = [x] + tokensToChunk proxy xs= xs + chunkToTokens proxy = id + chunkLength proxy = length + chunkEmpty proxy xs = False + take1_ (ETokenStream (x:xs)) = Just (x, ETokenStream xs) + take1_ (ETokenStream []) = Nothing + takeN_ n xs | n<=0 = Just([],xs) + takeN_ n (ETokenStream []) = Nothing + takeN_ n (ETokenStream xs) = Just (take n xs,ETokenStream $ drop n xs) + takeWhile_ p (ETokenStream xs) = (takeWhile p xs,ETokenStream $ dropWhile p xs) +instance VisualStream ETokenStream where + showTokens p q = concat $ show <$> q + tokensLength p ls = sum $ len <$> ls + where len (ETok (_,_,x,_) _ _) = x + +instance TraversableStream ETokenStream where + reachOffset i s = (Nothing, s) + reachOffsetNoLine i s = s \ No newline at end of file diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 11606c74d8..ab53f26539 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -24,13 +24,13 @@ import Conjure.Language.Pretty import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace, lexemeText, runLexer ) -- megaparsec -import Text.Megaparsec.Prim ( (), label, token, try, eof, ParsecT, getPosition, setPosition ) -import Text.Megaparsec.Error ( ParseError(..), Message(..), errorPos ) +import Text.Megaparsec ( (), label, token, try, eof, ParsecT) +import Text.Megaparsec.Error ( ParseError(..),ErrorItem, errorOffset ) import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn ) -import Text.Megaparsec.Combinator ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) -import Text.Megaparsec.ShowToken ( showToken ) -import Text.Megaparsec.Expr ( makeExprParser, Operator(..) ) -import qualified Text.Megaparsec.Prim as P ( runParser ) +import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) +import Text.Megaparsec.Stream +import Control.Monad.Combinators.Expr ( makeExprParser, Operator(..) ) +import qualified Text.Megaparsec as P ( runParser ) -- text import qualified Data.Text as T @@ -1001,7 +1001,7 @@ identifierText = do satisfyT :: (Lexeme -> Bool) -> Parser Lexeme satisfyT predicate = token nextPos testTok where - testTok :: LexemePos -> Either [Message] Lexeme + testTok :: LexemePos -> Either [ErrorItem] Lexeme testTok (LexemePos tok _ _) = if predicate tok then Right tok else Left [Unexpected (showToken tok)] nextPos :: Int -> SourcePos -> LexemePos -> SourcePos nextPos _ _ (LexemePos _ _ pos) = pos @@ -1011,7 +1011,7 @@ satisfyL predicate = do p <- token nextPos testTok p where - testTok :: LexemePos -> Either [Message] (Parser a) + testTok :: LexemePos -> Either [ErrorItem] (Parser a) testTok (LexemePos tok _ _) = -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ case predicate tok of diff --git a/src/Conjure/Language/ParserC.hs b/src/Conjure/Language/ParserC.hs index 14e24b3eb1..6174920cd8 100644 --- a/src/Conjure/Language/ParserC.hs +++ b/src/Conjure/Language/ParserC.hs @@ -13,11 +13,11 @@ import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace ) import Conjure.Language.Parser ( Parser, ParserState(..) ) -- megaparsec -import Text.Megaparsec.Prim ( (), label, token, try, eof, getPosition, setPosition ) +import Text.Megaparsec ( (), label, token, try, eof, getPosition, setPosition ) import Text.Megaparsec.Error ( Message(..) ) import Text.Megaparsec.Pos ( SourcePos(..) ) -import Text.Megaparsec.Combinator ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) -import Text.Megaparsec.ShowToken ( showToken ) +import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) +-- import Text.Megaparsec.ShowToken ( showToken ) -- text import qualified Data.Text as T diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index e4ee115165..fb1f92fa04 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -33,6 +33,7 @@ import Text.PrettyPrint -- aeson import Data.Aeson as JSON +import qualified Data.Aeson.KeyMap as KM import Data.Scientific ( Scientific, floatingOrInteger ) -- scientific import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -133,14 +134,14 @@ instance Pretty JSON.Value where pretty Null = "null" instance Pretty JSON.Object where - pretty = prBraces . fsep . punctuate "," . map f . sortBy (comp `on` fst) . M.toList + pretty = prBraces . fsep . punctuate "," . map f . sortBy (comp `on` fst) . KM.toList where f (key, Array value) | not (any (\ v -> case v of String t -> T.length t < 20 ; _ -> True ) value) = pretty (show key) <> ":" <++> prettyArrayVCat value f (key, value) = pretty (show key) <> ":" <++> pretty value - keyOrder :: M.HashMap Text Int + keyOrder :: M.HashMap Key Int keyOrder = M.fromList $ zip [ "finds", "givens", "enumGivens", "enumLettings", "unnameds" , "strategyQ", "strategyA" @@ -150,7 +151,7 @@ instance Pretty JSON.Object where , "originalDomains" , "before", "after" ] [1..] - + comp :: Key -> Key -> Ordering comp a b = let preferred = compare <$> M.lookup a keyOrder <*> M.lookup b keyOrder diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index 9d130521d2..4af734332c 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -12,7 +12,7 @@ import Conjure.Language.Lenses as X ( fixTHParsing ) -- reexporting because it i -- megaparsec -import Text.Megaparsec.Prim ( setPosition ) +import Text.Megaparsec ( setPosition ) import Text.Megaparsec.Pos ( SourcePos, newPos ) -- template-haskell diff --git a/src/Conjure/Language/Type.hs b/src/Conjure/Language/Type.hs index 5177de31bb..76b0e30622 100644 --- a/src/Conjure/Language/Type.hs +++ b/src/Conjure/Language/Type.hs @@ -44,6 +44,7 @@ data Type | TypePartition Type deriving (Eq, Ord, Show, Data, Typeable, Generic) + instance Serialize Type instance Hashable Type instance ToJSON Type where toJSON = genericToJSON jsonOptions diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index df9c4e8069..dc832bcdd3 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -5,6 +5,7 @@ {-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-} {-# LANGUAGE UndecidableInstances #-} + module Conjure.Prelude ( module X , stringToDoc @@ -160,7 +161,8 @@ import qualified Data.Aeson.Types as JSON import Test.QuickCheck ( Gen ) -- megaparsec -import Text.Megaparsec.Prim ( ParsecT ) +-- megaparsec +import Text.Megaparsec ( ParsecT, Parsec ) -- pretty import Text.PrettyPrint as X @@ -221,6 +223,7 @@ import Data.Time.Clock ( getCurrentTime ) import System.TimeIt as X ( timeIt, timeItNamed ) import Debug.Trace as X ( trace, traceM ) +import Data.Void (Void) tracing :: Show a => String -> a -> a tracing s a = trace ("tracing " ++ s ++ ": " ++ show a) a diff --git a/src/Conjure/UI/VarSymBreaking.hs b/src/Conjure/UI/VarSymBreaking.hs index 4c8cb50a48..45628ee4b6 100644 --- a/src/Conjure/UI/VarSymBreaking.hs +++ b/src/Conjure/UI/VarSymBreaking.hs @@ -6,6 +6,7 @@ import Conjure.Language.AdHoc import Conjure.Language.Pretty import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -14,7 +15,7 @@ outputVarSymBreaking :: MonadIO m => FilePath -> Model -> m () outputVarSymBreaking jsonPath = liftIO . writeFile jsonPath . renderNormal . varSymBreaking varSymBreaking :: Model -> JSON.Value -varSymBreaking model = JSON.Object $ M.fromList +varSymBreaking model = JSON.Object $ KM.fromList [ ("nodes_to_swap", JSON.Array $ V.fromList $ map JSON.String $ sortNub $ [ n | Reference (Name n) _ <- universeBi model ] ++ [ n | Single (Name n) <- universeBi model ] From 867c9c3d571198b3fa4249d9974594041241e1c8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 22 Sep 2022 12:29:37 +0100 Subject: [PATCH 050/378] more upgrading --- conjure-cp.cabal | 2 +- src/Conjure/Language/AbstractLiteral.hs | 2 +- src/Conjure/Language/AdHoc.hs | 2 +- src/Conjure/Language/Definition.hs | 3 +- src/Conjure/Language/Expression.hs | 51 ++++++++++--------- .../Language/Expression/Op/Factorial.hs | 7 ++- src/Conjure/Language/Expression/Op/Inverse.hs | 15 +++--- src/Conjure/Language/Expression/Op/Negate.hs | 7 ++- .../Language/Expression/Op/Restrict.hs | 15 ++++-- src/Conjure/Language/Expression/Op/Union.hs | 3 +- src/Conjure/Language/Expression/Op/Xor.hs | 5 +- src/Conjure/Prelude.hs | 2 +- 12 files changed, 62 insertions(+), 52 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 8d6552f7c2..6f6cd35a30 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -268,7 +268,7 @@ Library , pipes , pretty > 1.1.1.1 -- >= 2.9 because of the TH fix: https://github.com/nick8325/quickcheck/issues/101 - , QuickCheck >= 2.9 + , QuickCheck >= 2.14 , random , safe , scientific >=0.3.7 diff --git a/src/Conjure/Language/AbstractLiteral.hs b/src/Conjure/Language/AbstractLiteral.hs index f389d63bfc..e43cbaf069 100644 --- a/src/Conjure/Language/AbstractLiteral.hs +++ b/src/Conjure/Language/AbstractLiteral.hs @@ -46,7 +46,7 @@ instance (SimpleJSON x, Pretty x, ExpressionLike x) => SimpleJSON (AbstractLiter AbsLitRecord xs -> do xs' <- forM xs $ \ (nm, x) -> do x' <- toSimpleJSON x - return (stringToText (renderNormal nm), x') + return (fromString (renderNormal nm), x') return $ JSON.Object $ KM.fromList xs' AbsLitVariant _ nm x -> do x' <- toSimpleJSON x diff --git a/src/Conjure/Language/AdHoc.hs b/src/Conjure/Language/AdHoc.hs index 5c088fa2eb..9cb4d38117 100644 --- a/src/Conjure/Language/AdHoc.hs +++ b/src/Conjure/Language/AdHoc.hs @@ -121,7 +121,7 @@ data AsDictionary a b = AsDictionary [(a,b)] instance (Pretty x, SimpleJSON x, SimpleJSON y) => SimpleJSON (AsDictionary x y) where toSimpleJSON (AsDictionary xs) = do (ys, asList) <- fmap unzip $ forM xs $ \ (a,b) -> do - let aStr = stringToText $ renderNormal $ pretty a + let aStr = fromString $ renderNormal $ pretty a aJSON <- toSimpleJSON a bJSON <- toSimpleJSON b let abPair = JSON.Array $ V.fromList [aJSON, bJSON] diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index dd287c21f1..0029681a3f 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -60,6 +60,7 @@ import Conjure.Language.Expression -- aeson import Data.Aeson ( (.=), (.:) ) import qualified Data.Aeson as JSON +import qualified Data.Aeson.Key as K import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -88,7 +89,7 @@ instance SimpleJSON Model where toSimpleJSON m = do inners <- mapM toSimpleJSON (mStatements m) let (innersAsMaps, rest) = unzip [ case i of JSON.Object mp -> ([mp], []); _ -> ([], [i]) | i <- inners ] - |> (\ (xs, ys) -> (M.unions (concat xs), concat ys)) + |> (\ (xs, ys) -> ((mconcat) <$> xs, concat ys)) unless (null rest) $ bug $ "Expected json objects only, but got:" <+> vcat (map pretty rest) return (JSON.Object innersAsMaps) fromSimpleJSON = noFromSimpleJSON "Model" diff --git a/src/Conjure/Language/Expression.hs b/src/Conjure/Language/Expression.hs index 9133b4dd8c..5e747db06c 100644 --- a/src/Conjure/Language/Expression.hs +++ b/src/Conjure/Language/Expression.hs @@ -37,6 +37,7 @@ import Conjure.Language.RepresentationOf -- aeson import qualified Data.Aeson as JSON +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -84,22 +85,22 @@ instance Pretty Statement where pretty (SuchThat xs) = "such that" <++> vcat (punctuate "," $ map pretty xs) instance VarSymBreakingDescription Statement where - varSymBreakingDescription (Declaration x) = JSON.Object $ M.fromList + varSymBreakingDescription (Declaration x) = JSON.Object $ KM.fromList [ ("type", JSON.String "Declaration") , ("children", varSymBreakingDescription x) ] varSymBreakingDescription SearchOrder{} = JSON.Null varSymBreakingDescription SearchHeuristic{} = JSON.Null - varSymBreakingDescription (Where xs) = JSON.Object $ M.fromList + varSymBreakingDescription (Where xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "Where") , ("symmetricChildren", JSON.Bool True) , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) ] - varSymBreakingDescription (Objective obj x) = JSON.Object $ M.fromList + varSymBreakingDescription (Objective obj x) = JSON.Object $ KM.fromList [ ("type", JSON.String $ "Objective-" `mappend` stringToText (show obj)) , ("children", varSymBreakingDescription x) ] - varSymBreakingDescription (SuchThat xs) = JSON.Object $ M.fromList + varSymBreakingDescription (SuchThat xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "SuchThat") , ("symmetricChildren", JSON.Bool True) , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) @@ -162,7 +163,7 @@ instance SimpleJSON Declaration where case d of Letting nm x -> do x' <- toSimpleJSON x - return $ JSON.Object $ M.fromList [(stringToText (renderNormal nm), x')] + return $ JSON.Object $ KM.fromList [(fromString (renderNormal nm), x')] _ -> noToSimpleJSON d fromSimpleJSON = noFromSimpleJSON "Declaration" @@ -284,27 +285,27 @@ instance Pretty Declaration where hang ("letting" <+> pretty name <+> "be new type of size") 8 (pretty size) instance VarSymBreakingDescription Declaration where - varSymBreakingDescription (FindOrGiven forg name domain) = JSON.Object $ M.fromList + varSymBreakingDescription (FindOrGiven forg name domain) = JSON.Object $ KM.fromList [ ("type", JSON.String "FindOrGiven") , ("forg", toJSON forg) , ("name", toJSON name) , ("domain", toJSON domain) ] - varSymBreakingDescription (Letting name x) = JSON.Object $ M.fromList + varSymBreakingDescription (Letting name x) = JSON.Object $ KM.fromList [ ("type", JSON.String "Letting") , ("name", toJSON name) , ("value", toJSON x) ] - varSymBreakingDescription (GivenDomainDefnEnum name) = JSON.Object $ M.fromList + varSymBreakingDescription (GivenDomainDefnEnum name) = JSON.Object $ KM.fromList [ ("type", JSON.String "GivenDomainDefnEnum") , ("name", toJSON name) ] - varSymBreakingDescription (LettingDomainDefnEnum name xs) = JSON.Object $ M.fromList + varSymBreakingDescription (LettingDomainDefnEnum name xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "GivenDomainDefnEnum") , ("name", toJSON name) , ("values", JSON.Array $ V.fromList $ map toJSON xs) ] - varSymBreakingDescription (LettingDomainDefnUnnamed name x) = JSON.Object $ M.fromList + varSymBreakingDescription (LettingDomainDefnUnnamed name x) = JSON.Object $ KM.fromList [ ("type", JSON.String "LettingDomainDefnUnnamed") , ("name", toJSON name) , ("value", toJSON x) @@ -423,27 +424,27 @@ instance VarSymBreakingDescription Expression where varSymBreakingDescription (Constant x) = toJSON x varSymBreakingDescription (AbstractLiteral x) = varSymBreakingDescription x varSymBreakingDescription (Domain domain) = varSymBreakingDescription domain - varSymBreakingDescription (Reference name _) = JSON.Object $ M.singleton "Reference" (toJSON name) - varSymBreakingDescription (WithLocals h (AuxiliaryVars locs)) = JSON.Object $ M.fromList + varSymBreakingDescription (Reference name _) = JSON.Object $ KM.singleton "Reference" (toJSON name) + varSymBreakingDescription (WithLocals h (AuxiliaryVars locs)) = JSON.Object $ KM.fromList [ ("type", JSON.String "WithLocals") , ("head", varSymBreakingDescription h) , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription locs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (WithLocals h (DefinednessConstraints locs)) = JSON.Object $ M.fromList + varSymBreakingDescription (WithLocals h (DefinednessConstraints locs)) = JSON.Object $ KM.fromList [ ("type", JSON.String "WithLocals") , ("head", varSymBreakingDescription h) , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription locs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (Comprehension h gocs) = JSON.Object $ M.fromList + varSymBreakingDescription (Comprehension h gocs) = JSON.Object $ KM.fromList [ ("type", JSON.String "Comprehension") , ("head", varSymBreakingDescription h) , ("gocs", JSON.Array $ V.fromList $ map varSymBreakingDescription gocs) ] varSymBreakingDescription (Typed x _) = varSymBreakingDescription x varSymBreakingDescription (Op op) = varSymBreakingDescription op - varSymBreakingDescription (ExpressionMetaVar s) = JSON.Object $ M.fromList + varSymBreakingDescription (ExpressionMetaVar s) = JSON.Object $ KM.fromList [ ("type", JSON.String "ExpressionMetaVar") , ("name", JSON.String (stringToText s)) ] @@ -807,20 +808,20 @@ instance Pretty AbstractPattern where instance VarSymBreakingDescription AbstractPattern where varSymBreakingDescription (Single nm) = toJSON nm - varSymBreakingDescription (AbsPatTuple xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsPatTuple xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsPatTuple") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) ] - varSymBreakingDescription (AbsPatMatrix xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsPatMatrix xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsPatMatrix") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) ] - varSymBreakingDescription (AbsPatSet xs) = JSON.Object $ M.fromList + varSymBreakingDescription (AbsPatSet xs) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbsPatSet") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (AbstractPatternMetaVar s) = JSON.Object $ M.fromList + varSymBreakingDescription (AbstractPatternMetaVar s) = JSON.Object $ KM.fromList [ ("type", JSON.String "AbstractPatternMetaVar") , ("name", JSON.String (stringToText s)) ] @@ -851,15 +852,15 @@ instance Pretty GeneratorOrCondition where pretty (ComprehensionLetting n x) = "letting" <+> pretty n <+> "be" <+> pretty x instance VarSymBreakingDescription GeneratorOrCondition where - varSymBreakingDescription (Generator x) = JSON.Object $ M.fromList + varSymBreakingDescription (Generator x) = JSON.Object $ KM.fromList [ ("type", JSON.String "Generator") , ("child", varSymBreakingDescription x) ] - varSymBreakingDescription (Condition x) = JSON.Object $ M.fromList + varSymBreakingDescription (Condition x) = JSON.Object $ KM.fromList [ ("type", JSON.String "Condition") , ("child", varSymBreakingDescription x) ] - varSymBreakingDescription (ComprehensionLetting n x) = JSON.Object $ M.fromList + varSymBreakingDescription (ComprehensionLetting n x) = JSON.Object $ KM.fromList [ ("type", JSON.String "ComprehensionLetting") , ("children", JSON.Array $ V.fromList [toJSON n, varSymBreakingDescription x]) ] @@ -882,17 +883,17 @@ instance Pretty Generator where pretty (GenInExpr pat x) = pretty pat <+> "<-" <+> pretty x instance VarSymBreakingDescription Generator where - varSymBreakingDescription (GenDomainNoRepr pat x) = JSON.Object $ M.fromList + varSymBreakingDescription (GenDomainNoRepr pat x) = JSON.Object $ KM.fromList [ ("type", JSON.String "GenDomainNoRepr") , ("pattern", varSymBreakingDescription pat) , ("generator", varSymBreakingDescription x) ] - varSymBreakingDescription (GenDomainHasRepr pat x) = JSON.Object $ M.fromList + varSymBreakingDescription (GenDomainHasRepr pat x) = JSON.Object $ KM.fromList [ ("type", JSON.String "GenDomainHasRepr") , ("pattern", toJSON pat) , ("generator", varSymBreakingDescription x) ] - varSymBreakingDescription (GenInExpr pat x) = JSON.Object $ M.fromList + varSymBreakingDescription (GenInExpr pat x) = JSON.Object $ KM.fromList [ ("type", JSON.String "GenInExpr") , ("pattern", varSymBreakingDescription pat) , ("generator", varSymBreakingDescription x) diff --git a/src/Conjure/Language/Expression/Op/Factorial.hs b/src/Conjure/Language/Expression/Op/Factorial.hs index a35fb440d5..c6d92e0324 100644 --- a/src/Conjure/Language/Expression/Op/Factorial.hs +++ b/src/Conjure/Language/Expression/Op/Factorial.hs @@ -21,11 +21,10 @@ instance FromJSON x => FromJSON (OpFactorial x) where parseJSON = genericParse instance (TypeOf x, Pretty x) => TypeOf (OpFactorial x) where typeOf p@(OpFactorial a) = do - TypeInt t <- typeOf a - case t of - TagInt -> return () + typeOfA <- typeOf a --TODO: Not sure on this + case typeOfA of + TypeInt _ -> return typeOfA _ -> raiseTypeError p - return (TypeInt t) instance SimplifyOp OpFactorial x where simplifyOp _ = na "simplifyOp{OpFactorial}" diff --git a/src/Conjure/Language/Expression/Op/Inverse.hs b/src/Conjure/Language/Expression/Op/Inverse.hs index 88d7061827..7dd4db71a9 100644 --- a/src/Conjure/Language/Expression/Op/Inverse.hs +++ b/src/Conjure/Language/Expression/Op/Inverse.hs @@ -20,12 +20,15 @@ instance ToJSON x => ToJSON (OpInverse x) where toJSON = genericToJSON jso instance FromJSON x => FromJSON (OpInverse x) where parseJSON = genericParseJSON jsonOptions instance (TypeOf x, Pretty x) => TypeOf (OpInverse x) where - typeOf p@(OpInverse f g) = do - TypeFunction fFrom fTo <- typeOf f - TypeFunction gFrom gTo <- typeOf g - if typesUnify [fFrom, gTo] && typesUnify [fTo, gFrom] - then return TypeBool - else raiseTypeError p + typeOf p@(OpInverse f g) = do --TODO: not sure on this refactor + typeOfF <- typeOf f + typeOfG <- typeOf g + case (typeOfF,typeOfG) of + (TypeFunction fFrom fTo,TypeFunction gFrom gTo) -> + if typesUnify [fFrom, gTo] && typesUnify [fTo, gFrom] + then return TypeBool + else raiseTypeError p + _ -> raiseTypeError p instance SimplifyOp OpInverse x where simplifyOp _ = na "simplifyOp{OpInverse}" diff --git a/src/Conjure/Language/Expression/Op/Negate.hs b/src/Conjure/Language/Expression/Op/Negate.hs index d4ec20c204..5da9dca8bf 100644 --- a/src/Conjure/Language/Expression/Op/Negate.hs +++ b/src/Conjure/Language/Expression/Op/Negate.hs @@ -21,11 +21,10 @@ instance FromJSON x => FromJSON (OpNegate x) where parseJSON = genericParseJSO instance (TypeOf x, Pretty x) => TypeOf (OpNegate x) where typeOf p@(OpNegate a) = do - TypeInt t <- typeOf a - case t of - TagInt -> return () + typeOfA <- typeOf a --TODO: unsure of this refactor + case typeOfA of + TypeInt t -> return $ TypeInt t _ -> raiseTypeError p - return (TypeInt t) instance SimplifyOp OpNegate x where simplifyOp _ = na "simplifyOp{OpNegate}" diff --git a/src/Conjure/Language/Expression/Op/Restrict.hs b/src/Conjure/Language/Expression/Op/Restrict.hs index 4b082a364f..08955b54d5 100644 --- a/src/Conjure/Language/Expression/Op/Restrict.hs +++ b/src/Conjure/Language/Expression/Op/Restrict.hs @@ -1,5 +1,6 @@ {-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable #-} {-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE InstanceSigs #-} module Conjure.Language.Expression.Op.Restrict where @@ -24,11 +25,15 @@ instance FromJSON x => FromJSON (OpRestrict x) where parseJSON = genericParseJ instance (TypeOf x, Pretty x, Domain () x :< x) => TypeOf (OpRestrict x) where typeOf p@(OpRestrict f domX) = do dom :: Domain () x <- project domX - TypeFunction from to <- typeOf f - from' <- typeOfDomain dom - if typesUnify [from, from'] - then return (TypeFunction (mostDefined [from', from]) to) - else raiseTypeError p + typeOfF <- typeOf f --TODO: not sure about this change + case typeOfF of + TypeFunction from to -> do + from' <- typeOfDomain dom + if typesUnify [from, from'] + then return (TypeFunction (mostDefined [from', from]) to) + else raiseTypeError p + _ -> raiseTypeError p + instance SimplifyOp OpRestrict x where simplifyOp _ = na "simplifyOp{OpRestrict}" diff --git a/src/Conjure/Language/Expression/Op/Union.hs b/src/Conjure/Language/Expression/Op/Union.hs index 97df769888..5f28079b43 100644 --- a/src/Conjure/Language/Expression/Op/Union.hs +++ b/src/Conjure/Language/Expression/Op/Union.hs @@ -6,6 +6,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -37,7 +38,7 @@ instance Pretty x => Pretty (OpUnion x) where prettyPrec prec op@(OpUnion a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpUnion x) where - varSymBreakingDescription (OpUnion a b) = JSON.Object $ M.fromList + varSymBreakingDescription (OpUnion a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpUnion") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Xor.hs b/src/Conjure/Language/Expression/Op/Xor.hs index dd276566a3..cb8fb9ee56 100644 --- a/src/Conjure/Language/Expression/Op/Xor.hs +++ b/src/Conjure/Language/Expression/Op/Xor.hs @@ -7,6 +7,7 @@ import Conjure.Prelude import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -41,12 +42,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpXor x) where prettyPrec _ (OpXor x) = "xor" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpXor x) where - varSymBreakingDescription (OpXor x) | Just xs <- listOut x = JSON.Object $ M.fromList + varSymBreakingDescription (OpXor x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpXor") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpXor x) = JSON.Object $ M.fromList + varSymBreakingDescription (OpXor x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpXor") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index dc832bcdd3..d035f3b05a 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -84,7 +84,7 @@ import Control.Monad as X ( Monad(return, (>>), (>>=)) , (<=<), (>=>), (=<<), ap, join , guard, void, when, unless , zipWithM, zipWithM_, foldM, filterM, replicateM - , MonadPlus(..), mzero, msum ) + , MonadPlus(..), mzero, msum) import Control.Monad.Trans.Class as X ( MonadTrans(lift) ) import Control.Monad.Identity as X ( Identity, runIdentity ) import Control.Monad.IO.Class as X ( MonadIO, liftIO ) From 2c0d6371ef9089ad23d9b7ac961040ebd9def5fd Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 23 Sep 2022 12:57:48 +0100 Subject: [PATCH 051/378] Further updating, fixed GHCLSP memory leak --- src/Conjure/Language/AST.hs | 145 ++ .../Language/Expression/DomainSizeOf.hs | 2 +- src/Conjure/Language/Lexer.hs | 2 +- src/Conjure/Language/NameResolution.hs | 4 +- src/Conjure/Language/Parser.hs | 2037 +++++++++-------- src/Conjure/Language/TH.hs | 18 +- src/Conjure/Language/Validator.hs | 8 + 7 files changed, 1190 insertions(+), 1026 deletions(-) create mode 100644 src/Conjure/Language/AST.hs create mode 100644 src/Conjure/Language/Validator.hs diff --git a/src/Conjure/Language/AST.hs b/src/Conjure/Language/AST.hs new file mode 100644 index 0000000000..9573386c6b --- /dev/null +++ b/src/Conjure/Language/AST.hs @@ -0,0 +1,145 @@ +module Conjure.Language.AST where +import Conjure.Language.Lexer +import Conjure.Language.NewLexer (ETokenStream, ETok, Lexeme) +import Conjure.Prelude (Identity, Maybe) +import Text.Megaparsec +import Data.Void +import Conjure.Language.Definition (Statement, SearchOrder (BranchingOn), FindOrGiven (Given)) + + + + +data LToken = RealToken ETok | MissingToken ETok + +data ProgramTree = ProgramTree + +data StatementNode = Declatation DeclatationStatementNode + | Branching BranchingStatementNode + | SuchThat SuchThatStatementNode + | Where WhereStatementNode + | Objective ObjectiveStatementNode + +data SuchThatStatementNode = SuchThatStatementNode + LToken -- Such + LToken -- That + (Sequence ExpressionNode) -- constraints + + +data WhereStatementNode = WhereStatementNode + LToken --where + (Sequence ExpressionNode) --expresssions + +data ObjectiveStatementNode = ObjectiveMin LToken ExpressionNode + | ObjectiveMax LToken ExpressionNode + +--Declaration statements +data DeclatationStatementNode = + GivenStatement GivenStatementNode + | LettingStatement LettingStatementNode + +data GivenStatementNode = GivenStatementNode + LToken -- given + NameNode -- name + LToken -- colon + + + +data LettingStatementNode = + LettingExpr LToken NameNode LToken ExpressionNode + | LettingDomain LToken NameNode LToken LToken DomainNode + + +data GivenEnumNode = GivenEnumNode + LToken --lGivenEnum + NameNode --name + LToken --lNew + LToken --lType + LToken --lEnum + +data LettingEnumNode = LettingEnumNode + LToken --lLetting + NameNode --name + LToken --lBe + LToken --lNew + LToken --lType + LToken --lEnum + ListNode NameNode--nameList + + +data LettingUnnamedNode = LettingAnon + LToken --lLettingAnon + NameNode --name + LToken --lBe + LToken --lNew + LToken --lType + LToken --lOf + LToken --lSize + ExpressionNode --expr + +--Branching on + +data BranchingStatementNode = BranchingStatementNode + LToken + LToken + (ListNode BranchingOnNode) + + +data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode + + +--Domains + +data DomainNode = BoolDomainNode LToken + | RangedIntDomainNode LToken (ListNode RangeNode) + | NamedRangeNode NameNode (ListNode RangeNode) + | NamedDomainNode NameNode + | TupleDomainNode LToken (ListNode DomainNode) + | RecordDomainNode LToken (ListNode NamedDomainNode) + | VariantDomainNode LToken (ListNode NamedDomainNode) + | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode + | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | FunctionDomainNode LToken (ListNode AttributeNode) DomainNode LToken DomainNode + | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) + | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode + + +data RangeNode = SingleRangeNode ExpressionNode + | RightUnboundedRangeNode ExpressionNode LToken + | LeftUnboundedRangeNode LToken ExpressionNode + | BoundedRangeNode ExpressionNode LToken ExpressionNode +data AttributeNode = NamedAttributeNode NameNode | NamedExpressionAttribute NameNode ExpressionNode +data NamedDomainNode = NameDomainNode NameNode LToken DomainNode +-- Common Statements + + +newtype NameNode = NameNode LToken + +data ExpressionNode = BinaryOpNode ExpressionNode LToken ExpressionNode + | UnaryPrefixOpNode LToken ExpressionNode + +data ListNode itemType= ListNode { + lOpBracket :: LToken, + items :: Sequence itemType, + lClBracket :: LToken +} + +newtype Sequence itemType = Seq { + elems :: [SeqElem itemType] +} + +data SeqElem itemType = SeqElem { + item :: itemType, + separator :: Maybe LToken +} + +type Parser = Parsec Void ETokenStream + + + + +-- parseProgram :: Parser ProgramNode +-- parseProgram = do + + diff --git a/src/Conjure/Language/Expression/DomainSizeOf.hs b/src/Conjure/Language/Expression/DomainSizeOf.hs index f5f6bf1a24..8cdf540f14 100644 --- a/src/Conjure/Language/Expression/DomainSizeOf.hs +++ b/src/Conjure/Language/Expression/DomainSizeOf.hs @@ -105,7 +105,7 @@ getMaxNumberOfElementsInContainer domain@(DomainSet _ (SetAttr sizeAttr) inner) getMaxNumberOfElementsInContainer domain@(DomainMSet _ (MSetAttr sizeAttr occurAttr) inner) = case (getMaxFrom_SizeAttr sizeAttr, getMaxFrom_OccurAttr occurAttr, domainSizeOf inner) of (Just n, _ , _ ) -> n - (_ , Just o, Just n) -> [essence| &o * &n |] + (_ , Just o, Just (n :: Expression)) -> [essence| &o * &n |] _ -> bug $ "getMaxNumberOfElementsInContainer, DomainMSet:" <+> pretty domain getMaxNumberOfElementsInContainer domain@(DomainSequence _ (SequenceAttr sizeAttr _) _) = case getMaxFrom_SizeAttr sizeAttr of diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 45ad49fbcb..d32ba7986e 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -32,7 +32,7 @@ data LexemePos = LexemePos Lexeme -- the lexeme SourcePos -- source position, the beginning of this lexeme SourcePos -- source position, just after this lexeme, including whitespace after the lexeme - deriving Show + deriving (Show,Eq, Ord) data Lexeme = LIntLiteral Integer diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index 725a70654e..a12ee64018 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -310,12 +310,12 @@ resolveAbsPat _ (Single nm) x = addName nm $ Alias x resolveAbsPat context (AbsPatTuple ps) x = sequence_ [ resolveAbsPat context p [essence| &x[&i] |] | (p, i_) <- zip ps allNats - , let i = fromInt i_ + , let i :: Constant = fromInt i_ ] resolveAbsPat context (AbsPatMatrix ps) x = sequence_ [ resolveAbsPat context p [essence| &x[&i] |] | (p, i_) <- zip ps allNats - , let i = fromInt i_ + , let i :: Constant = fromInt i_ ] resolveAbsPat context (AbsPatSet ps) x = do ys <- case x of diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index ab53f26539..3d882abb09 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -26,7 +26,7 @@ import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace, lexemeTex -- megaparsec import Text.Megaparsec ( (), label, token, try, eof, ParsecT) import Text.Megaparsec.Error ( ParseError(..),ErrorItem, errorOffset ) -import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn ) +import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn , Pos) import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) import Text.Megaparsec.Stream import Control.Monad.Combinators.Expr ( makeExprParser, Operator(..) ) @@ -37,34 +37,38 @@ import qualified Data.Text as T -- containers import qualified Data.Set as S ( null, fromList, toList ) +import Data.Void (Void) parseModel :: Parser Model -parseModel = inCompleteFile $ do - let - pLanguage :: Parser LanguageVersion - pLanguage = do - lexeme L_language - pos1 <- getPosition - l <- identifierText - -- ESSENCE' is accepted, just for convenience - unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do - setPosition pos1 - failDoc $ "language name has to be Essence, but given:" <+> pretty l - pos2 <- getPosition - is <- sepBy1 integer dot - unless (is >= [1]) $ do - setPosition pos2 - failDoc $ "language version expected to be at least 1.0, but given:" <+> - pretty (intercalate "." (map show is)) - return (LanguageVersion (Name l) (map fromInteger is)) - l <- optional pLanguage - xs <- many parseTopLevels - return Model - { mLanguage = fromMaybe def l - , mStatements = concat xs - , mInfo = def - } +parseModel = do + let x = Model {} + return x + -- inCompleteFile $ do + -- let + -- pLanguage :: Parser LanguageVersion + -- pLanguage = do + -- lexeme L_language + -- pos1 <- getPosition + -- l <- identifierText + -- -- ESSENCE' is accepted, just for convenience + -- unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do + -- setPosition pos1 + -- fail $ "language name has to be Essence, but given:" <+> pretty l + -- pos2 <- getPosition + -- is <- sepBy1 integer dot + -- unless (is >= [1]) $ do + -- setPosition pos2 + -- fail $ "language version expected to be at least 1.0, but given:" <+> + -- pretty (intercalate "." (map show is)) + -- return (LanguageVersion (Name l) (map fromInteger is)) + -- l <- optional pLanguage + -- xs <- many parseTopLevels + -- return Model + -- { mLanguage = fromMaybe def l + -- , mStatements = concat xs + -- , mInfo = def + -- } parseIO :: MonadFailDoc m => Parser a -> String -> m a @@ -74,1012 +78,1019 @@ parseIO p s = Right x -> return x -translateQnName :: Text -> Text -translateQnName qnName = case qnName of - "forAll" -> "and" - "exists" -> "or" - _ -> qnName +-- translateQnName :: Text -> Text +-- translateQnName qnName = case qnName of +-- "forAll" -> "and" +-- "exists" -> "or" +-- _ -> qnName --------------------------------------------------------------------------------- --- Actual parsers -------------------------------------------------------------- --------------------------------------------------------------------------------- +-- -------------------------------------------------------------------------------- +-- -- Actual parsers -------------------------------------------------------------- +-- -------------------------------------------------------------------------------- parseTopLevels :: Parser [Statement] -parseTopLevels = do - let one = satisfyL $ \case - L_find -> Just $ do - decls <- flip sepEndBy1 comma $ do - is <- commaSeparated parseNameOrMeta - j <- colon >> parseDomain - return [ Declaration (FindOrGiven Find i j) - | i <- is ] - return $ concat decls - L_given -> Just $ do - decls <- commaSeparated $ do - is <- commaSeparated parseName - msum - [ do - colon - j <- parseDomain - return [ Declaration (FindOrGiven Given i j) - | i <- is ] - , do - lexeme L_new - msum - [ do - lexeme L_type - lexeme L_enum - modify (\ st -> st { enumDomains = is ++ enumDomains st } ) - return [ Declaration (GivenDomainDefnEnum i) - | i <- is ] - ] - ] - return $ concat decls - L_letting -> Just $ do - decls <- commaSeparated $ do - is <- commaSeparated parseName - lexeme L_be - msum - [ do - lexeme L_new - lexeme L_type - msum - [ do - lexeme L_of - lexeme $ LIdentifier "size" - j <- parseExpr - return [ Declaration (LettingDomainDefnUnnamed i j) - | i <- is - ] - , do - lexeme L_enum - ys <- braces (commaSeparated parseName) <|> return [] - modify (\ st -> st { enumDomains = is ++ enumDomains st } ) - return [ Declaration (LettingDomainDefnEnum i ys) - | i <- is - ] - ] - , do - lexeme L_domain - j <- parseDomain - return [ Declaration (Letting i (Domain j)) - | i <- is - ] - , do - j <- parseExpr - return [ Declaration (Letting i j) - | i <- is - ] - ] - return $ concat decls - L_where -> Just $ do - xs <- commaSeparated parseExpr - return [Where xs] - L_such -> Just $ do - lexeme L_that - xs <- commaSeparated parseExpr - return [SuchThat xs] - L_minimising -> Just $ do - x <- parseExpr - return [ Objective Minimising x ] - L_maximising -> Just $ do - x <- parseExpr - return [ Objective Maximising x ] - L_branching -> Just $ do - lexeme L_on - xs <- brackets $ commaSeparated parseSearchOrder - return [ SearchOrder xs ] - L_heuristic -> Just $ do - nm <- parseName - return [ SearchHeuristic nm ] - _ -> Nothing - concat <$> some (one "statement") - -parseSearchOrder :: Parser SearchOrder -parseSearchOrder = msum [try pBranchingOn, pCut] - where - pBranchingOn = BranchingOn <$> parseName - pCut = Cut <$> parseExpr - -parseRange :: Parser a -> Parser (Range a) -parseRange p = msum [try pRange, pSingle] "range" - where - pRange = do - fr <- optional p - dotdot - to <- optional p - return $ case (fr,to) of - (Nothing, Nothing) -> RangeOpen - (Just x , Nothing) -> RangeLowerBounded x - (Nothing, Just y ) -> RangeUpperBounded y - (Just x , Just y ) -> RangeBounded x y - pSingle = do - x <- p - return (RangeSingle x) +parseTopLevels = do return [] -- +-- let one = satisfyL $ \case +-- L_find -> Just $ do +-- decls <- flip sepEndBy1 comma $ do +-- is <- commaSeparated parseNameOrMeta +-- j <- colon >> parseDomain +-- return [ Declaration (FindOrGiven Find i j) +-- | i <- is ] +-- return $ concat decls +-- L_given -> Just $ do +-- decls <- commaSeparated $ do +-- is <- commaSeparated parseName +-- msum +-- [ do +-- colon +-- j <- parseDomain +-- return [ Declaration (FindOrGiven Given i j) +-- | i <- is ] +-- , do +-- lexeme L_new +-- msum +-- [ do +-- lexeme L_type +-- lexeme L_enum +-- modify (\ st -> st { enumDomains = is ++ enumDomains st } ) +-- return [ Declaration (GivenDomainDefnEnum i) +-- | i <- is ] +-- ] +-- ] +-- return $ concat decls +-- L_letting -> Just $ do +-- decls <- commaSeparated $ do +-- is <- commaSeparated parseName +-- lexeme L_be +-- msum +-- [ do +-- lexeme L_new +-- lexeme L_type +-- msum +-- [ do +-- lexeme L_of +-- lexeme $ LIdentifier "size" +-- j <- parseExpr +-- return [ Declaration (LettingDomainDefnUnnamed i j) +-- | i <- is +-- ] +-- , do +-- lexeme L_enum +-- ys <- braces (commaSeparated parseName) <|> return [] +-- modify (\ st -> st { enumDomains = is ++ enumDomains st } ) +-- return [ Declaration (LettingDomainDefnEnum i ys) +-- | i <- is +-- ] +-- ] +-- , do +-- lexeme L_domain +-- j <- parseDomain +-- return [ Declaration (Letting i (Domain j)) +-- | i <- is +-- ] +-- , do +-- j <- parseExpr +-- return [ Declaration (Letting i j) +-- | i <- is +-- ] +-- ] +-- return $ concat decls +-- L_where -> Just $ do +-- xs <- commaSeparated parseExpr +-- return [Where xs] +-- L_such -> Just $ do +-- lexeme L_that +-- xs <- commaSeparated parseExpr +-- return [SuchThat xs] +-- L_minimising -> Just $ do +-- x <- parseExpr +-- return [ Objective Minimising x ] +-- L_maximising -> Just $ do +-- x <- parseExpr +-- return [ Objective Maximising x ] +-- L_branching -> Just $ do +-- lexeme L_on +-- xs <- brackets $ commaSeparated parseSearchOrder +-- return [ SearchOrder xs ] +-- L_heuristic -> Just $ do +-- nm <- parseName +-- return [ SearchHeuristic nm ] +-- _ -> Nothing +-- concat <$> some (one "statement") + +-- parseSearchOrder :: Parser SearchOrder +-- parseSearchOrder = msum [try pBranchingOn, pCut] +-- where +-- pBranchingOn = BranchingOn <$> parseName +-- pCut = Cut <$> parseExpr + +-- parseRange :: Parser a -> Parser (Range a) +-- parseRange p = msum [try pRange, pSingle] "range" +-- where +-- pRange = do +-- fr <- optional p +-- dotdot +-- to <- optional p +-- return $ case (fr,to) of +-- (Nothing, Nothing) -> RangeOpen +-- (Just x , Nothing) -> RangeLowerBounded x +-- (Nothing, Just y ) -> RangeUpperBounded y +-- (Just x , Just y ) -> RangeBounded x y +-- pSingle = do +-- x <- p +-- return (RangeSingle x) parseDomain :: Parser (Domain () Expression) -parseDomain = (forgetRepr <$> parseDomainWithRepr) "domain" +parseDomain = do --(forgetRepr <$> parseDomainWithRepr) "domain" + let x = DomainBool + return x + parseDomainWithRepr :: Parser (Domain HasRepresentation Expression) -parseDomainWithRepr = pDomainAtom - -- TODO: uncomment the following to parse (union, intersect and minus) for domains - -- let - -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] - -- - -- in - -- makeExprParser (pDomainAtom "domain") - -- [ [ InfixL $ do lexeme L_Minus - -- return $ mergeOp L_Minus - -- , InfixL $ do lexeme L_union - -- return $ mergeOp L_union - -- ] - -- , [ InfixL $ do lexeme L_intersect - -- return $ mergeOp L_intersect - -- ] - -- ] - - where - - pDomainAtom = msum - [ pBool, try pIntFromExpr, pInt, try pEnum, try pReference - , pMatrix, try pTupleWithout, pTupleWith - , pRecord, pVariant - , pSet - , pMSet - , try pFunction', pFunction - , pSequence - , pRelation - , pPartition - , DomainMetaVar <$> parseMetaVariable, parens parseDomainWithRepr - ] - - parseRepr = return NoRepresentation - -- -- Parsing set {representation} of ... notation if needed - -- parseRepr = msum [ braces parseReprInner - -- , return NoRepresentation - -- ] - -- - -- parseReprInner = do - -- pos <- getPosition - -- nm <- identifierText - -- inners <- fromMaybe [] <$> optional (brackets (commaSeparated parseReprInner)) - -- case textToRepresentation nm inners of - -- Nothing -> do - -- setPosition pos - -- failDoc ("Not a valid representation:" <+> pretty nm) - -- Just r -> return r - - pBool = do - lexeme L_bool - -- parse and discard, compatibility with SR - _ <- optional $ parens $ commaSeparated0 $ parseRange parseExpr - return DomainBool - - pIntFromExpr = do - lexeme L_int - x <- parens parseExpr - case (let ?typeCheckerMode = StronglyTyped in typeOf x) of - Just (TypeInt TagInt) -> return $ DomainInt TagInt [RangeSingle x] - _ -> return $ DomainIntE x - - pInt = do - lexeme L_int - mxs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr - let xs = fromMaybe [] mxs - return $ DomainInt TagInt xs - - pReference = do - r <- identifierText - return $ DomainReference (Name r) Nothing - - pEnum = do - r <- identifierText - xs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr - st <- get - guard (Name r `elem` enumDomains st) - return $ DomainEnum (Name r) xs Nothing - - pMatrix = do - lexeme L_matrix - void $ optional $ lexeme L_indexed - void $ optional $ lexeme L_by - xs <- brackets (commaSeparated parseDomain) - lexeme L_of - y <- parseDomainWithRepr - return $ foldr DomainMatrix y xs - - pTupleWith = do - lexeme L_tuple - xs <- parens $ commaSeparated0 parseDomainWithRepr - return $ DomainTuple xs - - pTupleWithout = do - xs <- parens $ countSepAtLeast 2 parseDomainWithRepr comma - return $ DomainTuple xs - - pRecord = do - lexeme L_record - let one = do n <- parseName - lexeme L_Colon - d <- parseDomainWithRepr - return (n,d) - xs <- braces $ commaSeparated0 one - return $ DomainRecord xs - - pVariant = do - lexeme L_variant - let one = do n <- parseName - dMaybe <- optional $ lexeme L_Colon >> parseDomainWithRepr - case dMaybe of - Nothing -> return (n, DomainInt TagInt [RangeSingle 0]) - Just d -> return (n,d) - xs <- braces $ commaSeparated0 one - return $ DomainVariant xs - - pSet = do - lexeme L_set - r <- parseRepr - x <- parseSetAttr - y <- lexeme L_of >> parseDomainWithRepr - return $ DomainSet r x y - - pMSet = do - lexeme L_mset - r <- parseRepr - x <- parseMSetAttr - y <- lexeme L_of >> parseDomainWithRepr - return $ DomainMSet r x y - - pFunction' = do - lexeme L_function - r <- parseRepr - (y,z) <- arrowedPair parseDomainWithRepr - return $ DomainFunction r def y z - - pFunction = do - lexeme L_function - r <- parseRepr - x <- parseFunctionAttr - (y,z) <- arrowedPair parseDomainWithRepr - return $ DomainFunction r x y z - - pSequence = do - lexeme L_sequence - r <- parseRepr - x <- parseSequenceAttr - y <- lexeme L_of >> parseDomainWithRepr - return $ DomainSequence r x y - - pRelation = do - lexeme L_relation - r <- parseRepr - pos <- getPosition - x <- parseRelationAttr - lexeme L_of - ys <- parens (parseDomainWithRepr `sepBy` lexeme L_Times) - let RelationAttr _ (BinaryRelationAttrs binAttrs) = x - when (length ys /= 2 && not (S.null binAttrs)) $ do - setPosition pos - failDoc $ "Only binary relations can have these attributes:" <+> - prettyList id "," (S.toList binAttrs) - return $ DomainRelation r x ys - - pPartition = do - lexeme L_partition - r <- parseRepr - x <- parsePartitionAttr - lexeme L_from - y <- parseDomainWithRepr - return $ DomainPartition r x y - -parseAttributes :: Parser (DomainAttributes Expression) -parseAttributes = do - xs <- parens (commaSeparated0 parseAttribute) <|> return [] - return $ DomainAttributes xs - where - parseAttribute = msum [parseDontCare, try parseNameValue, parseDAName] - parseNameValue = DANameValue <$> (Name <$> identifierText) <*> parseExpr - parseDAName = DAName <$> (Name <$> identifierText) - parseDontCare = do dotdot ; return DADotDot - -parseSetAttr :: Parser (SetAttr Expression) -parseSetAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "set" attrs - ["size", "minSize", "maxSize"] - SetAttr <$> case filterSizey attrs of - [] -> return SizeAttr_None - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - -parseMSetAttr :: Parser (MSetAttr Expression) -parseMSetAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "mset" attrs - [ "size", "minSize", "maxSize" - , "minOccur", "maxOccur" - ] - size <- case filterSizey attrs of - [] -> return SizeAttr_None - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of - [] -> return OccurAttr_None - [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) - [DANameValue "maxOccur" a] -> return (OccurAttr_MaxOccur a) - [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - return (MSetAttr size occur) - -parseFunctionAttr :: Parser (FunctionAttr Expression) -parseFunctionAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "function" attrs - [ "size", "minSize", "maxSize" - , "injective", "surjective", "bijective" - , "total" - ] - size <- case filterSizey attrs of - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - [] -> return SizeAttr_None - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - let partiality = if DAName "total" `elem` attrs - then PartialityAttr_Total - else PartialityAttr_Partial - jectivity <- case filterJectivity attrs of - [] -> return JectivityAttr_None - [DAName "bijective" ] -> return JectivityAttr_Bijective - [DAName "injective" ] -> return JectivityAttr_Injective - [DAName "surjective"] -> return JectivityAttr_Surjective - [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - return (FunctionAttr size partiality jectivity) - -parseSequenceAttr :: Parser (SequenceAttr Expression) -parseSequenceAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "sequence" attrs - [ "size", "minSize", "maxSize" - , "injective", "surjective", "bijective" - ] - size <- case filterSizey attrs of - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - [] -> return SizeAttr_None - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - jectivity <- case filterJectivity attrs of - [] -> return JectivityAttr_None - [DAName "bijective" ] -> return JectivityAttr_Bijective - [DAName "injective" ] -> return JectivityAttr_Injective - [DAName "surjective"] -> return JectivityAttr_Surjective - [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - return (SequenceAttr size jectivity) - -parseRelationAttr :: Parser (RelationAttr Expression) -parseRelationAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "relation" attrs (map (Name . stringToText) (["size", "minSize", "maxSize"] ++ binRelNames)) - size <- case filterSizey attrs of - [] -> return SizeAttr_None - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - let - readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) - readBinRel' a = do - setPosition pos - failDoc $ "Not a binary relation attribute:" <+> pretty a - binRels <- mapM readBinRel' (filterBinRel attrs) - return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) - -parsePartitionAttr :: Parser (PartitionAttr Expression) -parsePartitionAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "partition" attrs - [ "size", "minSize", "maxSize" - , "regular" - , "numParts", "minNumParts", "maxNumParts" - , "partSize", "minPartSize", "maxPartSize" - ] - unless (null $ filterAttrName ["complete"] attrs) $ do - setPosition pos - failDoc $ vcat [ "Partitions do not support the 'complete' attribute." - , "They are complete by default." - ] - unless (null $ filterSizey attrs) $ do - setPosition pos - failDoc $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) - , "This is because partitions are complete by default." - ] - partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of - [] -> return SizeAttr_None - [DANameValue "numParts" a] -> return (SizeAttr_Size a) - [DANameValue "minNumParts" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxNumParts" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of - [] -> return SizeAttr_None - [DANameValue "partSize" a] -> return (SizeAttr_Size a) - [DANameValue "minPartSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxPartSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - let isRegular = DAName "regular" `elem` attrs - return PartitionAttr {..} - - -checkExtraAttributes :: SourcePos -> Doc -> [DomainAttribute a] -> [Name] -> Parser () -checkExtraAttributes pos ty attrs supported = do - let extras = mapMaybe f attrs - unless (null extras) $ do - setPosition pos - failDoc $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras - , "Only these are supported:" <+> prettyList id "," supported - ] - where - f (DANameValue nm _) | nm `notElem` supported = Just nm - f (DAName nm ) | nm `notElem` supported = Just nm - f _ = Nothing - -filterAttrName :: Ord a => [Name] -> [DomainAttribute a] -> [DomainAttribute a] -filterAttrName keep = sort . filter f - where - f (DANameValue nm _) | nm `elem` keep = True - f (DAName nm ) | nm `elem` keep = True - f _ = False - -filterSizey :: Ord a => [DomainAttribute a] -> [DomainAttribute a] -filterSizey = filterAttrName ["size", "minSize", "maxSize"] - -filterJectivity :: Ord a => [DomainAttribute a] -> [DomainAttribute a] -filterJectivity = filterAttrName ["injective", "surjective", "bijective"] - -filterBinRel :: Ord a => [DomainAttribute a] -> [DomainAttribute a] -filterBinRel = filterAttrName (map (Name . stringToText) binRelNames) - -parseMetaVariable :: Parser String -parseMetaVariable = do - let isMeta LMetaVar{} = True - isMeta _ = False - LMetaVar iden <- satisfyT isMeta - return (T.unpack iden) - -metaVarInE :: String -> Expression -metaVarInE = ExpressionMetaVar +parseDomainWithRepr = do return DomainBool +-- -- TODO: uncomment the following to parse (union, intersect and minus) for domains +-- -- let +-- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] +-- -- +-- -- in +-- -- makeExprParser (pDomainAtom "domain") +-- -- [ [ InfixL $ do lexeme L_Minus +-- -- return $ mergeOp L_Minus +-- -- , InfixL $ do lexeme L_union +-- -- return $ mergeOp L_union +-- -- ] +-- -- , [ InfixL $ do lexeme L_intersect +-- -- return $ mergeOp L_intersect +-- -- ] +-- -- ] + +-- where + +-- pDomainAtom = msum +-- [ pBool, try pIntFromExpr, pInt, try pEnum, try pReference +-- , pMatrix, try pTupleWithout, pTupleWith +-- , pRecord, pVariant +-- , pSet +-- , pMSet +-- , try pFunction', pFunction +-- , pSequence +-- , pRelation +-- , pPartition +-- , DomainMetaVar <$> parseMetaVariable, parens parseDomainWithRepr +-- ] + +-- parseRepr = return NoRepresentation +-- -- -- Parsing set {representation} of ... notation if needed +-- -- parseRepr = msum [ braces parseReprInner +-- -- , return NoRepresentation +-- -- ] +-- -- +-- -- parseReprInner = do +-- -- pos <- getPosition +-- -- nm <- identifierText +-- -- inners <- fromMaybe [] <$> optional (brackets (commaSeparated parseReprInner)) +-- -- case textToRepresentation nm inners of +-- -- Nothing -> do +-- -- setPosition pos +-- -- fail ("Not a valid representation:" <+> pretty nm) +-- -- Just r -> return r + +-- pBool = do +-- lexeme L_bool +-- -- parse and discard, compatibility with SR +-- _ <- optional $ parens $ commaSeparated0 $ parseRange parseExpr +-- return DomainBool + +-- pIntFromExpr = do +-- lexeme L_int +-- x <- parens parseExpr +-- case (let ?typeCheckerMode = StronglyTyped in typeOf x) of +-- Just (TypeInt TagInt) -> return $ DomainInt TagInt [RangeSingle x] +-- _ -> return $ DomainIntE x + +-- pInt = do +-- lexeme L_int +-- mxs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr +-- let xs = fromMaybe [] mxs +-- return $ DomainInt TagInt xs + +-- pReference = do +-- r <- identifierText +-- return $ DomainReference (Name r) Nothing + +-- pEnum = do +-- r <- identifierText +-- xs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr +-- st <- get +-- guard (Name r `elem` enumDomains st) +-- return $ DomainEnum (Name r) xs Nothing + +-- pMatrix = do +-- lexeme L_matrix +-- void $ optional $ lexeme L_indexed +-- void $ optional $ lexeme L_by +-- xs <- brackets (commaSeparated parseDomain) +-- lexeme L_of +-- y <- parseDomainWithRepr +-- return $ foldr DomainMatrix y xs + +-- pTupleWith = do +-- lexeme L_tuple +-- xs <- parens $ commaSeparated0 parseDomainWithRepr +-- return $ DomainTuple xs + +-- pTupleWithout = do +-- xs <- parens $ countSepAtLeast 2 parseDomainWithRepr comma +-- return $ DomainTuple xs + +-- pRecord = do +-- lexeme L_record +-- let one = do n <- parseName +-- lexeme L_Colon +-- d <- parseDomainWithRepr +-- return (n,d) +-- xs <- braces $ commaSeparated0 one +-- return $ DomainRecord xs + +-- pVariant = do +-- lexeme L_variant +-- let one = do n <- parseName +-- lexeme L_Colon +-- d <- parseDomainWithRepr +-- return (n,d) +-- xs <- braces $ commaSeparated0 one +-- return $ DomainVariant xs + +-- pSet = do +-- lexeme L_set +-- r <- parseRepr +-- x <- parseSetAttr +-- y <- lexeme L_of >> parseDomainWithRepr +-- return $ DomainSet r x y + +-- pMSet = do +-- lexeme L_mset +-- r <- parseRepr +-- x <- parseMSetAttr +-- y <- lexeme L_of >> parseDomainWithRepr +-- return $ DomainMSet r x y + +-- pFunction' = do +-- lexeme L_function +-- r <- parseRepr +-- (y,z) <- arrowedPair parseDomainWithRepr +-- return $ DomainFunction r def y z + +-- pFunction = do +-- lexeme L_function +-- r <- parseRepr +-- x <- parseFunctionAttr +-- (y,z) <- arrowedPair parseDomainWithRepr +-- return $ DomainFunction r x y z + +-- pSequence = do +-- lexeme L_sequence +-- r <- parseRepr +-- x <- parseSequenceAttr +-- y <- lexeme L_of >> parseDomainWithRepr +-- return $ DomainSequence r x y + +-- pRelation = do +-- lexeme L_relation +-- r <- parseRepr +-- pos <- getPosition +-- x <- parseRelationAttr +-- lexeme L_of +-- ys <- parens (parseDomainWithRepr `sepBy` lexeme L_Times) +-- let RelationAttr _ (BinaryRelationAttrs binAttrs) = x +-- when (length ys /= 2 && not (S.null binAttrs)) $ do +-- setPosition pos +-- fail $ "Only binary relations can have these attributes:" <+> +-- prettyList id "," (S.toList binAttrs) +-- return $ DomainRelation r x ys + +-- pPartition = do +-- lexeme L_partition +-- r <- parseRepr +-- x <- parsePartitionAttr +-- lexeme L_from +-- y <- parseDomainWithRepr +-- return $ DomainPartition r x y + +-- parseAttributes :: Parser (DomainAttributes Expression) +-- parseAttributes = do +-- xs <- parens (commaSeparated0 parseAttribute) <|> return [] +-- return $ DomainAttributes xs +-- where +-- parseAttribute = msum [parseDontCare, try parseNameValue, parseDAName] +-- parseNameValue = DANameValue <$> (Name <$> identifierText) <*> parseExpr +-- parseDAName = DAName <$> (Name <$> identifierText) +-- parseDontCare = do dotdot ; return DADotDot + +-- parseSetAttr :: Parser (SetAttr Expression) +-- parseSetAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "set" attrs +-- ["size", "minSize", "maxSize"] +-- SetAttr <$> case filterSizey attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) + +-- parseMSetAttr :: Parser (MSetAttr Expression) +-- parseMSetAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "mset" attrs +-- [ "size", "minSize", "maxSize" +-- , "minOccur", "maxOccur" +-- ] +-- size <- case filterSizey attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of +-- [] -> return OccurAttr_None +-- [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) +-- [DANameValue "maxOccur" a] -> return (OccurAttr_MaxOccur a) +-- [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- return (MSetAttr size occur) + +-- parseFunctionAttr :: Parser (FunctionAttr Expression) +-- parseFunctionAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "function" attrs +-- [ "size", "minSize", "maxSize" +-- , "injective", "surjective", "bijective" +-- , "total" +-- ] +-- size <- case filterSizey attrs of +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- [] -> return SizeAttr_None +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- let partiality = if DAName "total" `elem` attrs +-- then PartialityAttr_Total +-- else PartialityAttr_Partial +-- jectivity <- case filterJectivity attrs of +-- [] -> return JectivityAttr_None +-- [DAName "bijective" ] -> return JectivityAttr_Bijective +-- [DAName "injective" ] -> return JectivityAttr_Injective +-- [DAName "surjective"] -> return JectivityAttr_Surjective +-- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- return (FunctionAttr size partiality jectivity) + +-- parseSequenceAttr :: Parser (SequenceAttr Expression) +-- parseSequenceAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "sequence" attrs +-- [ "size", "minSize", "maxSize" +-- , "injective", "surjective", "bijective" +-- ] +-- size <- case filterSizey attrs of +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- [] -> return SizeAttr_None +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- jectivity <- case filterJectivity attrs of +-- [] -> return JectivityAttr_None +-- [DAName "bijective" ] -> return JectivityAttr_Bijective +-- [DAName "injective" ] -> return JectivityAttr_Injective +-- [DAName "surjective"] -> return JectivityAttr_Surjective +-- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- return (SequenceAttr size jectivity) + +-- parseRelationAttr :: Parser (RelationAttr Expression) +-- parseRelationAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "relation" attrs +-- [ "size", "minSize", "maxSize" +-- , "reflexive", "irreflexive", "coreflexive" +-- , "symmetric", "antiSymmetric", "aSymmetric" +-- , "transitive", "total", "leftTotal", "rightTotal", "connex", "Euclidean" +-- , "serial", "equivalence", "weakOrder", "preOrder", "partialOrder", "strictPartialOrder", "linearOrder" +-- ] +-- size <- case filterSizey attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- let readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) +-- readBinRel' a = do +-- setPosition pos +-- fail $ "Not a binary relation attribute:" <+> pretty a +-- binRels <- mapM readBinRel' (filterBinRel attrs) +-- return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) + +-- parsePartitionAttr :: Parser (PartitionAttr Expression) +-- parsePartitionAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "partition" attrs +-- [ "size", "minSize", "maxSize" +-- , "regular" +-- , "numParts", "minNumParts", "maxNumParts" +-- , "partSize", "minPartSize", "maxPartSize" +-- ] +-- unless (null $ filterAttrName ["complete"] attrs) $ do +-- setPosition pos +-- fail $ vcat [ "Partitions do not support the 'complete' attribute." +-- , "They are complete by default." +-- ] +-- unless (null $ filterSizey attrs) $ do +-- setPosition pos +-- fail $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) +-- , "This is because partitions are complete by default." +-- ] +-- partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "numParts" a] -> return (SizeAttr_Size a) +-- [DANameValue "minNumParts" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxNumParts" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "partSize" a] -> return (SizeAttr_Size a) +-- [DANameValue "minPartSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxPartSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- let isRegular = DAName "regular" `elem` attrs +-- return PartitionAttr {..} + + +-- checkExtraAttributes :: SourcePos -> Doc -> [DomainAttribute a] -> [Name] -> Parser () +-- checkExtraAttributes pos ty attrs supported = do +-- let extras = mapMaybe f attrs +-- unless (null extras) $ do +-- setPosition pos +-- fail $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras +-- , "Only these are supported:" <+> prettyList id "," supported +-- ] +-- where +-- f (DANameValue nm _) | nm `notElem` supported = Just nm +-- f (DAName nm ) | nm `notElem` supported = Just nm +-- f _ = Nothing + +-- filterAttrName :: Ord a => [Name] -> [DomainAttribute a] -> [DomainAttribute a] +-- filterAttrName keep = sort . filter f +-- where +-- f (DANameValue nm _) | nm `elem` keep = True +-- f (DAName nm ) | nm `elem` keep = True +-- f _ = False + +-- filterSizey :: Ord a => [DomainAttribute a] -> [DomainAttribute a] +-- filterSizey = filterAttrName ["size", "minSize", "maxSize"] + +-- filterJectivity :: Ord a => [DomainAttribute a] -> [DomainAttribute a] +-- filterJectivity = filterAttrName ["injective", "surjective", "bijective"] + +-- filterBinRel :: Ord a => [DomainAttribute a] -> [DomainAttribute a] +-- filterBinRel = filterAttrName (map (Name . stringToText) binRelNames) + +-- parseMetaVariable :: Parser String +-- parseMetaVariable = do +-- let isMeta LMetaVar{} = True +-- isMeta _ = False +-- LMetaVar iden <- satisfyT isMeta +-- return (T.unpack iden) + +-- metaVarInE :: String -> Expression +-- metaVarInE = ExpressionMetaVar parseExpr :: Parser Expression -parseExpr = - let - mergeOp op = mkBinOp (lexemeText op) - - operatorsGrouped = operators - |> sortBy (\ (_,a) (_,b) -> compare a b ) - |> groupBy (\ (_,a) (_,b) -> a == b ) - |> reverse - - parseUnaryNegate = do - lexeme L_Minus - return $ \ x -> mkOp "negate" [x] - - parseUnaryNot = do - lexeme L_ExclamationMark - return $ \ x -> mkOp "not" [x] - - in - makeExprParser parseAtomicExpr - [ [ case descr of - BinaryOp op FLeft -> InfixL $ do lexeme op - return $ mergeOp op - BinaryOp op FNone -> InfixN $ do lexeme op - return $ mergeOp op - BinaryOp op FRight -> InfixR $ do lexeme op - return $ mergeOp op - UnaryPrefix L_Minus -> Prefix $ foldr1 (.) <$> some parseUnaryNegate - UnaryPrefix L_ExclamationMark -> Prefix $ foldr1 (.) <$> some parseUnaryNot - UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) - | (descr, _) <- operatorsInGroup - ] - | operatorsInGroup <- operatorsGrouped - ] "expression" - -parseAtomicExpr :: Parser Expression -parseAtomicExpr = do - let - prefixes = do - fs <- some $ msum parsePrefixes - return $ foldr1 (.) fs - postfixes = do - fs <- some $ msum parsePostfixes - return $ foldr1 (.) (reverse fs) - withPrefix x = try x <|> do f <- prefixes; i <- x; return $ f i - withPostfix x = do i <- x; mf <- optional postfixes; return $ case mf of Nothing -> i - Just f -> f i - withPrefix (withPostfix parseAtomicExprNoPrePost) "expression" - - -parseAtomicExprNoPrePost :: Parser Expression -parseAtomicExprNoPrePost = msum $ map try $ concat - [ [parseQuantifiedExpr] - , parseOthers - , [metaVarInE <$> parseMetaVariable] - , [parseAAC] - , [parseReference] - , [parseLiteral] - , [parseDomainAsExpr] - , [parseWithLocals] - , [parseComprehension] - , [parens parseExpr] - ] - -parseComprehension :: Parser Expression -parseComprehension = brackets $ do - x <- parseExpr - lexeme L_Bar - gens <- commaSeparated (letting <|> try generator <|> condition) - return (Comprehension x (concat gens)) - where - generator :: Parser [GeneratorOrCondition] - generator = do - pats <- commaSeparated parseAbstractPattern - msum - [ do - lexeme L_Colon - domain <- parseDomain - return [Generator (GenDomainNoRepr pat domain) | pat <- pats] - , do - lexeme L_LeftArrow - expr <- parseExpr - return [Generator (GenInExpr pat expr) | pat <- pats] - ] - condition :: Parser [GeneratorOrCondition] - condition = return . Condition <$> parseExpr - letting :: Parser [GeneratorOrCondition] - letting = do - lexeme L_letting - pat <- parseAbstractPattern - lexeme L_be - x <- parseExpr - return [ComprehensionLetting pat x] - -parseDomainAsExpr :: Parser Expression -parseDomainAsExpr = Domain <$> betweenTicks parseDomain - -parsePrefixes :: [Parser (Expression -> Expression)] -parsePrefixes = [parseUnaryMinus, parseUnaryNot] - where - parseUnaryMinus = do - lexeme L_Minus - return $ \ x -> mkOp "negate" [x] - parseUnaryNot = do - lexeme L_ExclamationMark - return $ \ x -> mkOp "not" [x] - -parsePostfixes :: [Parser (Expression -> Expression)] -parsePostfixes = [parseIndexed,parseFactorial,parseFuncApply] - where - parseIndexed :: Parser (Expression -> Expression) - parseIndexed = do - let - pIndexer = try pRList <|> (do i <- parseExpr ; return $ \ m -> Op (MkOpIndexing (OpIndexing m i))) - pRList = do - i <- optional parseExpr - dotdot - j <- optional parseExpr - return $ \ m -> Op (MkOpSlicing (OpSlicing m i j)) - is <- brackets $ commaSeparated pIndexer - return $ \ x -> foldl (\ m f -> f m ) x is - parseFactorial :: Parser (Expression -> Expression) - parseFactorial = do - lexeme L_ExclamationMark - return $ \ x -> mkOp "factorial" [x] - parseFuncApply :: Parser (Expression -> Expression) - parseFuncApply = parens $ do - xs <- commaSeparated parseExpr - let underscore = Reference "_" Nothing - let ys = [ if underscore == x then Nothing else Just x | x <- xs ] - return $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys - -parseAAC :: Parser Expression -parseAAC = do - let - isAttr (LIdentifier txt) | Just _ <- Name txt `lookup` allSupportedAttributes = True - isAttr _ = False - LIdentifier attr <- satisfyT isAttr - let n = fromMaybe (bug "parseAAC") (lookup (Name attr) allSupportedAttributes) - args <- parens $ countSep (n+1) parseExpr comma - case (n, args) of - (0, [e ]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e - (fromString (textToString attr)) Nothing - (1, [e,v]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e - (fromString (textToString attr)) (Just v) - _ -> failDoc "parseAAC" - -parseOthers :: [Parser Expression] -parseOthers = [ parseFunctional l - | l <- functionals - ] ++ [parseTyped, parseTwoBars] - where - - parseTwoBars :: Parser Expression - parseTwoBars = do - x <- between (lexeme L_Bar) (lexeme L_Bar) parseExpr - return (mkOp "twoBars" [x]) - - parseTyped :: Parser Expression - parseTyped = parens $ do - x <- parseExpr - lexeme L_Colon - d <- betweenTicks parseDomain - ty <- let ?typeCheckerMode = StronglyTyped in typeOfDomain d - return (Typed x ty) - - parseFunctional :: Lexeme -> Parser Expression - parseFunctional l = do - lexeme l - xs <- parens $ commaSeparated parseExpr - return $ case (l,xs) of - (L_image, [y,z]) -> Op $ MkOpImage $ OpImage y z - _ -> mkOp (fromString $ show $ lexemeFace l) xs - -parseWithLocals :: Parser Expression -parseWithLocals = braces $ do - i <- parseExpr - lexeme L_At - js <- parseTopLevels - let decls = - [ Declaration (FindOrGiven LocalFind nm dom) - | Declaration (FindOrGiven Find nm dom) <- js ] - let cons = concat - [ xs - | SuchThat xs <- js - ] - let locals = if null decls - then DefinednessConstraints cons - else AuxiliaryVars (decls ++ [SuchThat cons]) - return (WithLocals i locals) - -parseNameOrMeta :: Parser Name -parseNameOrMeta = parseName <|> NameMetaVar <$> parseMetaVariable - -parseName :: Parser Name -parseName = Name <$> identifierText - -parseReference :: Parser Expression -parseReference = Reference <$> parseName <*> pure Nothing - -parseQuantifiedExpr :: Parser Expression -parseQuantifiedExpr = do - qnName <- parseQuantifiedName - qnPats <- commaSeparated parseAbstractPattern - qnOver <- msum [ Left <$> (colon *> parseDomain) - , Right <$> do - lexeme L_in - over <- parseExpr - return (\ pat -> GenInExpr pat over ) - , Right <$> do - lexeme L_subsetEq - over <- parseExpr - return (\ pat -> GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet over) ) - ] - qnGuard <- optional (comma *> parseExpr) - qnBody <- dot *> parseExpr "body of a quantified expression" - - let qnMap pat = case qnOver of - Left dom -> GenDomainNoRepr pat dom - Right op -> op pat - - return $ mkOp (translateQnName qnName) - $ return - $ Comprehension qnBody - $ [ Generator (qnMap pat) | pat <- qnPats ] ++ - [ Condition g | Just g <- [qnGuard] ] - - -parseQuantifiedName :: Parser Text -parseQuantifiedName = do - let - isIdentifier (LIdentifier q) = q `elem` ["forAll", "exists", "sum", "product"] - isIdentifier _ = False - LIdentifier n <- satisfyT isIdentifier - return n - - -parseAbstractPattern :: Parser AbstractPattern -parseAbstractPattern = label "pattern" $ msum - [ AbstractPatternMetaVar <$> parseMetaVariable - , Single <$> parseName - , do - void $ optional $ lexeme L_tuple - xs <- parens $ commaSeparated parseAbstractPattern - return (AbsPatTuple xs) - , do - xs <- brackets $ commaSeparated parseAbstractPattern - return (AbsPatMatrix xs) - , do - xs <- braces $ commaSeparated parseAbstractPattern - return (AbsPatSet xs) - ] - -parseLiteral :: Parser Expression -parseLiteral = label "value" $ msum - [ Constant <$> pBool - , Constant <$> pInt - , mkAbstractLiteral <$> pMatrix - , mkAbstractLiteral <$> pTupleWith - , mkAbstractLiteral <$> pTupleWithout - , mkAbstractLiteral <$> pRecord - , AbstractLiteral <$> pVariant - , mkAbstractLiteral <$> pSet - , mkAbstractLiteral <$> pMSet - , mkAbstractLiteral <$> pFunction - , mkAbstractLiteral <$> pSequence - , mkAbstractLiteral <$> pRelation - , mkAbstractLiteral <$> pPartition - ] - where - - -- convert x to a constant if possible - -- might save us from evaluating it again and again later - mkAbstractLiteral x = - case e2c (AbstractLiteral x) of - Nothing -> AbstractLiteral x - Just c -> Constant c - - pBool = do - x <- False <$ lexeme L_false - <|> - True <$ lexeme L_true - return (ConstantBool x) - - pInt = ConstantInt TagInt . fromInteger <$> integer - - pMatrix = do - lexeme L_OpenBracket - xs <- commaSeparated0 parseExpr - msum - [ do - let r = mkDomainIntB 1 (fromInt (genericLength xs)) - lexeme L_CloseBracket - return (AbsLitMatrix r xs) - , do - lexeme L_SemiColon - r <- parseDomain - lexeme L_CloseBracket - return (AbsLitMatrix r xs) - ] - - pTupleWith = do - lexeme L_tuple - xs <- parens $ commaSeparated0 parseExpr - return (AbsLitTuple xs) - - pTupleWithout = do - xs <- parens $ countSepAtLeast 2 parseExpr comma - return (AbsLitTuple xs) - - pRecord = do - lexeme L_record - let one = do n <- parseName - lexeme L_Eq - x <- parseExpr - return (n,x) - xs <- braces $ commaSeparated0 one - return $ AbsLitRecord xs - - pVariant = do - lexeme L_variant - let one = do n <- parseName - lexeme L_Eq - x <- parseExpr - return (n,x) - (n,x) <- braces one - return $ AbsLitVariant Nothing n x - - pSet = do - xs <- braces (commaSeparated0 parseExpr) - return (AbsLitSet xs) - - pMSet = do - lexeme L_mset - xs <- parens (commaSeparated0 parseExpr) - return (AbsLitMSet xs) - - pFunction = do - lexeme L_function - xs <- parens (commaSeparated0 inner) - return (AbsLitFunction xs) - where - inner = arrowedPair parseExpr - - pSequence = do - lexeme L_sequence - xs <- parens (commaSeparated0 parseExpr) - return (AbsLitSequence xs) - - pRelation = do - lexeme L_relation - xs <- parens (commaSeparated0 (pTupleWith <|> pTupleWithout)) - xsFiltered <- forM xs $ \case - -- Constant (ConstantAbstract (AbsLitTuple is)) -> ... - AbsLitTuple is -> return is - x -> failDoc ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) - return (AbsLitRelation xsFiltered) - - pPartition = do - lexeme L_partition - xs <- parens (commaSeparated0 inner) - return (AbsLitPartition xs) - where - inner = braces (commaSeparated0 parseExpr) +parseExpr = do return $ Constant $ ConstantBool True +-- let +-- mergeOp op = mkBinOp (lexemeText op) + +-- operatorsGrouped = operators +-- |> sortBy (\ (_,a) (_,b) -> compare a b ) +-- |> groupBy (\ (_,a) (_,b) -> a == b ) +-- |> reverse + +-- parseUnaryNegate = do +-- lexeme L_Minus +-- return $ \ x -> mkOp "negate" [x] + +-- parseUnaryNot = do +-- lexeme L_ExclamationMark +-- return $ \ x -> mkOp "not" [x] + +-- in +-- makeExprParser parseAtomicExpr +-- [ [ case descr of +-- BinaryOp op FLeft -> InfixL $ do lexeme op +-- return $ mergeOp op +-- BinaryOp op FNone -> InfixN $ do lexeme op +-- return $ mergeOp op +-- BinaryOp op FRight -> InfixR $ do lexeme op +-- return $ mergeOp op +-- UnaryPrefix L_Minus -> Prefix $ foldr1 (.) <$> some parseUnaryNegate +-- UnaryPrefix L_ExclamationMark -> Prefix $ foldr1 (.) <$> some parseUnaryNot +-- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) +-- | (descr, _) <- operatorsInGroup +-- ] +-- | operatorsInGroup <- operatorsGrouped +-- ] "expression" + +-- parseAtomicExpr :: Parser Expression +-- parseAtomicExpr = do +-- let +-- prefixes = do +-- fs <- some $ msum parsePrefixes +-- return $ foldr1 (.) fs +-- postfixes = do +-- fs <- some $ msum parsePostfixes +-- return $ foldr1 (.) (reverse fs) +-- withPrefix x = try x <|> do f <- prefixes; i <- x; return $ f i +-- withPostfix x = do i <- x; mf <- optional postfixes; return $ case mf of Nothing -> i +-- Just f -> f i +-- withPrefix (withPostfix parseAtomicExprNoPrePost) "expression" + + +-- parseAtomicExprNoPrePost :: Parser Expression +-- parseAtomicExprNoPrePost = msum $ map try $ concat +-- [ [parseQuantifiedExpr] +-- , parseOthers +-- , [metaVarInE <$> parseMetaVariable] +-- , [parseAAC] +-- , [parseReference] +-- , [parseLiteral] +-- , [parseDomainAsExpr] +-- , [parseWithLocals] +-- , [parseComprehension] +-- , [parens parseExpr] +-- ] + +-- parseComprehension :: Parser Expression +-- parseComprehension = brackets $ do +-- x <- parseExpr +-- lexeme L_Bar +-- gens <- commaSeparated (letting <|> try generator <|> condition) +-- return (Comprehension x (concat gens)) +-- where +-- generator :: Parser [GeneratorOrCondition] +-- generator = do +-- pats <- commaSeparated parseAbstractPattern +-- msum +-- [ do +-- lexeme L_Colon +-- domain <- parseDomain +-- return [Generator (GenDomainNoRepr pat domain) | pat <- pats] +-- , do +-- lexeme L_LeftArrow +-- expr <- parseExpr +-- return [Generator (GenInExpr pat expr) | pat <- pats] +-- ] +-- condition :: Parser [GeneratorOrCondition] +-- condition = return . Condition <$> parseExpr +-- letting :: Parser [GeneratorOrCondition] +-- letting = do +-- lexeme L_letting +-- pat <- parseAbstractPattern +-- lexeme L_be +-- x <- parseExpr +-- return [ComprehensionLetting pat x] + +-- parseDomainAsExpr :: Parser Expression +-- parseDomainAsExpr = Domain <$> betweenTicks parseDomain + +-- parsePrefixes :: [Parser (Expression -> Expression)] +-- parsePrefixes = [parseUnaryMinus, parseUnaryNot] +-- where +-- parseUnaryMinus = do +-- lexeme L_Minus +-- return $ \ x -> mkOp "negate" [x] +-- parseUnaryNot = do +-- lexeme L_ExclamationMark +-- return $ \ x -> mkOp "not" [x] + +-- parsePostfixes :: [Parser (Expression -> Expression)] +-- parsePostfixes = [parseIndexed,parseFactorial,parseFuncApply] +-- where +-- parseIndexed :: Parser (Expression -> Expression) +-- parseIndexed = do +-- let +-- pIndexer = try pRList <|> (do i <- parseExpr ; return $ \ m -> Op (MkOpIndexing (OpIndexing m i))) +-- pRList = do +-- i <- optional parseExpr +-- dotdot +-- j <- optional parseExpr +-- return $ \ m -> Op (MkOpSlicing (OpSlicing m i j)) +-- is <- brackets $ commaSeparated pIndexer +-- return $ \ x -> foldl (\ m f -> f m ) x is +-- parseFactorial :: Parser (Expression -> Expression) +-- parseFactorial = do +-- lexeme L_ExclamationMark +-- return $ \ x -> mkOp "factorial" [x] +-- parseFuncApply :: Parser (Expression -> Expression) +-- parseFuncApply = parens $ do +-- xs <- commaSeparated parseExpr +-- let underscore = Reference "_" Nothing +-- let ys = [ if underscore == x then Nothing else Just x | x <- xs ] +-- return $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys + +-- parseAAC :: Parser Expression +-- parseAAC = do +-- let +-- isAttr (LIdentifier txt) | Just _ <- Name txt `lookup` allSupportedAttributes = True +-- isAttr _ = False +-- LIdentifier attr <- satisfyT isAttr +-- let n = fromMaybe (bug "parseAAC") (lookup (Name attr) allSupportedAttributes) +-- args <- parens $ countSep (n+1) parseExpr comma +-- case (n, args) of +-- (0, [e ]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e +-- (fromString (textToString attr)) Nothing +-- (1, [e,v]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e +-- (fromString (textToString attr)) (Just v) +-- _ -> fail "parseAAC" + +-- parseOthers :: [Parser Expression] +-- parseOthers = [ parseFunctional l +-- | l <- functionals +-- ] ++ [parseTyped, parseTwoBars] +-- where + +-- parseTwoBars :: Parser Expression +-- parseTwoBars = do +-- x <- between (lexeme L_Bar) (lexeme L_Bar) parseExpr +-- return (mkOp "twoBars" [x]) + +-- parseTyped :: Parser Expression +-- parseTyped = parens $ do +-- x <- parseExpr +-- lexeme L_Colon +-- d <- betweenTicks parseDomain +-- ty <- let ?typeCheckerMode = StronglyTyped in typeOfDomain d +-- return (Typed x ty) + +-- parseFunctional :: Lexeme -> Parser Expression +-- parseFunctional l = do +-- lexeme l +-- xs <- parens $ commaSeparated parseExpr +-- return $ case (l,xs) of +-- (L_image, [y,z]) -> Op $ MkOpImage $ OpImage y z +-- _ -> mkOp (fromString $ show $ lexemeFace l) xs + +-- parseWithLocals :: Parser Expression +-- parseWithLocals = braces $ do +-- i <- parseExpr +-- lexeme L_At +-- js <- parseTopLevels +-- let decls = +-- [ Declaration (FindOrGiven LocalFind nm dom) +-- | Declaration (FindOrGiven Find nm dom) <- js ] +-- let cons = concat +-- [ xs +-- | SuchThat xs <- js +-- ] +-- let locals = if null decls +-- then DefinednessConstraints cons +-- else AuxiliaryVars (decls ++ [SuchThat cons]) +-- return (WithLocals i locals) + +-- parseNameOrMeta :: Parser Name +-- parseNameOrMeta = parseName <|> NameMetaVar <$> parseMetaVariable + +-- parseName :: Parser Name +-- parseName = Name <$> identifierText + +-- parseReference :: Parser Expression +-- parseReference = Reference <$> parseName <*> pure Nothing + +-- parseQuantifiedExpr :: Parser Expression +-- parseQuantifiedExpr = do +-- qnName <- parseQuantifiedName +-- qnPats <- commaSeparated parseAbstractPattern +-- qnOver <- msum [ Left <$> (colon *> parseDomain) +-- , Right <$> do +-- lexeme L_in +-- over <- parseExpr +-- return (\ pat -> GenInExpr pat over ) +-- , Right <$> do +-- lexeme L_subsetEq +-- over <- parseExpr +-- return (\ pat -> GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet over) ) +-- ] +-- qnGuard <- optional (comma *> parseExpr) +-- qnBody <- dot *> parseExpr "body of a quantified expression" + +-- let qnMap pat = case qnOver of +-- Left dom -> GenDomainNoRepr pat dom +-- Right op -> op pat + +-- return $ mkOp (translateQnName qnName) +-- $ return +-- $ Comprehension qnBody +-- $ [ Generator (qnMap pat) | pat <- qnPats ] ++ +-- [ Condition g | Just g <- [qnGuard] ] + + +-- parseQuantifiedName :: Parser Text +-- parseQuantifiedName = do +-- let +-- isIdentifier (LIdentifier q) = q `elem` ["forAll", "exists", "sum", "product"] +-- isIdentifier _ = False +-- LIdentifier n <- satisfyT isIdentifier +-- return n + + +-- parseAbstractPattern :: Parser AbstractPattern +-- parseAbstractPattern = label "pattern" $ msum +-- [ AbstractPatternMetaVar <$> parseMetaVariable +-- , Single <$> parseName +-- , do +-- void $ optional $ lexeme L_tuple +-- xs <- parens $ commaSeparated parseAbstractPattern +-- return (AbsPatTuple xs) +-- , do +-- xs <- brackets $ commaSeparated parseAbstractPattern +-- return (AbsPatMatrix xs) +-- , do +-- xs <- braces $ commaSeparated parseAbstractPattern +-- return (AbsPatSet xs) +-- ] + +-- parseLiteral :: Parser Expression +-- parseLiteral = label "value" $ msum +-- [ Constant <$> pBool +-- , Constant <$> pInt +-- , mkAbstractLiteral <$> pMatrix +-- , mkAbstractLiteral <$> pTupleWith +-- , mkAbstractLiteral <$> pTupleWithout +-- , mkAbstractLiteral <$> pRecord +-- , AbstractLiteral <$> pVariant +-- , mkAbstractLiteral <$> pSet +-- , mkAbstractLiteral <$> pMSet +-- , mkAbstractLiteral <$> pFunction +-- , mkAbstractLiteral <$> pSequence +-- , mkAbstractLiteral <$> pRelation +-- , mkAbstractLiteral <$> pPartition +-- ] +-- where + +-- -- convert x to a constant if possible +-- -- might save us from evaluating it again and again later +-- mkAbstractLiteral x = +-- case e2c (AbstractLiteral x) of +-- Nothing -> AbstractLiteral x +-- Just c -> Constant c + +-- pBool = do +-- x <- False <$ lexeme L_false +-- <|> +-- True <$ lexeme L_true +-- return (ConstantBool x) + +-- pInt = ConstantInt TagInt . fromInteger <$> integer + +-- pMatrix = do +-- lexeme L_OpenBracket +-- xs <- commaSeparated0 parseExpr +-- msum +-- [ do +-- let r = mkDomainIntB 1 (fromInt (genericLength xs)) +-- lexeme L_CloseBracket +-- return (AbsLitMatrix r xs) +-- , do +-- lexeme L_SemiColon +-- r <- parseDomain +-- lexeme L_CloseBracket +-- return (AbsLitMatrix r xs) +-- ] + +-- pTupleWith = do +-- lexeme L_tuple +-- xs <- parens $ commaSeparated0 parseExpr +-- return (AbsLitTuple xs) + +-- pTupleWithout = do +-- xs <- parens $ countSepAtLeast 2 parseExpr comma +-- return (AbsLitTuple xs) + +-- pRecord = do +-- lexeme L_record +-- let one = do n <- parseName +-- lexeme L_Eq +-- x <- parseExpr +-- return (n,x) +-- xs <- braces $ commaSeparated0 one +-- return $ AbsLitRecord xs + +-- pVariant = do +-- lexeme L_variant +-- let one = do n <- parseName +-- lexeme L_Eq +-- x <- parseExpr +-- return (n,x) +-- (n,x) <- braces one +-- return $ AbsLitVariant Nothing n x + +-- pSet = do +-- xs <- braces (commaSeparated0 parseExpr) +-- return (AbsLitSet xs) + +-- pMSet = do +-- lexeme L_mset +-- xs <- parens (commaSeparated0 parseExpr) +-- return (AbsLitMSet xs) + +-- pFunction = do +-- lexeme L_function +-- xs <- parens (commaSeparated0 inner) +-- return (AbsLitFunction xs) +-- where +-- inner = arrowedPair parseExpr + +-- pSequence = do +-- lexeme L_sequence +-- xs <- parens (commaSeparated0 parseExpr) +-- return (AbsLitSequence xs) + +-- pRelation = do +-- lexeme L_relation +-- xs <- parens (commaSeparated0 (pTupleWith <|> pTupleWithout)) +-- xsFiltered <- forM xs $ \case +-- -- Constant (ConstantAbstract (AbsLitTuple is)) -> ... +-- AbsLitTuple is -> return is +-- x -> fail ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) +-- return (AbsLitRelation xsFiltered) + +-- pPartition = do +-- lexeme L_partition +-- xs <- parens (commaSeparated0 inner) +-- return (AbsLitPartition xs) +-- where +-- inner = braces (commaSeparated0 parseExpr) data ParserState = ParserState { enumDomains :: [Name] } -type Parser a = StateT ParserState (ParsecT [LexemePos] Identity) a +type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a runLexerAndParser :: MonadFailDoc m => Parser a -> String -> T.Text -> m a -runLexerAndParser p file inp = do - ls <- runLexer inp - case runParser p file ls of - Left (msg, line, col) -> - let theLine = T.lines inp |> drop (line-1) |> take 1 - in failDoc $ vcat - [ msg - , vcat (map pretty theLine) - , pretty $ replicate (col-1) ' ' ++ "^" - ] - Right x -> return x - -runParser :: Parser a -> String -> [LexemePos] -> Either (Doc, Int, Int) a -runParser p file ls = either modifyErr Right (P.runParser (evalStateT p (ParserState [])) file ls) - where - modifyErr :: ParseError -> Either (Doc, Int, Int) a - modifyErr e = Left $ - let pos = errorPos e - in ( if file `isPrefixOf` show e - then pretty (show e) - else pretty file <> ":" <> pretty (show e) - , sourceLine pos - , sourceColumn pos - ) - -identifierText :: Parser T.Text -identifierText = do - LIdentifier i <- satisfyT isIdentifier - return i - where - isIdentifier (LIdentifier "forAll") = False - isIdentifier (LIdentifier "exists") = False - isIdentifier LIdentifier{} = True - isIdentifier _ = False - -satisfyT :: (Lexeme -> Bool) -> Parser Lexeme -satisfyT predicate = token nextPos testTok - where - testTok :: LexemePos -> Either [ErrorItem] Lexeme - testTok (LexemePos tok _ _) = if predicate tok then Right tok else Left [Unexpected (showToken tok)] - nextPos :: Int -> SourcePos -> LexemePos -> SourcePos - nextPos _ _ (LexemePos _ _ pos) = pos - -satisfyL :: forall a . (Lexeme -> Maybe (Parser a)) -> Parser a -satisfyL predicate = do - p <- token nextPos testTok - p - where - testTok :: LexemePos -> Either [ErrorItem] (Parser a) - testTok (LexemePos tok _ _) = - -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ - case predicate tok of - Nothing -> Left [Unexpected (showToken tok)] - Just res -> Right res - - nextPos :: Int -> SourcePos -> LexemePos -> SourcePos - nextPos _ _ (LexemePos _ _ pos) = pos - -integer :: Parser Integer -integer = do - LIntLiteral i <- satisfyT isInt - return i - where isInt LIntLiteral {} = True - isInt _ = False - --- parse a comma separated list of things. can be 0 things. -commaSeparated0 :: Parser a -> Parser [a] -commaSeparated0 p = sepEndBy p comma - --- parse a comma separated list of things. has to be at least 1 thing. -commaSeparated :: Parser a -> Parser [a] -commaSeparated p = sepEndBy1 p comma - -comma :: Parser () -comma = lexeme L_Comma "comma" - -dot :: Parser () -dot = lexeme L_Dot "dot" - -dotdot :: Parser () -dotdot = (dot >> dot) ".." - -colon :: Parser () -colon = lexeme L_Colon "colon" - - --- parses a specified number of elements separated by the given separator -countSep :: Int -> Parser a -> Parser sep -> Parser [a] -countSep 1 p _ = (:[]) <$> p -countSep i p separator | i > 1 = (:) <$> (p <* separator) <*> countSep (i-1) p separator -countSep _ _ _ = return [] - --- parses at least a given number of elements separated by the given separator -countSepAtLeast :: Int -> Parser a -> Parser sep -> Parser [a] -countSepAtLeast i p separator = (++) <$> countSep i p separator <*> many (separator *> p) - -betweenTicks :: Parser a -> Parser a -betweenTicks = between (lexeme L_BackTick) (lexeme L_BackTick) - -parens :: Parser a -> Parser a -parens = between (lexeme L_OpenParen) (lexeme L_CloseParen) - -braces :: Parser a -> Parser a -braces = between (lexeme L_OpenCurly) (lexeme L_CloseCurly) - -brackets :: Parser a -> Parser a -brackets = between (lexeme L_OpenBracket) (lexeme L_CloseBracket) - -lexeme :: Lexeme -> Parser () -lexeme l = void (satisfyT (l==)) show (lexemeFace l) - -arrowedPair :: Parser a -> Parser (a,a) -arrowedPair p = do - i <- p - lexeme L_LongArrow - j <- p - return (i,j) +runLexerAndParser p file inp = do fail "Nothing" +-- ls <- runLexer inp +-- case runParser p file ls of +-- Left (msg, line, col) -> +-- let theLine = T.lines inp |> drop (line-1) |> take 1 +-- in fail $ vcat +-- [ msg +-- , vcat (map pretty theLine) +-- , pretty $ replicate (col-1) ' ' ++ "^" +-- ] +-- Right x -> return x + +-- runParser :: Parser a -> String -> [LexemePos] -> Either (Doc, Int, Int) a +-- runParser p file ls = either modifyErr Right (P.runParser (evalStateT p (ParserState [])) file ls) +-- where +-- modifyErr :: ParseError Pos Int -> Either (Doc, Int, Int) a +-- modifyErr e = Left $ +-- let pos = errorPos e +-- in ( if file `isPrefixOf` show e +-- then pretty (show e) +-- else pretty file <> ":" <> pretty (show e) +-- , sourceLine pos +-- , sourceColumn pos +-- ) + +-- identifierText :: Parser T.Text +-- identifierText = do +-- LIdentifier i <- satisfyT isIdentifier +-- return i +-- where +-- isIdentifier (LIdentifier "forAll") = False +-- isIdentifier (LIdentifier "exists") = False +-- isIdentifier LIdentifier{} = True +-- isIdentifier _ = False + +-- satisfyT :: (Lexeme -> Bool) -> Parser Lexeme +-- satisfyT predicate = token nextPos testTok +-- where +-- testTok :: LexemePos -> Either [ErrorItem String] Lexeme +-- testTok (LexemePos tok _ _) = if predicate tok then Right tok else Left [Unexpected (showToken tok)] +-- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos +-- nextPos _ _ (LexemePos _ _ pos) = pos + +-- satisfyL :: forall a . (Lexeme -> Maybe (Parser a)) -> Parser a +-- satisfyL predicate = do +-- p <- token nextPos testTok +-- p +-- where +-- testTok :: LexemePos -> Either [ErrorItem String] (Parser a) +-- testTok (LexemePos tok _ _) = +-- -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ +-- case predicate tok of +-- Nothing -> Left [Unexpected (showToken tok)] +-- Just res -> Right res + +-- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos +-- nextPos _ _ (LexemePos _ _ pos) = pos + +-- integer :: Parser Integer +-- integer = do +-- LIntLiteral i <- satisfyT isInt +-- return i +-- where isInt LIntLiteral {} = True +-- isInt _ = False + +-- -- parse a comma separated list of things. can be 0 things. +-- commaSeparated0 :: Parser a -> Parser [a] +-- commaSeparated0 p = sepEndBy p comma + +-- -- parse a comma separated list of things. has to be at least 1 thing. +-- commaSeparated :: Parser a -> Parser [a] +-- commaSeparated p = sepEndBy1 p comma + +-- comma :: Parser () +-- comma = lexeme L_Comma "comma" + +-- dot :: Parser () +-- dot = lexeme L_Dot "dot" + +-- dotdot :: Parser () +-- dotdot = (dot >> dot) ".." + +-- colon :: Parser () +-- colon = lexeme L_Colon "colon" + + +-- -- parses a specified number of elements separated by the given separator +-- countSep :: Int -> Parser a -> Parser sep -> Parser [a] +-- countSep 1 p _ = (:[]) <$> p +-- countSep i p separator | i > 1 = (:) <$> (p <* separator) <*> countSep (i-1) p separator +-- countSep _ _ _ = return [] + +-- -- parses at least a given number of elements separated by the given separator +-- countSepAtLeast :: Int -> Parser a -> Parser sep -> Parser [a] +-- countSepAtLeast i p separator = (++) <$> countSep i p separator <*> many (separator *> p) + +-- betweenTicks :: Parser a -> Parser a +-- betweenTicks = between (lexeme L_BackTick) (lexeme L_BackTick) + +-- parens :: Parser a -> Parser a +-- parens = between (lexeme L_OpenParen) (lexeme L_CloseParen) + +-- braces :: Parser a -> Parser a +-- braces = between (lexeme L_OpenCurly) (lexeme L_CloseCurly) + +-- brackets :: Parser a -> Parser a +-- brackets = between (lexeme L_OpenBracket) (lexeme L_CloseBracket) + +-- lexeme :: Lexeme -> Parser () +-- lexeme l = void (satisfyT (l==)) show (lexemeFace l) + +-- arrowedPair :: Parser a -> Parser (a,a) +-- arrowedPair p = do +-- i <- p +-- lexeme L_LongArrow +-- j <- p +-- return (i,j) inCompleteFile :: Parser a -> Parser a inCompleteFile parser = do diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index 4af734332c..b06b3e5d0b 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -12,8 +12,8 @@ import Conjure.Language.Lenses as X ( fixTHParsing ) -- reexporting because it i -- megaparsec -import Text.Megaparsec ( setPosition ) -import Text.Megaparsec.Pos ( SourcePos, newPos ) +import Text.Megaparsec ( setOffset , SourcePos) +import qualified Text.Megaparsec as MP -- template-haskell import Language.Haskell.TH ( Q, Loc(..), location, mkName, ExpQ, varE, appE, PatQ, varP, wildP ) @@ -27,12 +27,12 @@ essenceStmts :: QuasiQuoter essenceStmts = QuasiQuoter { quoteExp = \ str -> do l <- locationTH - e <- parseIO (setPosition l *> parseTopLevels) str + e :: [Statement] <- do return [] --parseIO (setOffset 1000000000000000 *> parseTopLevels) str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do l <- locationTH - e <- parseIO (setPosition l *> parseTopLevels) str + e :: [Statement] <- do return [] --parseIO (setOffset 1000000000000000 *> parseTopLevels) str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" @@ -42,12 +42,12 @@ essence :: QuasiQuoter essence = QuasiQuoter { quoteExp = \ str -> do l <- locationTH - e <- parseIO (setPosition l *> parseExpr) str + e <- do return $ Constant $ ConstantBool True --parseIO (setOffset 100000000000 *> parseExpr) str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do l <- locationTH - e <- parseIO (setPosition l *> parseExpr) str + e <- do return $ Constant $ ConstantBool True--parseIO (setOffset 100000000000000 *> parseExpr) str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" @@ -57,12 +57,12 @@ essenceDomain :: QuasiQuoter essenceDomain = QuasiQuoter { quoteExp = \ str -> do l <- locationTH - e <- parseIO (setPosition l *> parseDomain) str + e :: Domain () () <- do return $ DomainBool--parseIO (setOffset 100000000000 *> parseDomain) str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do l <- locationTH - e <- parseIO (setPosition l *> parseDomain) str + e :: Domain () () <- do return $ DomainBool--parseIO (setOffset 1 *> parseDomain) str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" @@ -73,7 +73,7 @@ locationTH = do loc <- location let file = loc_filename loc let (line, col) = loc_start loc - return (newPos file line col) + return (MP.SourcePos file (MP.mkPos line) (MP.mkPos col)) expE :: Expression -> Maybe ExpQ expE (ExpressionMetaVar x) = Just [| $(varE (mkName x)) |] diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs new file mode 100644 index 0000000000..f45517939e --- /dev/null +++ b/src/Conjure/Language/Validator.hs @@ -0,0 +1,8 @@ +module Conjure.Language.Validator where + +import Conjure.Prelude +import Conjure.Language.Definition +import Conjure.Language.AST + +validate :: ProgramTree -> Either Doc Model +validate _ = Left "TODO" From a59121dd33da7e8284a57f7eb88a69035b10fb9f Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 23 Sep 2022 12:58:18 +0100 Subject: [PATCH 052/378] hacky fix to monadfail --- src/Conjure/Representations/Partition/PartitionAsSet.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/Representations/Partition/PartitionAsSet.hs b/src/Conjure/Representations/Partition/PartitionAsSet.hs index 92d116a620..12ac058e06 100644 --- a/src/Conjure/Representations/Partition/PartitionAsSet.hs +++ b/src/Conjure/Representations/Partition/PartitionAsSet.hs @@ -128,7 +128,7 @@ partitionAsSet dispatch reprOptions useLevels = Representation chck downD struct sumOfParts rel = do case domainSizeOf innerDomain of Left _err -> return [] - Right n -> do + Right (n::Expression) -> do (iPat, i) <- quantifiedVar return $ return [essence| &n = sum([ |&i| | &iPat <- &rel ]) |] From 7e6a5c65a6d485e4c41c9cfb03563b7165e03afc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 23 Sep 2022 12:58:35 +0100 Subject: [PATCH 053/378] trying to add monadfail to representation --- src/Conjure/Representations/Internal.hs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Conjure/Representations/Internal.hs b/src/Conjure/Representations/Internal.hs index af602a577c..d6013b15d4 100644 --- a/src/Conjure/Representations/Internal.hs +++ b/src/Conjure/Representations/Internal.hs @@ -1,5 +1,7 @@ {-# LANGUAGE Rank2Types #-} {-# LANGUAGE KindSignatures #-} +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +{-# HLINT ignore "Use camelCase" #-} module Conjure.Representations.Internal ( Representation(..) @@ -39,24 +41,24 @@ data Representation (m :: * -> *) = Representation , rSymmetryOrdering :: TypeOf_SymmetryOrdering m } -type TypeOf_ReprCheck (m :: * -> *) = +type TypeOf_ReprCheck (m :: * -> *) = (MonadFail m) => forall x . (Data x, Pretty x, ExpressionLike x) => (Domain () x -> m [DomainX x]) -- other checkers for inner domains -> Domain () x -- this domain -> m [DomainX x] -- with all repr options -type TypeOf_DownD (m :: * -> *) = - (Name, DomainX Expression) +type TypeOf_DownD (m :: * -> *) = (MonadFail m) => + (Name, DomainX Expression) -> m (Maybe [(Name, DomainX Expression)]) -type TypeOf_SymmetryOrdering (m :: * -> *) = +type TypeOf_SymmetryOrdering (m :: * -> *) = (MonadFail m) => ((Expression -> m [Expression]) -> Expression -> DomainX Expression -> m Expression) -- inner S.O. -> (Expression -> m [Expression]) -- general downX1 -> Expression -- this as an expression -> DomainX Expression -- name and domain -> m Expression -- output, of type [int] -type TypeOf_Structural (m :: * -> *) = +type TypeOf_Structural (m :: * -> *) = (MonadFail m) => (DomainX Expression -> m (Expression -> m [Expression])) -- other structural constraints for inner domains -> (Expression -> m [Expression]) -- general downX1 @@ -65,11 +67,11 @@ type TypeOf_Structural (m :: * -> *) = -> m [Expression] -- structural constraints ) -type TypeOf_DownC (m :: * -> *) = +type TypeOf_DownC (m :: * -> *) = (MonadFail m) => (Name, DomainC, Constant) -- the input name, domain and constant -> m (Maybe [(Name, DomainC, Constant)]) -- the outputs names, domains, and constants -type TypeOf_Up (m :: * -> *) = +type TypeOf_Up (m :: * -> *) = (MonadFail m) => [(Name, Constant)] -> -- all known constants, representing a solution at the low level (Name, DomainC) -> -- the name and domain we are working on m (Name, Constant) -- the output constant, at the high level @@ -90,7 +92,7 @@ type ReprOptionsFunction m r x = rDownToX :: - Monad m => + (Monad m,MonadFail m) => Representation m -> -- for a given representation FindOrGiven -> -- and a declaration: forg Name -> -- : name From 89ede226003878f893cbc513cf78065cae0b623b Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 27 Sep 2022 11:56:33 +0100 Subject: [PATCH 054/378] Work on migration + parsing --- src/Conjure/Language/AST.hs | 145 -- src/Conjure/Language/AST/ASTParser.hs | 150 ++ src/Conjure/Language/AST/Domain.hs | 156 ++ src/Conjure/Language/AST/Expression.hs | 16 + src/Conjure/Language/AST/Helpers.hs | 99 ++ src/Conjure/Language/AST/Syntax.hs | 197 +++ src/Conjure/Language/AdHoc.hs | 4 +- src/Conjure/Language/Domain.hs | 4 +- src/Conjure/Language/Lexer.hs | 2 +- src/Conjure/Language/NameResolution.hs | 2 +- src/Conjure/Language/Parser.hs | 69 +- src/Conjure/Language/ParserC.hs | 1367 +++++++++-------- src/Conjure/Prelude.hs | 3 + src/Conjure/Process/Boost.hs | 4 +- .../Representations/Function/FunctionND.hs | 3 +- .../Function/FunctionNDPartial.hs | 4 +- .../Function/FunctionNDPartialDummy.hs | 2 +- src/Conjure/Representations/Internal.hs | 12 +- src/Conjure/Representations/Set/Explicit.hs | 1 + src/Conjure/Representations/Set/Occurrence.hs | 6 +- src/Conjure/Rules/Definition.hs | 2 +- src/Conjure/Rules/Horizontal/Function.hs | 6 +- src/Conjure/Rules/Horizontal/Sequence.hs | 14 +- src/Conjure/Rules/Horizontal/Set.hs | 6 +- src/Conjure/Rules/Transform.hs | 4 +- src/Conjure/Rules/Vertical/Record.hs | 2 +- .../Vertical/Sequence/ExplicitBounded.hs | 2 +- src/Conjure/Rules/Vertical/Variant.hs | 4 +- src/Conjure/UI/IO.hs | 3 + src/Conjure/UI/TypeCheck.hs | 3 +- src/Conjure/UI/TypeScript.hs | 3 +- 31 files changed, 1414 insertions(+), 881 deletions(-) delete mode 100644 src/Conjure/Language/AST.hs create mode 100644 src/Conjure/Language/AST/ASTParser.hs create mode 100644 src/Conjure/Language/AST/Domain.hs create mode 100644 src/Conjure/Language/AST/Expression.hs create mode 100644 src/Conjure/Language/AST/Helpers.hs create mode 100644 src/Conjure/Language/AST/Syntax.hs diff --git a/src/Conjure/Language/AST.hs b/src/Conjure/Language/AST.hs deleted file mode 100644 index 9573386c6b..0000000000 --- a/src/Conjure/Language/AST.hs +++ /dev/null @@ -1,145 +0,0 @@ -module Conjure.Language.AST where -import Conjure.Language.Lexer -import Conjure.Language.NewLexer (ETokenStream, ETok, Lexeme) -import Conjure.Prelude (Identity, Maybe) -import Text.Megaparsec -import Data.Void -import Conjure.Language.Definition (Statement, SearchOrder (BranchingOn), FindOrGiven (Given)) - - - - -data LToken = RealToken ETok | MissingToken ETok - -data ProgramTree = ProgramTree - -data StatementNode = Declatation DeclatationStatementNode - | Branching BranchingStatementNode - | SuchThat SuchThatStatementNode - | Where WhereStatementNode - | Objective ObjectiveStatementNode - -data SuchThatStatementNode = SuchThatStatementNode - LToken -- Such - LToken -- That - (Sequence ExpressionNode) -- constraints - - -data WhereStatementNode = WhereStatementNode - LToken --where - (Sequence ExpressionNode) --expresssions - -data ObjectiveStatementNode = ObjectiveMin LToken ExpressionNode - | ObjectiveMax LToken ExpressionNode - ---Declaration statements -data DeclatationStatementNode = - GivenStatement GivenStatementNode - | LettingStatement LettingStatementNode - -data GivenStatementNode = GivenStatementNode - LToken -- given - NameNode -- name - LToken -- colon - - - -data LettingStatementNode = - LettingExpr LToken NameNode LToken ExpressionNode - | LettingDomain LToken NameNode LToken LToken DomainNode - - -data GivenEnumNode = GivenEnumNode - LToken --lGivenEnum - NameNode --name - LToken --lNew - LToken --lType - LToken --lEnum - -data LettingEnumNode = LettingEnumNode - LToken --lLetting - NameNode --name - LToken --lBe - LToken --lNew - LToken --lType - LToken --lEnum - ListNode NameNode--nameList - - -data LettingUnnamedNode = LettingAnon - LToken --lLettingAnon - NameNode --name - LToken --lBe - LToken --lNew - LToken --lType - LToken --lOf - LToken --lSize - ExpressionNode --expr - ---Branching on - -data BranchingStatementNode = BranchingStatementNode - LToken - LToken - (ListNode BranchingOnNode) - - -data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode - - ---Domains - -data DomainNode = BoolDomainNode LToken - | RangedIntDomainNode LToken (ListNode RangeNode) - | NamedRangeNode NameNode (ListNode RangeNode) - | NamedDomainNode NameNode - | TupleDomainNode LToken (ListNode DomainNode) - | RecordDomainNode LToken (ListNode NamedDomainNode) - | VariantDomainNode LToken (ListNode NamedDomainNode) - | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode - | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | FunctionDomainNode LToken (ListNode AttributeNode) DomainNode LToken DomainNode - | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) - | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode - - -data RangeNode = SingleRangeNode ExpressionNode - | RightUnboundedRangeNode ExpressionNode LToken - | LeftUnboundedRangeNode LToken ExpressionNode - | BoundedRangeNode ExpressionNode LToken ExpressionNode -data AttributeNode = NamedAttributeNode NameNode | NamedExpressionAttribute NameNode ExpressionNode -data NamedDomainNode = NameDomainNode NameNode LToken DomainNode --- Common Statements - - -newtype NameNode = NameNode LToken - -data ExpressionNode = BinaryOpNode ExpressionNode LToken ExpressionNode - | UnaryPrefixOpNode LToken ExpressionNode - -data ListNode itemType= ListNode { - lOpBracket :: LToken, - items :: Sequence itemType, - lClBracket :: LToken -} - -newtype Sequence itemType = Seq { - elems :: [SeqElem itemType] -} - -data SeqElem itemType = SeqElem { - item :: itemType, - separator :: Maybe LToken -} - -type Parser = Parsec Void ETokenStream - - - - --- parseProgram :: Parser ProgramNode --- parseProgram = do - - diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs new file mode 100644 index 0000000000..579c78aa88 --- /dev/null +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -0,0 +1,150 @@ +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +{-# HLINT ignore "Use <$>" #-} +module Conjure.Language.AST.ASTParser where + +import Conjure.Prelude hiding (many) + +import Conjure.Language.AST.Syntax +import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Language.AST.Helpers +import Conjure.Language.AST.Domain +import Conjure.Language.AST.Expression +import Text.Megaparsec + +import Data.Text (pack) + + + +parseTopLevel :: Parser StatementNode +parseTopLevel = do + parseDeclaration + <|> parseBranching + <|> parseSuchThat + <|> parseWhere + <|> parseObjective + + +parseBranching :: Parser StatementNode +parseBranching = do + lBranching <- need L_branching + lOn <- want L_on + statements <- squareBracketList (commaList parseBranchingPart) + return $ Branching $ BranchingStatementNode lBranching lOn statements + +parseBranchingPart :: Parser BranchingOnNode +parseBranchingPart = do + BranchingOnName <$> parseIdentifier + <|> + (BranchingOnExpression <$> parseExpression) + +parseSuchThat :: Parser StatementNode +parseSuchThat = do + lSuch <- need L_such + lThat <- want L_that + exprs <- commaList parseExpression + return $ SuchThat $ SuchThatStatementNode lSuch lThat exprs + +parseWhere :: Parser StatementNode +parseWhere = do + lWhere <- need L_where + exprs <- commaList parseExpression + return $ Where $ WhereStatementNode lWhere exprs + +parseObjective :: Parser StatementNode +parseObjective = do + Objective <$> parseObjectiveStatement + +parseDeclaration :: Parser StatementNode +parseDeclaration = Declaration <$> + do + (LettingStatement <$> parseLetting) + <|> + (GivenStatement <$> parseGiven) + <|> + (FindStatement <$> parseFind) + +parseLetting :: Parser LettingStatementNode +parseLetting = do + lLetting <- need L_letting + names <- commaList parseIdentifier + lBe <- want L_be + choice [ + finishDomain $ LettingDomain lLetting names lBe, + try $ finishEnum $ LettingEnum lLetting names lBe, + try $ finishAnon $ LettingAnon lLetting names lBe, + finishExpression $ LettingExpr lLetting names lBe + ] + where + finishDomain start = do + lDomain <- need L_domain + domain <- parseDomain + return $ start lDomain domain + finishExpression start = do + expr <- parseExpression + return $ start expr + finishEnum start =do + lNew <- need L_new + lType <- need L_type + lEnum <- need L_enum + members <- curlyBracketList $ commaList parseIdentifier + return $ start lNew lType lEnum members + finishAnon start = do + lNew <- need L_new + lType <- want L_type + lOf <- want L_of + lSize <- want L_size + expr <- parseExpression + return $ start lNew lType lOf lSize expr + + + +parseGiven :: Parser GivenStatementNode +parseGiven = do + lGiven <- need L_given + names <- commaList parseIdentifier + choice [ + finishEnum (GivenEnumNode lGiven names), + finishDomain (GivenStatementNode lGiven names) + ] + + where finishEnum start = do + lNew <- need L_new + lType <- want L_type + lEnum <- want L_enum + return $ start lNew lType lEnum + finishDomain start = do + lColon <- want L_Colon --want here so that parse cannot fail + domain <- parseDomain + return $ start lColon domain + + + +parseFind :: Parser FindStatementNode +parseFind = do + lFind <- need L_find + names <- commaList parseIdentifier + lColon <- want L_Colon + domain <- parseDomain + return $ FindStatementNode lFind names lColon domain + + +parseObjectiveStatement :: Parser ObjectiveStatementNode +parseObjectiveStatement = do + s <- eSymbol L_minimising <|> eSymbol L_maximising + e <- parseExpression + return $ case s of + ( ETok _ _ L_minimising) -> ObjectiveMin (RealToken s) e + _ -> ObjectiveMax (RealToken s) e + +parseProgram :: Parser ProgramTree +parseProgram = do + tl <- many parseTopLevel + return $ ProgramTree tl + +example :: String -> IO () +example s = do + let str = s + let other = [ETok (0,0,0,L_EOF) [] L_EOF] + let lexed = parseMaybe eLex $ pack str + let stream = ETokenStream $ fromMaybe other lexed + parseTest parseProgram stream \ No newline at end of file diff --git a/src/Conjure/Language/AST/Domain.hs b/src/Conjure/Language/AST/Domain.hs new file mode 100644 index 0000000000..73d45beadf --- /dev/null +++ b/src/Conjure/Language/AST/Domain.hs @@ -0,0 +1,156 @@ +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +{-# HLINT ignore "Use <$>" #-} +module Conjure.Language.AST.Domain where + +import Conjure.Prelude +import Conjure.Language.AST.Helpers +import Conjure.Language.AST.Expression +import Text.Megaparsec +import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Language.AST.Syntax + +parseDomain :: Parser DomainNode +parseDomain = do + choice [ + BoolDomainNode <$> need L_bool, + parseIntDomain, + parseTuple, + parseRecord, + parseVariant, + parseMatrix, + parseSet, + parseMSet, + parseFunction, + parseSequenceDomain, + parseRelation, + parsePartition, + parseEnumDomain, + parseMissingDomain + ] +parseIntDomain :: Parser DomainNode +parseIntDomain = do + lInt <- need L_int + ranges <- parenList $ commaList parseRange + return $ RangedIntDomainNode lInt ranges + +parseTuple :: Parser DomainNode +parseTuple = do + lTuple <- need L_tuple + members <- parenList $ commaList parseDomain + return $ TupleDomainNode lTuple members + +parseRecord :: Parser DomainNode +parseRecord = do + lRecord <- need L_record + members <- curlyBracketList $ commaList parseNameDomain + return $ RecordDomainNode lRecord members + +parseVariant :: Parser DomainNode +parseVariant = do + lVariant <- need L_variant + members <- curlyBracketList $ commaList parseNameDomain + return $ VariantDomainNode lVariant members + +parseMatrix :: Parser DomainNode +parseMatrix = do + lMatrix <- need L_matrix + lIndexed <- want L_indexed + lBy <- want L_by + members <- squareBracketList $ commaList parseDomain + lOf <- want L_of + domain <- parseDomain + return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain + +parseSet :: Parser DomainNode +parseSet = do + lSet <- need L_set + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ SetDomainNode lSet attributes lOf domain + +parseMSet :: Parser DomainNode +parseMSet = do + lMSet <- need L_mset + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ MSetDomainNode lMSet attributes lOf domain + +parseFunction :: Parser DomainNode +parseFunction = do + lFunction <- need L_function + attributes <- parenList $ commaList parseAttribute + fromDomain <- parseDomain + arrow <- want L_LongArrow + toDomain <- parseDomain + return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain + +parseSequenceDomain :: Parser DomainNode +parseSequenceDomain = do + lSequence <- need L_sequence + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ SequenceDomainNode lSequence attributes lOf domain + +parseRelation :: Parser DomainNode +parseRelation = do + lRelation <- need L_relation + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domains <- parenList $ parseSequence L_Times parseDomain + return $ RelationDomainNode lRelation attributes lOf domains + +parsePartition :: Parser DomainNode +parsePartition = do + lPartition <- need L_partition + attributes <- parenList $ commaList parseAttribute + lFrom <- want L_from + domain <- parseDomain + return $ PartitionDomainNode lPartition attributes lFrom domain + +parseEnumDomain :: Parser DomainNode +parseEnumDomain = do + name <- parseIdentifierStrict + (RangedEnumNode name <$> try (parenList (commaList parseRange))) + <|> return (EnumDomainNode name) + +--Util +parseNameDomain :: Parser NamedDomainNode +parseNameDomain = do + name <- parseIdentifierStrict + lColon <- want L_Colon + domain <- parseDomain + return $ NameDomainNode name lColon domain + +parseRange :: Parser RangeNode +parseRange = do + lExpr <- optional parseExpressionStrict + dots <- parseDoubleDot + rExpr <- optional parseExpressionStrict + case (lExpr,rExpr) of + (Nothing,Nothing) -> return $ OpenRangeNode dots + (Just l , Nothing) -> return $ RightUnboundedRangeNode l dots + (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r + (Just l , Just r) -> return $ BoundedRangeNode l dots r + <|> SingleRangeNode <$> parseExpression + + + +parseDoubleDot :: Parser DoubleDotNode +parseDoubleDot = do + a <- need L_Dot + b <- want L_Dot + return $ DoubleDotNode a b + +parseAttribute :: Parser AttributeNode +parseAttribute = do + name <- parseIdentifier --TODO This is wrong + NamedExpressionAttribute name <$> parseExpression + <|> return (NamedAttributeNode name) + +parseMissingDomain :: Parser DomainNode +parseMissingDomain = do + m <- makeMissing L_domain + return $ MissingDomainNode m \ No newline at end of file diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs new file mode 100644 index 0000000000..bb2c21f344 --- /dev/null +++ b/src/Conjure/Language/AST/Expression.hs @@ -0,0 +1,16 @@ +module Conjure.Language.AST.Expression where +import Conjure.Prelude hiding (many) +import Text.Megaparsec +import Conjure.Language.AST.Helpers +import Conjure.Language.AST.Syntax + +parseExpression :: Parser ExpressionNode +parseExpression = do + IntLiteral . RealToken <$> intLiteral + +parseExpressionStrict :: Parser ExpressionNode --can fail +parseExpressionStrict = do + expr <- try parseExpression + case expr of + MissingExpressionNode _ -> empty + _ -> return expr \ No newline at end of file diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs new file mode 100644 index 0000000000..b4be21bc65 --- /dev/null +++ b/src/Conjure/Language/AST/Helpers.hs @@ -0,0 +1,99 @@ +module Conjure.Language.AST.Helpers where +import Conjure.Prelude hiding (many) +import Conjure.Language.NewLexer hiding (Parser) +import Text.Megaparsec +import Data.Void +import Conjure.Language.AST.Syntax +import qualified Data.Set as Set + +type Parser = Parsec Void ETokenStream + + + +eSymbol :: Lexeme -> Parser ETok +eSymbol lx = token test Set.empty "Symbol " ++ show lx + where test x + | lexeme x == lx = Just x + | otherwise = Nothing + +identifier :: Parser ETok +identifier = token test Set.empty "Identifier" + where test x = case x of + ETok _ _ (LIdentifier _) -> Just x + ETok {} -> Nothing + +lIdent :: Lexeme +lIdent = LIdentifier "" + +intLiteral :: Parser ETok +intLiteral = token test Set.empty "Int Literal" + where test x = case x of + ETok _ _ (LIntLiteral _) -> Just x + ETok {} -> Nothing + +makeMissing :: Lexeme -> Parser LToken +makeMissing l = do + (ETok (s,_,_,_) _ _) <- lookAhead anySingle + return (MissingToken (ETok (s,s,0,l) [] l)) + +--try to get a token from the stream but allow failiure +want :: Lexeme -> Parser LToken +want (LIdentifier _) = do + (ETok (s,ts,_,_) t lex) <- lookAhead anySingle + case lex of + (LIdentifier _) -> RealToken <$> anySingle + _ -> return $ MissingToken $ ETok (s,ts,0,LMissingIdentifier) t LMissingIdentifier +want a = do + (ETok (s,ts,_,_) t lex) <- lookAhead anySingle + if lex == a then + RealToken <$> anySingle + else + return $ MissingToken $ ETok (s,ts,0,a) t a +--get a symbol from the stream with no fallback +need :: Lexeme -> Parser LToken +need a = RealToken <$> eSymbol a + +parseIdentifier :: Parser NameNode +parseIdentifier = do + x <- want lIdent + return $ NameNode x + +parseIdentifierStrict :: Parser NameNode +parseIdentifierStrict = do + NameNode . RealToken <$> identifier + + +--List helpers + +commaList :: Parser a -> Parser (Sequence a) +commaList = parseSequence L_Comma + +squareBracketList :: Parser (Sequence a) -> Parser (ListNode a) +squareBracketList = parseList L_OpenBracket L_CloseBracket + +curlyBracketList :: Parser (Sequence a) -> Parser (ListNode a) +curlyBracketList = parseList L_OpenCurly L_CloseCurly + +parenList :: Parser (Sequence a) -> Parser (ListNode a) +parenList = parseList L_OpenParen L_CloseParen + +parseList :: Lexeme -> Lexeme -> Parser (Sequence a) -> Parser (ListNode a) +parseList startB endB seq = do + startB' <- want startB + vals <- seq + endB' <- want endB + return $ ListNode startB' vals endB' + +parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) +parseSequence divider pElem = do + (a,b) <- manyTill_ (try seqElemSep) (try seqElemNoSep) + return $ Seq (a ++ [b]) + where + seqElemNoSep = do + v <- pElem + notFollowedBy $ eSymbol divider + return $ SeqElem v Nothing + seqElemSep = do + v <-pElem + s <- need divider + return $ SeqElem v (Just s) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs new file mode 100644 index 0000000000..aa544f86dc --- /dev/null +++ b/src/Conjure/Language/AST/Syntax.hs @@ -0,0 +1,197 @@ +module Conjure.Language.AST.Syntax where + +import Conjure.Language.NewLexer ( ETok) +import Conjure.Prelude + + +data LToken = + RealToken ETok + | MissingToken ETok + | SkippedToken ETok + deriving (Show,Eq,Ord) + +newtype ProgramTree = ProgramTree [StatementNode] + deriving (Show) + +data StatementNode = Declaration DeclarationStatementNode + | Branching BranchingStatementNode + | SuchThat SuchThatStatementNode + | Where WhereStatementNode + | Objective ObjectiveStatementNode + deriving (Show) +data SuchThatStatementNode = SuchThatStatementNode + LToken -- Such + LToken -- That + (Sequence ExpressionNode) -- constraints + deriving (Show) + +data WhereStatementNode = WhereStatementNode + LToken --where + (Sequence ExpressionNode) --expresssions + deriving (Show) +data ObjectiveStatementNode = ObjectiveMin LToken ExpressionNode + | ObjectiveMax LToken ExpressionNode + deriving (Show) +--Declaration statements +data DeclarationStatementNode = + FindStatement FindStatementNode + | GivenStatement GivenStatementNode + | LettingStatement LettingStatementNode + deriving (Show) + +data FindStatementNode = FindStatementNode + LToken --find + (Sequence NameNode) --names + LToken --colon + DomainNode --domain + deriving (Show) +data GivenStatementNode = GivenStatementNode + LToken -- given + (Sequence NameNode) -- name + LToken -- colon + DomainNode --domain + | + GivenEnumNode + LToken + (Sequence NameNode) + LToken -- new + LToken -- type + LToken -- enum + deriving (Show) + + +data LettingStatementNode = + LettingExpr + LToken --lLetting + (Sequence NameNode) --name + LToken --lBe + ExpressionNode + | LettingDomain + LToken --lLetting + (Sequence NameNode) --name + LToken --lBe + LToken -- domain + DomainNode + | LettingEnum + LToken --lLetting + (Sequence NameNode) --name + LToken --lBe + LToken --lNew + LToken --lType + LToken --lEnum + (ListNode NameNode)--nameList + | LettingAnon + LToken --lLettingAnon + (Sequence NameNode) --name + LToken --lBe + LToken --lNew + LToken --lType + LToken --lOf + LToken --lSize + ExpressionNode --expr + deriving (Show) + + + + +--Branching on + +data BranchingStatementNode = BranchingStatementNode + LToken + LToken + (ListNode BranchingOnNode) + deriving (Show) + +data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode + deriving (Show) + +--Domains + +data DomainNode = BoolDomainNode LToken + | RangedIntDomainNode LToken (ListNode RangeNode) + | RangedEnumNode NameNode (ListNode RangeNode) + | EnumDomainNode NameNode + | TupleDomainNode LToken (ListNode DomainNode) + | RecordDomainNode LToken (ListNode NamedDomainNode) + | VariantDomainNode LToken (ListNode NamedDomainNode) + | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode + | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | FunctionDomainNode LToken (ListNode AttributeNode) DomainNode LToken DomainNode + | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) + | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | MissingDomainNode LToken + deriving (Show) + +data RangeNode = SingleRangeNode ExpressionNode + | OpenRangeNode DoubleDotNode + | RightUnboundedRangeNode ExpressionNode DoubleDotNode + | LeftUnboundedRangeNode DoubleDotNode ExpressionNode + | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode + deriving (Show) + +data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) + +data AttributeNode = NamedAttributeNode NameNode | NamedExpressionAttribute NameNode ExpressionNode + deriving (Show) +data NamedDomainNode = NameDomainNode NameNode LToken DomainNode + deriving (Show) +-- Common Statements + + +newtype NameNode = NameNode LToken + deriving (Show) + +--Expressions +data ExpressionNode = + IntLiteral LToken + | BinaryOpNode ExpressionNode LToken ExpressionNode + | UnaryPrefixOpNode LToken ExpressionNode + | MissingExpressionNode LToken + deriving (Show) + + + + + + + + + + + + + + + + + + + + + + + +data ListNode itemType= ListNode { + lOpBracket :: LToken, + items :: Sequence itemType, + lClBracket :: LToken +} + deriving (Show) + +newtype Sequence itemType = Seq { + elems :: [SeqElem itemType] +} + -- deriving (Show) +instance (Show a) => Show (Sequence a) where + show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" +data SeqElem itemType = SeqElem { + item :: itemType, + separator :: Maybe LToken +} + deriving (Show) + + + + diff --git a/src/Conjure/Language/AdHoc.hs b/src/Conjure/Language/AdHoc.hs index 9cb4d38117..632a0d70ac 100644 --- a/src/Conjure/Language/AdHoc.hs +++ b/src/Conjure/Language/AdHoc.hs @@ -99,8 +99,8 @@ noToMiniZinc a = userErr1 $ vcat ] class SimpleJSON a where - toSimpleJSON :: MonadUserError m => a -> m JSON.Value - fromSimpleJSON :: MonadUserError m => Type -> JSON.Value -> m a + toSimpleJSON :: (MonadFail m,MonadUserError m) => a -> m JSON.Value + fromSimpleJSON ::(MonadFail m, MonadUserError m) => Type -> JSON.Value -> m a instance SimpleJSON Integer where toSimpleJSON = return . toJSON diff --git a/src/Conjure/Language/Domain.hs b/src/Conjure/Language/Domain.hs index 7d5a776c6b..77c7ab7af7 100644 --- a/src/Conjure/Language/Domain.hs +++ b/src/Conjure/Language/Domain.hs @@ -472,7 +472,7 @@ getMaxFrom_SizeAttr :: MonadFail m => SizeAttr a -> m a getMaxFrom_SizeAttr (SizeAttr_Size n) = return n getMaxFrom_SizeAttr (SizeAttr_MaxSize n) = return n getMaxFrom_SizeAttr (SizeAttr_MinMaxSize _ n) = return n -getMaxFrom_SizeAttr _ = fail "getMaxFrom_SizeAttr" +getMaxFrom_SizeAttr _ = failDoc "getMaxFrom_SizeAttr" intersectSizeAttr :: SizeAttr a -> SizeAttr a -> SizeAttr a intersectSizeAttr SizeAttr_None s = s @@ -518,7 +518,7 @@ instance Pretty a => Pretty (OccurAttr a) where getMaxFrom_OccurAttr :: MonadFail m => OccurAttr a -> m a getMaxFrom_OccurAttr (OccurAttr_MaxOccur n) = return n getMaxFrom_OccurAttr (OccurAttr_MinMaxOccur _ n) = return n -getMaxFrom_OccurAttr _ = fail "getMaxFrom_OccurAttr" +getMaxFrom_OccurAttr _ = failDoc "getMaxFrom_OccurAttr" data FunctionAttr x diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index d32ba7986e..eb2c454dfa 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -533,7 +533,7 @@ runLexer text = do -- if T.null t -- then return [] -- else case results of --- [] -> fail ("Lexing error:" Pr.<+> Pr.text (T.unpack t)) +-- [] -> failDoc ("Lexing error:" Pr.<+> Pr.text (T.unpack t)) -- ((rest,lexeme):_) -> (lexeme:) <$> go rest -- -- attach source positions to lexemes diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index a12ee64018..adde5d9fc2 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -200,7 +200,7 @@ resolveX (Reference nm Nothing) = do resolveX p@(Reference nm (Just refto)) = do -- this is for re-resolving mval <- gets (lookup nm) case mval of - Nothing -> return p -- hence, do not fail if not in the context + Nothing -> return p -- hence, do not failDoc if not in the context Just DeclNoRepr{} -- if the newly found guy doesn't have a repr | DeclHasRepr{} <- refto -- but the old one did, do not update -> return p diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 3d882abb09..71ad3c15fe 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -40,9 +40,32 @@ import qualified Data.Set as S ( null, fromList, toList ) import Data.Void (Void) +dummyModel :: Model +dummyModel = Model (LanguageVersion "Essence" [1]) [] dummyModelInfo + +dummyModelInfo :: ModelInfo +dummyModelInfo = ModelInfo + []--([Name]) + []--([(Name, Expression)]) + []--([Name]) + []--([Declaration]) + []--([(Name, Expression)]) + []--([(Name, Domain () Expression)]) + []--([(Name, Domain HasRepresentation Expression)]) + []--([(Name, [Tree (Maybe HasRepresentation)])]) + []--Strategy + (PickFirst) + (PickFirst)--([(Int, Int, Int)]) + []--([(Int, Int)]) + []--([Decision]) + []--([TrailRewrites]) + []--([(Text, Int)]) + [] --Int + 0 + parseModel :: Parser Model parseModel = do - let x = Model {} + let x = dummyModel return x -- inCompleteFile $ do -- let @@ -54,12 +77,12 @@ parseModel = do -- -- ESSENCE' is accepted, just for convenience -- unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do -- setPosition pos1 - -- fail $ "language name has to be Essence, but given:" <+> pretty l + -- failDoc $ "language name has to be Essence, but given:" <+> pretty l -- pos2 <- getPosition -- is <- sepBy1 integer dot -- unless (is >= [1]) $ do -- setPosition pos2 - -- fail $ "language version expected to be at least 1.0, but given:" <+> + -- failDoc $ "language version expected to be at least 1.0, but given:" <+> -- pretty (intercalate "." (map show is)) -- return (LanguageVersion (Name l) (map fromInteger is)) -- l <- optional pLanguage @@ -257,7 +280,7 @@ parseDomainWithRepr = do return DomainBool -- -- case textToRepresentation nm inners of -- -- Nothing -> do -- -- setPosition pos --- -- fail ("Not a valid representation:" <+> pretty nm) +-- -- failDoc ("Not a valid representation:" <+> pretty nm) -- -- Just r -> return r -- pBool = do @@ -370,7 +393,7 @@ parseDomainWithRepr = do return DomainBool -- let RelationAttr _ (BinaryRelationAttrs binAttrs) = x -- when (length ys /= 2 && not (S.null binAttrs)) $ do -- setPosition pos --- fail $ "Only binary relations can have these attributes:" <+> +-- failDoc $ "Only binary relations can have these attributes:" <+> -- prettyList id "," (S.toList binAttrs) -- return $ DomainRelation r x ys @@ -406,7 +429,7 @@ parseDomainWithRepr = do return DomainBool -- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- parseMSetAttr :: Parser (MSetAttr Expression) -- parseMSetAttr = do @@ -424,7 +447,7 @@ parseDomainWithRepr = do return DomainBool -- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of -- [] -> return OccurAttr_None -- [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) @@ -432,7 +455,7 @@ parseDomainWithRepr = do return DomainBool -- [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- return (MSetAttr size occur) -- parseFunctionAttr :: Parser (FunctionAttr Expression) @@ -452,7 +475,7 @@ parseDomainWithRepr = do return DomainBool -- [] -> return SizeAttr_None -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- let partiality = if DAName "total" `elem` attrs -- then PartialityAttr_Total -- else PartialityAttr_Partial @@ -464,7 +487,7 @@ parseDomainWithRepr = do return DomainBool -- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- return (FunctionAttr size partiality jectivity) -- parseSequenceAttr :: Parser (SequenceAttr Expression) @@ -483,7 +506,7 @@ parseDomainWithRepr = do return DomainBool -- [] -> return SizeAttr_None -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- jectivity <- case filterJectivity attrs of -- [] -> return JectivityAttr_None -- [DAName "bijective" ] -> return JectivityAttr_Bijective @@ -492,7 +515,7 @@ parseDomainWithRepr = do return DomainBool -- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- return (SequenceAttr size jectivity) -- parseRelationAttr :: Parser (RelationAttr Expression) @@ -514,11 +537,11 @@ parseDomainWithRepr = do return DomainBool -- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- let readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) -- readBinRel' a = do -- setPosition pos --- fail $ "Not a binary relation attribute:" <+> pretty a +-- failDoc $ "Not a binary relation attribute:" <+> pretty a -- binRels <- mapM readBinRel' (filterBinRel attrs) -- return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) @@ -534,12 +557,12 @@ parseDomainWithRepr = do return DomainBool -- ] -- unless (null $ filterAttrName ["complete"] attrs) $ do -- setPosition pos --- fail $ vcat [ "Partitions do not support the 'complete' attribute." +-- failDoc $ vcat [ "Partitions do not support the 'complete' attribute." -- , "They are complete by default." -- ] -- unless (null $ filterSizey attrs) $ do -- setPosition pos --- fail $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) +-- failDoc $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) -- , "This is because partitions are complete by default." -- ] -- partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of @@ -550,7 +573,7 @@ parseDomainWithRepr = do return DomainBool -- [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of -- [] -> return SizeAttr_None -- [DANameValue "partSize" a] -> return (SizeAttr_Size a) @@ -559,7 +582,7 @@ parseDomainWithRepr = do return DomainBool -- [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) -- as -> do -- setPosition pos --- fail ("incompatible attributes:" <+> stringToDoc (show as)) +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) -- let isRegular = DAName "regular" `elem` attrs -- return PartitionAttr {..} @@ -569,7 +592,7 @@ parseDomainWithRepr = do return DomainBool -- let extras = mapMaybe f attrs -- unless (null extras) $ do -- setPosition pos --- fail $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras +-- failDoc $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras -- , "Only these are supported:" <+> prettyList id "," supported -- ] -- where @@ -748,7 +771,7 @@ parseExpr = do return $ Constant $ ConstantBool True -- (fromString (textToString attr)) Nothing -- (1, [e,v]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e -- (fromString (textToString attr)) (Just v) --- _ -> fail "parseAAC" +-- _ -> failDoc "parseAAC" -- parseOthers :: [Parser Expression] -- parseOthers = [ parseFunctional l @@ -958,7 +981,7 @@ parseExpr = do return $ Constant $ ConstantBool True -- xsFiltered <- forM xs $ \case -- -- Constant (ConstantAbstract (AbsLitTuple is)) -> ... -- AbsLitTuple is -> return is --- x -> fail ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) +-- x -> failDoc ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) -- return (AbsLitRelation xsFiltered) -- pPartition = do @@ -974,12 +997,12 @@ data ParserState = ParserState { enumDomains :: [Name] } type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a runLexerAndParser :: MonadFailDoc m => Parser a -> String -> T.Text -> m a -runLexerAndParser p file inp = do fail "Nothing" +runLexerAndParser p file inp = do failDoc "Nothing" -- ls <- runLexer inp -- case runParser p file ls of -- Left (msg, line, col) -> -- let theLine = T.lines inp |> drop (line-1) |> take 1 --- in fail $ vcat +-- in failDoc $ vcat -- [ msg -- , vcat (map pretty theLine) -- , pretty $ replicate (col-1) ' ' ++ "^" diff --git a/src/Conjure/Language/ParserC.hs b/src/Conjure/Language/ParserC.hs index 6174920cd8..2bedb9de51 100644 --- a/src/Conjure/Language/ParserC.hs +++ b/src/Conjure/Language/ParserC.hs @@ -13,8 +13,8 @@ import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace ) import Conjure.Language.Parser ( Parser, ParserState(..) ) -- megaparsec -import Text.Megaparsec ( (), label, token, try, eof, getPosition, setPosition ) -import Text.Megaparsec.Error ( Message(..) ) +import Text.Megaparsec ( (), label, token, try, eof ) +import Text.Megaparsec.Error import Text.Megaparsec.Pos ( SourcePos(..) ) import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) -- import Text.Megaparsec.ShowToken ( showToken ) @@ -25,674 +25,699 @@ import qualified Data.Text as T -- containers import qualified Data.Set as S ( null, fromList, toList ) +dummyModel :: Model +dummyModel = Model (LanguageVersion "Essence" [1]) [] dummyModelInfo + +dummyModelInfo :: ModelInfo +dummyModelInfo = ModelInfo + []--([Name]) + []--([(Name, Expression)]) + []--([Name]) + []--([Declaration]) + []--([(Name, Expression)]) + []--([(Name, Domain () Expression)]) + []--([(Name, Domain HasRepresentation Expression)]) + []--([(Name, [Tree (Maybe HasRepresentation)])]) + []--Strategy + (PickFirst) + (PickFirst)--([(Int, Int, Int)]) + []--([(Int, Int)]) + []--([Decision]) + []--([TrailRewrites]) + []--([(Text, Int)]) + [] --Int + 0 parseModel :: Parser Model -parseModel = inCompleteFile $ do - let - pLanguage :: Parser LanguageVersion - pLanguage = do - lexeme L_language - pos1 <- getPosition - l <- identifierText - -- ESSENCE' is accepted, just for convenience - unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do - setPosition pos1 - failDoc $ "language name has to be Essence, but given:" <+> pretty l - pos2 <- getPosition - is <- sepBy1 integer dot - unless (is >= [1]) $ do - setPosition pos2 - failDoc $ "language version expected to be at least 1.0, but given:" <+> - pretty (intercalate "." (map show is)) - return (LanguageVersion (Name l) (map fromInteger is)) - l <- optional pLanguage - xs <- many parseTopLevels - return Model - { mLanguage = fromMaybe def l - , mStatements = concat xs - , mInfo = def - } - - --------------------------------------------------------------------------------- --- Actual parsers -------------------------------------------------------------- --------------------------------------------------------------------------------- - -parseTopLevels :: Parser [Statement] -parseTopLevels = do - let one = do - lexeme L_letting - i <- parseName - lexeme L_be - msum - [ do - lexeme L_new - lexeme L_type - msum - [ do - lexeme L_of - lexeme $ LIdentifier "size" - j <- parseExpr - return $ Declaration (LettingDomainDefnUnnamed i j) - , do - lexeme L_enum - ys <- braces (commaSeparated parseName) <|> return [] - modify (\ st -> st { enumDomains = [i] ++ enumDomains st } ) - return $ Declaration (LettingDomainDefnEnum i ys) - ] - , do - lexeme L_domain - j <- parseDomain - return $ Declaration (Letting i (Domain j)) - , do - j <- parseExpr - return $ Declaration (Letting i j) - ] - "letting statement" - some one - -parseRange :: Parser a -> Parser (Range a) -parseRange p = msum [try pRange, pSingle] "range" - where - pRange = do - fr <- optional p - dotdot - to <- optional p - return $ case (fr,to) of - (Nothing, Nothing) -> RangeOpen - (Just x , Nothing) -> RangeLowerBounded x - (Nothing, Just y ) -> RangeUpperBounded y - (Just x , Just y ) -> RangeBounded x y - pSingle = do - x <- p - return (RangeSingle x) - -parseDomain :: Parser (Domain () Expression) -parseDomain = (forgetRepr <$> parseDomainWithRepr) "domain" - -parseDomainWithRepr :: Parser (Domain HasRepresentation Expression) -parseDomainWithRepr = pDomainAtom - - where - - pDomainAtom = msum - [ pBool, try pIntFromExpr, pInt, try pEnum, try pReference - , pMatrix, try pTupleWithout, pTupleWith - , pRecord, pVariant - , pSet - , pMSet - , try pFunction', pFunction - , pSequence - , pRelation - , pPartition - , DomainMetaVar <$> parseMetaVariable, parens parseDomainWithRepr - ] - - pBool = do - lexeme L_bool - -- parse and discard, compatibility with SR - _ <- optional $ parens $ commaSeparated0 $ parseRange parseExpr - return DomainBool - - pIntFromExpr = do - lexeme L_int - x <- parens parseExpr - case (let ?typeCheckerMode = StronglyTyped in typeOf x) of - Just (TypeInt TagInt) -> return $ DomainInt TagInt [RangeSingle x] - _ -> return $ DomainIntE x - - pInt = do - lexeme L_int - mxs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr - let xs = fromMaybe [] mxs - return $ DomainInt TagInt xs - - pReference = do - r <- identifierText - return $ DomainReference (Name r) Nothing - - pEnum = do - r <- identifierText - xs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr - st <- get - guard (Name r `elem` enumDomains st) - return $ DomainEnum (Name r) xs Nothing - - pMatrix = do - lexeme L_matrix - lexeme L_indexed - lexeme L_by - xs <- brackets (commaSeparated parseDomain) - lexeme L_of - y <- parseDomainWithRepr - return $ foldr DomainMatrix y xs - - pTupleWith = do - lexeme L_tuple - xs <- parens $ commaSeparated0 parseDomainWithRepr - return $ DomainTuple xs - - pTupleWithout = do - xs <- parens $ countSepAtLeast 2 parseDomainWithRepr comma - return $ DomainTuple xs - - pRecord = do - lexeme L_record - let one = do n <- parseName - lexeme L_Colon - d <- parseDomainWithRepr - return (n,d) - xs <- braces $ commaSeparated0 one - return $ DomainRecord xs - - pVariant = do - lexeme L_variant - let one = do n <- parseName - lexeme L_Colon - d <- parseDomainWithRepr - return (n,d) - xs <- braces $ commaSeparated0 one - return $ DomainVariant xs - - pSet = do - lexeme L_set - x <- parseSetAttr - y <- lexeme L_of >> parseDomainWithRepr - return $ DomainSet NoRepresentation x y - - pMSet = do - lexeme L_mset - x <- parseMSetAttr - y <- lexeme L_of >> parseDomainWithRepr - return $ DomainMSet NoRepresentation x y - - pFunction' = do - lexeme L_function - (y,z) <- arrowedPair parseDomainWithRepr - return $ DomainFunction NoRepresentation def y z - - pFunction = do - lexeme L_function - x <- parseFunctionAttr - (y,z) <- arrowedPair parseDomainWithRepr - return $ DomainFunction NoRepresentation x y z - - pSequence = do - lexeme L_sequence - x <- parseSequenceAttr - y <- lexeme L_of >> parseDomainWithRepr - return $ DomainSequence NoRepresentation x y - - pRelation = do - lexeme L_relation - pos <- getPosition - x <- parseRelationAttr - lexeme L_of - ys <- parens (parseDomainWithRepr `sepBy` lexeme L_Times) - let RelationAttr _ (BinaryRelationAttrs binAttrs) = x - when (length ys /= 2 && not (S.null binAttrs)) $ do - setPosition pos - failDoc $ "Only binary relations can have these attributes:" <+> - prettyList id "," (S.toList binAttrs) - return $ DomainRelation NoRepresentation x ys - - pPartition = do - lexeme L_partition - x <- parsePartitionAttr - lexeme L_from - y <- parseDomainWithRepr - return $ DomainPartition NoRepresentation x y - -parseAttributes :: Parser (DomainAttributes Expression) -parseAttributes = do - xs <- parens (commaSeparated0 parseAttribute) <|> return [] - return $ DomainAttributes xs - where - parseAttribute = msum [parseDontCare, try parseNameValue, parseDAName] - parseNameValue = DANameValue <$> (Name <$> identifierText) <*> parseExpr - parseDAName = DAName <$> (Name <$> identifierText) - parseDontCare = do dotdot ; return DADotDot - -parseSetAttr :: Parser (SetAttr Expression) -parseSetAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "set" attrs - ["size", "minSize", "maxSize"] - SetAttr <$> case filterSizey attrs of - [] -> return SizeAttr_None - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - -parseMSetAttr :: Parser (MSetAttr Expression) -parseMSetAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "mset" attrs - [ "size", "minSize", "maxSize" - , "minOccur", "maxOccur" - ] - size <- case filterSizey attrs of - [] -> return SizeAttr_None - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of - [] -> return OccurAttr_None - [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) - [DANameValue "maxOccur" a] -> return (OccurAttr_MaxOccur a) - [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - return (MSetAttr size occur) - -parseFunctionAttr :: Parser (FunctionAttr Expression) -parseFunctionAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "function" attrs - [ "size", "minSize", "maxSize" - , "injective", "surjective", "bijective" - , "total" - ] - size <- case filterSizey attrs of - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - [] -> return SizeAttr_None - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - let partiality = if DAName "total" `elem` attrs - then PartialityAttr_Total - else PartialityAttr_Partial - jectivity <- case filterJectivity attrs of - [] -> return JectivityAttr_None - [DAName "bijective" ] -> return JectivityAttr_Bijective - [DAName "injective" ] -> return JectivityAttr_Injective - [DAName "surjective"] -> return JectivityAttr_Surjective - [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - return (FunctionAttr size partiality jectivity) - -parseSequenceAttr :: Parser (SequenceAttr Expression) -parseSequenceAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "sequence" attrs - [ "size", "minSize", "maxSize" - , "injective", "surjective", "bijective" - ] - size <- case filterSizey attrs of - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - [] -> return SizeAttr_None - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - jectivity <- case filterJectivity attrs of - [] -> return JectivityAttr_None - [DAName "bijective" ] -> return JectivityAttr_Bijective - [DAName "injective" ] -> return JectivityAttr_Injective - [DAName "surjective"] -> return JectivityAttr_Surjective - [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - return (SequenceAttr size jectivity) - -parseRelationAttr :: Parser (RelationAttr Expression) -parseRelationAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "relation" attrs (map (Name . stringToText) (["size", "minSize", "maxSize"] ++ binRelNames)) - size <- case filterSizey attrs of - [] -> return SizeAttr_None - [DANameValue "size" a] -> return (SizeAttr_Size a) - [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - let readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) - readBinRel' a = do - setPosition pos - failDoc $ "Not a binary relation attribute:" <+> pretty a - binRels <- mapM readBinRel' (filterBinRel attrs) - return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) - -parsePartitionAttr :: Parser (PartitionAttr Expression) -parsePartitionAttr = do - pos <- getPosition - DomainAttributes attrs <- parseAttributes - checkExtraAttributes pos "partition" attrs - [ "size", "minSize", "maxSize" - , "regular" - , "numParts", "minNumParts", "maxNumParts" - , "partSize", "minPartSize", "maxPartSize" - ] - unless (null $ filterAttrName ["complete"] attrs) $ do - setPosition pos - failDoc $ vcat [ "Partitions do not support the 'complete' attribute." - , "They are complete by default." - ] - unless (null $ filterSizey attrs) $ do - setPosition pos - failDoc $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) - , "This is because partitions are complete by default." - ] - partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of - [] -> return SizeAttr_None - [DANameValue "numParts" a] -> return (SizeAttr_Size a) - [DANameValue "minNumParts" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxNumParts" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of - [] -> return SizeAttr_None - [DANameValue "partSize" a] -> return (SizeAttr_Size a) - [DANameValue "minPartSize" a] -> return (SizeAttr_MinSize a) - [DANameValue "maxPartSize" a] -> return (SizeAttr_MaxSize a) - [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) - as -> do - setPosition pos - failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - let isRegular = DAName "regular" `elem` attrs - return PartitionAttr {..} - - -checkExtraAttributes :: SourcePos -> Doc -> [DomainAttribute a] -> [Name] -> Parser () -checkExtraAttributes pos ty attrs supported = do - let extras = mapMaybe f attrs - unless (null extras) $ do - setPosition pos - failDoc $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras - , "Only these are supported:" <+> prettyList id "," supported - ] - where - f (DANameValue nm _) | nm `notElem` supported = Just nm - f (DAName nm ) | nm `notElem` supported = Just nm - f _ = Nothing - -filterAttrName :: Ord a => [Name] -> [DomainAttribute a] -> [DomainAttribute a] -filterAttrName keep = sort . filter f - where - f (DANameValue nm _) | nm `elem` keep = True - f (DAName nm ) | nm `elem` keep = True - f _ = False - -filterSizey :: Ord a => [DomainAttribute a] -> [DomainAttribute a] -filterSizey = filterAttrName ["size", "minSize", "maxSize"] - -filterJectivity :: Ord a => [DomainAttribute a] -> [DomainAttribute a] -filterJectivity = filterAttrName ["injective", "surjective", "bijective"] - -filterBinRel :: Ord a => [DomainAttribute a] -> [DomainAttribute a] -filterBinRel = filterAttrName (map (Name . stringToText) binRelNames) - -parseMetaVariable :: Parser String -parseMetaVariable = do - let isMeta LMetaVar{} = True - isMeta _ = False - LMetaVar iden <- satisfyT isMeta - return (T.unpack iden) - -parseExpr :: Parser Expression --- parseExpr | trace "parseExpr" True = parseAtomicExpr "expression" -parseExpr = parseAtomicExpr "expression" - -parseAtomicExpr :: Parser Expression --- parseAtomicExpr | trace "parseAtomicExpr" True = parseAtomicExprNoPrePost "expression" -parseAtomicExpr = parseAtomicExprNoPrePost "expression" - -parseAtomicExprNoPrePost :: Parser Expression --- parseAtomicExprNoPrePost | trace "parseAtomicExprNoPrePost" True = msum [try parseLiteral, parseTyped] -parseAtomicExprNoPrePost = msum [try parseLiteral, parseReference, parseTyped] - -parseTyped :: Parser Expression --- parseTyped | trace "parseTyped" True = parens $ do -parseTyped = parens $ do - x <- parseExpr - lexeme L_Colon - d <- betweenTicks parseDomain - ty <- let ?typeCheckerMode = StronglyTyped in typeOfDomain d - return (Typed x ty) - -parseName :: Parser Name -parseName = Name <$> identifierText - -parseReference :: Parser Expression -parseReference = Reference <$> parseName <*> pure Nothing - -parseLiteral :: Parser Expression -parseLiteral = label "value" (do p <- pCore ; p) - - where - - -- convert x to a constant if possible - -- might save us from evaluating it again and again later - mkAbstractLiteral x = - case e2c (AbstractLiteral x) of - Nothing -> AbstractLiteral x - Just c -> Constant c - - pCore :: Parser (Parser Expression) - pCore = satisfyL $ \case - L_false -> Just $ return $ Constant $ ConstantBool False - L_true -> Just $ return $ Constant $ ConstantBool True - LIntLiteral i -> Just $ return $ Constant $ ConstantInt TagInt (fromInteger i) - L_OpenBracket -> Just pMatrix - L_tuple -> Just pTupleWith - L_OpenParen -> Just pTupleWithout - L_record -> Just pRecord - L_variant -> Just pVariant - L_OpenCurly -> Just pSet - L_mset -> Just pMSet - L_function -> Just pFunction - L_sequence -> Just pSequence - L_relation -> Just pRelation - L_partition -> Just pPartition - L_Minus -> Just $ do - p <- pCore - res <- p - return (negate res) - _ -> Nothing - - pMatrix = mkAbstractLiteral <$> do - -- lexeme L_OpenBracket - xs <- commaSeparated0 parseExpr - msum - [ do - let r = mkDomainIntB 1 (fromInt (genericLength xs)) - lexeme L_CloseBracket - return (AbsLitMatrix r xs) - , do - lexeme L_SemiColon - r <- parseDomain - lexeme L_CloseBracket - return (AbsLitMatrix r xs) - ] - - pTupleWith = mkAbstractLiteral <$> do - -- lexeme L_tuple - xs <- parens $ commaSeparated0 parseExpr - return (AbsLitTuple xs) - - pTupleWithout = mkAbstractLiteral <$> do - -- xs <- parens $ countSepAtLeast 2 parseExpr comma - xs <- countSepAtLeast 2 parseExpr comma - lexeme L_CloseParen - return (AbsLitTuple xs) - - pRecord = mkAbstractLiteral <$> do - -- lexeme L_record - let one = do n <- parseName - lexeme L_Eq - x <- parseExpr - return (n,x) - xs <- braces $ commaSeparated0 one - return $ AbsLitRecord xs - - pVariant = mkAbstractLiteral <$> do - -- lexeme L_variant - let one = do n <- parseName - lexeme L_Eq - x <- parseExpr - return (n,x) - (n,x) <- braces one - return $ AbsLitVariant Nothing n x - - pSet = mkAbstractLiteral <$> do - -- xs <- braces (commaSeparated0 parseExpr) - xs <- commaSeparated0 parseExpr - lexeme L_CloseCurly - return (AbsLitSet xs) - - pMSet = mkAbstractLiteral <$> do - -- lexeme L_mset - xs <- parens (commaSeparated0 parseExpr) - return (AbsLitMSet xs) - - pFunction = mkAbstractLiteral <$> do - -- lexeme L_function - xs <- parens (commaSeparated0 inner) - return (AbsLitFunction xs) - where - inner = arrowedPair parseExpr - - pSequence = mkAbstractLiteral <$> do - -- lexeme L_sequence - xs <- parens (commaSeparated0 parseExpr) - return (AbsLitSequence xs) - - pRelation = mkAbstractLiteral <$> do - -- lexeme L_relation - xs <- parens (commaSeparated0 (pTupleWith <|> pTupleWithout)) - xsFiltered <- forM xs $ \case - Constant (ConstantAbstract (AbsLitTuple is)) -> return (map Constant is) - AbstractLiteral (AbsLitTuple is) -> return is - x -> failDoc ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) - return (AbsLitRelation xsFiltered) - - pPartition = mkAbstractLiteral <$> do - -- lexeme L_partition - xs <- parens (commaSeparated0 inner) - return (AbsLitPartition xs) - where - inner = braces (commaSeparated0 parseExpr) - - -identifierText :: Parser T.Text -identifierText = do - LIdentifier i <- satisfyT isIdentifier - return i - where isIdentifier LIdentifier {} = True - isIdentifier _ = False - -satisfyT :: (Lexeme -> Bool) -> Parser Lexeme -satisfyT predicate = token nextPos testTok - where - testTok :: LexemePos -> Either [Message] Lexeme - testTok (LexemePos tok _ _) = - -- trace ("satisfyT: " ++ show pos ++ "\t" ++ show tok) $ - if predicate tok - then Right tok - else Left [Unexpected (showToken tok)] - - nextPos :: Int -> SourcePos -> LexemePos -> SourcePos - nextPos _ _ (LexemePos _ _ pos) = pos - -satisfyL :: forall a . (Lexeme -> Maybe a) -> Parser a -satisfyL predicate = token nextPos testTok - where - testTok :: LexemePos -> Either [Message] a - testTok (LexemePos tok _ _) = - -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ - case predicate tok of - Nothing -> Left [Unexpected (showToken tok)] - Just res -> Right res - - nextPos :: Int -> SourcePos -> LexemePos -> SourcePos - nextPos _ _ (LexemePos _ _ pos) = pos - -integer :: Parser Integer -integer = do - LIntLiteral i <- satisfyT isInt - return i - where isInt LIntLiteral {} = True - isInt _ = False - --- parse a comma separated list of things. can be 0 things. -commaSeparated0 :: Parser a -> Parser [a] -commaSeparated0 p = sepEndBy p comma - --- parse a comma separated list of things. has to be at least 1 thing. -commaSeparated :: Parser a -> Parser [a] -commaSeparated p = sepEndBy1 p comma - -comma :: Parser () -comma = lexeme L_Comma "comma" - -dot :: Parser () -dot = lexeme L_Dot "dot" - -dotdot :: Parser () -dotdot = (dot >> dot) ".." - - --- parses a specified number of elements separated by the given separator -countSep :: Int -> Parser a -> Parser sep -> Parser [a] -countSep 1 p _ = (:[]) <$> p -countSep i p separator | i > 1 = (:) <$> (p <* separator) <*> countSep (i-1) p separator -countSep _ _ _ = return [] - --- parses at least a given number of elements separated by the given separator -countSepAtLeast :: Int -> Parser a -> Parser sep -> Parser [a] -countSepAtLeast i p separator = (++) <$> countSep i p separator <*> many (separator *> p) - -betweenTicks :: Parser a -> Parser a -betweenTicks = between (lexeme L_BackTick) (lexeme L_BackTick) - -parens :: Parser a -> Parser a -parens = between (lexeme L_OpenParen) (lexeme L_CloseParen) - -braces :: Parser a -> Parser a -braces = between (lexeme L_OpenCurly) (lexeme L_CloseCurly) - -brackets :: Parser a -> Parser a -brackets = between (lexeme L_OpenBracket) (lexeme L_CloseBracket) - -lexeme :: Lexeme -> Parser () --- lexeme l = trace ("lexeme: " ++ show l) (void (satisfyT (l==)) show (lexemeFace l)) -lexeme l = void (satisfyT (l==)) show (lexemeFace l) - -arrowedPair :: Parser a -> Parser (a,a) -arrowedPair p = do - i <- p - lexeme L_LongArrow - j <- p - return (i,j) - -inCompleteFile :: Parser a -> Parser a -inCompleteFile parser = do - result <- parser - eof - return result +parseModel = do + let m = dummyModel + return m +-- inCompleteFile $ do +-- let +-- pLanguage :: Parser LanguageVersion +-- pLanguage = do +-- lexeme L_language +-- pos1 <- getPosition +-- l <- identifierText +-- -- ESSENCE' is accepted, just for convenience +-- unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do +-- setPosition pos1 +-- failDoc $ "language name has to be Essence, but given:" <+> pretty l +-- pos2 <- getPosition +-- is <- sepBy1 integer dot +-- unless (is >= [1]) $ do +-- setPosition pos2 +-- failDoc $ "language version expected to be at least 1.0, but given:" <+> +-- pretty (intercalate "." (map show is)) +-- return (LanguageVersion (Name l) (map fromInteger is)) +-- l <- optional pLanguage +-- xs <- many parseTopLevels +-- return Model +-- { mLanguage = fromMaybe def l +-- , mStatements = concat xs +-- , mInfo = def +-- } + + +-- -------------------------------------------------------------------------------- +-- -- Actual parsers -------------------------------------------------------------- +-- -------------------------------------------------------------------------------- + +-- parseTopLevels :: Parser [Statement] +-- parseTopLevels = do +-- let one = do +-- lexeme L_letting +-- i <- parseName +-- lexeme L_be +-- msum +-- [ do +-- lexeme L_new +-- lexeme L_type +-- msum +-- [ do +-- lexeme L_of +-- lexeme $ LIdentifier "size" +-- j <- parseExpr +-- return $ Declaration (LettingDomainDefnUnnamed i j) +-- , do +-- lexeme L_enum +-- ys <- braces (commaSeparated parseName) <|> return [] +-- modify (\ st -> st { enumDomains = [i] ++ enumDomains st } ) +-- return $ Declaration (LettingDomainDefnEnum i ys) +-- ] +-- , do +-- lexeme L_domain +-- j <- parseDomain +-- return $ Declaration (Letting i (Domain j)) +-- , do +-- j <- parseExpr +-- return $ Declaration (Letting i j) +-- ] +-- "letting statement" +-- some one + +-- parseRange :: Parser a -> Parser (Range a) +-- parseRange p = msum [try pRange, pSingle] "range" +-- where +-- pRange = do +-- fr <- optional p +-- dotdot +-- to <- optional p +-- return $ case (fr,to) of +-- (Nothing, Nothing) -> RangeOpen +-- (Just x , Nothing) -> RangeLowerBounded x +-- (Nothing, Just y ) -> RangeUpperBounded y +-- (Just x , Just y ) -> RangeBounded x y +-- pSingle = do +-- x <- p +-- return (RangeSingle x) + +-- parseDomain :: Parser (Domain () Expression) +-- parseDomain = (forgetRepr <$> parseDomainWithRepr) "domain" + +-- parseDomainWithRepr :: Parser (Domain HasRepresentation Expression) +-- parseDomainWithRepr = pDomainAtom + +-- where + +-- pDomainAtom = msum +-- [ pBool, try pIntFromExpr, pInt, try pEnum, try pReference +-- , pMatrix, try pTupleWithout, pTupleWith +-- , pRecord, pVariant +-- , pSet +-- , pMSet +-- , try pFunction', pFunction +-- , pSequence +-- , pRelation +-- , pPartition +-- , DomainMetaVar <$> parseMetaVariable, parens parseDomainWithRepr +-- ] + +-- pBool = do +-- lexeme L_bool +-- -- parse and discard, compatibility with SR +-- _ <- optional $ parens $ commaSeparated0 $ parseRange parseExpr +-- return DomainBool + +-- pIntFromExpr = do +-- lexeme L_int +-- x <- parens parseExpr +-- case (let ?typeCheckerMode = StronglyTyped in typeOf x) of +-- Just (TypeInt TagInt) -> return $ DomainInt TagInt [RangeSingle x] +-- _ -> return $ DomainIntE x + +-- pInt = do +-- lexeme L_int +-- mxs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr +-- let xs = fromMaybe [] mxs +-- return $ DomainInt TagInt xs + +-- pReference = do +-- r <- identifierText +-- return $ DomainReference (Name r) Nothing + +-- pEnum = do +-- r <- identifierText +-- xs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr +-- st <- get +-- guard (Name r `elem` enumDomains st) +-- return $ DomainEnum (Name r) xs Nothing + +-- pMatrix = do +-- lexeme L_matrix +-- lexeme L_indexed +-- lexeme L_by +-- xs <- brackets (commaSeparated parseDomain) +-- lexeme L_of +-- y <- parseDomainWithRepr +-- return $ foldr DomainMatrix y xs + +-- pTupleWith = do +-- lexeme L_tuple +-- xs <- parens $ commaSeparated0 parseDomainWithRepr +-- return $ DomainTuple xs + +-- pTupleWithout = do +-- xs <- parens $ countSepAtLeast 2 parseDomainWithRepr comma +-- return $ DomainTuple xs + +-- pRecord = do +-- lexeme L_record +-- let one = do n <- parseName +-- lexeme L_Colon +-- d <- parseDomainWithRepr +-- return (n,d) +-- xs <- braces $ commaSeparated0 one +-- return $ DomainRecord xs + +-- pVariant = do +-- lexeme L_variant +-- let one = do n <- parseName +-- lexeme L_Colon +-- d <- parseDomainWithRepr +-- return (n,d) +-- xs <- braces $ commaSeparated0 one +-- return $ DomainVariant xs + +-- pSet = do +-- lexeme L_set +-- x <- parseSetAttr +-- y <- lexeme L_of >> parseDomainWithRepr +-- return $ DomainSet NoRepresentation x y + +-- pMSet = do +-- lexeme L_mset +-- x <- parseMSetAttr +-- y <- lexeme L_of >> parseDomainWithRepr +-- return $ DomainMSet NoRepresentation x y + +-- pFunction' = do +-- lexeme L_function +-- (y,z) <- arrowedPair parseDomainWithRepr +-- return $ DomainFunction NoRepresentation def y z + +-- pFunction = do +-- lexeme L_function +-- x <- parseFunctionAttr +-- (y,z) <- arrowedPair parseDomainWithRepr +-- return $ DomainFunction NoRepresentation x y z + +-- pSequence = do +-- lexeme L_sequence +-- x <- parseSequenceAttr +-- y <- lexeme L_of >> parseDomainWithRepr +-- return $ DomainSequence NoRepresentation x y + +-- pRelation = do +-- lexeme L_relation +-- pos <- getPosition +-- x <- parseRelationAttr +-- lexeme L_of +-- ys <- parens (parseDomainWithRepr `sepBy` lexeme L_Times) +-- let RelationAttr _ (BinaryRelationAttrs binAttrs) = x +-- when (length ys /= 2 && not (S.null binAttrs)) $ do +-- setPosition pos +-- failDoc $ "Only binary relations can have these attributes:" <+> +-- prettyList id "," (S.toList binAttrs) +-- return $ DomainRelation NoRepresentation x ys + +-- pPartition = do +-- lexeme L_partition +-- x <- parsePartitionAttr +-- lexeme L_from +-- y <- parseDomainWithRepr +-- return $ DomainPartition NoRepresentation x y + +-- parseAttributes :: Parser (DomainAttributes Expression) +-- parseAttributes = do +-- xs <- parens (commaSeparated0 parseAttribute) <|> return [] +-- return $ DomainAttributes xs +-- where +-- parseAttribute = msum [parseDontCare, try parseNameValue, parseDAName] +-- parseNameValue = DANameValue <$> (Name <$> identifierText) <*> parseExpr +-- parseDAName = DAName <$> (Name <$> identifierText) +-- parseDontCare = do dotdot ; return DADotDot + +-- parseSetAttr :: Parser (SetAttr Expression) +-- parseSetAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "set" attrs +-- ["size", "minSize", "maxSize"] +-- SetAttr <$> case filterSizey attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) + +-- parseMSetAttr :: Parser (MSetAttr Expression) +-- parseMSetAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "mset" attrs +-- [ "size", "minSize", "maxSize" +-- , "minOccur", "maxOccur" +-- ] +-- size <- case filterSizey attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of +-- [] -> return OccurAttr_None +-- [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) +-- [DANameValue "maxOccur" a] -> return (OccurAttr_MaxOccur a) +-- [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- return (MSetAttr size occur) + +-- parseFunctionAttr :: Parser (FunctionAttr Expression) +-- parseFunctionAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "function" attrs +-- [ "size", "minSize", "maxSize" +-- , "injective", "surjective", "bijective" +-- , "total" +-- ] +-- size <- case filterSizey attrs of +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- [] -> return SizeAttr_None +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- let partiality = if DAName "total" `elem` attrs +-- then PartialityAttr_Total +-- else PartialityAttr_Partial +-- jectivity <- case filterJectivity attrs of +-- [] -> return JectivityAttr_None +-- [DAName "bijective" ] -> return JectivityAttr_Bijective +-- [DAName "injective" ] -> return JectivityAttr_Injective +-- [DAName "surjective"] -> return JectivityAttr_Surjective +-- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- return (FunctionAttr size partiality jectivity) + +-- parseSequenceAttr :: Parser (SequenceAttr Expression) +-- parseSequenceAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "sequence" attrs +-- [ "size", "minSize", "maxSize" +-- , "injective", "surjective", "bijective" +-- ] +-- size <- case filterSizey attrs of +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- [] -> return SizeAttr_None +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- jectivity <- case filterJectivity attrs of +-- [] -> return JectivityAttr_None +-- [DAName "bijective" ] -> return JectivityAttr_Bijective +-- [DAName "injective" ] -> return JectivityAttr_Injective +-- [DAName "surjective"] -> return JectivityAttr_Surjective +-- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- return (SequenceAttr size jectivity) + +-- parseRelationAttr :: Parser (RelationAttr Expression) +-- parseRelationAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "relation" attrs (map (Name . stringToText) (["size", "minSize", "maxSize"] ++ binRelNames)) +-- size <- case filterSizey attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "size" a] -> return (SizeAttr_Size a) +-- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- let readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) +-- readBinRel' a = do +-- setPosition pos +-- failDoc $ "Not a binary relation attribute:" <+> pretty a +-- binRels <- mapM readBinRel' (filterBinRel attrs) +-- return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) + +-- parsePartitionAttr :: Parser (PartitionAttr Expression) +-- parsePartitionAttr = do +-- pos <- getPosition +-- DomainAttributes attrs <- parseAttributes +-- checkExtraAttributes pos "partition" attrs +-- [ "size", "minSize", "maxSize" +-- , "regular" +-- , "numParts", "minNumParts", "maxNumParts" +-- , "partSize", "minPartSize", "maxPartSize" +-- ] +-- unless (null $ filterAttrName ["complete"] attrs) $ do +-- setPosition pos +-- failDoc $ vcat [ "Partitions do not support the 'complete' attribute." +-- , "They are complete by default." +-- ] +-- unless (null $ filterSizey attrs) $ do +-- setPosition pos +-- failDoc $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) +-- , "This is because partitions are complete by default." +-- ] +-- partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "numParts" a] -> return (SizeAttr_Size a) +-- [DANameValue "minNumParts" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxNumParts" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of +-- [] -> return SizeAttr_None +-- [DANameValue "partSize" a] -> return (SizeAttr_Size a) +-- [DANameValue "minPartSize" a] -> return (SizeAttr_MinSize a) +-- [DANameValue "maxPartSize" a] -> return (SizeAttr_MaxSize a) +-- [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) +-- as -> do +-- setPosition pos +-- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) +-- let isRegular = DAName "regular" `elem` attrs +-- return PartitionAttr {..} + + +-- checkExtraAttributes :: SourcePos -> Doc -> [DomainAttribute a] -> [Name] -> Parser () +-- checkExtraAttributes pos ty attrs supported = do +-- let extras = mapMaybe f attrs +-- unless (null extras) $ do +-- setPosition pos +-- failDoc $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras +-- , "Only these are supported:" <+> prettyList id "," supported +-- ] +-- where +-- f (DANameValue nm _) | nm `notElem` supported = Just nm +-- f (DAName nm ) | nm `notElem` supported = Just nm +-- f _ = Nothing + +-- filterAttrName :: Ord a => [Name] -> [DomainAttribute a] -> [DomainAttribute a] +-- filterAttrName keep = sort . filter f +-- where +-- f (DANameValue nm _) | nm `elem` keep = True +-- f (DAName nm ) | nm `elem` keep = True +-- f _ = False + +-- filterSizey :: Ord a => [DomainAttribute a] -> [DomainAttribute a] +-- filterSizey = filterAttrName ["size", "minSize", "maxSize"] + +-- filterJectivity :: Ord a => [DomainAttribute a] -> [DomainAttribute a] +-- filterJectivity = filterAttrName ["injective", "surjective", "bijective"] + +-- filterBinRel :: Ord a => [DomainAttribute a] -> [DomainAttribute a] +-- filterBinRel = filterAttrName (map (Name . stringToText) binRelNames) + +-- parseMetaVariable :: Parser String +-- parseMetaVariable = do +-- let isMeta LMetaVar{} = True +-- isMeta _ = False +-- LMetaVar iden <- satisfyT isMeta +-- return (T.unpack iden) + +-- parseExpr :: Parser Expression +-- -- parseExpr | trace "parseExpr" True = parseAtomicExpr "expression" +-- parseExpr = parseAtomicExpr "expression" + +-- parseAtomicExpr :: Parser Expression +-- -- parseAtomicExpr | trace "parseAtomicExpr" True = parseAtomicExprNoPrePost "expression" +-- parseAtomicExpr = parseAtomicExprNoPrePost "expression" + +-- parseAtomicExprNoPrePost :: Parser Expression +-- -- parseAtomicExprNoPrePost | trace "parseAtomicExprNoPrePost" True = msum [try parseLiteral, parseTyped] +-- parseAtomicExprNoPrePost = msum [try parseLiteral, parseReference, parseTyped] + +-- parseTyped :: Parser Expression +-- -- parseTyped | trace "parseTyped" True = parens $ do +-- parseTyped = parens $ do +-- x <- parseExpr +-- lexeme L_Colon +-- d <- betweenTicks parseDomain +-- ty <- let ?typeCheckerMode = StronglyTyped in typeOfDomain d +-- return (Typed x ty) + +-- parseName :: Parser Name +-- parseName = Name <$> identifierText + +-- parseReference :: Parser Expression +-- parseReference = Reference <$> parseName <*> pure Nothing + +-- parseLiteral :: Parser Expression +-- parseLiteral = label "value" (do p <- pCore ; p) + +-- where + +-- -- convert x to a constant if possible +-- -- might save us from evaluating it again and again later +-- mkAbstractLiteral x = +-- case e2c (AbstractLiteral x) of +-- Nothing -> AbstractLiteral x +-- Just c -> Constant c + +-- pCore :: Parser (Parser Expression) +-- pCore = satisfyL $ \case +-- L_false -> Just $ return $ Constant $ ConstantBool False +-- L_true -> Just $ return $ Constant $ ConstantBool True +-- LIntLiteral i -> Just $ return $ Constant $ ConstantInt TagInt (fromInteger i) +-- L_OpenBracket -> Just pMatrix +-- L_tuple -> Just pTupleWith +-- L_OpenParen -> Just pTupleWithout +-- L_record -> Just pRecord +-- L_variant -> Just pVariant +-- L_OpenCurly -> Just pSet +-- L_mset -> Just pMSet +-- L_function -> Just pFunction +-- L_sequence -> Just pSequence +-- L_relation -> Just pRelation +-- L_partition -> Just pPartition +-- L_Minus -> Just $ do +-- p <- pCore +-- res <- p +-- return (negate res) +-- _ -> Nothing + +-- pMatrix = mkAbstractLiteral <$> do +-- -- lexeme L_OpenBracket +-- xs <- commaSeparated0 parseExpr +-- msum +-- [ do +-- let r = mkDomainIntB 1 (fromInt (genericLength xs)) +-- lexeme L_CloseBracket +-- return (AbsLitMatrix r xs) +-- , do +-- lexeme L_SemiColon +-- r <- parseDomain +-- lexeme L_CloseBracket +-- return (AbsLitMatrix r xs) +-- ] + +-- pTupleWith = mkAbstractLiteral <$> do +-- -- lexeme L_tuple +-- xs <- parens $ commaSeparated0 parseExpr +-- return (AbsLitTuple xs) + +-- pTupleWithout = mkAbstractLiteral <$> do +-- -- xs <- parens $ countSepAtLeast 2 parseExpr comma +-- xs <- countSepAtLeast 2 parseExpr comma +-- lexeme L_CloseParen +-- return (AbsLitTuple xs) + +-- pRecord = mkAbstractLiteral <$> do +-- -- lexeme L_record +-- let one = do n <- parseName +-- lexeme L_Eq +-- x <- parseExpr +-- return (n,x) +-- xs <- braces $ commaSeparated0 one +-- return $ AbsLitRecord xs + +-- pVariant = mkAbstractLiteral <$> do +-- -- lexeme L_variant +-- let one = do n <- parseName +-- lexeme L_Eq +-- x <- parseExpr +-- return (n,x) +-- (n,x) <- braces one +-- return $ AbsLitVariant Nothing n x + +-- pSet = mkAbstractLiteral <$> do +-- -- xs <- braces (commaSeparated0 parseExpr) +-- xs <- commaSeparated0 parseExpr +-- lexeme L_CloseCurly +-- return (AbsLitSet xs) + +-- pMSet = mkAbstractLiteral <$> do +-- -- lexeme L_mset +-- xs <- parens (commaSeparated0 parseExpr) +-- return (AbsLitMSet xs) + +-- pFunction = mkAbstractLiteral <$> do +-- -- lexeme L_function +-- xs <- parens (commaSeparated0 inner) +-- return (AbsLitFunction xs) +-- where +-- inner = arrowedPair parseExpr + +-- pSequence = mkAbstractLiteral <$> do +-- -- lexeme L_sequence +-- xs <- parens (commaSeparated0 parseExpr) +-- return (AbsLitSequence xs) + +-- pRelation = mkAbstractLiteral <$> do +-- -- lexeme L_relation +-- xs <- parens (commaSeparated0 (pTupleWith <|> pTupleWithout)) +-- xsFiltered <- forM xs $ \case +-- Constant (ConstantAbstract (AbsLitTuple is)) -> return (map Constant is) +-- AbstractLiteral (AbsLitTuple is) -> return is +-- x -> failDoc ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) +-- return (AbsLitRelation xsFiltered) + +-- pPartition = mkAbstractLiteral <$> do +-- -- lexeme L_partition +-- xs <- parens (commaSeparated0 inner) +-- return (AbsLitPartition xs) +-- where +-- inner = braces (commaSeparated0 parseExpr) + + +-- identifierText :: Parser T.Text +-- identifierText = do +-- LIdentifier i <- satisfyT isIdentifier +-- return i +-- where isIdentifier LIdentifier {} = True +-- isIdentifier _ = False + +-- satisfyT :: (Lexeme -> Bool) -> Parser Lexeme +-- satisfyT predicate = token nextPos testTok +-- where +-- testTok :: LexemePos -> Either [Message] Lexeme +-- testTok (LexemePos tok _ _) = +-- -- trace ("satisfyT: " ++ show pos ++ "\t" ++ show tok) $ +-- if predicate tok +-- then Right tok +-- else Left [Unexpected (showToken tok)] + +-- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos +-- nextPos _ _ (LexemePos _ _ pos) = pos + +-- satisfyL :: forall a . (Lexeme -> Maybe a) -> Parser a +-- satisfyL predicate = token nextPos testTok +-- where +-- testTok :: LexemePos -> Either [Message] a +-- testTok (LexemePos tok _ _) = +-- -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ +-- case predicate tok of +-- Nothing -> Left [Unexpected (showToken tok)] +-- Just res -> Right res + +-- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos +-- nextPos _ _ (LexemePos _ _ pos) = pos + +-- integer :: Parser Integer +-- integer = do +-- LIntLiteral i <- satisfyT isInt +-- return i +-- where isInt LIntLiteral {} = True +-- isInt _ = False + +-- -- parse a comma separated list of things. can be 0 things. +-- commaSeparated0 :: Parser a -> Parser [a] +-- commaSeparated0 p = sepEndBy p comma + +-- -- parse a comma separated list of things. has to be at least 1 thing. +-- commaSeparated :: Parser a -> Parser [a] +-- commaSeparated p = sepEndBy1 p comma + +-- comma :: Parser () +-- comma = lexeme L_Comma "comma" + +-- dot :: Parser () +-- dot = lexeme L_Dot "dot" + +-- dotdot :: Parser () +-- dotdot = (dot >> dot) ".." + + +-- -- parses a specified number of elements separated by the given separator +-- countSep :: Int -> Parser a -> Parser sep -> Parser [a] +-- countSep 1 p _ = (:[]) <$> p +-- countSep i p separator | i > 1 = (:) <$> (p <* separator) <*> countSep (i-1) p separator +-- countSep _ _ _ = return [] + +-- -- parses at least a given number of elements separated by the given separator +-- countSepAtLeast :: Int -> Parser a -> Parser sep -> Parser [a] +-- countSepAtLeast i p separator = (++) <$> countSep i p separator <*> many (separator *> p) + +-- betweenTicks :: Parser a -> Parser a +-- betweenTicks = between (lexeme L_BackTick) (lexeme L_BackTick) + +-- parens :: Parser a -> Parser a +-- parens = between (lexeme L_OpenParen) (lexeme L_CloseParen) + +-- braces :: Parser a -> Parser a +-- braces = between (lexeme L_OpenCurly) (lexeme L_CloseCurly) + +-- brackets :: Parser a -> Parser a +-- brackets = between (lexeme L_OpenBracket) (lexeme L_CloseBracket) + +-- lexeme :: Lexeme -> Parser () +-- -- lexeme l = trace ("lexeme: " ++ show l) (void (satisfyT (l==)) show (lexemeFace l)) +-- lexeme l = void (satisfyT (l==)) show (lexemeFace l) + +-- arrowedPair :: Parser a -> Parser (a,a) +-- arrowedPair p = do +-- i <- p +-- lexeme L_LongArrow +-- j <- p +-- return (i,j) + +-- inCompleteFile :: Parser a -> Parser a +-- inCompleteFile parser = do +-- result <- parser +-- eof +-- return result diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index d035f3b05a..39838cdde4 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -4,6 +4,7 @@ {-# LANGUAGE Rank2Types #-} {-# LANGUAGE DeriveGeneric, DeriveDataTypeable #-} {-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE InstanceSigs #-} module Conjure.Prelude @@ -95,6 +96,8 @@ import Control.Monad.Trans.Identity as X ( IdentityT(..) ) import Control.Monad.Trans.Maybe as X ( MaybeT(..), runMaybeT ) import Control.Monad.Writer.Strict as X ( MonadWriter(listen, tell), WriterT(runWriterT), execWriterT, runWriter ) import Control.Monad.Reader as X ( MonadReader(ask), ReaderT(..), runReaderT, asks ) + +import Control.Monad.Fail import Control.Arrow as X ( first, second, (***), (&&&) ) import Control.Category as X ( (<<<), (>>>) ) diff --git a/src/Conjure/Process/Boost.hs b/src/Conjure/Process/Boost.hs index d35f05d235..fcd325dcee 100644 --- a/src/Conjure/Process/Boost.hs +++ b/src/Conjure/Process/Boost.hs @@ -217,8 +217,8 @@ refersTo _ _ = False nameFromAbstractPattern :: (MonadFail m) => AbstractPattern -> m Name nameFromAbstractPattern a = case namesFromAbstractPattern a of [n] -> pure n - [] -> fail "[nameFromAbstractPattern] no names in abstract pattern" - _ -> fail "[nameFromAbstractPattern] more than one name in abstract pattern" + [] -> failDoc "[nameFromAbstractPattern] no names in abstract pattern" + _ -> failDoc "[nameFromAbstractPattern] more than one name in abstract pattern" -- | Get the list of names from an abstract pattern. namesFromAbstractPattern :: AbstractPattern -> [Name] diff --git a/src/Conjure/Representations/Function/FunctionND.hs b/src/Conjure/Representations/Function/FunctionND.hs index 5a4fb77de9..7444a51be5 100644 --- a/src/Conjure/Representations/Function/FunctionND.hs +++ b/src/Conjure/Representations/Function/FunctionND.hs @@ -60,7 +60,7 @@ functionND = Representation chck downD structuralCons downC up symmetryOrdering let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] + DomainTuple ts -> map fromInt [1 .. genericLength ts] :: [Constant] DomainRecord rs -> map (fromName . fst) rs _ -> bug $ vcat [ "FunctionNDPartial.structuralCons" , "innerDomainFr:" <+> pretty innerDomainFr @@ -256,6 +256,7 @@ functionND = Representation chck downD structuralCons downC up symmetryOrdering Just [(_, innerDomain)] <- downD ("SO", domain) innerSO downX1 inner innerDomain + viewAsDomainTuple :: Domain r x -> Maybe [Domain r x] viewAsDomainTuple (DomainTuple doms) = Just doms viewAsDomainTuple (DomainRecord doms) = Just (doms |> sortBy (comparing fst) |> map snd) diff --git a/src/Conjure/Representations/Function/FunctionNDPartial.hs b/src/Conjure/Representations/Function/FunctionNDPartial.hs index bf31f13661..c24aee9d28 100644 --- a/src/Conjure/Representations/Function/FunctionNDPartial.hs +++ b/src/Conjure/Representations/Function/FunctionNDPartial.hs @@ -63,7 +63,7 @@ functionNDPartial = Representation chck downD structuralCons downC up symmetryOr innerDomainTo) | all domainCanIndexMatrix innerDomainFrs = do let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] + DomainTuple ts -> map fromInt [1 .. genericLength ts] :: [Constant] DomainRecord rs -> map (fromName . fst) rs _ -> bug $ vcat [ "FunctionNDPartial.structuralCons" , "innerDomainFr:" <+> pretty innerDomainFr @@ -284,7 +284,7 @@ functionNDPartial = Representation chck downD structuralCons downC up symmetryOr -- setting up the quantification let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] + DomainTuple ts -> map fromInt [1 .. genericLength ts] ::[Constant] DomainRecord rs -> map (fromName . fst) rs _ -> bug $ vcat [ "FunctionND.rule_Comprehension" , "indexDomain:" <+> pretty innerDomainFr diff --git a/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs b/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs index b825a2371d..2f1c5b68bd 100644 --- a/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs +++ b/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs @@ -93,7 +93,7 @@ functionNDPartialDummy = Representation chck downD structuralCons downC up symme innerDomainTo) | all domainCanIndexMatrix innerDomainFrs = do let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] + DomainTuple ts -> map fromInt [1 .. genericLength ts] :: [Constant] DomainRecord rs -> map (fromName . fst) rs _ -> [] toIndex x = if null kRange then [x] else [ [essence| &x[&k] |] | k <- kRange ] diff --git a/src/Conjure/Representations/Internal.hs b/src/Conjure/Representations/Internal.hs index d6013b15d4..6e6d2a24c4 100644 --- a/src/Conjure/Representations/Internal.hs +++ b/src/Conjure/Representations/Internal.hs @@ -41,24 +41,24 @@ data Representation (m :: * -> *) = Representation , rSymmetryOrdering :: TypeOf_SymmetryOrdering m } -type TypeOf_ReprCheck (m :: * -> *) = (MonadFail m) => +type TypeOf_ReprCheck (m :: * -> *) = forall x . (Data x, Pretty x, ExpressionLike x) => (Domain () x -> m [DomainX x]) -- other checkers for inner domains -> Domain () x -- this domain -> m [DomainX x] -- with all repr options -type TypeOf_DownD (m :: * -> *) = (MonadFail m) => +type TypeOf_DownD (m :: * -> *) = (Name, DomainX Expression) -> m (Maybe [(Name, DomainX Expression)]) -type TypeOf_SymmetryOrdering (m :: * -> *) = (MonadFail m) => +type TypeOf_SymmetryOrdering (m :: * -> *) = ((Expression -> m [Expression]) -> Expression -> DomainX Expression -> m Expression) -- inner S.O. -> (Expression -> m [Expression]) -- general downX1 -> Expression -- this as an expression -> DomainX Expression -- name and domain -> m Expression -- output, of type [int] -type TypeOf_Structural (m :: * -> *) = (MonadFail m) => +type TypeOf_Structural (m :: * -> *) = (DomainX Expression -> m (Expression -> m [Expression])) -- other structural constraints for inner domains -> (Expression -> m [Expression]) -- general downX1 @@ -67,11 +67,11 @@ type TypeOf_Structural (m :: * -> *) = (MonadFail m) => -> m [Expression] -- structural constraints ) -type TypeOf_DownC (m :: * -> *) = (MonadFail m) => +type TypeOf_DownC (m :: * -> *) = (Name, DomainC, Constant) -- the input name, domain and constant -> m (Maybe [(Name, DomainC, Constant)]) -- the outputs names, domains, and constants -type TypeOf_Up (m :: * -> *) = (MonadFail m) => +type TypeOf_Up (m :: * -> *) = [(Name, Constant)] -> -- all known constants, representing a solution at the low level (Name, DomainC) -> -- the name and domain we are working on m (Name, Constant) -- the output constant, at the high level diff --git a/src/Conjure/Representations/Set/Explicit.hs b/src/Conjure/Representations/Set/Explicit.hs index 59697ae2c3..225a8c53e5 100644 --- a/src/Conjure/Representations/Set/Explicit.hs +++ b/src/Conjure/Representations/Set/Explicit.hs @@ -103,3 +103,4 @@ setExplicit = Representation chck downD structuralCons downC up symmetryOrdering [inner] <- downX1 inp Just [(_, innerDomain)] <- downD ("SO", domain) innerSO downX1 inner innerDomain + \ No newline at end of file diff --git a/src/Conjure/Representations/Set/Occurrence.hs b/src/Conjure/Representations/Set/Occurrence.hs index 78b8513404..b390f4fdec 100644 --- a/src/Conjure/Representations/Set/Occurrence.hs +++ b/src/Conjure/Representations/Set/Occurrence.hs @@ -3,11 +3,13 @@ module Conjure.Representations.Set.Occurrence ( setOccurrence ) where -- conjure -import Conjure.Prelude +import Conjure.Prelude hiding (MonadFail,fail) import Conjure.Language import Conjure.Representations.Internal import Conjure.Representations.Common +import Control.Monad.Fail + setOccurrence :: forall m . (MonadFailDoc m, NameGen m) => Representation m setOccurrence = Representation chck downD structuralCons downC up symmetryOrdering @@ -87,7 +89,7 @@ setOccurrence = Representation chck downD structuralCons downC up symmetryOrderi up _ _ = na "{up} Occurrence" -- produce a [int] - symmetryOrdering :: TypeOf_SymmetryOrdering m + symmetryOrdering :: (MonadFail m) => TypeOf_SymmetryOrdering m symmetryOrdering _innerSO downX1 inp (DomainSet Set_Occurrence _attrs innerDomain) = do [m] <- downX1 inp (iPat, i) <- quantifiedVar diff --git a/src/Conjure/Rules/Definition.hs b/src/Conjure/Rules/Definition.hs index 0ea354b883..eff3154491 100644 --- a/src/Conjure/Rules/Definition.hs +++ b/src/Conjure/Rules/Definition.hs @@ -162,7 +162,7 @@ data Rule = Rule -- a fail in {n} means that the rule isn't applicable , MonadFailDoc m, MonadUserError m, MonadLog m , NameGen m, EnumerateDomain m - -- a fail in {m} means a bug + -- a failDoc in {m} means a bug , ?typeCheckerMode :: TypeCheckerMode ) => Zipper a Expression -- to query context diff --git a/src/Conjure/Rules/Horizontal/Function.hs b/src/Conjure/Rules/Horizontal/Function.hs index a22a95afab..592e699953 100644 --- a/src/Conjure/Rules/Horizontal/Function.hs +++ b/src/Conjure/Rules/Horizontal/Function.hs @@ -735,7 +735,7 @@ rule_Defined_Intersect = "function-Defined-intersect" `namedRule` theRule where tx <- typeOf x case tx of TypeFunction{} -> return () - _ -> fail "type incompatibility in intersect operator" + _ -> failDoc "type incompatibility in intersect operator" let i = Reference iPat Nothing return ( "Horizontal rule for function intersection" @@ -761,7 +761,7 @@ rule_DefinedOrRange_Union = "function-DefinedOrRange-union" `namedRule` theRule tx <- typeOf x case tx of TypeFunction{} -> return () - _ -> fail "type incompatibility in union operator" + _ -> failDoc "type incompatibility in union operator" let mkx = mk x let mky = mk y let i = Reference iPat Nothing @@ -795,7 +795,7 @@ rule_DefinedOrRange_Difference = "function-DefinedOrRange-difference" `namedRule tx <- typeOf x case tx of TypeFunction{} -> return () - _ -> fail "type incompatibility in difference operator" + _ -> failDoc "type incompatibility in difference operator" let mkx = mk x let mky = mk y let i = Reference iPat Nothing diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 35a86da3fa..0a67c58f58 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -288,7 +288,7 @@ rule_Comprehension_Defined = "sequence-defined" `namedRule` theRule where SizeAttr_Size x -> return x SizeAttr_MaxSize x -> return x SizeAttr_MinMaxSize _ x -> return x - _ -> fail "rule_Comprehension_Defined maxSize" + _ -> failDoc "rule_Comprehension_Defined maxSize" let upd val old = lambdaToFunction pat old val return ( "Mapping over defined(f)" @@ -405,7 +405,7 @@ rule_Image_Bool = "sequence-image-bool" `namedRule` theRule where TypeSequence TypeBool <- typeOf func return (func, arg) case try of - Nothing -> return (const ch) -- do not fail if a child is not of proper form + Nothing -> return (const ch) -- do not failDoc if a child is not of proper form Just (func, arg) -> do -- just return it back unchanged seenBefore <- gets id case seenBefore of @@ -451,7 +451,7 @@ rule_Image_Int = "sequence-image-int" `namedRule` theRule where TypeSequence (TypeInt _) <- typeOf func return (func, arg) case try of - Nothing -> return (const ch) -- do not fail if a child is not of proper form + Nothing -> return (const ch) -- do not failDoc if a child is not of proper form Just (func, arg) -> do -- just return it back unchanged seenBefore <- gets id case seenBefore of @@ -521,14 +521,14 @@ rule_Substring = "substring" `namedRule` theRule where SizeAttr_Size x -> return x SizeAttr_MaxSize x -> return x SizeAttr_MinMaxSize _ x -> return x - _ -> fail "rule_Substring maxSize" + _ -> failDoc "rule_Substring maxSize" DomainSequence _ (SequenceAttr bSizeAttr _) _ <- domainOf b bMaxSize <- case bSizeAttr of SizeAttr_Size x -> return x SizeAttr_MaxSize x -> return x SizeAttr_MinMaxSize _ x -> return x - _ -> fail "rule_Substring maxSize" + _ -> failDoc "rule_Substring maxSize" let maxSize = [essence| max([&aMaxSize, &bMaxSize]) |] @@ -559,14 +559,14 @@ rule_Subsequence = "subsequence" `namedRule` theRule where SizeAttr_Size x -> return x SizeAttr_MaxSize x -> return x SizeAttr_MinMaxSize _ x -> return x - _ -> fail "rule_Subsequence maxSize" + _ -> failDoc "rule_Subsequence maxSize" DomainSequence _ (SequenceAttr bSizeAttr _) _ <- domainOf b bMaxSize <- case bSizeAttr of SizeAttr_Size x -> return x SizeAttr_MaxSize x -> return x SizeAttr_MinMaxSize _ x -> return x - _ -> fail "rule_Subsequence maxSize" + _ -> failDoc "rule_Subsequence maxSize" -- for each value in a, find an index into b such that these indices are in increasing order -- when there are multiple mappings that produce the same "a" (i.e. when there are duplicates in b) diff --git a/src/Conjure/Rules/Horizontal/Set.hs b/src/Conjure/Rules/Horizontal/Set.hs index 7775d0087c..7bae16d0d3 100644 --- a/src/Conjure/Rules/Horizontal/Set.hs +++ b/src/Conjure/Rules/Horizontal/Set.hs @@ -125,7 +125,7 @@ rule_Intersect = "set-intersect" `namedRule` theRule where TypeMSet{} -> return () TypeFunction{} -> return () TypeRelation{} -> return () - _ -> fail "type incompatibility in intersect operator" + _ -> failDoc "type incompatibility in intersect operator" let i = Reference iPat Nothing return ( "Horizontal rule for set intersection" @@ -154,7 +154,7 @@ rule_Union = "set-union" `namedRule` theRule where TypeMSet{} -> return () TypeFunction{} -> return () TypeRelation{} -> return () - _ -> fail "type incompatibility in union operator" + _ -> failDoc "type incompatibility in union operator" let i = Reference iPat Nothing return ( "Horizontal rule for set union" @@ -189,7 +189,7 @@ rule_Difference = "set-difference" `namedRule` theRule where TypeMSet{} -> return () TypeFunction{} -> return () TypeRelation{} -> return () - _ -> fail "type incompatibility in difference operator" + _ -> failDoc "type incompatibility in difference operator" let i = Reference iPat Nothing return ( "Horizontal rule for set difference" diff --git a/src/Conjure/Rules/Transform.hs b/src/Conjure/Rules/Transform.hs index ad09b2852e..5f6a71fe3b 100644 --- a/src/Conjure/Rules/Transform.hs +++ b/src/Conjure/Rules/Transform.hs @@ -499,7 +499,7 @@ rule_Transformed_Variant_Index = "transformed-variant-index" `namedRule` theRule name <- nameOut arg argInt <- case elemIndex name (map fst ds) of - Nothing -> fail "Variant indexing, not a member of the type." + Nothing -> failDoc "Variant indexing, not a member of the type." Just argInt -> return argInt return ( "Variant indexing on:" <+> pretty p @@ -521,7 +521,7 @@ rule_Transformed_Variant_Active = "transformed-variant-active" `namedRule` theRu TypeVariant ds <- typeOf x (xWhich:_) <- downX1 x argInt <- case elemIndex name (map fst ds) of - Nothing -> fail "Variant indexing, not a member of the type." + Nothing -> failDoc "Variant indexing, not a member of the type." Just argInt -> return $ fromInt $ fromIntegral $ argInt + 1 return ( "Variant active on:" <+> pretty p diff --git a/src/Conjure/Rules/Vertical/Record.hs b/src/Conjure/Rules/Vertical/Record.hs index 52161df717..824cc9a295 100644 --- a/src/Conjure/Rules/Vertical/Record.hs +++ b/src/Conjure/Rules/Vertical/Record.hs @@ -79,7 +79,7 @@ rule_Record_Index = "record-index" `namedRule` theRule where TypeRecord ds <- typeOf t name <- nameOut i iInt <- case elemIndex name (map fst ds) of - Nothing -> fail "Record indexing, not a member of the type." + Nothing -> failDoc "Record indexing, not a member of the type." Just iInt -> return iInt ts <- downX1 t return diff --git a/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs b/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs index 032c483c46..a0425ea492 100644 --- a/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs +++ b/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs @@ -18,7 +18,7 @@ rule_Comprehension = "sequence-comprehension{ExplicitBounded}" `namedRule` theRu SizeAttr_Size x -> return x SizeAttr_MaxSize x -> return x SizeAttr_MinMaxSize _ x -> return x - _ -> fail "rule_Comprehension_Defined maxSize" + _ -> failDoc "rule_Comprehension_Defined maxSize" [sLength, sValues] <- downX1 sequ let upd val old = lambdaToFunction pat old val return diff --git a/src/Conjure/Rules/Vertical/Variant.hs b/src/Conjure/Rules/Vertical/Variant.hs index c00ee46bf6..6d12eeb743 100644 --- a/src/Conjure/Rules/Vertical/Variant.hs +++ b/src/Conjure/Rules/Vertical/Variant.hs @@ -90,7 +90,7 @@ rule_Variant_Index = "variant-index" `namedRule` theRule where (xWhich:xs) <- downX1 x name <- nameOut arg argInt <- case elemIndex name (map fst ds) of - Nothing -> fail "Variant indexing, not a member of the type." + Nothing -> failDoc "Variant indexing, not a member of the type." Just argInt -> return argInt return ( "Variant indexing on:" <+> pretty p @@ -110,7 +110,7 @@ rule_Variant_Active = "variant-active" `namedRule` theRule where TypeVariant ds <- typeOf x (xWhich:_) <- downX1 x argInt <- case elemIndex name (map fst ds) of - Nothing -> fail "Variant indexing, not a member of the type." + Nothing -> failDoc "Variant indexing, not a member of the type." Just argInt -> return $ fromInt $ fromIntegral $ argInt + 1 return ( "Variant active on:" <+> pretty p diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index f84670ec44..6833bb1a30 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -63,6 +63,7 @@ readModelFromStdin = do readParamJSON :: (?typeCheckerMode :: TypeCheckerMode) => MonadIO m => + MonadFail m => MonadUserError m => MonadLog m => Model -> FilePath -> m Model @@ -176,6 +177,7 @@ onlyPreamble writeModel :: + MonadFail m => MonadIO m => MonadUserError m => Int -> @@ -221,6 +223,7 @@ writeModel _ _ _ _ = bug "writeModels" writeModels :: + MonadFail m => MonadIO m => MonadUserError m => Int -> diff --git a/src/Conjure/UI/TypeCheck.hs b/src/Conjure/UI/TypeCheck.hs index a5c85fee00..2910c598eb 100644 --- a/src/Conjure/UI/TypeCheck.hs +++ b/src/Conjure/UI/TypeCheck.hs @@ -45,6 +45,7 @@ typeCheckModel_StandAlone model0 = do typeCheckModel :: + MonadFail m => MonadUserError m => (?typeCheckerMode :: TypeCheckerMode) => Model -> m Model @@ -137,7 +138,7 @@ typeCheckModel model1 = do go (TypeTuple ts) o = fromList <$> sequence [ go t [essence| &o[&i] |] | (i', t) <- zip allNats ts - , let i = fromInt i' + , let i :: Expression = fromInt i' ] go (TypeMatrix _ t) (AbstractLiteral (AbsLitMatrix _ os)) = fromList <$> sequence [ go t o | o <- os ] diff --git a/src/Conjure/UI/TypeScript.hs b/src/Conjure/UI/TypeScript.hs index e510f0ca63..e73de8c7e9 100644 --- a/src/Conjure/UI/TypeScript.hs +++ b/src/Conjure/UI/TypeScript.hs @@ -2,6 +2,7 @@ {-# LANGUAGE KindSignatures #-} {-# OPTIONS_GHC -fno-warn-orphans #-} + module Conjure.UI.TypeScript ( tsDef ) where import Conjure.Prelude hiding ( (<>) ) @@ -14,7 +15,7 @@ import Data.Aeson.Types ( defaultOptions ) import Data.Aeson.TypeScript.TH -deriveTypeScript defaultOptions ''AbstractLiteral +deriveTypeScript defaultOptions ''AbstractLiteral deriveTypeScript defaultOptions ''AbstractPattern deriveTypeScript defaultOptions ''AttrName deriveTypeScript defaultOptions ''BinaryRelationAttr From 1f400af36e97fe4a5b29457a1bf9f5ddf76ef539 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 27 Sep 2022 13:48:20 +0100 Subject: [PATCH 055/378] Work on expression parsing --- src/Conjure/Language/AST/Expression.hs | 2 +- src/Conjure/Language/AST/Syntax.hs | 59 ++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index bb2c21f344..da584fd176 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -6,7 +6,7 @@ import Conjure.Language.AST.Syntax parseExpression :: Parser ExpressionNode parseExpression = do - IntLiteral . RealToken <$> intLiteral + Literal . IntLiteral . RealToken <$> intLiteral parseExpressionStrict :: Parser ExpressionNode --can fail parseExpressionStrict = do diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index aa544f86dc..e511c603b6 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -145,12 +145,65 @@ newtype NameNode = NameNode LToken --Expressions data ExpressionNode = - IntLiteral LToken - | BinaryOpNode ExpressionNode LToken ExpressionNode - | UnaryPrefixOpNode LToken ExpressionNode + Literal LiteralNode + | IdentifierNode NameNode + | QuantificationExpr QuantificationExpressionNode + | ComprehensionExpr ComprehensionExpressionNode + | OperatorExpressionNode OperatorExpressionNode | MissingExpressionNode LToken deriving (Show) +newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) +data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) +data LiteralNode = + IntLiteral LToken + | BoolLiteral LToken + | MatrixLiteral MatrixLiteralNode + | TupleLiteralNode LongTuple + | TupleLiteralNodeShort ShortTuple + | RecordLiteral (ListNode RecordMemberNode) + -- | VariantLiteral VariantLiteralNode special case of record handled by type checker + | SetLiteral (ListNode ExpressionNode) + | MSetLiteral LToken (ListNode ExpressionNode) + | FunctionLiteral LToken (ListNode ArrowPairNode) + | SequenceLiteral LToken (ListNode ExpressionNode) + | RelationLiteral LToken (ListNode RelationElemNode) + | PartitionLiteral LToken (ListNode PartitionElemNode) + deriving (Show) + +data MatrixLiteralNode = + MatrixLiteralExplicitDomain (ListNode ExpressionNode) LToken DomainNode + | MatrixLiteralImplicitDomain (ListNode ExpressionNode) + deriving (Show) + +data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode + deriving (Show) + +data ArrowPairNode = ArrowPairNode ExpressionNode LToken ExpressionNode + deriving (Show) + +data RelationElemNode = RelationElemNodeLabeled ShortTuple + | RelationElemNodeShort ShortTuple + deriving (Show) + +data PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) + deriving (Show) + +data QuantificationExpressionNode = QuantificationExpressionNode + LToken + (Sequence QuantificationPattern) + + deriving (Show) + +data QuantificationPattern = QuantificationPattern + deriving (Show) +data ComprehensionExpressionNode = + ComprehensionExprv + deriving (Show) + +data OperatorExpressionNode = + OperatorExpressionNodev + deriving (Show) From a3394ffabed4def4400513ce5d1a7a9c20ab48b3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 27 Sep 2022 16:45:00 +0100 Subject: [PATCH 056/378] Implelemted literals --- src/Conjure/Language/AST/Domain.hs | 117 ++++---- src/Conjure/Language/AST/Expression.hs | 123 +++++++- src/Conjure/Language/AST/Helpers.hs | 81 ++--- src/Conjure/Language/AST/Syntax.hs | 396 ++++++++++++------------- 4 files changed, 413 insertions(+), 304 deletions(-) diff --git a/src/Conjure/Language/AST/Domain.hs b/src/Conjure/Language/AST/Domain.hs index 73d45beadf..a36b5d35da 100644 --- a/src/Conjure/Language/AST/Domain.hs +++ b/src/Conjure/Language/AST/Domain.hs @@ -1,58 +1,60 @@ {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} + {-# HLINT ignore "Use <$>" #-} module Conjure.Language.AST.Domain where -import Conjure.Prelude -import Conjure.Language.AST.Helpers import Conjure.Language.AST.Expression -import Text.Megaparsec -import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax +import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Prelude +import Text.Megaparsec parseDomain :: Parser DomainNode -parseDomain = do - choice [ - BoolDomainNode <$> need L_bool, - parseIntDomain, - parseTuple, - parseRecord, - parseVariant, - parseMatrix, - parseSet, - parseMSet, - parseFunction, - parseSequenceDomain, - parseRelation, - parsePartition, - parseEnumDomain, - parseMissingDomain - ] -parseIntDomain :: Parser DomainNode -parseIntDomain = do +parseDomain = do + choice + [ BoolDomainNode <$> need L_bool + , parseIntDomain + , parseTuple + , parseRecord + , parseVariant + , parseMatrix + , parseSet + , parseMSet + , parseFunction + , parseSequenceDomain + , parseRelation + , parsePartition + , parseEnumDomain + , parseMissingDomain + ] + +parseIntDomain :: Parser DomainNode +parseIntDomain = do lInt <- need L_int ranges <- parenList $ commaList parseRange return $ RangedIntDomainNode lInt ranges -parseTuple :: Parser DomainNode -parseTuple = do +parseTuple :: Parser DomainNode +parseTuple = do lTuple <- need L_tuple members <- parenList $ commaList parseDomain return $ TupleDomainNode lTuple members -parseRecord :: Parser DomainNode -parseRecord = do +parseRecord :: Parser DomainNode +parseRecord = do lRecord <- need L_record members <- curlyBracketList $ commaList parseNameDomain return $ RecordDomainNode lRecord members -parseVariant :: Parser DomainNode -parseVariant = do +parseVariant :: Parser DomainNode +parseVariant = do lVariant <- need L_variant members <- curlyBracketList $ commaList parseNameDomain return $ VariantDomainNode lVariant members -parseMatrix :: Parser DomainNode -parseMatrix = do +parseMatrix :: Parser DomainNode +parseMatrix = do lMatrix <- need L_matrix lIndexed <- want L_indexed lBy <- want L_by @@ -61,24 +63,24 @@ parseMatrix = do domain <- parseDomain return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain -parseSet :: Parser DomainNode -parseSet = do +parseSet :: Parser DomainNode +parseSet = do lSet <- need L_set attributes <- parenList $ commaList parseAttribute lOf <- want L_of domain <- parseDomain return $ SetDomainNode lSet attributes lOf domain -parseMSet :: Parser DomainNode -parseMSet = do +parseMSet :: Parser DomainNode +parseMSet = do lMSet <- need L_mset attributes <- parenList $ commaList parseAttribute lOf <- want L_of domain <- parseDomain return $ MSetDomainNode lMSet attributes lOf domain -parseFunction :: Parser DomainNode -parseFunction = do +parseFunction :: Parser DomainNode +parseFunction = do lFunction <- need L_function attributes <- parenList $ commaList parseAttribute fromDomain <- parseDomain @@ -86,24 +88,24 @@ parseFunction = do toDomain <- parseDomain return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain -parseSequenceDomain :: Parser DomainNode -parseSequenceDomain = do +parseSequenceDomain :: Parser DomainNode +parseSequenceDomain = do lSequence <- need L_sequence attributes <- parenList $ commaList parseAttribute lOf <- want L_of domain <- parseDomain return $ SequenceDomainNode lSequence attributes lOf domain -parseRelation :: Parser DomainNode -parseRelation = do +parseRelation :: Parser DomainNode +parseRelation = do lRelation <- need L_relation attributes <- parenList $ commaList parseAttribute lOf <- want L_of domains <- parenList $ parseSequence L_Times parseDomain return $ RelationDomainNode lRelation attributes lOf domains -parsePartition :: Parser DomainNode -parsePartition = do +parsePartition :: Parser DomainNode +parsePartition = do lPartition <- need L_partition attributes <- parenList $ commaList parseAttribute lFrom <- want L_from @@ -113,10 +115,10 @@ parsePartition = do parseEnumDomain :: Parser DomainNode parseEnumDomain = do name <- parseIdentifierStrict - (RangedEnumNode name <$> try (parenList (commaList parseRange))) + (RangedEnumNode name <$> try (parenList (commaList parseRange))) <|> return (EnumDomainNode name) ---Util +-- Util parseNameDomain :: Parser NamedDomainNode parseNameDomain = do name <- parseIdentifierStrict @@ -125,18 +127,17 @@ parseNameDomain = do return $ NameDomainNode name lColon domain parseRange :: Parser RangeNode -parseRange = do - lExpr <- optional parseExpressionStrict - dots <- parseDoubleDot - rExpr <- optional parseExpressionStrict - case (lExpr,rExpr) of - (Nothing,Nothing) -> return $ OpenRangeNode dots - (Just l , Nothing) -> return $ RightUnboundedRangeNode l dots - (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r - (Just l , Just r) -> return $ BoundedRangeNode l dots r - <|> SingleRangeNode <$> parseExpression - - +parseRange = + do + lExpr <- optional parseExpressionStrict + dots <- parseDoubleDot + rExpr <- optional parseExpressionStrict + case (lExpr, rExpr) of + (Nothing, Nothing) -> return $ OpenRangeNode dots + (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots + (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r + (Just l, Just r) -> return $ BoundedRangeNode l dots r + <|> SingleRangeNode <$> parseExpression parseDoubleDot :: Parser DoubleDotNode parseDoubleDot = do @@ -146,7 +147,7 @@ parseDoubleDot = do parseAttribute :: Parser AttributeNode parseAttribute = do - name <- parseIdentifier --TODO This is wrong + name <- parseIdentifier -- TODO This is wrong NamedExpressionAttribute name <$> parseExpression <|> return (NamedAttributeNode name) diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index da584fd176..cdd0e9a9e8 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -1,16 +1,125 @@ +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +{-# HLINT ignore "Use <$>" #-} module Conjure.Language.AST.Expression where -import Conjure.Prelude hiding (many) -import Text.Megaparsec + import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax +import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Prelude hiding (many) +import Text.Megaparsec parseExpression :: Parser ExpressionNode parseExpression = do - Literal . IntLiteral . RealToken <$> intLiteral + choice [ + Literal <$> parseLiteral + ] + -parseExpressionStrict :: Parser ExpressionNode --can fail -parseExpressionStrict = do +parseExpressionStrict :: Parser ExpressionNode -- can fail +parseExpressionStrict = do expr <- try parseExpression - case expr of + case expr of MissingExpressionNode _ -> empty - _ -> return expr \ No newline at end of file + _ -> return expr + +parseLiteral :: Parser LiteralNode +parseLiteral = + choice + [ parseIntLiteral + , parseBoolLiteral + , parseMatrixLiteral + , parseTupleLiteral + , parseRecordLiteral + , parseSetLiteral + , parseMSetLiteral + , parseFunctionLiteral + , parseSequenceLiteral + , parseRelationLiteral + , parsePartitionLiteral + ] + +parseIntLiteral :: Parser LiteralNode +parseIntLiteral = IntLiteral . RealToken <$> intLiteral + +parseBoolLiteral :: Parser LiteralNode +parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) + +parseMatrixLiteral :: Parser LiteralNode +parseMatrixLiteral = do empty + +parseTupleLiteral :: Parser LiteralNode +parseTupleLiteral = do + lTuple <- need L_tuple + members <- parenList $ commaList parseExpression + return $ TupleLiteralNode $ LongTuple lTuple members + +parseRecordLiteral :: Parser LiteralNode +parseRecordLiteral = do + lRecord <- need L_record + members <- curlyBracketList (commaList parseRecordMember) + return $ RecordLiteral lRecord members + +parseVariantLiteral :: Parser LiteralNode +parseVariantLiteral = do + lVariant <- need L_variant + members <- curlyBracketList (commaList parseRecordMember) + return $ RecordLiteral lVariant members + +parseRecordMember :: Parser RecordMemberNode +parseRecordMember = do + name <- parseIdentifier + lEqual <- want L_Eq + val <- parseExpression + return $ RecordMemberNode name lEqual val + +parseSetLiteral :: Parser LiteralNode +parseSetLiteral = SetLiteral <$> curlyBracketList (commaList parseExpression) + + +parseMSetLiteral :: Parser LiteralNode +parseMSetLiteral = do + lMSet <- need L_mset + members <- parenList (commaList parseExpression) + return $ MSetLiteral lMSet members + +parseFunctionLiteral :: Parser LiteralNode +parseFunctionLiteral = do + lFunc <- need L_function + args <- parenList (commaList parseArrowPair) + return $ FunctionLiteral lFunc args + +parseArrowPair :: Parser ArrowPairNode +parseArrowPair = try $ do + lhs <- parseExpression + arrow <- want L_LongArrow + rhs <- parseExpression + return $ ArrowPairNode lhs arrow rhs + +parseSequenceLiteral :: Parser LiteralNode +parseSequenceLiteral = do + lSeq <- need L_sequence + members <- parenList (commaList parseExpression) + return $ SequenceLiteral lSeq members + +parseRelationLiteral :: Parser LiteralNode +parseRelationLiteral = do + lRel <- need L_relation + members <- parenList (commaList parseRelationMember) + return $ RelationLiteral lRel members + +parseRelationMember :: Parser RelationElemNode +parseRelationMember = do + f <- optional $ need L_tuple + members <- parenList $ commaList parseExpression + return $ case f of + Nothing -> RelationElemNodeShort $ ShortTuple members + Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members + +parsePartitionLiteral :: Parser LiteralNode +parsePartitionLiteral = do + lPartition <- need L_partition + members <- parenList (commaList parsePartitionElem) + return $ PartitionLiteral lPartition members + +parsePartitionElem :: Parser PartitionElemNode +parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index b4be21bc65..32feea3977 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -1,55 +1,57 @@ module Conjure.Language.AST.Helpers where -import Conjure.Prelude hiding (many) -import Conjure.Language.NewLexer hiding (Parser) -import Text.Megaparsec -import Data.Void + import Conjure.Language.AST.Syntax +import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Prelude hiding (many) import qualified Data.Set as Set +import Data.Void +import Text.Megaparsec type Parser = Parsec Void ETokenStream - - eSymbol :: Lexeme -> Parser ETok eSymbol lx = token test Set.empty "Symbol " ++ show lx - where test x - | lexeme x == lx = Just x - | otherwise = Nothing + where + test x + | lexeme x == lx = Just x + | otherwise = Nothing identifier :: Parser ETok identifier = token test Set.empty "Identifier" - where test x = case x of - ETok _ _ (LIdentifier _) -> Just x - ETok {} -> Nothing + where + test x = case x of + ETok _ _ (LIdentifier _) -> Just x + ETok{} -> Nothing lIdent :: Lexeme lIdent = LIdentifier "" intLiteral :: Parser ETok intLiteral = token test Set.empty "Int Literal" - where test x = case x of - ETok _ _ (LIntLiteral _) -> Just x - ETok {} -> Nothing + where + test x = case x of + ETok _ _ (LIntLiteral _) -> Just x + ETok{} -> Nothing makeMissing :: Lexeme -> Parser LToken makeMissing l = do - (ETok (s,_,_,_) _ _) <- lookAhead anySingle - return (MissingToken (ETok (s,s,0,l) [] l)) + (ETok (s, _, _, _) _ _) <- lookAhead anySingle + return (MissingToken (ETok (s, s, 0, l) [] l)) ---try to get a token from the stream but allow failiure +-- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do - (ETok (s,ts,_,_) t lex) <- lookAhead anySingle - case lex of - (LIdentifier _) -> RealToken <$> anySingle - _ -> return $ MissingToken $ ETok (s,ts,0,LMissingIdentifier) t LMissingIdentifier + (ETok (s, ts, _, _) t lex) <- lookAhead anySingle + case lex of + (LIdentifier _) -> RealToken <$> anySingle + _ -> return $ MissingToken $ ETok (s, ts, 0, LMissingIdentifier) t LMissingIdentifier want a = do - (ETok (s,ts,_,_) t lex) <- lookAhead anySingle - if lex == a then - RealToken <$> anySingle - else - return $ MissingToken $ ETok (s,ts,0,a) t a ---get a symbol from the stream with no fallback + (ETok (s, ts, _, _) t lex) <- lookAhead anySingle + if lex == a + then RealToken <$> anySingle + else return $ MissingToken $ ETok (s, ts, 0, a) t a + +-- get a symbol from the stream with no fallback need :: Lexeme -> Parser LToken need a = RealToken <$> eSymbol a @@ -62,8 +64,7 @@ parseIdentifierStrict :: Parser NameNode parseIdentifierStrict = do NameNode . RealToken <$> identifier - ---List helpers +-- List helpers commaList :: Parser a -> Parser (Sequence a) commaList = parseSequence L_Comma @@ -86,14 +87,14 @@ parseList startB endB seq = do parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = do - (a,b) <- manyTill_ (try seqElemSep) (try seqElemNoSep) + (a, b) <- manyTill_ (try seqElemSep) (try seqElemNoSep) return $ Seq (a ++ [b]) - where - seqElemNoSep = do - v <- pElem - notFollowedBy $ eSymbol divider - return $ SeqElem v Nothing - seqElemSep = do - v <-pElem - s <- need divider - return $ SeqElem v (Just s) \ No newline at end of file + where + seqElemNoSep = do + v <- pElem + notFollowedBy $ eSymbol divider + return $ SeqElem v Nothing + seqElemSep = do + v <- pElem + s <- need divider + return $ SeqElem v (Just s) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index e511c603b6..9e4be93cf8 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -1,179 +1,189 @@ module Conjure.Language.AST.Syntax where -import Conjure.Language.NewLexer ( ETok) +import Conjure.Language.NewLexer (ETok) import Conjure.Prelude - -data LToken = - RealToken ETok +data LToken + = RealToken ETok | MissingToken ETok | SkippedToken ETok - deriving (Show,Eq,Ord) + deriving (Show, Eq, Ord) newtype ProgramTree = ProgramTree [StatementNode] deriving (Show) -data StatementNode = Declaration DeclarationStatementNode - | Branching BranchingStatementNode - | SuchThat SuchThatStatementNode - | Where WhereStatementNode - | Objective ObjectiveStatementNode - deriving (Show) -data SuchThatStatementNode = SuchThatStatementNode - LToken -- Such - LToken -- That - (Sequence ExpressionNode) -- constraints - deriving (Show) - -data WhereStatementNode = WhereStatementNode - LToken --where - (Sequence ExpressionNode) --expresssions - deriving (Show) -data ObjectiveStatementNode = ObjectiveMin LToken ExpressionNode - | ObjectiveMax LToken ExpressionNode - deriving (Show) ---Declaration statements -data DeclarationStatementNode = - FindStatement FindStatementNode - | GivenStatement GivenStatementNode - | LettingStatement LettingStatementNode - deriving (Show) - -data FindStatementNode = FindStatementNode - LToken --find - (Sequence NameNode) --names - LToken --colon - DomainNode --domain - deriving (Show) -data GivenStatementNode = GivenStatementNode - LToken -- given - (Sequence NameNode) -- name - LToken -- colon - DomainNode --domain - | - GivenEnumNode - LToken - (Sequence NameNode) - LToken -- new - LToken -- type - LToken -- enum - deriving (Show) - - -data LettingStatementNode = - LettingExpr - LToken --lLetting - (Sequence NameNode) --name - LToken --lBe - ExpressionNode - | LettingDomain - LToken --lLetting - (Sequence NameNode) --name - LToken --lBe - LToken -- domain - DomainNode - | LettingEnum - LToken --lLetting - (Sequence NameNode) --name - LToken --lBe - LToken --lNew - LToken --lType - LToken --lEnum - (ListNode NameNode)--nameList - | LettingAnon - LToken --lLettingAnon - (Sequence NameNode) --name - LToken --lBe - LToken --lNew - LToken --lType - LToken --lOf - LToken --lSize - ExpressionNode --expr - deriving (Show) - - - - ---Branching on - -data BranchingStatementNode = BranchingStatementNode - LToken - LToken - (ListNode BranchingOnNode) - deriving (Show) - -data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode - deriving (Show) - ---Domains - -data DomainNode = BoolDomainNode LToken - | RangedIntDomainNode LToken (ListNode RangeNode) - | RangedEnumNode NameNode (ListNode RangeNode) - | EnumDomainNode NameNode - | TupleDomainNode LToken (ListNode DomainNode) - | RecordDomainNode LToken (ListNode NamedDomainNode) - | VariantDomainNode LToken (ListNode NamedDomainNode) - | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode - | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | FunctionDomainNode LToken (ListNode AttributeNode) DomainNode LToken DomainNode - | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) - | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | MissingDomainNode LToken - deriving (Show) - -data RangeNode = SingleRangeNode ExpressionNode - | OpenRangeNode DoubleDotNode - | RightUnboundedRangeNode ExpressionNode DoubleDotNode - | LeftUnboundedRangeNode DoubleDotNode ExpressionNode - | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode - deriving (Show) +data StatementNode + = Declaration DeclarationStatementNode + | Branching BranchingStatementNode + | SuchThat SuchThatStatementNode + | Where WhereStatementNode + | Objective ObjectiveStatementNode + deriving (Show) + +data SuchThatStatementNode + = SuchThatStatementNode + LToken -- Such + LToken -- That + (Sequence ExpressionNode) -- constraints + deriving (Show) + +data WhereStatementNode + = WhereStatementNode + LToken -- where + (Sequence ExpressionNode) -- expresssions + deriving (Show) + +data ObjectiveStatementNode + = ObjectiveMin LToken ExpressionNode + | ObjectiveMax LToken ExpressionNode + deriving (Show) + +-- Declaration statements +data DeclarationStatementNode + = FindStatement FindStatementNode + | GivenStatement GivenStatementNode + | LettingStatement LettingStatementNode + deriving (Show) + +data FindStatementNode + = FindStatementNode + LToken -- find + (Sequence NameNode) -- names + LToken -- colon + DomainNode -- domain + deriving (Show) + +data GivenStatementNode + = GivenStatementNode + LToken -- given + (Sequence NameNode) -- name + LToken -- colon + DomainNode -- domain + | GivenEnumNode + LToken + (Sequence NameNode) + LToken -- new + LToken -- type + LToken -- enum + deriving (Show) + +data LettingStatementNode + = LettingExpr + LToken -- lLetting + (Sequence NameNode) -- name + LToken -- lBe + ExpressionNode + | LettingDomain + LToken -- lLetting + (Sequence NameNode) -- name + LToken -- lBe + LToken -- domain + DomainNode + | LettingEnum + LToken -- lLetting + (Sequence NameNode) -- name + LToken -- lBe + LToken -- lNew + LToken -- lType + LToken -- lEnum + (ListNode NameNode) -- nameList + | LettingAnon + LToken -- lLettingAnon + (Sequence NameNode) -- name + LToken -- lBe + LToken -- lNew + LToken -- lType + LToken -- lOf + LToken -- lSize + ExpressionNode -- expr + deriving (Show) + +-- Branching on + +data BranchingStatementNode + = BranchingStatementNode + LToken + LToken + (ListNode BranchingOnNode) + deriving (Show) + +data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode + deriving (Show) + +-- Domains + +data DomainNode + = BoolDomainNode LToken + | RangedIntDomainNode LToken (ListNode RangeNode) + | RangedEnumNode NameNode (ListNode RangeNode) + | EnumDomainNode NameNode + | TupleDomainNode LToken (ListNode DomainNode) + | RecordDomainNode LToken (ListNode NamedDomainNode) + | VariantDomainNode LToken (ListNode NamedDomainNode) + | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode + | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | FunctionDomainNode LToken (ListNode AttributeNode) DomainNode LToken DomainNode + | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) + | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | MissingDomainNode LToken + deriving (Show) + +data RangeNode + = SingleRangeNode ExpressionNode + | OpenRangeNode DoubleDotNode + | RightUnboundedRangeNode ExpressionNode DoubleDotNode + | LeftUnboundedRangeNode DoubleDotNode ExpressionNode + | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode + deriving (Show) data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) data AttributeNode = NamedAttributeNode NameNode | NamedExpressionAttribute NameNode ExpressionNode deriving (Show) -data NamedDomainNode = NameDomainNode NameNode LToken DomainNode + +data NamedDomainNode = NameDomainNode NameNode LToken DomainNode deriving (Show) --- Common Statements +-- Common Statements newtype NameNode = NameNode LToken deriving (Show) ---Expressions -data ExpressionNode = - Literal LiteralNode - | IdentifierNode NameNode - | QuantificationExpr QuantificationExpressionNode - | ComprehensionExpr ComprehensionExpressionNode - | OperatorExpressionNode OperatorExpressionNode - | MissingExpressionNode LToken +-- Expressions +data ExpressionNode + = Literal LiteralNode + | IdentifierNode NameNode + | QuantificationExpr QuantificationExpressionNode + | ComprehensionExpr ComprehensionExpressionNode + | OperatorExpressionNode OperatorExpressionNode + | MissingExpressionNode LToken deriving (Show) -newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) -data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) -data LiteralNode = - IntLiteral LToken - | BoolLiteral LToken - | MatrixLiteral MatrixLiteralNode - | TupleLiteralNode LongTuple - | TupleLiteralNodeShort ShortTuple - | RecordLiteral (ListNode RecordMemberNode) - -- | VariantLiteral VariantLiteralNode special case of record handled by type checker - | SetLiteral (ListNode ExpressionNode) - | MSetLiteral LToken (ListNode ExpressionNode) - | FunctionLiteral LToken (ListNode ArrowPairNode) - | SequenceLiteral LToken (ListNode ExpressionNode) - | RelationLiteral LToken (ListNode RelationElemNode) - | PartitionLiteral LToken (ListNode PartitionElemNode) +newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) + +data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) + +data LiteralNode + = IntLiteral LToken + | BoolLiteral LToken + | MatrixLiteral MatrixLiteralNode + | TupleLiteralNode LongTuple + | TupleLiteralNodeShort ShortTuple + | RecordLiteral LToken (ListNode RecordMemberNode) + | VariantLiteral LToken (ListNode RecordMemberNode) --catch later + | SetLiteral (ListNode ExpressionNode) + | MSetLiteral LToken (ListNode ExpressionNode) + | FunctionLiteral LToken (ListNode ArrowPairNode) + | SequenceLiteral LToken (ListNode ExpressionNode) + | RelationLiteral LToken (ListNode RelationElemNode) + | PartitionLiteral LToken (ListNode PartitionElemNode) deriving (Show) -data MatrixLiteralNode = - MatrixLiteralExplicitDomain (ListNode ExpressionNode) LToken DomainNode - | MatrixLiteralImplicitDomain (ListNode ExpressionNode) +data MatrixLiteralNode + = MatrixLiteralExplicitDomain (ListNode ExpressionNode) LToken DomainNode + | MatrixLiteralImplicitDomain (ListNode ExpressionNode) deriving (Show) data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode @@ -182,69 +192,57 @@ data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode data ArrowPairNode = ArrowPairNode ExpressionNode LToken ExpressionNode deriving (Show) -data RelationElemNode = RelationElemNodeLabeled ShortTuple +data RelationElemNode + = RelationElemNodeLabeled LongTuple | RelationElemNodeShort ShortTuple deriving (Show) -data PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) +newtype PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) deriving (Show) -data QuantificationExpressionNode = QuantificationExpressionNode - LToken - (Sequence QuantificationPattern) - - deriving (Show) +data QuantificationExpressionNode + = QuantificationExpressionNode + LToken + (Sequence QuantificationPattern) + LToken + StatementNode + deriving (Show) -- MAYBE? data QuantificationPattern = QuantificationPattern deriving (Show) -data ComprehensionExpressionNode = - ComprehensionExprv - deriving (Show) -data OperatorExpressionNode = - OperatorExpressionNodev +data ComprehensionExpressionNode + = ComprehensionExprv + LToken + (Sequence ComprehensionBodyNode) deriving (Show) - - - - - - - - - - - - - - - - - - - - - -data ListNode itemType= ListNode { - lOpBracket :: LToken, - items :: Sequence itemType, - lClBracket :: LToken -} +data ComprehensionBodyNode + = CompBodyExpression ExpressionNode + | CompBodyDomain NamedDomainNode deriving (Show) -newtype Sequence itemType = Seq { - elems :: [SeqElem itemType] -} - -- deriving (Show) -instance (Show a) => Show (Sequence a) where - show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" -data SeqElem itemType = SeqElem { - item :: itemType, - separator :: Maybe LToken -} +data OperatorExpressionNode + = OperatorExpressionNodev deriving (Show) +data ListNode itemType = ListNode + { lOpBracket :: LToken + , items :: Sequence itemType + , lClBracket :: LToken + } + deriving (Show) +newtype Sequence itemType = Seq + { elems :: [SeqElem itemType] + } +-- deriving (Show) +instance (Show a) => Show (Sequence a) where + show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" +data SeqElem itemType = SeqElem + { item :: itemType + , separator :: Maybe LToken + } + deriving (Show) From fdda0c19060ceae4909847e0de2ae69740a0a61b Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 30 Sep 2022 12:04:36 +0100 Subject: [PATCH 057/378] Somewhat working parser --- src/Conjure/Language/AST/ASTParser.hs | 190 ++-- src/Conjure/Language/AST/Domain.hs | 302 +++---- src/Conjure/Language/AST/Expression.hs | 332 ++++++- src/Conjure/Language/AST/Helpers.hs | 39 +- src/Conjure/Language/AST/Operator.hs | 2 + src/Conjure/Language/AST/Syntax.hs | 49 +- .../Language/Expression/Op/Internal/Common.hs | 2 + src/Conjure/Language/Lexemes.hs | 455 ++++++++++ src/Conjure/Language/Lexer.hs | 832 +++++++++--------- src/Conjure/Language/NewLexer.hs | 536 ++--------- 10 files changed, 1610 insertions(+), 1129 deletions(-) create mode 100644 src/Conjure/Language/AST/Operator.hs create mode 100644 src/Conjure/Language/Lexemes.hs diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 579c78aa88..dad010104a 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -1,28 +1,28 @@ {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} + {-# HLINT ignore "Use <$>" #-} module Conjure.Language.AST.ASTParser where import Conjure.Prelude hiding (many) +import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax import Conjure.Language.NewLexer hiding (Parser) -import Conjure.Language.AST.Helpers -import Conjure.Language.AST.Domain + import Conjure.Language.AST.Expression +import Conjure.Language.Lexemes import Text.Megaparsec import Data.Text (pack) - - parseTopLevel :: Parser StatementNode -parseTopLevel = do - parseDeclaration - <|> parseBranching - <|> parseSuchThat - <|> parseWhere - <|> parseObjective - +parseTopLevel = + do + parseDeclaration + <|> parseBranching + <|> parseSuchThat + <|> parseWhere + <|> parseObjective parseBranching :: Parser StatementNode parseBranching = do @@ -32,17 +32,17 @@ parseBranching = do return $ Branching $ BranchingStatementNode lBranching lOn statements parseBranchingPart :: Parser BranchingOnNode -parseBranchingPart = do - BranchingOnName <$> parseIdentifier - <|> - (BranchingOnExpression <$> parseExpression) +parseBranchingPart = + do + BranchingOnName <$> parseIdentifier + <|> (BranchingOnExpression <$> parseExpression) parseSuchThat :: Parser StatementNode parseSuchThat = do lSuch <- need L_such lThat <- want L_that exprs <- commaList parseExpression - return $ SuchThat $ SuchThatStatementNode lSuch lThat exprs + return $ SuchThat $ SuchThatStatementNode lSuch lThat exprs parseWhere :: Parser StatementNode parseWhere = do @@ -55,96 +55,120 @@ parseObjective = do Objective <$> parseObjectiveStatement parseDeclaration :: Parser StatementNode -parseDeclaration = Declaration <$> - do - (LettingStatement <$> parseLetting) - <|> - (GivenStatement <$> parseGiven) - <|> - (FindStatement <$> parseFind) +parseDeclaration = + Declaration + <$> do + (LettingStatement <$> parseLetting) + <|> (GivenStatement <$> parseGiven) + <|> (FindStatement <$> parseFind) parseLetting :: Parser LettingStatementNode -parseLetting = do +parseLetting = do lLetting <- need L_letting names <- commaList parseIdentifier lBe <- want L_be - choice [ - finishDomain $ LettingDomain lLetting names lBe, - try $ finishEnum $ LettingEnum lLetting names lBe, - try $ finishAnon $ LettingAnon lLetting names lBe, - finishExpression $ LettingExpr lLetting names lBe + choice + [ finishDomain $ LettingDomain lLetting names lBe + , try $ finishEnum $ LettingEnum lLetting names lBe + , try $ finishAnon $ LettingAnon lLetting names lBe + , finishExpression $ LettingExpr lLetting names lBe ] - where - finishDomain start = do - lDomain <- need L_domain - domain <- parseDomain - return $ start lDomain domain - finishExpression start = do - expr <- parseExpression - return $ start expr - finishEnum start =do - lNew <- need L_new - lType <- need L_type - lEnum <- need L_enum - members <- curlyBracketList $ commaList parseIdentifier - return $ start lNew lType lEnum members - finishAnon start = do - lNew <- need L_new - lType <- want L_type - lOf <- want L_of - lSize <- want L_size - expr <- parseExpression - return $ start lNew lType lOf lSize expr - - + where + finishDomain start = do + lDomain <- need L_domain + domain <- parseDomain + return $ start lDomain domain + finishExpression start = do + expr <- parseExpression + return $ start expr + finishEnum start = do + lNew <- need L_new + lType <- need L_type + lEnum <- need L_enum + members <- curlyBracketList $ commaList parseIdentifier + return $ start lNew lType lEnum members + finishAnon start = do + lNew <- need L_new + lType <- want L_type + lOf <- want L_of + lSize <- want L_size + expr <- parseExpression + return $ start lNew lType lOf lSize expr parseGiven :: Parser GivenStatementNode parseGiven = do lGiven <- need L_given names <- commaList parseIdentifier - choice [ - finishEnum (GivenEnumNode lGiven names), - finishDomain (GivenStatementNode lGiven names) + choice + [ finishEnum (GivenEnumNode lGiven names) + , finishDomain (GivenStatementNode lGiven names) ] - - where finishEnum start = do - lNew <- need L_new - lType <- want L_type - lEnum <- want L_enum - return $ start lNew lType lEnum - finishDomain start = do - lColon <- want L_Colon --want here so that parse cannot fail - domain <- parseDomain - return $ start lColon domain - - + where + finishEnum start = do + lNew <- need L_new + lType <- want L_type + lEnum <- want L_enum + return $ start lNew lType lEnum + finishDomain start = do + lColon <- want L_Colon -- want here so that parse cannot fail + domain <- parseDomain + return $ start lColon domain parseFind :: Parser FindStatementNode parseFind = do - lFind <- need L_find - names <- commaList parseIdentifier - lColon <- want L_Colon - domain <- parseDomain + lFind <- need L_find + names <- commaList parseIdentifier + lColon <- want L_Colon + domain <- parseDomain return $ FindStatementNode lFind names lColon domain - parseObjectiveStatement :: Parser ObjectiveStatementNode parseObjectiveStatement = do - s <- eSymbol L_minimising <|> eSymbol L_maximising - e <- parseExpression - return $ case s of - ( ETok _ _ L_minimising) -> ObjectiveMin (RealToken s) e - _ -> ObjectiveMax (RealToken s) e + s <- eSymbol L_minimising <|> eSymbol L_maximising + e <- parseExpression + return $ case s of + (ETok {lexeme=L_minimising}) -> ObjectiveMin (RealToken s) e + _ -> ObjectiveMax (RealToken s) e parseProgram :: Parser ProgramTree parseProgram = do - tl <- many parseTopLevel - return $ ProgramTree tl + tl <- many parseTopLevel + eof + return $ ProgramTree tl example :: String -> IO () example s = do let str = s - let other = [ETok (0,0,0,L_EOF) [] L_EOF] - let lexed = parseMaybe eLex $ pack str - let stream = ETokenStream $ fromMaybe other lexed - parseTest parseProgram stream \ No newline at end of file + let other = [ETok (0, 0, 0, L_EOF) [] L_EOF ""] + let txt = pack str + let lexed = parseMaybe eLex txt + let stream = ETokenStream txt $ fromMaybe other lexed + parseTest parseProgram stream + +demoString :: String +demoString = + intercalate + "\n" + [ "letting letters be new type enum {S,E,N,D,M,O,R,Y}" + , "find f : function (injective) letters --> int(0..9)" + , "such that" + , " 1000 * f(S) + 100 * f(E) + 10 * f(N) + f(D) +" + , " 1000 * f(M) + 100 * f(O) + 10 * f(R) + f(E) =" + , " 10000 * f(M) + 1000 * f(O) + 100 * f(N) + 10 * f(E) + f(Y)" + , "" + , "such that f(S) > 0, f(M) > 0" + ] + +demo2 :: String +demo2 = intercalate "\n"[ + "given n : int(1..2)" + ,"find perm : sequence (size n) of int(1..n)" + ,"such that" + ," allDiff([perm(k) | k : int(1..n) ])," + ," and([ max(subs) - min(subs) + 1 != |subs| |" + ," i : int(1..n-1), j : int(2..n)," + ," i < j," + ," !(i = 1 /\\ j = n)," + ," letting subs be [perm(k) | k : int(i..j)]]" + ," )" + ] \ No newline at end of file diff --git a/src/Conjure/Language/AST/Domain.hs b/src/Conjure/Language/AST/Domain.hs index a36b5d35da..c30c6782ac 100644 --- a/src/Conjure/Language/AST/Domain.hs +++ b/src/Conjure/Language/AST/Domain.hs @@ -1,157 +1,163 @@ {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use <$>" #-} -module Conjure.Language.AST.Domain where +module Conjure.Language.AST.Expression where -import Conjure.Language.AST.Expression +-- import Conjure.Language.AST.Expression import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax -import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Language.Lexemes import Conjure.Prelude import Text.Megaparsec -parseDomain :: Parser DomainNode -parseDomain = do - choice - [ BoolDomainNode <$> need L_bool - , parseIntDomain - , parseTuple - , parseRecord - , parseVariant - , parseMatrix - , parseSet - , parseMSet - , parseFunction - , parseSequenceDomain - , parseRelation - , parsePartition - , parseEnumDomain - , parseMissingDomain - ] - -parseIntDomain :: Parser DomainNode -parseIntDomain = do - lInt <- need L_int - ranges <- parenList $ commaList parseRange - return $ RangedIntDomainNode lInt ranges - -parseTuple :: Parser DomainNode -parseTuple = do - lTuple <- need L_tuple - members <- parenList $ commaList parseDomain - return $ TupleDomainNode lTuple members - -parseRecord :: Parser DomainNode -parseRecord = do - lRecord <- need L_record - members <- curlyBracketList $ commaList parseNameDomain - return $ RecordDomainNode lRecord members - -parseVariant :: Parser DomainNode -parseVariant = do - lVariant <- need L_variant - members <- curlyBracketList $ commaList parseNameDomain - return $ VariantDomainNode lVariant members - -parseMatrix :: Parser DomainNode -parseMatrix = do - lMatrix <- need L_matrix - lIndexed <- want L_indexed - lBy <- want L_by - members <- squareBracketList $ commaList parseDomain - lOf <- want L_of - domain <- parseDomain - return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain - -parseSet :: Parser DomainNode -parseSet = do - lSet <- need L_set - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domain <- parseDomain - return $ SetDomainNode lSet attributes lOf domain - -parseMSet :: Parser DomainNode -parseMSet = do - lMSet <- need L_mset - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domain <- parseDomain - return $ MSetDomainNode lMSet attributes lOf domain - -parseFunction :: Parser DomainNode -parseFunction = do - lFunction <- need L_function - attributes <- parenList $ commaList parseAttribute - fromDomain <- parseDomain - arrow <- want L_LongArrow - toDomain <- parseDomain - return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain - -parseSequenceDomain :: Parser DomainNode -parseSequenceDomain = do - lSequence <- need L_sequence - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domain <- parseDomain - return $ SequenceDomainNode lSequence attributes lOf domain - -parseRelation :: Parser DomainNode -parseRelation = do - lRelation <- need L_relation - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domains <- parenList $ parseSequence L_Times parseDomain - return $ RelationDomainNode lRelation attributes lOf domains - -parsePartition :: Parser DomainNode -parsePartition = do - lPartition <- need L_partition - attributes <- parenList $ commaList parseAttribute - lFrom <- want L_from - domain <- parseDomain - return $ PartitionDomainNode lPartition attributes lFrom domain - -parseEnumDomain :: Parser DomainNode -parseEnumDomain = do - name <- parseIdentifierStrict - (RangedEnumNode name <$> try (parenList (commaList parseRange))) - <|> return (EnumDomainNode name) - --- Util -parseNameDomain :: Parser NamedDomainNode -parseNameDomain = do - name <- parseIdentifierStrict - lColon <- want L_Colon - domain <- parseDomain - return $ NameDomainNode name lColon domain - -parseRange :: Parser RangeNode -parseRange = - do - lExpr <- optional parseExpressionStrict - dots <- parseDoubleDot - rExpr <- optional parseExpressionStrict - case (lExpr, rExpr) of - (Nothing, Nothing) -> return $ OpenRangeNode dots - (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots - (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r - (Just l, Just r) -> return $ BoundedRangeNode l dots r - <|> SingleRangeNode <$> parseExpression - -parseDoubleDot :: Parser DoubleDotNode -parseDoubleDot = do - a <- need L_Dot - b <- want L_Dot - return $ DoubleDotNode a b - -parseAttribute :: Parser AttributeNode -parseAttribute = do - name <- parseIdentifier -- TODO This is wrong - NamedExpressionAttribute name <$> parseExpression - <|> return (NamedAttributeNode name) - -parseMissingDomain :: Parser DomainNode -parseMissingDomain = do - m <- makeMissing L_domain - return $ MissingDomainNode m \ No newline at end of file +-- parseDomain :: Parser DomainNode +-- parseDomain = do +-- choice +-- [ BoolDomainNode <$> need L_bool +-- , parseIntDomain +-- , parseTuple +-- , parseRecord +-- , parseVariant +-- , parseMatrix +-- , parseSet +-- , parseMSet +-- , parseFunctionDomain +-- , parseSequenceDomain +-- , parseRelation +-- , parsePartition +-- , parseEnumDomain +-- , parseMissingDomain +-- ] + +-- parseIntDomain :: Parser DomainNode +-- parseIntDomain = do +-- lInt <- need L_int +-- ranges <- parenList $ commaList parseRange +-- return $ RangedIntDomainNode lInt ranges + +-- parseTuple :: Parser DomainNode +-- parseTuple = do +-- lTuple <- need L_tuple +-- members <- parenList $ commaList parseDomain +-- return $ TupleDomainNode lTuple members + +-- parseRecord :: Parser DomainNode +-- parseRecord = do +-- lRecord <- need L_record +-- members <- curlyBracketList $ commaList parseNameDomain +-- return $ RecordDomainNode lRecord members + +-- parseVariant :: Parser DomainNode +-- parseVariant = do +-- lVariant <- need L_variant +-- members <- curlyBracketList $ commaList parseNameDomain +-- return $ VariantDomainNode lVariant members + +-- parseMatrix :: Parser DomainNode +-- parseMatrix = do +-- lMatrix <- need L_matrix +-- lIndexed <- want L_indexed +-- lBy <- want L_by +-- members <- squareBracketList $ commaList parseDomain +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain + +-- parseSet :: Parser DomainNode +-- parseSet = do +-- lSet <- need L_set +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ SetDomainNode lSet attributes lOf domain + +-- parseMSet :: Parser DomainNode +-- parseMSet = do +-- lMSet <- need L_mset +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ MSetDomainNode lMSet attributes lOf domain + +-- parseFunctionDomain :: Parser DomainNode +-- parseFunctionDomain = do +-- lFunction <- need L_function +-- attributes <- parenList $ commaList parseAttribute +-- fromDomain <- parseDomain +-- arrow <- want L_LongArrow +-- toDomain <- parseDomain +-- return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain + +-- parseSequenceDomain :: Parser DomainNode +-- parseSequenceDomain = do +-- lSequence <- need L_sequence +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ SequenceDomainNode lSequence attributes lOf domain + +-- parseRelation :: Parser DomainNode +-- parseRelation = do +-- lRelation <- need L_relation +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domains <- parenList $ parseSequence L_Times parseDomain +-- return $ RelationDomainNode lRelation attributes lOf domains + +-- parsePartition :: Parser DomainNode +-- parsePartition = do +-- lPartition <- need L_partition +-- attributes <- parenList $ commaList parseAttribute +-- lFrom <- want L_from +-- domain <- parseDomain +-- return $ PartitionDomainNode lPartition attributes lFrom domain + +-- parseEnumDomain :: Parser DomainNode +-- parseEnumDomain = do +-- name <- parseIdentifierStrict +-- brackets <- optional $ parenListStrict (commaList parseRange) +-- case brackets of +-- Nothing -> return $ EnumDomainNode name +-- Just parens -> return $ RangedEnumNode name parens +-- -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) +-- -- <|> return (EnumDomainNode name) + +-- -- Util +-- parseNameDomain :: Parser NamedDomainNode +-- parseNameDomain = do +-- name <- parseIdentifierStrict +-- lColon <- want L_Colon +-- domain <- parseDomain +-- return $ NameDomainNode name lColon domain + +-- parseRange :: Parser RangeNode +-- parseRange = +-- do +-- lExpr <- optional parseExpressionStrict +-- dots <- parseDoubleDot +-- rExpr <- optional parseExpressionStrict +-- case (lExpr, rExpr) of +-- (Nothing, Nothing) -> return $ OpenRangeNode dots +-- (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots +-- (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r +-- (Just l, Just r) -> return $ BoundedRangeNode l dots r +-- <|> SingleRangeNode <$> parseExpression + +-- parseDoubleDot :: Parser DoubleDotNode +-- parseDoubleDot = do +-- a <- need L_Dot +-- b <- want L_Dot +-- return $ DoubleDotNode a b + +-- parseAttribute :: Parser AttributeNode +-- parseAttribute = do +-- name <- choice $ map need functionAttributes -- TODO This is wrong +-- expr <- optional parseExpressionStrict +-- case expr of +-- Nothing -> return $ NamedAttributeNode (NameNode name) +-- Just en -> return $ NamedExpressionAttribute (NameNode name) en + +-- parseMissingDomain :: Parser DomainNode +-- parseMissingDomain = do +-- m <- makeMissing L_domain +-- return $ MissingDomainNode m \ No newline at end of file diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index cdd0e9a9e8..6a687e24da 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -4,16 +4,16 @@ module Conjure.Language.AST.Expression where import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax -import Conjure.Language.NewLexer hiding (Parser) -import Conjure.Prelude hiding (many) +import Conjure.Language.Lexemes +import Conjure.Prelude hiding (many,some) import Text.Megaparsec +import Control.Monad.Combinators.Expr (Operator (..), makeExprParser) + +import Conjure.Language.Expression.Op.Internal.Common + parseExpression :: Parser ExpressionNode -parseExpression = do - choice [ - Literal <$> parseLiteral - ] - +parseExpression = do parseOperator parseExpressionStrict :: Parser ExpressionNode -- can fail parseExpressionStrict = do @@ -22,6 +22,31 @@ parseExpressionStrict = do MissingExpressionNode _ -> empty _ -> return expr +parseAtomicExpression :: Parser ExpressionNode +parseAtomicExpression = do + choice [ + Literal <$> parseLiteral, + parseFunction, + IdentifierNode <$> parseIdentifierStrict, + ParenExpression <$> parseParenExpression parensPair, + AbsExpression <$> parseParenExpression (L_Bar,L_Bar), + QuantificationExpr <$> parseQuantificationStatement, + ComprehensionExpr <$> parseComprehension + ] + -- mPostfix <- optional parsePostfixOp + -- case mPostfix of + -- Nothing -> return e + -- Just f -> return $ f e + +parseParenExpression :: (Lexeme,Lexeme) -> Parser ParenExpressionNode +parseParenExpression (open,close)= do + lParen <- need open + body <- parseExpression + rParen <- want close + return $ ParenExpressionNode lParen body rParen + + + parseLiteral :: Parser LiteralNode parseLiteral = choice @@ -73,14 +98,17 @@ parseRecordMember = do return $ RecordMemberNode name lEqual val parseSetLiteral :: Parser LiteralNode -parseSetLiteral = SetLiteral <$> curlyBracketList (commaList parseExpression) - +parseSetLiteral = do -- cant just recycle list as it does not require first char + lOpen <- need L_OpenCurly + members <- commaList parseExpression + lClose <- want L_CloseCurly + return $ SetLiteral (ListNode lOpen members lClose) parseMSetLiteral :: Parser LiteralNode -parseMSetLiteral = do - lMSet <- need L_mset +parseMSetLiteral = do + lMSet <- need L_mset members <- parenList (commaList parseExpression) - return $ MSetLiteral lMSet members + return $ MSetLiteral lMSet members parseFunctionLiteral :: Parser LiteralNode parseFunctionLiteral = do @@ -89,20 +117,20 @@ parseFunctionLiteral = do return $ FunctionLiteral lFunc args parseArrowPair :: Parser ArrowPairNode -parseArrowPair = try $ do +parseArrowPair = try $ do lhs <- parseExpression arrow <- want L_LongArrow rhs <- parseExpression return $ ArrowPairNode lhs arrow rhs parseSequenceLiteral :: Parser LiteralNode -parseSequenceLiteral = do +parseSequenceLiteral = do lSeq <- need L_sequence members <- parenList (commaList parseExpression) - return $ SequenceLiteral lSeq members + return $ SequenceLiteral lSeq members parseRelationLiteral :: Parser LiteralNode -parseRelationLiteral = do +parseRelationLiteral = do lRel <- need L_relation members <- parenList (commaList parseRelationMember) return $ RelationLiteral lRel members @@ -111,15 +139,283 @@ parseRelationMember :: Parser RelationElemNode parseRelationMember = do f <- optional $ need L_tuple members <- parenList $ commaList parseExpression - return $ case f of + return $ case f of Nothing -> RelationElemNodeShort $ ShortTuple members Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members parsePartitionLiteral :: Parser LiteralNode -parsePartitionLiteral = do +parsePartitionLiteral = do lPartition <- need L_partition members <- parenList (commaList parsePartitionElem) return $ PartitionLiteral lPartition members parsePartitionElem :: Parser PartitionElemNode parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) + +parseQuantificationStatement :: Parser QuantificationExpressionNode +parseQuantificationStatement = do + lType <- need L_branching --TODO addNew + terms <- commaList (QuantificationPattern <$> parseExpression) + lDot <- want L_Dot + expr <- parseExpression + return $ QuantificationExpressionNode lType terms lDot expr + + +parseComprehension :: Parser ComprehensionExpressionNode +parseComprehension = do + lOpen <- need L_OpenBracket + gens <- parseExpression + lBar <- want L_Bar + conditions <- commaList parseComprehensionConditions + lClose <- want L_CloseBracket + return $ ComprehensionExpressionNode lOpen gens lBar conditions lClose + +parseComprehensionConditions :: Parser ComprehensionBodyNode +parseComprehensionConditions = do + letting <|> generator <|> condition + where + letting = do + lLetting <- need L_letting + v <- parseIdentifier + lBe <- want L_be + expr <- parseExpression + return $ CompBodyLettingNode lLetting v lBe expr + generator = try $ do + lIdent <- parseIdentifierStrict + lColon <- need L_Colon + domain <- parseDomain + return $ CompBodyDomain (NameDomainNode lIdent lColon domain) + condition = CompBodyCondition <$> parseExpression + --TODO look over this, asignment of domains should happen in next stage + --Current implementation is hacky + +parseOperator :: Parser ExpressionNode +parseOperator = makeExprParser parseAtomicExpression operatorTable + +parseFunction :: Parser ExpressionNode +parseFunction = do + name <- choice $ map need functionals + args <- parenList $ commaList parseExpression + return $ FunctionalApplicationNode name args + + +parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) +parsePostfixOp = do + op <- choice [ + indexed, + factorial, + application + ] + return $ \e -> OperatorExpressionNode $ PostfixOpNode e op + where + indexed = do + lBracket <- need L_OpenBracket + indexer <- parseIndexer + rBracket <- want L_CloseBracket + return $ IndexedNode lBracket indexer rBracket + factorial = OpFactorial <$> need L_ExclamationMark + application = do + lBracket <- need L_OpenParen + args <- commaList parseExpression + rBracket <- want L_CloseParen + return $ ApplicationNode $ ListNode lBracket args rBracket + + +--TODO treat funcitonals differently or actually don't but why + +parseIndexer :: Parser IndexerNode +parseIndexer = return Indexer + +operatorTable :: [[Operator Parser ExpressionNode]] +operatorTable = let operatorsGrouped = operators + |> sortBy (\ (_,a) (_,b) -> compare a b ) + |> groupBy (\ (_,a) (_,b) -> a == b ) + |> reverse + in + postfixOps: [ [ case descr of + BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op + BinaryOp op FNone -> InfixN $ prefixBinary <$> need op + BinaryOp op FRight -> InfixR $ prefixBinary <$> need op + UnaryPrefix op -> Prefix $ prefixUnary <$> need op + -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot + -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) + | (descr, _) <- operatorsInGroup + ] + | operatorsInGroup <- operatorsGrouped + ] + + + +prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode +prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t + +prefixUnary:: LToken -> ExpressionNode -> ExpressionNode +prefixUnary l = OperatorExpressionNode . PrefixOpNode l + + +postfixOps :: [Operator Parser ExpressionNode] +postfixOps = [ + Postfix $ foldr1 (.) <$> some parsePostfixOp + ] + + + + + + + + + + +--DOMAINS +parseDomain :: Parser DomainNode +parseDomain = do + choice + [ BoolDomainNode <$> need L_bool + , parseIntDomain + , parseTuple + , parseRecord + , parseVariant + , parseMatrix + , parseSet + , parseMSet + , parseFunctionDomain + , parseSequenceDomain + , parseRelation + , parsePartition + , parseEnumDomain + , parseMissingDomain + ] + +parseIntDomain :: Parser DomainNode +parseIntDomain = do + lInt <- need L_int + ranges <- parenList $ commaList parseRange + return $ RangedIntDomainNode lInt ranges + +parseTuple :: Parser DomainNode +parseTuple = do + lTuple <- need L_tuple + members <- parenList $ commaList parseDomain + return $ TupleDomainNode lTuple members + +parseRecord :: Parser DomainNode +parseRecord = do + lRecord <- need L_record + members <- curlyBracketList $ commaList parseNameDomain + return $ RecordDomainNode lRecord members + +parseVariant :: Parser DomainNode +parseVariant = do + lVariant <- need L_variant + members <- curlyBracketList $ commaList parseNameDomain + return $ VariantDomainNode lVariant members + +parseMatrix :: Parser DomainNode +parseMatrix = do + lMatrix <- need L_matrix + lIndexed <- want L_indexed + lBy <- want L_by + members <- squareBracketList $ commaList parseDomain + lOf <- want L_of + domain <- parseDomain + return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain + +parseSet :: Parser DomainNode +parseSet = do + lSet <- need L_set + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ SetDomainNode lSet attributes lOf domain + +parseMSet :: Parser DomainNode +parseMSet = do + lMSet <- need L_mset + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ MSetDomainNode lMSet attributes lOf domain + +parseFunctionDomain :: Parser DomainNode +parseFunctionDomain = do + lFunction <- need L_function + attributes <- parenList $ commaList parseAttribute + fromDomain <- parseDomain + arrow <- want L_LongArrow + toDomain <- parseDomain + return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain + +parseSequenceDomain :: Parser DomainNode +parseSequenceDomain = do + lSequence <- need L_sequence + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ SequenceDomainNode lSequence attributes lOf domain + +parseRelation :: Parser DomainNode +parseRelation = do + lRelation <- need L_relation + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domains <- parenList $ parseSequence L_Times parseDomain + return $ RelationDomainNode lRelation attributes lOf domains + +parsePartition :: Parser DomainNode +parsePartition = do + lPartition <- need L_partition + attributes <- parenList $ commaList parseAttribute + lFrom <- want L_from + domain <- parseDomain + return $ PartitionDomainNode lPartition attributes lFrom domain + +parseEnumDomain :: Parser DomainNode +parseEnumDomain = do + name <- parseIdentifierStrict + brackets <- optional $ parenListStrict (commaList parseRange) + case brackets of + Nothing -> return $ EnumDomainNode name + Just parens -> return $ RangedEnumNode name parens + -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) + -- <|> return (EnumDomainNode name) + +-- Util +parseNameDomain :: Parser NamedDomainNode +parseNameDomain = do + name <- parseIdentifierStrict + lColon <- want L_Colon + domain <- parseDomain + return $ NameDomainNode name lColon domain + +parseRange :: Parser RangeNode +parseRange = + do + lExpr <- optional parseExpressionStrict + dots <- parseDoubleDot + rExpr <- optional parseExpressionStrict + case (lExpr, rExpr) of + (Nothing, Nothing) -> return $ OpenRangeNode dots + (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots + (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r + (Just l, Just r) -> return $ BoundedRangeNode l dots r + <|> SingleRangeNode <$> parseExpression + +parseDoubleDot :: Parser DoubleDotNode +parseDoubleDot = do + a <- need L_Dot + b <- want L_Dot + return $ DoubleDotNode a b + +parseAttribute :: Parser AttributeNode +parseAttribute = do + name <- choice $ map need functionAttributes -- TODO This is wrong + expr <- optional parseExpressionStrict + case expr of + Nothing -> return $ NamedAttributeNode (NameNode name) + Just en -> return $ NamedExpressionAttribute (NameNode name) en + +parseMissingDomain :: Parser DomainNode +parseMissingDomain = do + m <- makeMissing L_domain + return $ MissingDomainNode m \ No newline at end of file diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 32feea3977..4a10f9bfca 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -1,6 +1,7 @@ module Conjure.Language.AST.Helpers where import Conjure.Language.AST.Syntax +import Conjure.Language.Lexemes import Conjure.Language.NewLexer hiding (Parser) import Conjure.Prelude hiding (many) import qualified Data.Set as Set @@ -20,7 +21,7 @@ identifier :: Parser ETok identifier = token test Set.empty "Identifier" where test x = case x of - ETok _ _ (LIdentifier _) -> Just x + ETok {lexeme=(LIdentifier _) } -> Just x ETok{} -> Nothing lIdent :: Lexeme @@ -30,26 +31,26 @@ intLiteral :: Parser ETok intLiteral = token test Set.empty "Int Literal" where test x = case x of - ETok _ _ (LIntLiteral _) -> Just x + ETok {lexeme=(LIntLiteral _)} -> Just x ETok{} -> Nothing makeMissing :: Lexeme -> Parser LToken makeMissing l = do - (ETok (s, _, _, _) _ _) <- lookAhead anySingle - return (MissingToken (ETok (s, s, 0, l) [] l)) + ETok {offsets=(s, _, _, _)} <- lookAhead anySingle + return (MissingToken (ETok (s, s, 0, l) [] l "")) -- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do - (ETok (s, ts, _, _) t lex) <- lookAhead anySingle + (ETok (s, ts, _, _) t lex _ ) <- lookAhead anySingle case lex of (LIdentifier _) -> RealToken <$> anySingle - _ -> return $ MissingToken $ ETok (s, ts, 0, LMissingIdentifier) t LMissingIdentifier + _ -> return $ MissingToken $ ETok (s, ts, 0, LMissingIdentifier) t LMissingIdentifier "" want a = do - (ETok (s, ts, _, _) t lex) <- lookAhead anySingle + (ETok (s, ts, _, _) t lex _) <- lookAhead anySingle if lex == a then RealToken <$> anySingle - else return $ MissingToken $ ETok (s, ts, 0, a) t a + else return $ MissingToken $ ETok (s, ts, 0, a) t a "" -- get a symbol from the stream with no fallback need :: Lexeme -> Parser LToken @@ -78,6 +79,9 @@ curlyBracketList = parseList L_OpenCurly L_CloseCurly parenList :: Parser (Sequence a) -> Parser (ListNode a) parenList = parseList L_OpenParen L_CloseParen +parenListStrict :: Parser (Sequence a) -> Parser (ListNode a) +parenListStrict = parseListStrict L_OpenParen L_CloseParen + parseList :: Lexeme -> Lexeme -> Parser (Sequence a) -> Parser (ListNode a) parseList startB endB seq = do startB' <- want startB @@ -85,6 +89,13 @@ parseList startB endB seq = do endB' <- want endB return $ ListNode startB' vals endB' +parseListStrict :: Lexeme -> Lexeme -> Parser (Sequence a) -> Parser (ListNode a) +parseListStrict startB endB seq = do + startB' <- need startB + vals <- seq + endB' <- want endB + return $ ListNode startB' vals endB' + parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = do (a, b) <- manyTill_ (try seqElemSep) (try seqElemNoSep) @@ -97,4 +108,14 @@ parseSequence divider pElem = do seqElemSep = do v <- pElem s <- need divider - return $ SeqElem v (Just s) \ No newline at end of file + return $ SeqElem v (Just s) + + +parensPair :: (Lexeme,Lexeme) +parensPair = (L_OpenParen,L_CloseParen) + +squarBracketPair :: (Lexeme,Lexeme) +squarBracketPair = (L_OpenBracket,L_CloseBracket) + +curlyPair :: (Lexeme,Lexeme) +curlyPair = (L_OpenCurly,L_CloseCurly) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Operator.hs b/src/Conjure/Language/AST/Operator.hs new file mode 100644 index 0000000000..c83fb4ea8b --- /dev/null +++ b/src/Conjure/Language/AST/Operator.hs @@ -0,0 +1,2 @@ +module Conjure.Language.AST.Operator where +import Conjure.Language.AST.Helpers diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 9e4be93cf8..c159979115 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -1,3 +1,4 @@ + module Conjure.Language.AST.Syntax where import Conjure.Language.NewLexer (ETok) @@ -7,10 +8,17 @@ data LToken = RealToken ETok | MissingToken ETok | SkippedToken ETok - deriving (Show, Eq, Ord) + deriving (Eq, Ord) + +instance Show LToken where + show (RealToken x) = show x + show (MissingToken x) = "MISSING[" ++ show x ++ "]" + show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" newtype ProgramTree = ProgramTree [StatementNode] - deriving (Show) + +instance Show ProgramTree where + show (ProgramTree x) = intercalate "\n" (map show x) data StatementNode = Declaration DeclarationStatementNode @@ -158,13 +166,20 @@ data ExpressionNode | QuantificationExpr QuantificationExpressionNode | ComprehensionExpr ComprehensionExpressionNode | OperatorExpressionNode OperatorExpressionNode + | ParenExpression ParenExpressionNode + | AbsExpression ParenExpressionNode + | FunctionalApplicationNode LToken (ListNode ExpressionNode) | MissingExpressionNode LToken deriving (Show) +data ParenExpressionNode = ParenExpressionNode LToken ExpressionNode LToken + deriving (Show) + newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) +-- Literals data LiteralNode = IntLiteral LToken | BoolLiteral LToken @@ -205,27 +220,47 @@ data QuantificationExpressionNode LToken (Sequence QuantificationPattern) LToken - StatementNode + ExpressionNode deriving (Show) -- MAYBE? -data QuantificationPattern = QuantificationPattern +data QuantificationPattern = + QuantificationPattern ExpressionNode deriving (Show) data ComprehensionExpressionNode - = ComprehensionExprv + = ComprehensionExpressionNode + LToken + ExpressionNode LToken (Sequence ComprehensionBodyNode) + LToken deriving (Show) data ComprehensionBodyNode - = CompBodyExpression ExpressionNode + = CompBodyCondition ExpressionNode | CompBodyDomain NamedDomainNode + | CompBodyLettingNode LToken NameNode LToken ExpressionNode deriving (Show) data OperatorExpressionNode - = OperatorExpressionNodev + = PostfixOpNode ExpressionNode PostfixOpNode + | PrefixOpNode LToken ExpressionNode + | BinaryOpNode ExpressionNode LToken ExpressionNode deriving (Show) + +data PostfixOpNode + = IndexedNode LToken IndexerNode LToken + | OpFactorial LToken + | ApplicationNode (ListNode ExpressionNode) + deriving (Show) + +-- data FunctionApplicationNode +-- = FunctionApplicationNode LToken (ListNode ExpressionNode) + +data IndexerNode + = Indexer + deriving (Show) data ListNode itemType = ListNode { lOpBracket :: LToken , items :: Sequence itemType diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index 550e79d7f3..10064ad0ba 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -236,6 +236,8 @@ operators = , ( BinaryOp L_TildeGeq FNone , 400 ) , ( UnaryPrefix L_Minus , 2000 ) , ( UnaryPrefix L_ExclamationMark , 2000 ) + , ( UnaryPrefix L_Minus , 2000 ) + , ( UnaryPrefix L_ExclamationMark , 2000 ) ] functionals :: [Lexeme] diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs new file mode 100644 index 0000000000..0550d4996d --- /dev/null +++ b/src/Conjure/Language/Lexemes.hs @@ -0,0 +1,455 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Conjure.Language.Lexemes where + +import Conjure.Prelude +import qualified Data.HashMap.Strict as M +import qualified Data.Text as T + +data Lexeme + = LIntLiteral Integer + | LMissingIntLiteral --helper for missing symbol + | LIdentifier T.Text + | LMissingIdentifier --helper for missing symbol + | LMetaVar T.Text + | LMissingMetaVar --helper for missing symbol + -- general + | L_be + | L_from + | L_of + | L_domain + + | L_language + | L_dim + | L_find + | L_given + | L_letting + | L_where + | L_such + | L_that + | L_minimising + | L_maximising + | L_branching + | L_on + | L_heuristic + + -- type: boolean + | L_bool + | L_false + | L_true + + -- type: integer + | L_int + + -- creating a new type + | L_new + | L_type + | L_enum + + -- type tuple + | L_tuple + + -- type record + | L_record + + -- type variant + | L_variant + | L_active + + -- type: matrix + | L_matrix + | L_indexed + | L_by + + -- type set + | L_set + | L_size + | L_minSize + | L_maxSize + + -- type: mset + | L_mset + | L_minOccur + | L_maxOccur + + -- type: function + | L_function + | L_total + | L_partial + | L_injective + | L_surjective + | L_bijective + + -- type: sequence + | L_sequence + + -- type: relation + | L_relation + + -- type: partition + | L_partition + | L_regular + | L_partSize + | L_minPartSize + | L_maxPartSize + | L_numParts + | L_minNumParts + | L_maxNumParts + + -- operators, page 21 of the holy paper + | L_union + | L_intersect + | L_subset + | L_subsetEq + | L_supset + | L_supsetEq + | L_in + | L_max + | L_min + | L_toSet + | L_toMSet + | L_toRelation + | L_defined + | L_range + | L_restrict + | L_image + | L_imageSet + | L_preImage + | L_inverse + | L_together + | L_apart + | L_party + | L_participants + | L_parts + | L_freq + | L_hist + + | L_toInt + | L_makeTable + | L_table + + -- global constraints + | L_allDiff + | L_alldifferent_except + | L_gcc + | L_atleast + | L_atmost + + | L_dontCare + + | L_catchUndef + + -- matrix only operators + | L_flatten + | L_concatenate + | L_normIndices + + -- in the rule language + -- | L_lambda + -- | L_quantifier + -- | L_representation + + -- arithmetic operators + + | L_Plus -- + -- sum, infix : (int,int) -> int + | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int) + | L_Times -- * -- multiplication, infix : (int,int) -> int + | L_Div -- / -- integer division, infix + | L_Mod -- % -- modulo, infix + | L_Pow -- ** -- exponentiation, infix : (int,int) -> int + | L_factorial + + -- equality + + | L_Eq -- = -- equals, infix. + | L_Neq -- != -- not-equals, infix + + -- comparison + + | L_Lt -- < -- less-than, infix. + | L_Leq -- <= -- less-than-or-eq, infix. + | L_Gt -- > -- greater-than, infix. + | L_Geq -- >= -- greater-than-or-eq, infix. + + -- logical operators + + | L_And -- /\ -- logical-and, infix + | L_Or -- \/ -- logical-or, infix. + | L_Imply -- -> -- implication, infix + | L_Iff -- <-> -- iff, infix. + -- | L_Not -- ! -- negation, prefix + | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark + + -- the function arrow + + | L_LongArrow -- --> -- function domains and constants + + -- in rule language + + | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching. + | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching. + | L_At -- @ -- bubble operator. + + -- lex operators + + | L_LexGeq -- >=lex + | L_LexGt -- >lex + | L_LexLt -- <=lex + | L_LexLeq -- " ) + , ( L_Geq , ">=" ) + , ( L_And , "/\\" ) + , ( L_Or , "\\/" ) + , ( L_Imply , "->" ) + , ( L_Iff , "<->" ) + , ( L_ExclamationMark , "!" ) + , ( L_LongArrow , "-->" ) + , ( L_Colon , ":" ) + , ( L_DoubleColon , "::" ) + , ( L_At , "@" ) + , ( L_LexGeq , ">=lex" ) + , ( L_LexGt , ">lex" ) + , ( L_LexLeq , "<=lex" ) + , ( L_LexLt , "" ) + , ( L_CaseSeparator , "***" ) + + , ( L_HasRepr , "hasRepr" ) + , ( L_HasType , "hasType" ) + , ( L_HasDomain , "hasDomain" ) + , ( L_indices , "indices" ) + + , ( L_DotLt , ".<" ) + , ( L_DotLeq , ".<=" ) + , ( L_DotGt , ".>" ) + , ( L_DotGeq , ".>=" ) + + , ( L_TildeLt , "~<" ) + , ( L_TildeLeq , "~<=" ) + , ( L_TildeGt , "~>" ) + , ( L_TildeGeq , "~>=" ) + + , ( L_LeftArrow , "<-" ) + + , ( L_subsequence , "subsequence" ) + , ( L_substring , "substring" ) + , ( L_powerSet , "powerSet" ) + + , ( L_pred, "pred" ) + , ( L_succ, "succ" ) + + + , ( L_transform, "transform") + ] + +mapLexemeToText :: M.HashMap Lexeme T.Text +mapLexemeToText = M.fromList $ map swap lexemes + +lexemeFace :: Lexeme -> String +lexemeFace L_Newline = "new line" +lexemeFace L_Carriage = "\\r" +lexemeFace L_Space = "space character" +lexemeFace L_Tab = "tab character" +lexemeFace (LIntLiteral i) = show i +lexemeFace (LIdentifier i) = (T.unpack i) +-- lexemeFace (LComment i) = Pr.text (T.unpack i) +lexemeFace l = + case M.lookup l mapLexemeToText of + Nothing -> (show l) + Just t -> (T.unpack t) + +--Categories +functionAttributes :: [Lexeme] +functionAttributes = [L_injective,L_size] + diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index eb2c454dfa..d4bac9b6aa 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -14,7 +14,7 @@ module Conjure.Language.Lexer , lexemeFace ) where import Conjure.Prelude hiding (some,many) - +import Conjure.Language.Lexemes hiding (lexemeFace,mapLexemeToText) import Data.Char ( isAlpha, isAlphaNum ) import Data.Void import qualified Data.HashMap.Strict as M @@ -25,7 +25,7 @@ import qualified Text.Megaparsec.Char.Lexer as L import Text.Megaparsec.Char import Text.Megaparsec --( SourcePos, initialPos, incSourceLine, incSourceColumn, setSourceColumn ) -import Text.Megaparsec.Stream +import Text.Megaparsec.Stream () data LexemePos = LexemePos @@ -34,253 +34,253 @@ data LexemePos = LexemePos SourcePos -- source position, just after this lexeme, including whitespace after the lexeme deriving (Show,Eq, Ord) -data Lexeme - = LIntLiteral Integer - | LMissingIntLiteral --helper for missing symbol - | LIdentifier T.Text - | LMissingIdentifier --helper for missing symbol - | LMetaVar T.Text - | LMissingMetaVar --helper for missing symbol - -- general - | L_be - | L_from - | L_of - | L_domain - - | L_language - | L_dim - | L_find - | L_given - | L_letting - | L_where - | L_such - | L_that - | L_minimising - | L_maximising - | L_branching - | L_on - | L_heuristic - - -- type: boolean - | L_bool - | L_false - | L_true - - -- type: integer - | L_int - - -- creating a new type - | L_new - | L_type - | L_enum - - -- type tuple - | L_tuple - - -- type record - | L_record - - -- type variant - | L_variant - | L_active - - -- type: matrix - | L_matrix - | L_indexed - | L_by - - -- type set - | L_set - | L_size - | L_minSize - | L_maxSize - - -- type: mset - | L_mset - | L_minOccur - | L_maxOccur - - -- type: function - | L_function - | L_total - | L_partial - | L_injective - | L_surjective - | L_bijective - - -- type: sequence - | L_sequence - - -- type: relation - | L_relation - - -- type: partition - | L_partition - | L_regular - | L_partSize - | L_minPartSize - | L_maxPartSize - | L_numParts - | L_minNumParts - | L_maxNumParts - - -- operators, page 21 of the holy paper - | L_union - | L_intersect - | L_subset - | L_subsetEq - | L_supset - | L_supsetEq - | L_in - | L_max - | L_min - | L_toSet - | L_toMSet - | L_toRelation - | L_defined - | L_range - | L_restrict - | L_image - | L_imageSet - | L_preImage - | L_inverse - | L_together - | L_apart - | L_party - | L_participants - | L_parts - | L_freq - | L_hist - - | L_toInt - | L_makeTable - | L_table - - -- global constraints - | L_allDiff - | L_alldifferent_except - | L_gcc - | L_atleast - | L_atmost - - | L_dontCare - - | L_catchUndef - - -- matrix only operators - | L_flatten - | L_concatenate - | L_normIndices - - -- in the rule language - -- | L_lambda - -- | L_quantifier - -- | L_representation - - -- arithmetic operators - - | L_Plus -- + -- sum, infix : (int,int) -> int - | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int) - | L_Times -- * -- multiplication, infix : (int,int) -> int - | L_Div -- / -- integer division, infix - | L_Mod -- % -- modulo, infix - | L_Pow -- ** -- exponentiation, infix : (int,int) -> int - | L_factorial - - -- equality - - | L_Eq -- = -- equals, infix. - | L_Neq -- != -- not-equals, infix - - -- comparison - - | L_Lt -- < -- less-than, infix. - | L_Leq -- <= -- less-than-or-eq, infix. - | L_Gt -- > -- greater-than, infix. - | L_Geq -- >= -- greater-than-or-eq, infix. - - -- logical operators - - | L_And -- /\ -- logical-and, infix - | L_Or -- \/ -- logical-or, infix. - | L_Imply -- -> -- implication, infix - | L_Iff -- <-> -- iff, infix. - -- | L_Not -- ! -- negation, prefix - | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark - - -- the function arrow - - | L_LongArrow -- --> -- function domains and constants - - -- in rule language - - | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching. - | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching. - | L_At -- @ -- bubble operator. - - -- lex operators - - | L_LexGeq -- >=lex - | L_LexGt -- >lex - | L_LexLt -- <=lex - | L_LexLeq -- int +-- | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int) +-- | L_Times -- * -- multiplication, infix : (int,int) -> int +-- | L_Div -- / -- integer division, infix +-- | L_Mod -- % -- modulo, infix +-- | L_Pow -- ** -- exponentiation, infix : (int,int) -> int +-- | L_factorial + +-- -- equality + +-- | L_Eq -- = -- equals, infix. +-- | L_Neq -- != -- not-equals, infix + +-- -- comparison + +-- | L_Lt -- < -- less-than, infix. +-- | L_Leq -- <= -- less-than-or-eq, infix. +-- | L_Gt -- > -- greater-than, infix. +-- | L_Geq -- >= -- greater-than-or-eq, infix. + +-- -- logical operators + +-- | L_And -- /\ -- logical-and, infix +-- | L_Or -- \/ -- logical-or, infix. +-- | L_Imply -- -> -- implication, infix +-- | L_Iff -- <-> -- iff, infix. +-- -- | L_Not -- ! -- negation, prefix +-- | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark + +-- -- the function arrow + +-- | L_LongArrow -- --> -- function domains and constants + +-- -- in rule language + +-- | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching. +-- | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching. +-- | L_At -- @ -- bubble operator. + +-- -- lex operators + +-- | L_LexGeq -- >=lex +-- | L_LexGt -- >lex +-- | L_LexLt -- <=lex +-- | L_LexLeq -- " ) - , ( L_Geq , ">=" ) - , ( L_And , "/\\" ) - , ( L_Or , "\\/" ) - , ( L_Imply , "->" ) - , ( L_Iff , "<->" ) - , ( L_ExclamationMark , "!" ) - , ( L_LongArrow , "-->" ) - , ( L_Colon , ":" ) - , ( L_DoubleColon , "::" ) - , ( L_At , "@" ) - , ( L_LexGeq , ">=lex" ) - , ( L_LexGt , ">lex" ) - , ( L_LexLeq , "<=lex" ) - , ( L_LexLt , "" ) - , ( L_CaseSeparator , "***" ) - - , ( L_HasRepr , "hasRepr" ) - , ( L_HasType , "hasType" ) - , ( L_HasDomain , "hasDomain" ) - , ( L_indices , "indices" ) - - , ( L_DotLt , ".<" ) - , ( L_DotLeq , ".<=" ) - , ( L_DotGt , ".>" ) - , ( L_DotGeq , ".>=" ) - - , ( L_TildeLt , "~<" ) - , ( L_TildeLeq , "~<=" ) - , ( L_TildeGt , "~>" ) - , ( L_TildeGeq , "~>=" ) - - , ( L_LeftArrow , "<-" ) - - , ( L_subsequence , "subsequence" ) - , ( L_substring , "substring" ) - , ( L_powerSet , "powerSet" ) - - , ( L_pred, "pred" ) - , ( L_succ, "succ" ) - - - , ( L_transform, "transform") - ] +-- lexemes :: [(T.Text, Lexeme)] +-- lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap +-- [ ( L_be , "be" ) +-- , ( L_from , "from" ) +-- , ( L_of , "of" ) +-- , ( L_domain , "domain" ) +-- , ( L_language , "language" ) +-- , ( L_dim , "dim" ) +-- , ( L_find , "find" ) +-- , ( L_given , "given" ) +-- , ( L_letting , "letting" ) +-- , ( L_where , "where" ) +-- , ( L_such , "such" ) +-- , ( L_that , "that" ) +-- , ( L_minimising , "minimising" ) +-- , ( L_maximising , "maximising" ) +-- , ( L_minimising , "minimizing" ) +-- , ( L_maximising , "maximizing" ) +-- , ( L_branching , "branching" ) +-- , ( L_on , "on" ) +-- , ( L_heuristic , "heuristic" ) + +-- , ( L_bool, "bool" ) +-- , ( L_false, "false" ) +-- , ( L_true, "true" ) +-- , ( L_int, "int" ) +-- , ( L_new, "new" ) +-- , ( L_type, "type" ) +-- , ( L_enum, "enum" ) +-- , ( L_tuple, "tuple" ) +-- , ( L_record, "record" ) +-- , ( L_variant, "variant" ) +-- , ( L_active, "active" ) +-- , ( L_matrix, "matrix" ) +-- , ( L_indexed, "indexed" ) +-- , ( L_by, "by" ) +-- , ( L_set, "set" ) +-- -- , ( L_size, "size" ) +-- -- , ( L_minSize, "minSize" ) +-- -- , ( L_maxSize, "maxSize" ) +-- , ( L_mset, "mset" ) +-- -- , ( L_minOccur, "minOccur" ) +-- -- , ( L_maxOccur, "maxOccur" ) +-- , ( L_function, "function" ) +-- -- , ( L_total, "total" ) +-- -- , ( L_partial, "partial" ) +-- -- , ( L_injective, "injective" ) +-- -- , ( L_surjective, "surjective" ) +-- -- , ( L_bijective, "bijective" ) +-- , ( L_sequence, "sequence" ) +-- , ( L_relation, "relation" ) +-- , ( L_partition, "partition" ) +-- -- , ( L_regular, "regular" ) +-- -- , ( L_partSize, "partSize" ) +-- -- , ( L_minPartSize, "minPartSize" ) +-- -- , ( L_maxPartSize, "maxPartSize" ) +-- -- , ( L_numParts, "numParts" ) +-- -- , ( L_minNumParts, "minNumParts" ) +-- -- , ( L_maxNumParts, "maxNumParts" ) +-- , ( L_union, "union" ) +-- , ( L_intersect, "intersect" ) +-- , ( L_subset, "subset" ) +-- , ( L_subsetEq, "subsetEq" ) +-- , ( L_supset, "supset" ) +-- , ( L_supsetEq, "supsetEq" ) +-- , ( L_in, "in" ) +-- , ( L_max, "max" ) +-- , ( L_min, "min" ) +-- , ( L_toSet, "toSet" ) +-- , ( L_toMSet, "toMSet" ) +-- , ( L_toRelation, "toRelation" ) +-- , ( L_defined, "defined" ) +-- , ( L_range, "range" ) +-- , ( L_restrict, "restrict" ) +-- , ( L_image, "image" ) +-- , ( L_imageSet, "imageSet" ) +-- , ( L_preImage, "preImage" ) +-- , ( L_inverse, "inverse" ) +-- , ( L_together, "together" ) +-- , ( L_apart, "apart" ) +-- , ( L_party, "party" ) +-- , ( L_participants, "participants" ) +-- , ( L_parts, "parts" ) +-- , ( L_freq, "freq" ) +-- , ( L_hist, "hist" ) +-- , ( L_toInt, "toInt" ) +-- , ( L_makeTable, "makeTable" ) +-- , ( L_table, "table" ) + +-- , ( L_allDiff, "allDiff" ) +-- , ( L_alldifferent_except, "alldifferent_except" ) +-- , ( L_gcc, "gcc" ) +-- , ( L_atleast, "atleast" ) +-- , ( L_atmost, "atmost" ) + +-- , ( L_dontCare, "dontCare" ) +-- , ( L_catchUndef, "catchUndef" ) + +-- , ( L_flatten, "flatten" ) +-- , ( L_concatenate, "concatenate" ) +-- , ( L_normIndices, "normIndices" ) +-- -- , ( L_lambda, "lambda" ) +-- -- , ( L_quantifier, "quantifier" ) +-- -- , ( L_representation, "representation" ) +-- , ( L_Plus , "+" ) +-- , ( L_Minus , "-" ) +-- , ( L_Times , "*" ) +-- , ( L_Div , "/" ) +-- , ( L_Mod , "%" ) +-- , ( L_Pow , "**" ) +-- , ( L_factorial , "factorial" ) +-- , ( L_Eq , "=" ) +-- , ( L_Neq , "!=" ) +-- , ( L_Lt , "<" ) +-- , ( L_Leq , "<=" ) +-- , ( L_Gt , ">" ) +-- , ( L_Geq , ">=" ) +-- , ( L_And , "/\\" ) +-- , ( L_Or , "\\/" ) +-- , ( L_Imply , "->" ) +-- , ( L_Iff , "<->" ) +-- , ( L_ExclamationMark , "!" ) +-- , ( L_LongArrow , "-->" ) +-- , ( L_Colon , ":" ) +-- , ( L_DoubleColon , "::" ) +-- , ( L_At , "@" ) +-- , ( L_LexGeq , ">=lex" ) +-- , ( L_LexGt , ">lex" ) +-- , ( L_LexLeq , "<=lex" ) +-- , ( L_LexLt , "" ) +-- , ( L_CaseSeparator , "***" ) + +-- , ( L_HasRepr , "hasRepr" ) +-- , ( L_HasType , "hasType" ) +-- , ( L_HasDomain , "hasDomain" ) +-- , ( L_indices , "indices" ) + +-- , ( L_DotLt , ".<" ) +-- , ( L_DotLeq , ".<=" ) +-- , ( L_DotGt , ".>" ) +-- , ( L_DotGeq , ".>=" ) + +-- , ( L_TildeLt , "~<" ) +-- , ( L_TildeLeq , "~<=" ) +-- , ( L_TildeGt , "~>" ) +-- , ( L_TildeGeq , "~>=" ) + +-- , ( L_LeftArrow , "<-" ) + +-- , ( L_subsequence , "subsequence" ) +-- , ( L_substring , "substring" ) +-- , ( L_powerSet , "powerSet" ) + +-- , ( L_pred, "pred" ) +-- , ( L_succ, "succ" ) + + +-- , ( L_transform, "transform") +-- ] mapToLexemePos :: ETok -> LexemePos mapToLexemePos tok = LexemePos lex start end where diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index a2f120b1b2..d627109313 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -3,448 +3,26 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE InstanceSigs #-} +{-# LANGUAGE RecordWildCards #-} -module Conjure.Language.NewLexer where + +module Conjure.Language.NewLexer where import Conjure.Prelude hiding (some,many) +import Conjure.Language.Lexemes import Data.Char ( isAlpha, isAlphaNum ) import Data.Void -import Data.Tuple -import Data.Ord -import Data.List + import qualified Data.Text as T -import qualified Data.Text.Read as T + import Text.Megaparsec hiding (State) import Text.Megaparsec.Char -import Text.Megaparsec.Debug + import qualified Text.Megaparsec.Char.Lexer as L -import Control.Monad (when) - -data Lexeme - = LIntLiteral Integer - | LMissingIntLiteral --helper for missing symbol - | LIdentifier T.Text - | LMissingIdentifier --helper for missing symbol - | LMetaVar T.Text - | LMissingMetaVar --helper for missing symbol - -- general - | L_be - | L_from - | L_of - | L_domain - - | L_language - | L_dim - | L_find - | L_given - | L_letting - | L_where - | L_such - | L_that - | L_minimising - | L_maximising - | L_branching - | L_on - | L_heuristic - - -- type: boolean - | L_bool - | L_false - | L_true - - -- type: integer - | L_int - - -- creating a new type - | L_new - | L_type - | L_enum - - -- type tuple - | L_tuple - - -- type record - | L_record - - -- type variant - | L_variant - | L_active - - -- type: matrix - | L_matrix - | L_indexed - | L_by - - -- type set - | L_set - | L_size - | L_minSize - | L_maxSize - - -- type: mset - | L_mset - | L_minOccur - | L_maxOccur - - -- type: function - | L_function - | L_total - | L_partial - | L_injective - | L_surjective - | L_bijective - - -- type: sequence - | L_sequence - - -- type: relation - | L_relation - - -- type: partition - | L_partition - | L_regular - | L_partSize - | L_minPartSize - | L_maxPartSize - | L_numParts - | L_minNumParts - | L_maxNumParts - - -- operators, page 21 of the holy paper - | L_union - | L_intersect - | L_subset - | L_subsetEq - | L_supset - | L_supsetEq - | L_in - | L_max - | L_min - | L_toSet - | L_toMSet - | L_toRelation - | L_defined - | L_range - | L_restrict - | L_image - | L_imageSet - | L_preImage - | L_inverse - | L_together - | L_apart - | L_party - | L_participants - | L_parts - | L_freq - | L_hist - - | L_toInt - | L_makeTable - | L_table - - -- global constraints - | L_allDiff - | L_alldifferent_except - | L_gcc - | L_atleast - | L_atmost - - | L_dontCare - - | L_catchUndef - - -- matrix only operators - | L_flatten - | L_concatenate - | L_normIndices - - -- in the rule language - -- | L_lambda - -- | L_quantifier - -- | L_representation - - -- arithmetic operators - - | L_Plus -- + -- sum, infix : (int,int) -> int - | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int) - | L_Times -- * -- multiplication, infix : (int,int) -> int - | L_Div -- / -- integer division, infix - | L_Mod -- % -- modulo, infix - | L_Pow -- ** -- exponentiation, infix : (int,int) -> int - | L_factorial - - -- equality - - | L_Eq -- = -- equals, infix. - | L_Neq -- != -- not-equals, infix - - -- comparison - - | L_Lt -- < -- less-than, infix. - | L_Leq -- <= -- less-than-or-eq, infix. - | L_Gt -- > -- greater-than, infix. - | L_Geq -- >= -- greater-than-or-eq, infix. - - -- logical operators - - | L_And -- /\ -- logical-and, infix - | L_Or -- \/ -- logical-or, infix. - | L_Imply -- -> -- implication, infix - | L_Iff -- <-> -- iff, infix. - -- | L_Not -- ! -- negation, prefix - | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark - - -- the function arrow - - | L_LongArrow -- --> -- function domains and constants - - -- in rule language - - | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching. - | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching. - | L_At -- @ -- bubble operator. - - -- lex operators - - | L_LexGeq -- >=lex - | L_LexGt -- >lex - | L_LexLt -- <=lex - | L_LexLeq -- " ) - , ( L_Geq , ">=" ) - , ( L_And , "/\\" ) - , ( L_Or , "\\/" ) - , ( L_Imply , "->" ) - , ( L_Iff , "<->" ) - , ( L_ExclamationMark , "!" ) - , ( L_LongArrow , "-->" ) - , ( L_Colon , ":" ) - , ( L_DoubleColon , "::" ) - , ( L_At , "@" ) - , ( L_LexGeq , ">=lex" ) - , ( L_LexGt , ">lex" ) - , ( L_LexLeq , "<=lex" ) - , ( L_LexLt , "" ) - , ( L_CaseSeparator , "***" ) - - , ( L_HasRepr , "hasRepr" ) - , ( L_HasType , "hasType" ) - , ( L_HasDomain , "hasDomain" ) - , ( L_indices , "indices" ) - - , ( L_DotLt , ".<" ) - , ( L_DotLeq , ".<=" ) - , ( L_DotGt , ".>" ) - , ( L_DotGeq , ".>=" ) - - , ( L_TildeLt , "~<" ) - , ( L_TildeLeq , "~<=" ) - , ( L_TildeGt , "~>" ) - , ( L_TildeGeq , "~>=" ) - - , ( L_LeftArrow , "<-" ) - - , ( L_subsequence , "subsequence" ) - , ( L_substring , "substring" ) - , ( L_powerSet , "powerSet" ) - - , ( L_pred, "pred" ) - , ( L_succ, "succ" ) - - - , ( L_transform, "transform") - ] +import qualified Data.List.NonEmpty as NE +import Data.List (splitAt) + + + emojis :: [Char] emojis = concat [['\x1f600'..'\x1F64F'], @@ -462,17 +40,36 @@ isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` type Offsets = (Int,Int,Int,Lexeme) type Parser = Parsec Void T.Text + +class Reconstructable a where + unLex :: a -> String + data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text deriving (Show,Eq,Ord) + +instance Reconstructable Trivia where + unLex (WhiteSpace s) = T.unpack s + unLex (BlockComment s) = T.unpack s + unLex (LineComment s) = "$" ++ T.unpack s data ETok = ETok { offsets :: Offsets, trivia :: [Trivia], - lexeme :: Lexeme + lexeme :: Lexeme, + capture :: String } deriving (Eq,Ord) +instance Reconstructable ETok where + unLex (ETok _ t _ v) = concatMap unLex t ++ v + + +totalLength :: ETok -> Int +totalLength (ETok {offsets=(_,_,l,_)}) = l -makeToken :: Offsets -> [Trivia] -> Lexeme -> ETok +tokenStart :: ETok -> Int +tokenStart (ETok {offsets=(_,s,_,_)}) = s + +makeToken :: Offsets -> [Trivia] -> Lexeme -> String -> ETok makeToken = ETok eLex :: Parser [ETok] @@ -485,7 +82,7 @@ aToken = do wse <- getOffset tok <- aLexeme tokenEnd <- getOffset - return $ makeToken (start,wse,tokenEnd-start,tok) whiteSpace tok + return $ makeToken (start,wse,tokenEnd-start,tok) whiteSpace tok (lexemeFace tok) aLexeme :: Parser Lexeme aLexeme = try pEOF @@ -548,9 +145,12 @@ blockComment = do return $ BlockComment $ T.pack text instance Show ETok where - show (ETok _ _ q) = show q + show (ETok _ _ q _) = show q -newtype ETokenStream = ETokenStream [ETok] +data ETokenStream = ETokenStream { + streamSourceText :: Text + ,streamTokens :: [ETok] +} instance Stream ETokenStream where type Token ETokenStream= ETok type Tokens ETokenStream= [ETok] @@ -559,17 +159,57 @@ instance Stream ETokenStream where chunkToTokens proxy = id chunkLength proxy = length chunkEmpty proxy xs = False - take1_ (ETokenStream (x:xs)) = Just (x, ETokenStream xs) - take1_ (ETokenStream []) = Nothing + take1_ :: ETokenStream -> Maybe (Token ETokenStream, ETokenStream) + take1_ (ETokenStream _ (x:xs)) = Just (x, buildStream xs) + take1_ (ETokenStream _ []) = Nothing + takeN_ :: Int -> ETokenStream -> Maybe (Tokens ETokenStream, ETokenStream) takeN_ n xs | n<=0 = Just([],xs) - takeN_ n (ETokenStream []) = Nothing - takeN_ n (ETokenStream xs) = Just (take n xs,ETokenStream $ drop n xs) - takeWhile_ p (ETokenStream xs) = (takeWhile p xs,ETokenStream $ dropWhile p xs) + takeN_ _ (ETokenStream _ []) = Nothing + takeN_ n (ETokenStream s xs) = Just (take n xs,buildStream $ drop n xs) + takeWhile_ :: (Token ETokenStream -> Bool)-> ETokenStream -> (Tokens ETokenStream, ETokenStream) + takeWhile_ p (ETokenStream _ xs) = + (a,buildStream b) + where + (a,b) = span p xs + -- (takeWhile p xs,ETokenStream $ dropWhile p xs) + +buildStream :: [ETok] -> ETokenStream +buildStream xs = case NE.nonEmpty xs of + Nothing -> ETokenStream "" xs + Just s -> ETokenStream (T.pack $ showTokens pxy s) xs + instance VisualStream ETokenStream where - showTokens p q = concat $ show <$> q + showTokens p q = concat $ unLex <$> q tokensLength p ls = sum $ len <$> ls - where len (ETok (_,_,x,_) _ _) = x + where len ETok{offsets =(_,_,x,_)} = x +--https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where - reachOffset i s = (Nothing, s) - reachOffsetNoLine i s = s \ No newline at end of file + reachOffset o PosState {..} = + ( Just (prefix ++ restOfLine) + , PosState + { pstateInput = buildStream post + , pstateOffset = max pstateOffset o + , pstateSourcePos = newSourcePos + , pstateTabWidth = pstateTabWidth + , pstateLinePrefix = prefix + } + ) + where + prefix = + if sameLine + then pstateLinePrefix ++ preLine + else preLine + sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos + newSourcePos = + case post of + [] -> pstateSourcePos + (x:_) -> pstateSourcePos { sourceLine = mkPos $ tokenStart x , sourceColumn = mkPos $ tokenStart x} + (pre, post) :: ([ETok],[ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) + (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre),maybe "" (showTokens pxy) (NE.nonEmpty post)) + preLine = reverse . takeWhile (/= '\n') . reverse $ preStr + tokensConsumed = o + restOfLine = takeWhile (/= '\n') postStr + +pxy :: Proxy ETokenStream +pxy = Proxy \ No newline at end of file From cb2c2f71a9e170394ce75ae26068337b97d874a7 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 3 Oct 2022 17:13:18 +0100 Subject: [PATCH 058/378] Start on validation --- src/Conjure/Language/AST/ASTParser.hs | 10 +- src/Conjure/Language/AST/Syntax.hs | 10 +- src/Conjure/Language/Validator.hs | 413 +++++++++++++++++++++++++- 3 files changed, 419 insertions(+), 14 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index dad010104a..8aa4512085 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -29,7 +29,7 @@ parseBranching = do lBranching <- need L_branching lOn <- want L_on statements <- squareBracketList (commaList parseBranchingPart) - return $ Branching $ BranchingStatementNode lBranching lOn statements + return $ BranchingStatement $ BranchingStatementNode lBranching lOn statements parseBranchingPart :: Parser BranchingOnNode parseBranchingPart = @@ -42,21 +42,21 @@ parseSuchThat = do lSuch <- need L_such lThat <- want L_that exprs <- commaList parseExpression - return $ SuchThat $ SuchThatStatementNode lSuch lThat exprs + return $ SuchThatStatement $ SuchThatStatementNode lSuch lThat exprs parseWhere :: Parser StatementNode parseWhere = do lWhere <- need L_where exprs <- commaList parseExpression - return $ Where $ WhereStatementNode lWhere exprs + return $ WhereStatement $ WhereStatementNode lWhere exprs parseObjective :: Parser StatementNode parseObjective = do - Objective <$> parseObjectiveStatement + ObjectiveStatement <$> parseObjectiveStatement parseDeclaration :: Parser StatementNode parseDeclaration = - Declaration + DeclarationStatement <$> do (LettingStatement <$> parseLetting) <|> (GivenStatement <$> parseGiven) diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index c159979115..64d6e04248 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -21,11 +21,11 @@ instance Show ProgramTree where show (ProgramTree x) = intercalate "\n" (map show x) data StatementNode - = Declaration DeclarationStatementNode - | Branching BranchingStatementNode - | SuchThat SuchThatStatementNode - | Where WhereStatementNode - | Objective ObjectiveStatementNode + = DeclarationStatement DeclarationStatementNode + | BranchingStatement BranchingStatementNode + | SuchThatStatement SuchThatStatementNode + | WhereStatement WhereStatementNode + | ObjectiveStatement ObjectiveStatementNode deriving (Show) data SuchThatStatementNode diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index f45517939e..66801f48ee 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -1,8 +1,413 @@ +{-# LANGUAGE InstanceSigs #-} + module Conjure.Language.Validator where -import Conjure.Prelude +import Conjure.Language.AST.ASTParser +import Conjure.Language.AST.Syntax as S import Conjure.Language.Definition -import Conjure.Language.AST +import Conjure.Language.Lexemes +import Conjure.Prelude +import Control.Applicative +import Control.Monad.State +import Conjure.Language.NewLexer (ETok (lexeme, capture, ETok), ETokenStream (ETokenStream), eLex) +import Conjure.Language.Domain + +import Data.Text (unpack, pack) +import Conjure.Language.Type +import Shelly (ls) +import Text.Megaparsec (parseMaybe) + +validateModel :: ProgramTree -> Either Doc Model +validateModel model = Left "TODO" + + +validateProgramTree :: ProgramTree -> Validator [Declaration] +validateProgramTree (ProgramTree (x:xs)) = validateStatement x +validateProgramTree _ = todo + + +validateStatement :: StatementNode -> Validator [Declaration] +validateStatement a = case a of + DeclarationStatement (FindStatement f) -> validateFind f + _ -> todo +data ValidatorError + = TypeError String + | TokenError LToken + | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere + | NotImplemented + deriving (Show) + +-- --validateFind :: ValidatorState -> FindStatementNode -> (ValidatorState,FindOrGiven) +-- validateFind :: FindStatementNode -> Validator [Declaration] +-- validateFind (FindStatementNode l names b domain) = +-- do +-- validateSymbol l +-- names' <- validateSeq $ validateName names +-- validateSymbol b +-- domain' <- validateDomain domain +-- return $ FindOrGiven FindOrGiven Name (Domain () Expression) + +-- validateList :: ListNode a -> (a -> Validator b) -> Validator [b] +-- validateList xs f = map q xs +-- where q e= do +-- a <- f e +-- return e + +-- validateSymbol :: LToken -> Validator () +-- validateSymbol a = do put $ ValidatorState [] + +-- validateName :: NameNode -> Validator String +-- validateName (NameNode (LIdentifier s)) = s +-- validateName (NameNode (_)) = do +-- raise "missing synbol" +-- return "" + + +data Validator a = Validator + { value :: Maybe a + , errors :: [ValidatorError] + } + deriving (Show) + +data Validated a = Valid a | Invalid + +instance Functor Validated where + fmap :: (a -> b) -> Validated a -> Validated b + fmap fab (Valid a) = Valid (fab a) + fmap _ Invalid = Invalid + +instance Applicative Validated where + pure :: a -> Validated a + pure = Valid + (<*>) :: Validated (a -> b) -> Validated a -> Validated b + (Valid fab) <*> (Valid a) = Valid (fab a) + Invalid <*> (Valid _) = Invalid + _ <*> Invalid = Invalid + +data Foo = Foo Int Int Int + deriving (Show) + +instance Functor Validator where + fmap :: (a -> b) -> Validator a -> Validator b + fmap fab (Validator m_a ves) = + Validator + { value = case m_a of + Nothing -> Nothing + (Just a) -> Just $ fab a + , errors = ves + } +instance Applicative Validator where + pure :: a -> Validator a + pure x = Validator (Just x) [] + (<*>) :: Validator (a -> b) -> Validator a -> Validator b + (Validator Nothing es) <*> (Validator _ e2s) = Validator Nothing (es ++ e2s) + (Validator (Just f) es) <*> (Validator a e2s) = Validator val (es ++ e2s) + where + val = case a of + Just a' -> Just $ f a' + Nothing -> Nothing + +instance Monad Validator where + (>>=) :: Validator a -> (a -> Validator b) -> Validator b + (Validator Nothing ves) >>= _ + = Validator {value = Nothing, errors = ves} + (Validator (Just n) ves) >>= f = let r = f n in + r {errors = ves ++ errors r} + + +validate :: Validator a -> Validator (Validated a) +validate n = do + case n of + Validator Nothing ves -> Validator (Just Invalid) ves + Validator (Just a) ves -> Validator (Just $ Valid a) ves + + +getPrefix :: Validator Int +getPrefix = Validator Nothing [TypeError "ERR"] + +g :: Validator Foo +g = do + _ <- validate getPrefix + a <- validate $ do return 1 + b <- validate $ do return 1:: Validator Int + c <- validate $ do return 1 + verify $ Foo <$> a <*> b <*> c + +verify :: Validated a -> Validator a +verify (Valid a) = Validator {value = Just a, errors = []} +verify Invalid = Validator {value = Nothing, errors = []} + +invalid :: ValidatorError -> Validator a +invalid err = Validator Nothing [err] + +-- qq :: Checker Foo +-- qq = do +-- getPrefix +-- q <- get +-- return $ Foo <$> q a b + +rg :: String +rg = case g of + (Validator x es) -> show (x,es) + +-- type Checker a = State [ValidatorError] (Maybe a) + +validateSymbol :: LToken -> Validator Lexeme +validateSymbol s = + case s of + RealToken et -> return $ lexeme et + _ -> invalid $ TokenError s + + -- [MissingTokenError ] + + +validateFind :: FindStatementNode -> Validator [Declaration] +validateFind (FindStatementNode find names colon domain ) = do + checkSymbols [find,colon] + names' <- validate $ validateNameList names + domain' <- validate $ validateDomain domain + verify $ map <$> (makeFind <$> domain') <*> names' + where + makeFind :: Domain () Expression -> Name -> Declaration + makeFind dom nm = FindOrGiven Find nm dom + + + + + +type DomainValidator = Validator (Domain () Expression) + +validateDomain :: DomainNode -> DomainValidator +validateDomain dm = case dm of + BoolDomainNode lt -> validateSymbol lt >> return DomainBool + r@(RangedIntDomainNode _ _) -> validateRangedInt r + RangedEnumNode nn ranges -> validateEnumRange nn ranges + EnumDomainNode nn -> validateNamedEnumDomain nn + TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms + RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom + VariantDomainNode l1 ndom -> checkSymbols [l1] >> validateVariantDomain ndom + MatrixDomainNode l1 l2 l3 idoms l4 dom -> checkSymbols [l1,l2,l3,l4] >> validateMatrixDomain idoms dom + SetDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validateSetDomain attrs dom + MSetDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validateMSetDomain attrs dom + FunctionDomainNode l1 attrs dom1 l2 dom2 -> checkSymbols [l1,l2] >> validateFunctionDomain attrs dom1 dom2 + SequenceDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validateSequenceDomain attrs dom + RelationDomainNode l1 attrs l2 doms -> checkSymbols [l1,l2] >> validateRelationDomain attrs doms + PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validatePartitionDomain attrs dom + MissingDomainNode lt -> invalid $ TokenError lt + where + validateEnumRange :: NameNode -> ListNode RangeNode -> DomainValidator + validateEnumRange name ranges = do + name' <- validate $ validateIdentifier name + ranges' <- validateList validateRange ranges + --scopecheck (see parser:313) + verify $ (\n -> DomainEnum (Name n) (Just ranges') Nothing) <$> name' + validateNamedEnumDomain :: NameNode -> DomainValidator + validateNamedEnumDomain name = do + name' <- validateName name + return $ DomainReference name' Nothing + validateTupleDomain :: ListNode DomainNode -> DomainValidator + validateTupleDomain doms = DomainTuple <$> validateList validateDomain doms + validateRecordDomain :: ListNode NamedDomainNode -> DomainValidator + validateRecordDomain namedDoms = DomainRecord <$> validateList validateNamedDomain namedDoms + validateVariantDomain :: ListNode NamedDomainNode -> DomainValidator + validateVariantDomain namedDoms = DomainRecord <$> validateList validateNamedDomain namedDoms + validateMatrixDomain ::ListNode DomainNode -> DomainNode -> DomainValidator + validateMatrixDomain indexes dom = do + idoms <- validate $ validateList validateDomain indexes + dom' <- validate $ validateDomain dom + verify $ foldr DomainMatrix <$> dom' <*> idoms + validateSetDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + validateSetDomain attrs dom = do + let repr = Valid () + attrs' <- validate $ validateSetAttributes attrs + dom' <- validate $ validateDomain dom + verify $ DomainSet <$> repr <*> attrs' <*> dom' + + validateMSetDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + validateMSetDomain attrs dom = do + let repr = Valid () + attrs' <- validate $ validateMSetAttributes attrs + dom' <- validate $ validateDomain dom + verify $ DomainMSet <$> repr <*> attrs' <*> dom' + validateFunctionDomain :: ListNode AttributeNode-> DomainNode -> DomainNode -> DomainValidator + validateFunctionDomain attrs dom1 dom2 = do + let repr = Valid () + attrs' <- validate $ validateFuncAttributes attrs + dom1' <- validate $ validateDomain dom1 + dom2' <- validate $ validateDomain dom2 + verify $ DomainFunction <$> repr <*> attrs' <*> dom1' <*> dom2' + -- attrs <- validateAttributes + validateSequenceDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + validateSequenceDomain attrs dom = do + let repr = Valid () + attrs' <- validate $ validateSeqAttributes attrs + dom' <- validate $ validateDomain dom + verify $ DomainSequence <$> repr <*> attrs' <*> dom' + validateRelationDomain :: ListNode AttributeNode-> ListNode DomainNode -> DomainValidator + validateRelationDomain attrs doms = do + let repr = Valid () + attrs' <- validate $ validateRelationAttributes attrs + doms' <- validate $ validateList validateDomain doms + verify $ DomainRelation <$> repr <*> attrs' <*> doms' + validatePartitionDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + validatePartitionDomain attrs dom = do + let repr = Valid () + attrs' <- validate $ validatePartitionAttributes attrs + dom' <- validate $ validateDomain dom + verify $ DomainPartition <$> repr <*> attrs' <*> dom' + +todo:: Validator a +todo = invalid NotImplemented + +validateRangedInt :: DomainNode ->DomainValidator +validateRangedInt (RangedIntDomainNode lt ranges) = + do + _ <- validate $ validateSymbol lt + ranges' <- validateList validateRange ranges + return $ DomainInt TagInt ranges' + +validateRangedInt _ = invalid IllegalToken {} + +--TODO:THIS IS NOT DONE +validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) +validateSetAttributes a = do verify $ Invalid + +validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) +validateMSetAttributes a = do verify $ Invalid + +validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) +validateFuncAttributes a = do verify $ Invalid + +validateSeqAttributes :: ListNode AttributeNode -> Validator (SequenceAttr Expression) +validateSeqAttributes a = do verify $ Invalid + +validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr Expression) +validateRelationAttributes a = do verify $ Invalid + +validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) +validatePartitionAttributes a = do verify $ Invalid + +validateNamedDomain :: NamedDomainNode -> Validator (Name,Domain () Expression) +validateNamedDomain (NameDomainNode name l1 domain) = do + checkSymbols [l1] + name' <- validate $ validateName name + domain' <- validate $ validateDomain domain + verify $ (,) <$> name' <*> domain' + +validateRange :: RangeNode -> Validator (Range Expression) +validateRange range = case range of + SingleRangeNode en -> RangeSingle <$> validateExpression en + OpenRangeNode (DoubleDotNode a b) -> checkSymbols [a,b] >> return RangeOpen + RightUnboundedRangeNode e1 (DoubleDotNode a b) -> checkSymbols [a,b] >> RangeLowerBounded <$> validateExpression e1 + LeftUnboundedRangeNode (DoubleDotNode a b) e1 -> checkSymbols [a,b] >> RangeUpperBounded <$> validateExpression e1 + BoundedRangeNode e1 (DoubleDotNode a b) e2 -> do + _ <- checkSymbols [a,b] + e1' <- validate $ validateExpression e1 + e2' <- validate $ validateExpression e2 + verify $ RangeBounded <$> e1' <*> e2' + + +validateArrowPair :: ArrowPairNode -> Validator (Expression,Expression) +validateArrowPair (ArrowPairNode e1 s e2) = do + checkSymbols [s] + e1' <- validate $ validateExpression e1 + e2' <- validate $ validateExpression e2 + verify $ (,) <$> e1' <*> e2' + + +validateExpression :: ExpressionNode -> Validator Expression +validateExpression expr = case expr of + Literal ln -> validateLiteral ln + IdentifierNode nn -> todo + QuantificationExpr qen -> todo + ComprehensionExpr cen -> todo + OperatorExpressionNode oen -> todo + ParenExpression pen -> todo + AbsExpression pen -> todo + FunctionalApplicationNode lt ln -> todo + MissingExpressionNode lt -> invalid $ TokenError lt + +validateLiteral :: LiteralNode -> Validator Expression +validateLiteral ln = case ln of + IntLiteral lt -> Constant <$> validateIntLiteral lt + BoolLiteral lt -> Constant <$> validateBoolLiteral lt + MatrixLiteral mln -> todo + TupleLiteralNode lt -> todo + TupleLiteralNodeShort st -> todo + RecordLiteral lt ln' -> todo + VariantLiteral lt ln' -> todo + SetLiteral ln' -> todo + MSetLiteral lt ln' -> todo + FunctionLiteral lt ln' -> todo + SequenceLiteral lt ln' -> todo + RelationLiteral lt ln' -> todo + PartitionLiteral lt ln' -> todo + +checkSymbols :: [LToken] -> Validator () +checkSymbols = mapM_ (validate . validateSymbol) + + +validateShortTuple :: ShortTuple -> Validator [Expression] +validateShortTuple (ShortTuple exs) = validateList validateExpression exs + + +validateLongTuple :: LongTuple -> Validator [Expression] +validateLongTuple (LongTuple lt exs) = checkSymbols [lt] >> validateList validateExpression exs + + +validateIntLiteral :: LToken -> Validator Constant +validateIntLiteral t = do + l <- validateSymbol t + case l of + LIntLiteral x -> return $ ConstantInt TagInt x + _ -> invalid $ IllegalToken t + +validateBoolLiteral :: LToken -> Validator Constant +validateBoolLiteral t = do + l <- validateSymbol t + case l of + L_true -> return $ ConstantBool True + L_false -> return $ ConstantBool False + _ -> invalid $ IllegalToken t + + +validateNameList :: Sequence NameNode -> Validator [Name] +validateNameList = validateSequence validateName + +validateIdentifier :: NameNode -> Validator Text +validateIdentifier (NameNode iden) = do + q <- validate $ validateSymbol iden + verify $ case q of + Valid (LIdentifier x) ->Valid x + _ -> Invalid + +validateName :: NameNode -> Validator Name +validateName name = Name <$> validateIdentifier name + +validateList :: (a -> Validator b) -> ListNode a -> Validator [b] +validateList validator (ListNode st seq end) = do + _ <- validateSymbol st + _ <- validateSymbol end + validateSequence validator seq + +validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] +validateSequence f (Seq vals) = mapM (validateSequenceElem f) vals + +validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator b +validateSequenceElem f (SeqElem i (Just x)) = validate (validateSymbol x) >> f i +validateSequenceElem f (SeqElem i Nothing) = f i + -validate :: ProgramTree -> Either Doc Model -validate _ = Left "TODO" +val :: String -> IO () +val s = do + let str = s + let other = [ETok (0, 0, 0, L_EOF) [] L_EOF ""] + let txt = pack str + let lexed = parseMaybe eLex txt + let stream = ETokenStream txt $ fromMaybe other lexed + -- parseTest parseProgram stream + let progStruct = parseMaybe parseProgram stream + case progStruct of + Nothing -> putStrLn "error" + Just p@(ProgramTree a) -> print (validateProgramTree p) + -- putStrLn validateFind \ No newline at end of file From 2fa2362ef5dcfc6e7e15f7bdf9c5dd8a5332f324 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 5 Oct 2022 16:18:31 +0100 Subject: [PATCH 059/378] Added suport for rebuiling source from lexer and parse tree --- src/Conjure/Language/AST/ASTParser.hs | 37 +++- src/Conjure/Language/AST/Helpers.hs | 3 + src/Conjure/Language/AST/Reformer.hs | 216 ++++++++++++++++++++ src/Conjure/Language/AST/Syntax.hs | 10 + src/Conjure/Language/Lexemes.hs | 1 + src/Conjure/Language/NewLexer.hs | 282 ++++++++++++++------------ src/Conjure/Language/Validator.hs | 16 +- 7 files changed, 421 insertions(+), 144 deletions(-) create mode 100644 src/Conjure/Language/AST/Reformer.hs diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 8aa4512085..cb2940ffe3 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -14,6 +14,8 @@ import Conjure.Language.Lexemes import Text.Megaparsec import Data.Text (pack) +import Data.Void (Void) +import Conjure.Language.AST.Reformer (Flattenable(..)) parseTopLevel :: Parser StatementNode parseTopLevel = @@ -23,6 +25,7 @@ parseTopLevel = <|> parseSuchThat <|> parseWhere <|> parseObjective + <|> UnexpectedToken <$> makeUnexpected parseBranching :: Parser StatementNode parseBranching = do @@ -133,7 +136,7 @@ parseObjectiveStatement = do parseProgram :: Parser ProgramTree parseProgram = do tl <- many parseTopLevel - eof + eof return $ ProgramTree tl example :: String -> IO () @@ -163,7 +166,7 @@ demo2 :: String demo2 = intercalate "\n"[ "given n : int(1..2)" ,"find perm : sequence (size n) of int(1..n)" - ,"such that" + ,"such that $comment" ," allDiff([perm(k) | k : int(1..n) ])," ," and([ max(subs) - min(subs) + 1 != |subs| |" ," i : int(1..n-1), j : int(2..n)," @@ -171,4 +174,32 @@ demo2 = intercalate "\n"[ ," !(i = 1 /\\ j = n)," ," letting subs be [perm(k) | k : int(i..j)]]" ," )" - ] \ No newline at end of file + ] + +parsePrint :: String -> IO () +parsePrint text = do + toks <- parseAndRevalidate (pack text) eLex (concatMap reform) text + case toks of + Left (a,b)-> do + putStrLn "Lexer wasn't reversible" + showDiff a b + Right ets -> putStrLn "Lexer success" >> do + tree <- parseAndRevalidate (ETokenStream (pack text) ets) parseProgram (\v -> reformList (flatten v :: [ETok]) ) text + case tree of + Left (a,b) -> do + putStrLn "Parser wasn't reversible:" + showDiff a b + Right _ -> putStrLn "Success" + where + showDiff a b = do + putStrLn "got vvvvvvvvv" + putStrLn a + putStrLn "expected vvvvvvvvv" + putStrLn b + + +parseAndRevalidate ::(VisualStream a,Stream a) => a -> ParsecT Void a Identity b -> (b -> String) -> String -> IO (Either (String,String) b) +parseAndRevalidate src p f ref = do + case runParser p "" src of + Left _ -> putStrLn "Parse error" >> empty + Right res -> return (if f res == ref then Right res else Left (f res,ref)) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 4a10f9bfca..82c757234a 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -39,6 +39,9 @@ makeMissing l = do ETok {offsets=(s, _, _, _)} <- lookAhead anySingle return (MissingToken (ETok (s, s, 0, l) [] l "")) +makeUnexpected :: Parser LToken +makeUnexpected = SkippedToken <$> anySingle + -- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs new file mode 100644 index 0000000000..c830f0ae31 --- /dev/null +++ b/src/Conjure/Language/AST/Reformer.hs @@ -0,0 +1,216 @@ +module Conjure.Language.AST.Reformer where + +import Conjure.Language.AST.Syntax +import Conjure.Language.NewLexer (ETok (..)) +import Conjure.Prelude + +class Flattenable v a where + flatten :: Flattenable v a => a -> [v] + +instance Flattenable ETok ProgramTree where + flatten (ProgramTree sts) = concatMap flatten sts + +instance Flattenable ETok StatementNode where + flatten x = case x of + DeclarationStatement dsn -> flatten dsn + BranchingStatement bsn -> flatten bsn + SuchThatStatement stsn -> flatten stsn + WhereStatement wsn -> flatten wsn + ObjectiveStatement osn -> flatten osn + UnexpectedToken tok -> flatten tok + +instance Flattenable ETok DeclarationStatementNode where + flatten x = case x of + FindStatement fsn -> flatten fsn + GivenStatement gsn -> flatten gsn + LettingStatement lsn -> flatten lsn + +instance Flattenable ETok LettingStatementNode where + flatten x = case x of + LettingExpr a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + LettingDomain a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] + LettingEnum a b c d e f g -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f, flatten g] + LettingAnon a b c d e f g h -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f, flatten g, flatten h] + +instance Flattenable ETok FindStatementNode where + flatten (FindStatementNode a b c d) = concat [flatten a, flatten b, flatten c, flatten d] + +instance Flattenable ETok GivenStatementNode where + flatten x = case x of + GivenStatementNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + GivenEnumNode a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] + + + +instance Flattenable ETok BranchingStatementNode where + flatten (BranchingStatementNode lt lt' ln) = concat [flatten lt, flatten lt', flatten ln] + +instance Flattenable ETok BranchingOnNode where + flatten x = case x of + BranchingOnName nn -> flatten nn + BranchingOnExpression en -> flatten en + +instance Flattenable ETok SuchThatStatementNode where + flatten (SuchThatStatementNode l1 l2 l3) = flatten l1 ++ flatten l2 ++ flatten l3 +instance Flattenable ETok WhereStatementNode where + flatten (WhereStatementNode l1 l2) = flatten l1 ++ flatten l2 +instance Flattenable ETok ObjectiveStatementNode where + flatten x = case x of + ObjectiveMin lt en -> concat [flatten lt, flatten en] + ObjectiveMax lt en -> concat [flatten lt, flatten en] + +instance Flattenable ETok LToken where + flatten x = case x of + RealToken et -> concat [flatten et] + MissingToken _ -> concat [] + SkippedToken et -> concat [flatten et] + +instance Flattenable ETok ETok where + flatten = pure + +instance Flattenable ETok ExpressionNode where + flatten x = case x of + Literal ln -> concat [flatten ln] + IdentifierNode nn -> concat [flatten nn] + QuantificationExpr qen -> concat [flatten qen] + ComprehensionExpr cen -> concat [flatten cen] + OperatorExpressionNode oen -> concat [flatten oen] + ParenExpression pen -> concat [flatten pen] + AbsExpression pen -> concat [flatten pen] + FunctionalApplicationNode lt ln -> concat [flatten lt, flatten ln] + MissingExpressionNode _ -> concat [] + +instance Flattenable ETok QuantificationExpressionNode where + flatten (QuantificationExpressionNode a b c d) = concat [flatten a, flatten b, flatten c, flatten d] + +instance Flattenable ETok QuantificationPattern where + flatten (QuantificationPattern en) = flatten en + +instance Flattenable ETok LiteralNode where + flatten x = case x of + IntLiteral lt -> concat [flatten lt] + BoolLiteral lt -> concat [flatten lt] + MatrixLiteral mln -> concat [flatten mln] + TupleLiteralNode lt -> concat [flatten lt] + TupleLiteralNodeShort st -> concat [flatten st] + RecordLiteral lt ln -> concat [flatten lt, flatten ln] + VariantLiteral lt ln -> concat [flatten lt, flatten ln] + SetLiteral ln -> concat [flatten ln] + MSetLiteral lt ln -> concat [flatten lt, flatten ln] + FunctionLiteral lt ln -> concat [flatten lt, flatten ln] + SequenceLiteral lt ln -> concat [flatten lt, flatten ln] + RelationLiteral lt ln -> concat [flatten lt, flatten ln] + PartitionLiteral lt ln -> concat [flatten lt, flatten ln] + +instance Flattenable ETok PartitionElemNode where + flatten (PartitionElemNode ln) = flatten ln + +instance Flattenable ETok RelationElemNode where + flatten x = case x of + RelationElemNodeLabeled lt -> flatten lt + RelationElemNodeShort st -> flatten st + +instance Flattenable ETok ArrowPairNode where + flatten (ArrowPairNode a b c) = concat [flatten a, flatten b, flatten c] + +instance Flattenable ETok RecordMemberNode where + flatten (RecordMemberNode nn lt en) = concat [flatten nn, flatten lt, flatten en] +instance Flattenable ETok LongTuple where + flatten (LongTuple a b) = flatten a ++ flatten b + +instance Flattenable ETok ShortTuple where + flatten (ShortTuple a) = flatten a + +instance Flattenable ETok MatrixLiteralNode where + flatten x = case x of + MatrixLiteralExplicitDomain ln lt dn -> concat [flatten ln, flatten lt, flatten dn] + MatrixLiteralImplicitDomain ln -> flatten ln + +instance Flattenable ETok ComprehensionExpressionNode where + flatten (ComprehensionExpressionNode a b c d e) = + concat + [ flatten a + , flatten b + , flatten c + , flatten d + , flatten e + ] + +instance Flattenable ETok ComprehensionBodyNode where + flatten x = case x of + CompBodyCondition en -> flatten en + CompBodyDomain ndn -> flatten ndn + CompBodyLettingNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + +instance Flattenable ETok OperatorExpressionNode where + flatten x = case x of + PostfixOpNode en pon -> flatten en ++ flatten pon + PrefixOpNode lt en -> flatten lt ++ flatten en + BinaryOpNode en lt en' -> concat [flatten en, flatten lt, flatten en'] + +instance Flattenable ETok PostfixOpNode where + flatten x = case x of + IndexedNode lt i lt' -> concat [flatten lt, flatten i, flatten lt'] + OpFactorial lt -> flatten lt + ApplicationNode ln -> flatten ln + +instance Flattenable ETok IndexerNode where + flatten Indexer = [] + +instance Flattenable ETok DomainNode where + flatten x = case x of + BoolDomainNode lt -> concat [flatten lt] + RangedIntDomainNode lt ln -> concat [flatten lt, flatten ln] + RangedEnumNode nn ln -> concat [flatten nn, flatten ln] + EnumDomainNode nn -> concat [flatten nn] + TupleDomainNode lt ln -> concat [flatten lt, flatten ln] + RecordDomainNode lt ln -> concat [flatten lt, flatten ln] + VariantDomainNode lt ln -> concat [flatten lt, flatten ln] + MatrixDomainNode a b c d e f -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] + SetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + MSetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + FunctionDomainNode a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] + SequenceDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + RelationDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + PartitionDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + MissingDomainNode _ -> [] + +instance Flattenable ETok AttributeNode where + flatten x = case x of + NamedAttributeNode nn -> concat [flatten nn] + NamedExpressionAttribute nn en -> concat [flatten nn, flatten en] + +instance Flattenable ETok RangeNode where + flatten x = case x of + SingleRangeNode en -> concat [flatten en] + OpenRangeNode ddn -> concat [flatten ddn] + RightUnboundedRangeNode en ddn -> concat [flatten en, flatten ddn] + LeftUnboundedRangeNode ddn en -> concat [flatten ddn, flatten en] + BoundedRangeNode en ddn en' -> concat [flatten en, flatten ddn, flatten en'] + +instance Flattenable ETok DoubleDotNode where + flatten (DoubleDotNode a b) = flatten a ++ flatten b + +instance Flattenable ETok NamedDomainNode where + flatten (NameDomainNode a b c) = concat [flatten a, flatten b, flatten c] + +instance Flattenable ETok NameNode where + flatten (NameNode n) = flatten n + +instance Flattenable ETok ParenExpressionNode where + flatten (ParenExpressionNode a b c) = flatten a ++ flatten b ++ flatten c + +instance Flattenable ETok b => Flattenable ETok (ListNode b) where + flatten (ListNode l1 seq l2) = concat [flatten l1, flatten seq, flatten l2] + +instance Flattenable ETok b => Flattenable ETok (Sequence b) where + flatten (Seq es) = concatMap flatten es + +instance Flattenable ETok b => Flattenable ETok (SeqElem b) where + flatten (SeqElem v Nothing) = flatten v + flatten (SeqElem v (Just a)) = flatten v++ flatten a + + + + + diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 64d6e04248..60d9ae00b1 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -1,9 +1,13 @@ +{-# LANGUAGE InstanceSigs #-} module Conjure.Language.AST.Syntax where import Conjure.Language.NewLexer (ETok) import Conjure.Prelude + + + data LToken = RealToken ETok | MissingToken ETok @@ -17,6 +21,9 @@ instance Show LToken where newtype ProgramTree = ProgramTree [StatementNode] + + + instance Show ProgramTree where show (ProgramTree x) = intercalate "\n" (map show x) @@ -26,8 +33,11 @@ data StatementNode | SuchThatStatement SuchThatStatementNode | WhereStatement WhereStatementNode | ObjectiveStatement ObjectiveStatementNode + | UnexpectedToken LToken deriving (Show) + + data SuchThatStatementNode = SuchThatStatementNode LToken -- Such diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 0550d4996d..748bf9c4cf 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -12,6 +12,7 @@ data Lexeme | LIdentifier T.Text | LMissingIdentifier --helper for missing symbol | LMetaVar T.Text + | LUnexpected T.Text | LMissingMetaVar --helper for missing symbol -- general | L_be diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index d627109313..02ba01df92 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -1,15 +1,14 @@ - -{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE InstanceSigs #-} +{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeFamilies #-} +module Conjure.Language.NewLexer where -module Conjure.Language.NewLexer where -import Conjure.Prelude hiding (some,many) import Conjure.Language.Lexemes -import Data.Char ( isAlpha, isAlphaNum ) +import Conjure.Prelude hiding (many, some) +import Data.Char (isAlpha, isAlphaNum) import Data.Void import qualified Data.Text as T @@ -17,19 +16,33 @@ import qualified Data.Text as T import Text.Megaparsec hiding (State) import Text.Megaparsec.Char -import qualified Text.Megaparsec.Char.Lexer as L -import qualified Data.List.NonEmpty as NE import Data.List (splitAt) +import qualified Data.List.NonEmpty as NE +import qualified Text.Megaparsec.Char.Lexer as L +class Reformable a where + reform :: a -> String +instance Reformable ETok where + reform (ETok{capture=cap,trivia=triv}) = concatMap showTrivia triv ++ T.unpack cap + where + showTrivia :: Trivia -> String + showTrivia x = case x of + WhiteSpace txt -> T.unpack txt + LineComment txt -> T.unpack txt + BlockComment txt -> T.unpack txt +reformList :: Reformable a => [a] -> String +reformList = concatMap reform emojis :: [Char] -emojis = concat [['\x1f600'..'\x1F64F'], - ['\x1f300'..'\x1f5ff'], - ['\x1f680'..'\x1f999'], - ['\x1f1e0'..'\x1f1ff']] - +emojis = + concat + [ ['\x1f600' .. '\x1F64F'] + , ['\x1f300' .. '\x1f5ff'] + , ['\x1f680' .. '\x1f999'] + , ['\x1f1e0' .. '\x1f1ff'] + ] isIdentifierFirstLetter :: Char -> Bool isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem` emojis @@ -37,39 +50,29 @@ isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis - -type Offsets = (Int,Int,Int,Lexeme) +type Offsets = (Int, Int, Int, Lexeme) type Parser = Parsec Void T.Text -class Reconstructable a where - unLex :: a -> String - -data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text - deriving (Show,Eq,Ord) -instance Reconstructable Trivia where - unLex (WhiteSpace s) = T.unpack s - unLex (BlockComment s) = T.unpack s - unLex (LineComment s) = "$" ++ T.unpack s -data ETok = ETok { - offsets :: Offsets, - trivia :: [Trivia], - lexeme :: Lexeme, - capture :: String -} - deriving (Eq,Ord) +data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text + deriving (Show, Eq, Ord) -instance Reconstructable ETok where - unLex (ETok _ t _ v) = concatMap unLex t ++ v +data ETok = ETok + { offsets :: Offsets + , trivia :: [Trivia] + , lexeme :: Lexeme + , capture :: Text + } + deriving (Eq, Ord) totalLength :: ETok -> Int -totalLength (ETok {offsets=(_,_,l,_)}) = l +totalLength (ETok{offsets = (_, _, l, _)}) = l tokenStart :: ETok -> Int -tokenStart (ETok {offsets=(_,s,_,_)}) = s +tokenStart (ETok{offsets = (_, s, _, _)}) = s -makeToken :: Offsets -> [Trivia] -> Lexeme -> String -> ETok +makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok eLex :: Parser [ETok] @@ -77,139 +80,156 @@ eLex = manyTill aToken eof aToken :: Parser ETok aToken = do - start <- getOffset - whiteSpace <- pTrivia - wse <- getOffset - tok <- aLexeme - tokenEnd <- getOffset - return $ makeToken (start,wse,tokenEnd-start,tok) whiteSpace tok (lexemeFace tok) - -aLexeme :: Parser Lexeme -aLexeme = try pEOF - <|> try pNumber - <|> try (choice $ map pLexeme lexemes) - <|> try pIdentifier - <|> try pMetaVar - -pEOF :: Parser Lexeme + start <- getOffset + whiteSpace <- pTrivia + wse <- getOffset + spos <- getSourcePos + (tok,cap) <- aLexeme + tokenEnd <- getOffset + return $ makeToken (start, wse, tokenEnd - start, tok) whiteSpace tok cap + +aLexeme :: Parser (Lexeme,Text) +aLexeme = aLexemeStrict <|> pFallback + +aLexemeStrict :: Parser (Lexeme,Text) +aLexemeStrict = + try pEOF + <|> try pNumber + <|> try (choice $ map pLexeme lexemes) + <|> try pIdentifier + <|> try pMetaVar +pEOF :: Parser (Lexeme,Text) pEOF = do - eof - return L_EOF + eof + return (L_EOF,"") -pNumber :: Parser Lexeme +pNumber :: Parser (Lexeme,Text) pNumber = do - LIntLiteral <$> L.decimal + v <- L.decimal + return (LIntLiteral v,T.pack $ show v) -pMetaVar :: Parser Lexeme +pMetaVar :: Parser (Lexeme,Text) pMetaVar = do - empty - return $ LMetaVar "TODO" + amp <- chunk "&" + (_,cap) <- pIdentifier + return (LMetaVar cap,amp `T.append` cap) - -pIdentifier :: Parser Lexeme +pIdentifier :: Parser (Lexeme,Text) pIdentifier = do - firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter - rest <- takeWhileP Nothing isIdentifierLetter - return $ LIdentifier (T.append firstLetter rest) - - -pLexeme :: (T.Text,Lexeme) -> Parser Lexeme -pLexeme (s,l) = do - tok <- string s - return l + firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter + rest <- takeWhileP Nothing isIdentifierLetter + let ident = T.append firstLetter rest + return ( LIdentifier ident, ident) + +pFallback :: Parser (Lexeme,Text) +pFallback = do + q <- T.pack <$> someTill anySingle (lookAhead $ try somethingValid) + + return (LUnexpected q,q) + where + somethingValid :: Parser () + somethingValid = void pTrivia <|> void aLexemeStrict + +pLexeme :: (T.Text, Lexeme) -> Parser (Lexeme,Text) +pLexeme (s, l) = do + tok <- string s + notFollowedBy $ if isIdentifierLetter $ T.last tok then nonIden else empty + return (l,tok) + where + nonIden = takeWhile1P Nothing isIdentifierLetter pTrivia :: Parser [Trivia] pTrivia = many (whiteSpace <|> lineComment <|> blockComment) whiteSpace :: Parser Trivia whiteSpace = do - s <- some spaceChar - return $ WhiteSpace $ T.pack s + s <- some spaceChar + return $ WhiteSpace $ T.pack s -lineEnd :: Parser () -lineEnd = do - _ <- optional eol - _ <- optional eof - return () +lineEnd :: Parser [Char] +lineEnd = T.unpack <$> eol <|> ( eof >> return []) lineComment :: Parser Trivia lineComment = do - _<-try (chunk "$") - text <- manyTill L.charLiteral lineEnd - return $ LineComment $ T.pack text + _ <- try (chunk "$") + (text,end) <- manyTill_ L.charLiteral lineEnd + return $ LineComment $ T.pack ('$' : text++end) blockComment :: Parser Trivia blockComment = do - _ <- try (chunk "/*") - text <- manyTill L.charLiteral (chunk "*/") - return $ BlockComment $ T.pack text + _ <- try (chunk "/*") + text <- manyTill L.charLiteral (chunk "*/") + return $ BlockComment $ T.pack text instance Show ETok where show (ETok _ _ q _) = show q -data ETokenStream = ETokenStream { - streamSourceText :: Text - ,streamTokens :: [ETok] -} +data ETokenStream = ETokenStream + { streamSourceText :: Text + , streamTokens :: [ETok] + } instance Stream ETokenStream where - type Token ETokenStream= ETok - type Tokens ETokenStream= [ETok] - tokenToChunk proxy x = [x] - tokensToChunk proxy xs= xs - chunkToTokens proxy = id - chunkLength proxy = length - chunkEmpty proxy xs = False + type Token ETokenStream = ETok + type Tokens ETokenStream = [ETok] + tokenToChunk _ x = [x] + tokensToChunk _ xs = xs + chunkToTokens _ = id + chunkLength _ = length + chunkEmpty _ [] = True + chunkEmpty _ _ = False take1_ :: ETokenStream -> Maybe (Token ETokenStream, ETokenStream) - take1_ (ETokenStream _ (x:xs)) = Just (x, buildStream xs) + take1_ (ETokenStream _ (x : xs)) = Just (x, buildStream xs) take1_ (ETokenStream _ []) = Nothing takeN_ :: Int -> ETokenStream -> Maybe (Tokens ETokenStream, ETokenStream) - takeN_ n xs | n<=0 = Just([],xs) + takeN_ n xs | n <= 0 = Just ([], xs) takeN_ _ (ETokenStream _ []) = Nothing - takeN_ n (ETokenStream s xs) = Just (take n xs,buildStream $ drop n xs) - takeWhile_ :: (Token ETokenStream -> Bool)-> ETokenStream -> (Tokens ETokenStream, ETokenStream) + takeN_ n (ETokenStream s xs) = Just (take n xs, buildStream $ drop n xs) + takeWhile_ :: (Token ETokenStream -> Bool) -> ETokenStream -> (Tokens ETokenStream, ETokenStream) takeWhile_ p (ETokenStream _ xs) = - (a,buildStream b) - where - (a,b) = span p xs - -- (takeWhile p xs,ETokenStream $ dropWhile p xs) + (a, buildStream b) + where + (a, b) = span p xs + +-- (takeWhile p xs,ETokenStream $ dropWhile p xs) buildStream :: [ETok] -> ETokenStream buildStream xs = case NE.nonEmpty xs of - Nothing -> ETokenStream "" xs - Just s -> ETokenStream (T.pack $ showTokens pxy s) xs + Nothing -> ETokenStream "" xs + Just s -> ETokenStream (T.pack $ showTokens pxy s) xs instance VisualStream ETokenStream where - showTokens p q = concat $ unLex <$> q + showTokens p = concatMap reform tokensLength p ls = sum $ len <$> ls - where len ETok{offsets =(_,_,x,_)} = x + where + len ETok{offsets = (_, _, x, _)} = x ---https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams +-- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where - reachOffset o PosState {..} = - ( Just (prefix ++ restOfLine) - , PosState - { pstateInput = buildStream post - , pstateOffset = max pstateOffset o - , pstateSourcePos = newSourcePos - , pstateTabWidth = pstateTabWidth - , pstateLinePrefix = prefix - } - ) - where - prefix = - if sameLine - then pstateLinePrefix ++ preLine - else preLine - sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos - newSourcePos = - case post of - [] -> pstateSourcePos - (x:_) -> pstateSourcePos { sourceLine = mkPos $ tokenStart x , sourceColumn = mkPos $ tokenStart x} - (pre, post) :: ([ETok],[ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) - (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre),maybe "" (showTokens pxy) (NE.nonEmpty post)) - preLine = reverse . takeWhile (/= '\n') . reverse $ preStr - tokensConsumed = o - restOfLine = takeWhile (/= '\n') postStr + reachOffset o PosState{..} = + ( Just (prefix ++ restOfLine) + , PosState + { pstateInput = buildStream post + , pstateOffset = max pstateOffset o + , pstateSourcePos = newSourcePos + , pstateTabWidth = pstateTabWidth + , pstateLinePrefix = prefix + } + ) + where + prefix = + if sameLine + then pstateLinePrefix ++ preLine + else preLine + sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos + newSourcePos = + case post of + [] -> pstateSourcePos + (x : _) -> pstateSourcePos{sourceLine = mkPos $ tokenStart x, sourceColumn = mkPos $ tokenStart x} + (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) + (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) + preLine = reverse . takeWhile (/= '\n') . reverse $ preStr + tokensConsumed = o + restOfLine = takeWhile (/= '\n') postStr pxy :: Proxy ETokenStream pxy = Proxy \ No newline at end of file diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 66801f48ee..fc49ee1d37 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -8,7 +8,6 @@ import Conjure.Language.Definition import Conjure.Language.Lexemes import Conjure.Prelude import Control.Applicative -import Control.Monad.State import Conjure.Language.NewLexer (ETok (lexeme, capture, ETok), ETokenStream (ETokenStream), eLex) import Conjure.Language.Domain @@ -62,7 +61,6 @@ data ValidatorError -- raise "missing synbol" -- return "" - data Validator a = Validator { value :: Maybe a , errors :: [ValidatorError] @@ -96,6 +94,7 @@ instance Functor Validator where (Just a) -> Just $ fab a , errors = ves } + instance Applicative Validator where pure :: a -> Validator a pure x = Validator (Just x) [] @@ -180,7 +179,7 @@ type DomainValidator = Validator (Domain () Expression) validateDomain :: DomainNode -> DomainValidator validateDomain dm = case dm of BoolDomainNode lt -> validateSymbol lt >> return DomainBool - r@(RangedIntDomainNode _ _) -> validateRangedInt r + RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges EnumDomainNode nn -> validateNamedEnumDomain nn TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms @@ -195,6 +194,10 @@ validateDomain dm = case dm of PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validatePartitionDomain attrs dom MissingDomainNode lt -> invalid $ TokenError lt where + validateRangedInt :: ListNode RangeNode ->DomainValidator + validateRangedInt ranges = do + ranges' <- validateList validateRange ranges + return $ DomainInt TagInt ranges' validateEnumRange :: NameNode -> ListNode RangeNode -> DomainValidator validateEnumRange name ranges = do name' <- validate $ validateIdentifier name @@ -259,14 +262,7 @@ validateDomain dm = case dm of todo:: Validator a todo = invalid NotImplemented -validateRangedInt :: DomainNode ->DomainValidator -validateRangedInt (RangedIntDomainNode lt ranges) = - do - _ <- validate $ validateSymbol lt - ranges' <- validateList validateRange ranges - return $ DomainInt TagInt ranges' -validateRangedInt _ = invalid IllegalToken {} --TODO:THIS IS NOT DONE validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) From 7c6eeea00ce22363cbb786a690886a9a5974c548 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 9 Oct 2022 15:09:57 +0100 Subject: [PATCH 060/378] Added comprehension support to parser --- src/Conjure/Language/AST/ASTParser.hs | 74 +++- src/Conjure/Language/AST/Expression.hs | 383 +++++++++++------- src/Conjure/Language/AST/Helpers.hs | 44 +- src/Conjure/Language/AST/Reformer.hs | 130 +++--- src/Conjure/Language/AST/Syntax.hs | 70 +++- .../Language/Expression/Op/Internal/Common.hs | 8 +- src/Conjure/Language/Lexemes.hs | 16 + src/Conjure/Language/NewLexer.hs | 55 ++- src/Conjure/Language/Validator.hs | 8 +- 9 files changed, 503 insertions(+), 285 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index cb2940ffe3..044200401c 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -17,16 +17,23 @@ import Data.Text (pack) import Data.Void (Void) import Conjure.Language.AST.Reformer (Flattenable(..)) +parseProgram :: Parser ProgramTree +parseProgram = do + (tl,ending) <- manyTill_ parseTopLevel pEnding + return $ ProgramTree tl ending + "Program" + parseTopLevel :: Parser StatementNode -parseTopLevel = +parseTopLevel = do - parseDeclaration + parseDeclaration <|> parseBranching <|> parseSuchThat <|> parseWhere <|> parseObjective <|> UnexpectedToken <$> makeUnexpected + parseBranching :: Parser StatementNode parseBranching = do lBranching <- need L_branching @@ -60,10 +67,12 @@ parseObjective = do parseDeclaration :: Parser StatementNode parseDeclaration = DeclarationStatement - <$> do - (LettingStatement <$> parseLetting) - <|> (GivenStatement <$> parseGiven) - <|> (FindStatement <$> parseFind) + <$> choice [ + LettingStatement <$> parseLetting, + GivenStatement <$> parseGiven, + FindStatement <$> parseFind + ] + parseLetting :: Parser LettingStatementNode parseLetting = do @@ -100,23 +109,24 @@ parseLetting = do parseGiven :: Parser GivenStatementNode parseGiven = do - lGiven <- need L_given + lGiven <- need L_given names <- commaList parseIdentifier choice [ finishEnum (GivenEnumNode lGiven names) , finishDomain (GivenStatementNode lGiven names) ] where - finishEnum start = do - lNew <- need L_new + finishEnum start = do + lNew <- need L_new lType <- want L_type lEnum <- want L_enum return $ start lNew lType lEnum - finishDomain start = do + finishDomain start = do lColon <- want L_Colon -- want here so that parse cannot fail domain <- parseDomain return $ start lColon domain + parseFind :: Parser FindStatementNode parseFind = do lFind <- need L_find @@ -124,7 +134,7 @@ parseFind = do lColon <- want L_Colon domain <- parseDomain return $ FindStatementNode lFind names lColon domain - + "Find Statement" parseObjectiveStatement :: Parser ObjectiveStatementNode parseObjectiveStatement = do s <- eSymbol L_minimising <|> eSymbol L_maximising @@ -132,19 +142,23 @@ parseObjectiveStatement = do return $ case s of (ETok {lexeme=L_minimising}) -> ObjectiveMin (RealToken s) e _ -> ObjectiveMax (RealToken s) e + "Objective Statement" -parseProgram :: Parser ProgramTree -parseProgram = do - tl <- many parseTopLevel - eof - return $ ProgramTree tl +pEnding :: Parser LToken +pEnding = do + t <- lookAhead anySingle + case t of + ETok {lexeme=L_EOF} -> return $ RealToken t + _ -> empty example :: String -> IO () example s = do let str = s - let other = [ETok (0, 0, 0, L_EOF) [] L_EOF ""] + let other = [ETok (0, 0, 0, SourcePos "" (mkPos 0) (mkPos 0)) [] L_EOF ""] let txt = pack str let lexed = parseMaybe eLex txt + putStrLn "Lexmes" + putStrLn $ show lexed let stream = ETokenStream txt $ fromMaybe other lexed parseTest parseProgram stream @@ -164,7 +178,7 @@ demoString = demo2 :: String demo2 = intercalate "\n"[ - "given n : int(1..2)" + "given n : int" ,"find perm : sequence (size n) of int(1..n)" ,"such that $comment" ," allDiff([perm(k) | k : int(1..n) ])," @@ -176,6 +190,24 @@ demo2 = intercalate "\n"[ ," )" ] +demo3 :: String +demo3 = intercalate "\n" [ "$COMMENT" + ,"given n : int" + ,"letting DOMAIN be domain int(1..n)" + ,"given hints : function (DOMAIN, DOMAIN) --> DOMAIN" + ,"given less_than : relation of ((DOMAIN, DOMAIN) * (DOMAIN, DOMAIN))" + ,"find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" + ,"such that" + ," forAll (hint,num) in hints ." + ," board[hint[1], hint[2]] = num," + ," forAll i: DOMAIN ." + ," allDiff(board[i,..])," + ," forAll j: DOMAIN ." + ," allDiff(board[..,j])," + ," forAll (l,g) in less_than ." + ," board[l[1],l[2]] < board[g[1],g[2]]" + ] + parsePrint :: String -> IO () parsePrint text = do toks <- parseAndRevalidate (pack text) eLex (concatMap reform) text @@ -198,8 +230,10 @@ parsePrint text = do putStrLn b -parseAndRevalidate ::(VisualStream a,Stream a) => a -> ParsecT Void a Identity b -> (b -> String) -> String -> IO (Either (String,String) b) +parseAndRevalidate ::(VisualStream a,TraversableStream a,Stream a,Show b) => a -> ParsecT Void a Identity b -> (b -> String) -> String -> IO (Either (String,String) b) parseAndRevalidate src p f ref = do case runParser p "" src of - Left _ -> putStrLn "Parse error" >> empty + Left _ -> do + putStrLn "Parse error" + parseTest p src >> empty Right res -> return (if f res == ref then Right res else Left (f res,ref)) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index 6a687e24da..696ee0d5d7 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -1,19 +1,24 @@ {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} + {-# HLINT ignore "Use <$>" #-} module Conjure.Language.AST.Expression where import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax import Conjure.Language.Lexemes -import Conjure.Prelude hiding (many,some) +import Conjure.Prelude hiding (many, some) import Text.Megaparsec import Control.Monad.Combinators.Expr (Operator (..), makeExprParser) import Conjure.Language.Expression.Op.Internal.Common +-- import Text.Megaparsec.Debug (dbg) + parseExpression :: Parser ExpressionNode -parseExpression = do parseOperator +parseExpression = + parseOperator + <|> parseAtomicExpression parseExpressionStrict :: Parser ExpressionNode -- can fail parseExpressionStrict = do @@ -24,35 +29,54 @@ parseExpressionStrict = do parseAtomicExpression :: Parser ExpressionNode parseAtomicExpression = do - choice [ - Literal <$> parseLiteral, - parseFunction, - IdentifierNode <$> parseIdentifierStrict, - ParenExpression <$> parseParenExpression parensPair, - AbsExpression <$> parseParenExpression (L_Bar,L_Bar), - QuantificationExpr <$> parseQuantificationStatement, - ComprehensionExpr <$> parseComprehension + try $ + choice + [ Literal <$> parseLiteral + , parseFunction + , IdentifierNode <$> parseIdentifierStrict + , ParenExpression <$> parseParenExpression parensPair + , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) + , QuantificationExpr <$> parseQuantificationStatement + , MissingExpressionNode <$> makeMissing L_Missing ] - -- mPostfix <- optional parsePostfixOp - -- case mPostfix of - -- Nothing -> return e - -- Just f -> return $ f e -parseParenExpression :: (Lexeme,Lexeme) -> Parser ParenExpressionNode -parseParenExpression (open,close)= do +-- mPostfix <- optional parsePostfixOp +-- case mPostfix of +-- Nothing -> return e +-- Just f -> return $ f e + +-- [a,b,c : int (1..2)] +-- [a,b,c : int (1..4) | x < 3,letting x be int] + +parseMatrixBasedExpression :: Parser LiteralNode +parseMatrixBasedExpression = do + openB <- need L_OpenBracket + exprs <- commaList parseExpression + range <- optional pOverDomain + comprehension <- optional pComp + closeB <- want L_CloseBracket + return $ MatrixLiteral $ MatrixLiteralNode openB exprs range comprehension closeB + where + pOverDomain = OverDomainNode <$> need L_Colon <*> parseDomain + pComp = do + bar <- need L_Bar + body <- commaList parseComprehensionCondition + return $ ComprehensionNode bar body + +parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode +parseParenExpression (open, close) = try $ do lParen <- need open body <- parseExpression + notFollowedBy $ need L_Comma rParen <- want close return $ ParenExpressionNode lParen body rParen - - parseLiteral :: Parser LiteralNode parseLiteral = choice [ parseIntLiteral , parseBoolLiteral - , parseMatrixLiteral + , parseMatrixBasedExpression , parseTupleLiteral , parseRecordLiteral , parseSetLiteral @@ -69,9 +93,6 @@ parseIntLiteral = IntLiteral . RealToken <$> intLiteral parseBoolLiteral :: Parser LiteralNode parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) -parseMatrixLiteral :: Parser LiteralNode -parseMatrixLiteral = do empty - parseTupleLiteral :: Parser LiteralNode parseTupleLiteral = do lTuple <- need L_tuple @@ -98,7 +119,8 @@ parseRecordMember = do return $ RecordMemberNode name lEqual val parseSetLiteral :: Parser LiteralNode -parseSetLiteral = do -- cant just recycle list as it does not require first char +parseSetLiteral = do + -- cant just recycle list as it does not require first char lOpen <- need L_OpenCurly members <- commaList parseExpression lClose <- want L_CloseCurly @@ -154,43 +176,90 @@ parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) parseQuantificationStatement :: Parser QuantificationExpressionNode parseQuantificationStatement = do - lType <- need L_branching --TODO addNew - terms <- commaList (QuantificationPattern <$> parseExpression) + lType <- choice $ map need quantifiers + terms <- commaList parseAbstractPattern + over <- parseQuantificationOver + qGuard <- optional $ do + lComma <- need L_Comma + expr <- parseExpression + return $ QuanticationGuard lComma expr lDot <- want L_Dot expr <- parseExpression - return $ QuantificationExpressionNode lType terms lDot expr + return $ QuantificationExpressionNode lType terms over qGuard lDot expr + where + parseQuantificationOver :: Parser QuantificationOverNode + parseQuantificationOver = + choice + [ QuantifiedMemberOfNode <$> need L_in <*> parseExpression + , QuantifiedSubsetOfNode <$> need L_subsetEq <*> parseExpression + , QuantifiedDomainNode <$> (OverDomainNode <$> want L_Colon <*> parseDomain) + ] +parseAbstractPattern :: Parser AbstractPatternNode +parseAbstractPattern = do + choice + [ parseAbstractId + , parseAbstractMetaVar + , parseAbstractPatternTuple + , parseAbstractPatternMatrix + , parseAbstractPatternSet + ] + where + parseAbstractId :: Parser AbstractPatternNode + parseAbstractId = AbstractIdentifier <$> parseIdentifierStrict + parseAbstractMetaVar :: Parser AbstractPatternNode + parseAbstractMetaVar = AbstractIdentifier <$> parseIdentifierStrict + parseAbstractPatternTuple :: Parser AbstractPatternNode + parseAbstractPatternTuple = do + lTuple <- optional $ need L_tuple + openB <- (if null lTuple then need else want) L_OpenParen + es <- commaList parseAbstractPattern + closeB <- want L_CloseParen + return $ AbstractPatternTuple lTuple (ListNode openB es closeB) + parseAbstractPatternMatrix :: Parser AbstractPatternNode + parseAbstractPatternMatrix = do + openB <- need L_OpenBracket + es <- commaList parseAbstractPattern + closeB <- want L_CloseBracket + return $ AbstractPatternMatrix (ListNode openB es closeB) + parseAbstractPatternSet :: Parser AbstractPatternNode + parseAbstractPatternSet = do + openB <- need L_OpenCurly + es <- commaList parseAbstractPattern + closeB <- want L_CloseCurly + return $ AbstractPatternMatrix (ListNode openB es closeB) + +parseComprehensionCondition :: Parser ComprehensionBodyNode +parseComprehensionCondition = do + letting <|> generator <|> condition + where + letting = do + lLetting <- need L_letting + v <- parseIdentifier + lBe <- want L_be + expr <- parseExpression + return $ CompBodyLettingNode lLetting v lBe expr + generator = + choice + [ try $ do + ident <- parseIdentifierStrict + lColon <- need L_Colon + domain <- parseDomain + return $ CompBodyDomain (NameDomainNode ident lColon domain) + , try $ do + pat <- parseAbstractPattern + lArrow <- need L_LeftArrow + expr <- parseExpression + return $ CompBodyGenExpr pat lArrow expr + ] -parseComprehension :: Parser ComprehensionExpressionNode -parseComprehension = do - lOpen <- need L_OpenBracket - gens <- parseExpression - lBar <- want L_Bar - conditions <- commaList parseComprehensionConditions - lClose <- want L_CloseBracket - return $ ComprehensionExpressionNode lOpen gens lBar conditions lClose + condition = CompBodyCondition <$> parseExpressionStrict -parseComprehensionConditions :: Parser ComprehensionBodyNode -parseComprehensionConditions = do - letting <|> generator <|> condition - where - letting = do - lLetting <- need L_letting - v <- parseIdentifier - lBe <- want L_be - expr <- parseExpression - return $ CompBodyLettingNode lLetting v lBe expr - generator = try $ do - lIdent <- parseIdentifierStrict - lColon <- need L_Colon - domain <- parseDomain - return $ CompBodyDomain (NameDomainNode lIdent lColon domain) - condition = CompBodyCondition <$> parseExpression - --TODO look over this, asignment of domains should happen in next stage - --Current implementation is hacky +-- TODO look over this, asignment of domains should happen in next stage +-- Current implementation is hacky parseOperator :: Parser ExpressionNode -parseOperator = makeExprParser parseAtomicExpression operatorTable +parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") parseFunction :: Parser ExpressionNode parseFunction = do @@ -198,100 +267,94 @@ parseFunction = do args <- parenList $ commaList parseExpression return $ FunctionalApplicationNode name args - parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) parsePostfixOp = do - op <- choice [ - indexed, - factorial, - application - ] - return $ \e -> OperatorExpressionNode $ PostfixOpNode e op - where - indexed = do - lBracket <- need L_OpenBracket - indexer <- parseIndexer - rBracket <- want L_CloseBracket - return $ IndexedNode lBracket indexer rBracket - factorial = OpFactorial <$> need L_ExclamationMark - application = do - lBracket <- need L_OpenParen - args <- commaList parseExpression - rBracket <- want L_CloseParen - return $ ApplicationNode $ ListNode lBracket args rBracket - - ---TODO treat funcitonals differently or actually don't but why - -parseIndexer :: Parser IndexerNode -parseIndexer = return Indexer + op <- + try $ + choice + [ indexed + , factorial + , application + ] + return $ \e -> OperatorExpressionNode $ PostfixOpNode e op + where + indexed = do + lBracket <- need L_OpenBracket + indexer <- commaList parseRange + rBracket <- want L_CloseBracket + return $ IndexedNode $ ListNode lBracket indexer rBracket + factorial = OpFactorial <$> need L_ExclamationMark + application = do + lBracket <- need L_OpenParen + args <- commaList parseExpression + rBracket <- want L_CloseParen + return $ ApplicationNode $ ListNode lBracket args rBracket + +-- TODO treat funcitonals differently or actually don't but why operatorTable :: [[Operator Parser ExpressionNode]] -operatorTable = let operatorsGrouped = operators - |> sortBy (\ (_,a) (_,b) -> compare a b ) - |> groupBy (\ (_,a) (_,b) -> a == b ) - |> reverse - in - postfixOps: [ [ case descr of - BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op - BinaryOp op FNone -> InfixN $ prefixBinary <$> need op - BinaryOp op FRight -> InfixR $ prefixBinary <$> need op - UnaryPrefix op -> Prefix $ prefixUnary <$> need op - -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot - -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) - | (descr, _) <- operatorsInGroup - ] - | operatorsInGroup <- operatorsGrouped - ] - - +operatorTable = + let operatorsGrouped = + operators + |> sortBy (\(_, a) (_, b) -> compare a b) + |> groupBy (\(_, a) (_, b) -> a == b) + |> reverse + in postfixOps + : [ [ case descr of + BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op + BinaryOp op FNone -> InfixN $ prefixBinary <$> need op + BinaryOp op FRight -> InfixR $ prefixBinary <$> need op + UnaryPrefix op -> Prefix $ prefixUnary <$> need op + | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot + -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) + (descr, _) <- operatorsInGroup + ] + | operatorsInGroup <- operatorsGrouped + ] prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t -prefixUnary:: LToken -> ExpressionNode -> ExpressionNode +prefixUnary :: LToken -> ExpressionNode -> ExpressionNode prefixUnary l = OperatorExpressionNode . PrefixOpNode l - postfixOps :: [Operator Parser ExpressionNode] -postfixOps = [ - Postfix $ foldr1 (.) <$> some parsePostfixOp +postfixOps = + [ Postfix $ foldr1 (.) <$> some parsePostfixOp ] - - - - - - - - - ---DOMAINS +-- DOMAINS parseDomain :: Parser DomainNode -parseDomain = do - choice - [ BoolDomainNode <$> need L_bool - , parseIntDomain - , parseTuple - , parseRecord - , parseVariant - , parseMatrix - , parseSet - , parseMSet - , parseFunctionDomain - , parseSequenceDomain - , parseRelation - , parsePartition - , parseEnumDomain - , parseMissingDomain - ] +parseDomain = + do + choice + [ BoolDomainNode <$> need L_bool + , parseIntDomain + , parseTuple + , parseRecord + , parseVariant + , parseMatrix + , parseSet + , parseMSet + , parseFunctionDomain + , parseSequenceDomain + , parseRelation + , parsePartition + , parseEnumDomain + , parseShortTuple + ] + "Domain" + <|> parseMissingDomain + "missingDomain" parseIntDomain :: Parser DomainNode parseIntDomain = do lInt <- need L_int ranges <- parenList $ commaList parseRange - return $ RangedIntDomainNode lInt ranges + let range = case ranges of + ListNode (MissingToken _) (Seq []) (MissingToken _) -> Nothing + _ -> Just ranges + return $ RangedIntDomainNode lInt range parseTuple :: Parser DomainNode parseTuple = do @@ -299,6 +362,13 @@ parseTuple = do members <- parenList $ commaList parseDomain return $ TupleDomainNode lTuple members +parseShortTuple :: Parser DomainNode +parseShortTuple = do + openB <- need L_OpenParen + lst <- commaList parseDomain + closeB <- want L_CloseParen + return $ ShortTupleDomainNode $ ListNode openB lst closeB + parseRecord :: Parser DomainNode parseRecord = do lRecord <- need L_record @@ -340,11 +410,18 @@ parseMSet = do parseFunctionDomain :: Parser DomainNode parseFunctionDomain = do lFunction <- need L_function - attributes <- parenList $ commaList parseAttribute - fromDomain <- parseDomain + attributes <- optional parseFunctionAttributes + fromDom <- parseDomain arrow <- want L_LongArrow - toDomain <- parseDomain - return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain + toDom <- parseDomain + return $ FunctionDomainNode lFunction attributes fromDom arrow toDom + where + parseFunctionAttributes :: Parser (ListNode AttributeNode) + parseFunctionAttributes = try $ do + openB <- want L_OpenParen + lst <- commaList1 parseAttribute + closeB <- want L_CloseBracket + return $ ListNode openB lst closeB parseSequenceDomain :: Parser DomainNode parseSequenceDomain = do @@ -374,11 +451,12 @@ parseEnumDomain :: Parser DomainNode parseEnumDomain = do name <- parseIdentifierStrict brackets <- optional $ parenListStrict (commaList parseRange) - case brackets of + case brackets of Nothing -> return $ EnumDomainNode name Just parens -> return $ RangedEnumNode name parens - -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) - -- <|> return (EnumDomainNode name) + +-- (RangedEnumNode name <$> try (parenList (commaList parseRange))) +-- <|> return (EnumDomainNode name) -- Util parseNameDomain :: Parser NamedDomainNode @@ -389,33 +467,30 @@ parseNameDomain = do return $ NameDomainNode name lColon domain parseRange :: Parser RangeNode -parseRange = - do - lExpr <- optional parseExpressionStrict - dots <- parseDoubleDot +parseRange = ranged <|> singleR + where + ranged = try $ do + lExpr <- optional $ try parseExpressionStrict + dots <- need L_DoubleDot rExpr <- optional parseExpressionStrict case (lExpr, rExpr) of (Nothing, Nothing) -> return $ OpenRangeNode dots (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r (Just l, Just r) -> return $ BoundedRangeNode l dots r - <|> SingleRangeNode <$> parseExpression - -parseDoubleDot :: Parser DoubleDotNode -parseDoubleDot = do - a <- need L_Dot - b <- want L_Dot - return $ DoubleDotNode a b + singleR = SingleRangeNode <$> parseExpressionStrict parseAttribute :: Parser AttributeNode parseAttribute = do - name <- choice $ map need functionAttributes -- TODO This is wrong - expr <- optional parseExpressionStrict - case expr of - Nothing -> return $ NamedAttributeNode (NameNode name) - Just en -> return $ NamedExpressionAttribute (NameNode name) en + name <- choice $ map need functionAttributes -- TODO This is wrong + expr <- optional parseExpressionStrict + case expr of + Nothing -> return $ NamedAttributeNode (NameNode name) + Just en -> return $ NamedExpressionAttribute (NameNode name) en parseMissingDomain :: Parser DomainNode -parseMissingDomain = do - m <- makeMissing L_domain - return $ MissingDomainNode m \ No newline at end of file +parseMissingDomain = + do + m <- makeMissing L_Missing + return $ MissingDomainNode m + "Anything" \ No newline at end of file diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 82c757234a..f210224eaa 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -36,8 +36,9 @@ intLiteral = token test Set.empty "Int Literal" makeMissing :: Lexeme -> Parser LToken makeMissing l = do - ETok {offsets=(s, _, _, _)} <- lookAhead anySingle - return (MissingToken (ETok (s, s, 0, l) [] l "")) + spos <- getSourcePos + s <- getOffset + return (MissingToken (ETok (s, s, 0, spos) [] l "")) makeUnexpected :: Parser LToken makeUnexpected = SkippedToken <$> anySingle @@ -45,19 +46,19 @@ makeUnexpected = SkippedToken <$> anySingle -- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do - (ETok (s, ts, _, _) t lex _ ) <- lookAhead anySingle + (ETok (s, ts, _, spos) t lex _ ) <- lookAhead anySingle case lex of (LIdentifier _) -> RealToken <$> anySingle - _ -> return $ MissingToken $ ETok (s, ts, 0, LMissingIdentifier) t LMissingIdentifier "" + _ -> return $ MissingToken $ ETok (s, ts, 0, spos) t LMissingIdentifier "" want a = do - (ETok (s, ts, _, _) t lex _) <- lookAhead anySingle + (ETok (s, ts, _, spos) t lex _) <- lookAhead anySingle if lex == a then RealToken <$> anySingle - else return $ MissingToken $ ETok (s, ts, 0, a) t a "" + else return $ MissingToken $ ETok (s, ts, 0, spos) t a "" -- get a symbol from the stream with no fallback need :: Lexeme -> Parser LToken -need a = RealToken <$> eSymbol a +need a = RealToken <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" parseIdentifier :: Parser NameNode parseIdentifier = do @@ -73,6 +74,9 @@ parseIdentifierStrict = do commaList :: Parser a -> Parser (Sequence a) commaList = parseSequence L_Comma +commaList1 ::(Show a) => Parser a -> Parser (Sequence a) +commaList1 = parseNESequence L_Comma + squareBracketList :: Parser (Sequence a) -> Parser (ListNode a) squareBracketList = parseList L_OpenBracket L_CloseBracket @@ -101,17 +105,27 @@ parseListStrict startB endB seq = do parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = do - (a, b) <- manyTill_ (try seqElemSep) (try seqElemNoSep) - return $ Seq (a ++ [b]) - where + start <- optional seqElemNoSep + rest <- many $ try seqElemSep + case start of + Nothing -> return $ Seq rest + Just se -> return $ Seq (se:rest) + where seqElemNoSep = do - v <- pElem - notFollowedBy $ eSymbol divider - return $ SeqElem v Nothing + SeqElem Nothing <$> pElem seqElemSep = do - v <- pElem s <- need divider - return $ SeqElem v (Just s) + SeqElem (Just s) <$> pElem + +parseNESequence :: (Show a) => Lexeme -> Parser a -> Parser (Sequence a) +parseNESequence divider pElem = do + lst <- try $ parseSequence divider pElem + q <- return $ trace ("test" ++ show lst) () + case lst of + Seq {elems=[]} -> empty + Seq _ -> return lst + + parensPair :: (Lexeme,Lexeme) diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index c830f0ae31..19df917b66 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -8,7 +8,7 @@ class Flattenable v a where flatten :: Flattenable v a => a -> [v] instance Flattenable ETok ProgramTree where - flatten (ProgramTree sts) = concatMap flatten sts + flatten (ProgramTree sts end) = concatMap flatten sts ++ flatten end instance Flattenable ETok StatementNode where flatten x = case x of @@ -56,51 +56,69 @@ instance Flattenable ETok WhereStatementNode where flatten (WhereStatementNode l1 l2) = flatten l1 ++ flatten l2 instance Flattenable ETok ObjectiveStatementNode where flatten x = case x of - ObjectiveMin lt en -> concat [flatten lt, flatten en] - ObjectiveMax lt en -> concat [flatten lt, flatten en] + ObjectiveMin lt en -> flatten lt ++ flatten en + ObjectiveMax lt en -> flatten lt ++ flatten en instance Flattenable ETok LToken where flatten x = case x of - RealToken et -> concat [flatten et] - MissingToken _ -> concat [] - SkippedToken et -> concat [flatten et] + RealToken et -> flatten et + MissingToken _ -> [] + SkippedToken et -> flatten et instance Flattenable ETok ETok where flatten = pure instance Flattenable ETok ExpressionNode where flatten x = case x of - Literal ln -> concat [flatten ln] - IdentifierNode nn -> concat [flatten nn] - QuantificationExpr qen -> concat [flatten qen] - ComprehensionExpr cen -> concat [flatten cen] - OperatorExpressionNode oen -> concat [flatten oen] - ParenExpression pen -> concat [flatten pen] - AbsExpression pen -> concat [flatten pen] - FunctionalApplicationNode lt ln -> concat [flatten lt, flatten ln] - MissingExpressionNode _ -> concat [] + Literal ln -> flatten ln + IdentifierNode nn -> flatten nn + QuantificationExpr qen -> flatten qen + OperatorExpressionNode oen -> flatten oen + ParenExpression pen ->flatten pen + AbsExpression pen -> flatten pen + FunctionalApplicationNode lt ln -> flatten lt ++ flatten ln + MissingExpressionNode _ -> [] instance Flattenable ETok QuantificationExpressionNode where - flatten (QuantificationExpressionNode a b c d) = concat [flatten a, flatten b, flatten c, flatten d] + flatten (QuantificationExpressionNode a b c d e f) = concat [ + flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] +instance Flattenable ETok QuantificationOverNode where + flatten x = case x of + QuantifiedSubsetOfNode a b -> flatten a ++ flatten b + QuantifiedMemberOfNode a b -> flatten a ++ flatten b + QuantifiedDomainNode a -> flatten a + +instance Flattenable ETok OverDomainNode where + flatten (OverDomainNode a b) = flatten a ++ flatten b + +instance Flattenable ETok QuanticationGuard where + flatten (QuanticationGuard a b ) = flatten a ++ flatten b +instance Flattenable ETok AbstractPatternNode where + flatten x = case x of + AbstractIdentifier nn -> flatten nn + AbstractPatternMetaVar lt -> flatten lt + AbstractPatternTuple a b -> flatten a ++ flatten b + AbstractPatternMatrix ln -> flatten ln + AbstractPatternSet ln -> flatten ln instance Flattenable ETok QuantificationPattern where flatten (QuantificationPattern en) = flatten en instance Flattenable ETok LiteralNode where flatten x = case x of - IntLiteral lt -> concat [flatten lt] - BoolLiteral lt -> concat [flatten lt] - MatrixLiteral mln -> concat [flatten mln] - TupleLiteralNode lt -> concat [flatten lt] - TupleLiteralNodeShort st -> concat [flatten st] - RecordLiteral lt ln -> concat [flatten lt, flatten ln] - VariantLiteral lt ln -> concat [flatten lt, flatten ln] - SetLiteral ln -> concat [flatten ln] - MSetLiteral lt ln -> concat [flatten lt, flatten ln] - FunctionLiteral lt ln -> concat [flatten lt, flatten ln] - SequenceLiteral lt ln -> concat [flatten lt, flatten ln] - RelationLiteral lt ln -> concat [flatten lt, flatten ln] - PartitionLiteral lt ln -> concat [flatten lt, flatten ln] + IntLiteral lt -> flatten lt + BoolLiteral lt -> flatten lt + MatrixLiteral mln -> flatten mln + TupleLiteralNode lt -> flatten lt + TupleLiteralNodeShort st -> flatten st + RecordLiteral lt ln -> flatten lt ++ flatten ln + VariantLiteral lt ln -> flatten lt ++ flatten ln + SetLiteral ln -> flatten ln + MSetLiteral lt ln -> flatten lt ++ flatten ln + FunctionLiteral lt ln -> flatten lt ++ flatten ln + SequenceLiteral lt ln -> flatten lt ++ flatten ln + RelationLiteral lt ln -> flatten lt ++ flatten ln + PartitionLiteral lt ln -> flatten lt ++ flatten ln instance Flattenable ETok PartitionElemNode where flatten (PartitionElemNode ln) = flatten ln @@ -122,10 +140,16 @@ instance Flattenable ETok ShortTuple where flatten (ShortTuple a) = flatten a instance Flattenable ETok MatrixLiteralNode where - flatten x = case x of - MatrixLiteralExplicitDomain ln lt dn -> concat [flatten ln, flatten lt, flatten dn] - MatrixLiteralImplicitDomain ln -> flatten ln + flatten ( MatrixLiteralNode a b c d e) = concat + [ flatten a + , flatten b + , flatten c + , flatten d + , flatten e + ] +instance Flattenable ETok ComprehensionNode where + flatten (ComprehensionNode a b) = flatten a ++ flatten b instance Flattenable ETok ComprehensionExpressionNode where flatten (ComprehensionExpressionNode a b c d e) = concat @@ -150,22 +174,20 @@ instance Flattenable ETok OperatorExpressionNode where instance Flattenable ETok PostfixOpNode where flatten x = case x of - IndexedNode lt i lt' -> concat [flatten lt, flatten i, flatten lt'] + IndexedNode l -> flatten l OpFactorial lt -> flatten lt ApplicationNode ln -> flatten ln -instance Flattenable ETok IndexerNode where - flatten Indexer = [] - instance Flattenable ETok DomainNode where flatten x = case x of - BoolDomainNode lt -> concat [flatten lt] - RangedIntDomainNode lt ln -> concat [flatten lt, flatten ln] - RangedEnumNode nn ln -> concat [flatten nn, flatten ln] - EnumDomainNode nn -> concat [flatten nn] - TupleDomainNode lt ln -> concat [flatten lt, flatten ln] - RecordDomainNode lt ln -> concat [flatten lt, flatten ln] - VariantDomainNode lt ln -> concat [flatten lt, flatten ln] + BoolDomainNode lt -> flatten lt + RangedIntDomainNode lt ln -> flatten lt ++ flatten ln + RangedEnumNode nn ln -> flatten nn ++ flatten ln + EnumDomainNode nn -> flatten nn + ShortTupleDomainNode ln -> flatten ln + TupleDomainNode lt ln -> flatten lt ++ flatten ln + RecordDomainNode lt ln -> flatten lt ++ flatten ln + VariantDomainNode lt ln -> flatten lt ++ flatten ln MatrixDomainNode a b c d e f -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] SetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] MSetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] @@ -175,21 +197,24 @@ instance Flattenable ETok DomainNode where PartitionDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] MissingDomainNode _ -> [] +instance (Flattenable ETok a) => Flattenable ETok (Maybe a) where + flatten (Just x) = flatten x + flatten Nothing = [] instance Flattenable ETok AttributeNode where flatten x = case x of - NamedAttributeNode nn -> concat [flatten nn] - NamedExpressionAttribute nn en -> concat [flatten nn, flatten en] + NamedAttributeNode nn -> flatten nn + NamedExpressionAttribute nn en -> flatten nn ++ flatten en instance Flattenable ETok RangeNode where flatten x = case x of - SingleRangeNode en -> concat [flatten en] - OpenRangeNode ddn -> concat [flatten ddn] - RightUnboundedRangeNode en ddn -> concat [flatten en, flatten ddn] - LeftUnboundedRangeNode ddn en -> concat [flatten ddn, flatten en] + SingleRangeNode en -> flatten en + OpenRangeNode ddn -> flatten ddn + RightUnboundedRangeNode en ddn -> flatten en ++ flatten ddn + LeftUnboundedRangeNode ddn en -> flatten ddn ++ flatten en BoundedRangeNode en ddn en' -> concat [flatten en, flatten ddn, flatten en'] -instance Flattenable ETok DoubleDotNode where - flatten (DoubleDotNode a b) = flatten a ++ flatten b +-- instance Flattenable ETok DoubleDotNode where +-- flatten (DoubleDotNode a b) = flatten a ++ flatten b instance Flattenable ETok NamedDomainNode where flatten (NameDomainNode a b c) = concat [flatten a, flatten b, flatten c] @@ -207,8 +232,7 @@ instance Flattenable ETok b => Flattenable ETok (Sequence b) where flatten (Seq es) = concatMap flatten es instance Flattenable ETok b => Flattenable ETok (SeqElem b) where - flatten (SeqElem v Nothing) = flatten v - flatten (SeqElem v (Just a)) = flatten v++ flatten a + flatten (SeqElem s v) = flatten s ++ flatten v diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 60d9ae00b1..ce69ab7699 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -19,13 +19,12 @@ instance Show LToken where show (MissingToken x) = "MISSING[" ++ show x ++ "]" show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" -newtype ProgramTree = ProgramTree [StatementNode] - - - - +data ProgramTree = ProgramTree [StatementNode] LToken + instance Show ProgramTree where - show (ProgramTree x) = intercalate "\n" (map show x) + show (ProgramTree xs eof) = "ProgramTree \n" ++ + intercalate "\n\n" (map show xs) + ++ "\n\n" ++ show eof data StatementNode = DeclarationStatement DeclarationStatementNode @@ -132,16 +131,17 @@ data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression Expressi data DomainNode = BoolDomainNode LToken - | RangedIntDomainNode LToken (ListNode RangeNode) + | RangedIntDomainNode LToken (Maybe (ListNode RangeNode)) | RangedEnumNode NameNode (ListNode RangeNode) | EnumDomainNode NameNode + | ShortTupleDomainNode (ListNode DomainNode) | TupleDomainNode LToken (ListNode DomainNode) | RecordDomainNode LToken (ListNode NamedDomainNode) | VariantDomainNode LToken (ListNode NamedDomainNode) | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | FunctionDomainNode LToken (ListNode AttributeNode) DomainNode LToken DomainNode + | FunctionDomainNode LToken (Maybe (ListNode AttributeNode) ) DomainNode LToken DomainNode | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode @@ -156,7 +156,8 @@ data RangeNode | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode deriving (Show) -data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) +type DoubleDotNode = LToken +-- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) data AttributeNode = NamedAttributeNode NameNode | NamedExpressionAttribute NameNode ExpressionNode deriving (Show) @@ -174,7 +175,6 @@ data ExpressionNode = Literal LiteralNode | IdentifierNode NameNode | QuantificationExpr QuantificationExpressionNode - | ComprehensionExpr ComprehensionExpressionNode | OperatorExpressionNode OperatorExpressionNode | ParenExpression ParenExpressionNode | AbsExpression ParenExpressionNode @@ -207,10 +207,20 @@ data LiteralNode deriving (Show) data MatrixLiteralNode - = MatrixLiteralExplicitDomain (ListNode ExpressionNode) LToken DomainNode - | MatrixLiteralImplicitDomain (ListNode ExpressionNode) + = MatrixLiteralNode + LToken --openBracket + (Sequence ExpressionNode) + (Maybe OverDomainNode) -- explicitDomain + (Maybe ComprehensionNode) --compBody + LToken --close deriving (Show) +data ComprehensionNode + = ComprehensionNode + LToken -- | + (Sequence ComprehensionBodyNode) + deriving (Show) + data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode deriving (Show) @@ -228,11 +238,30 @@ newtype PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) data QuantificationExpressionNode = QuantificationExpressionNode LToken - (Sequence QuantificationPattern) - LToken + (Sequence AbstractPatternNode) + QuantificationOverNode + (Maybe QuanticationGuard) + LToken --dot ExpressionNode deriving (Show) -- MAYBE? +data QuantificationOverNode = + QuantifiedSubsetOfNode LToken ExpressionNode + | QuantifiedMemberOfNode LToken ExpressionNode + | QuantifiedDomainNode OverDomainNode + deriving (Show) + +data OverDomainNode = OverDomainNode LToken DomainNode + deriving (Show) +data AbstractPatternNode = + AbstractIdentifier NameNode + | AbstractPatternMetaVar LToken + | AbstractPatternTuple (Maybe LToken) (ListNode AbstractPatternNode) + | AbstractPatternMatrix (ListNode AbstractPatternNode) + | AbstractPatternSet (ListNode AbstractPatternNode) + deriving (Show) +data QuanticationGuard = QuanticationGuard LToken ExpressionNode + deriving (Show) data QuantificationPattern = QuantificationPattern ExpressionNode deriving (Show) @@ -249,6 +278,7 @@ data ComprehensionExpressionNode data ComprehensionBodyNode = CompBodyCondition ExpressionNode | CompBodyDomain NamedDomainNode + | CompBodyGenExpr AbstractPatternNode LToken ExpressionNode | CompBodyLettingNode LToken NameNode LToken ExpressionNode deriving (Show) @@ -260,7 +290,7 @@ data OperatorExpressionNode data PostfixOpNode - = IndexedNode LToken IndexerNode LToken + = IndexedNode (ListNode RangeNode) | OpFactorial LToken | ApplicationNode (ListNode ExpressionNode) deriving (Show) @@ -281,13 +311,15 @@ data ListNode itemType = ListNode newtype Sequence itemType = Seq { elems :: [SeqElem itemType] } + deriving (Show) -- deriving (Show) -instance (Show a) => Show (Sequence a) where - show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" +-- instance (Show a) => Show (Sequence a) where +-- show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" data SeqElem itemType = SeqElem - { item :: itemType - , separator :: Maybe LToken + { + separator :: Maybe LToken, + item :: itemType } deriving (Show) diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index 10064ad0ba..3778290af1 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -6,7 +6,7 @@ module Conjure.Language.Expression.Op.Internal.Common , BinaryOperator(..) , prettyPrecBinOp - , Fixity(..), operators, functionals + , Fixity(..), operators, functionals,quantifiers , EssenceOperatorParsingDescr(..) , raiseTypeError @@ -298,5 +298,11 @@ functionals = ] +quantifiers :: [Lexeme] +quantifiers = [ + L_ForAll, + L_Exists + ] + raiseTypeError :: MonadFailDoc m => Pretty a => a -> m b raiseTypeError p = failDoc ("Type error in" <+> pretty p) diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 748bf9c4cf..d44a54394e 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -204,8 +204,14 @@ data Lexeme -- attaching a type to an expression | L_BackTick -- ` + --Quantifiers + + | L_ForAll + | L_Exists + -- others | L_Dot + | L_DoubleDot | L_Comma | L_SemiColon @@ -250,6 +256,9 @@ data Lexeme -- type functional | L_transform + + -- helper + | L_Missing | L_EOF deriving (Eq, Ord, Show,Generic) --Generic @@ -345,6 +354,7 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_makeTable, "makeTable" ) , ( L_table, "table" ) + , ( L_allDiff, "allDiff" ) , ( L_alldifferent_except, "alldifferent_except" ) , ( L_gcc, "gcc" ) @@ -360,6 +370,11 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap -- , ( L_lambda, "lambda" ) -- , ( L_quantifier, "quantifier" ) -- , ( L_representation, "representation" ) + + , ( L_ForAll , "forAll" ) + , ( L_Exists , "exists" ) + + , ( L_Plus , "+" ) , ( L_Minus , "-" ) , ( L_Times , "*" ) @@ -389,6 +404,7 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_Bar , "|" ) , ( L_BackTick , "`" ) , ( L_Dot , "." ) + , ( L_DoubleDot , ".." ) , ( L_Comma , "," ) , ( L_SemiColon , ";" ) , ( L_OpenParen , "(" ) diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index 02ba01df92..6aa035c76d 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -20,14 +20,17 @@ import Data.List (splitAt) import qualified Data.List.NonEmpty as NE import qualified Text.Megaparsec.Char.Lexer as L +sourcePos0 :: SourcePos +sourcePos0 = SourcePos "" (mkPos 0) (mkPos 0) + class Reformable a where reform :: a -> String instance Reformable ETok where - reform (ETok{capture=cap,trivia=triv}) = concatMap showTrivia triv ++ T.unpack cap + reform (ETok{capture=cap,trivia=triv}) = concatMap showTrivia triv ++ T.unpack cap where showTrivia :: Trivia -> String - showTrivia x = case x of + showTrivia x = case x of WhiteSpace txt -> T.unpack txt LineComment txt -> T.unpack txt BlockComment txt -> T.unpack txt @@ -50,7 +53,7 @@ isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis -type Offsets = (Int, Int, Int, Lexeme) +type Offsets = (Int, Int, Int, SourcePos) type Parser = Parsec Void T.Text @@ -72,11 +75,17 @@ totalLength (ETok{offsets = (_, _, l, _)}) = l tokenStart :: ETok -> Int tokenStart (ETok{offsets = (_, s, _, _)}) = s +tokenSourcePos :: ETok -> SourcePos +tokenSourcePos ETok{offsets=(_,_,_,s)} = s makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok eLex :: Parser [ETok] -eLex = manyTill aToken eof +eLex = + do + main <- many $ try aToken + end <- pEOF + return $ main ++ [end] aToken :: Parser ETok aToken = do @@ -86,27 +95,36 @@ aToken = do spos <- getSourcePos (tok,cap) <- aLexeme tokenEnd <- getOffset - return $ makeToken (start, wse, tokenEnd - start, tok) whiteSpace tok cap + return $ makeToken (start, wse, tokenEnd - start, spos) whiteSpace tok cap + +pEOF :: Parser ETok +pEOF = do + start <- getOffset + whiteSpace <- pTrivia + wse <- getOffset + spos <- getSourcePos + eof + tokenEnd <- getOffset + return $ makeToken (start, wse, tokenEnd - start, spos) whiteSpace L_EOF "" + aLexeme :: Parser (Lexeme,Text) aLexeme = aLexemeStrict <|> pFallback aLexemeStrict :: Parser (Lexeme,Text) aLexemeStrict = - try pEOF - <|> try pNumber - <|> try (choice $ map pLexeme lexemes) + try + pNumber + <|> try (choice (map pLexeme lexemes) "Lexeme") <|> try pIdentifier <|> try pMetaVar -pEOF :: Parser (Lexeme,Text) -pEOF = do - eof - return (L_EOF,"") + pNumber :: Parser (Lexeme,Text) pNumber = do v <- L.decimal return (LIntLiteral v,T.pack $ show v) + "Numeric Literal" pMetaVar :: Parser (Lexeme,Text) pMetaVar = do @@ -120,21 +138,21 @@ pIdentifier = do rest <- takeWhileP Nothing isIdentifierLetter let ident = T.append firstLetter rest return ( LIdentifier ident, ident) - + "Identifier" pFallback :: Parser (Lexeme,Text) pFallback = do q <- T.pack <$> someTill anySingle (lookAhead $ try somethingValid) - return (LUnexpected q,q) where somethingValid :: Parser () - somethingValid = void pTrivia <|> void aLexemeStrict + somethingValid = void pTrivia <|> void aLexemeStrict <|> eof pLexeme :: (T.Text, Lexeme) -> Parser (Lexeme,Text) pLexeme (s, l) = do tok <- string s notFollowedBy $ if isIdentifierLetter $ T.last tok then nonIden else empty return (l,tok) + "Lexeme :" ++ show l where nonIden = takeWhile1P Nothing isIdentifierLetter @@ -153,7 +171,7 @@ lineComment :: Parser Trivia lineComment = do _ <- try (chunk "$") (text,end) <- manyTill_ L.charLiteral lineEnd - return $ LineComment $ T.pack ('$' : text++end) + return $ LineComment $ T.pack ('$' : text++end) blockComment :: Parser Trivia blockComment = do @@ -198,7 +216,7 @@ buildStream xs = case NE.nonEmpty xs of Just s -> ETokenStream (T.pack $ showTokens pxy s) xs instance VisualStream ETokenStream where - showTokens p = concatMap reform + showTokens p = concatMap reform tokensLength p ls = sum $ len <$> ls where len ETok{offsets = (_, _, x, _)} = x @@ -224,11 +242,10 @@ instance TraversableStream ETokenStream where newSourcePos = case post of [] -> pstateSourcePos - (x : _) -> pstateSourcePos{sourceLine = mkPos $ tokenStart x, sourceColumn = mkPos $ tokenStart x} + (x : _) -> tokenSourcePos x (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) preLine = reverse . takeWhile (/= '\n') . reverse $ preStr - tokensConsumed = o restOfLine = takeWhile (/= '\n') postStr pxy :: Proxy ETokenStream diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index fc49ee1d37..d9b11964ac 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -8,7 +8,7 @@ import Conjure.Language.Definition import Conjure.Language.Lexemes import Conjure.Prelude import Control.Applicative -import Conjure.Language.NewLexer (ETok (lexeme, capture, ETok), ETokenStream (ETokenStream), eLex) +import Conjure.Language.NewLexer (ETok (lexeme, capture, ETok), ETokenStream (ETokenStream), eLex, sourcePos0) import Conjure.Language.Domain import Data.Text (unpack, pack) @@ -21,7 +21,7 @@ validateModel model = Left "TODO" validateProgramTree :: ProgramTree -> Validator [Declaration] -validateProgramTree (ProgramTree (x:xs)) = validateStatement x +validateProgramTree (ProgramTree (x:xs) l) = validateStatement x validateProgramTree _ = todo @@ -397,7 +397,7 @@ validateSequenceElem f (SeqElem i Nothing) = f i val :: String -> IO () val s = do let str = s - let other = [ETok (0, 0, 0, L_EOF) [] L_EOF ""] + let other = [ETok (0, 0, 0, sourcePos0) [] L_EOF ""] let txt = pack str let lexed = parseMaybe eLex txt let stream = ETokenStream txt $ fromMaybe other lexed @@ -405,5 +405,5 @@ val s = do let progStruct = parseMaybe parseProgram stream case progStruct of Nothing -> putStrLn "error" - Just p@(ProgramTree a) -> print (validateProgramTree p) + Just p@(ProgramTree{}) -> print (validateProgramTree p) -- putStrLn validateFind \ No newline at end of file From b4083efa034f47cacc8885d8eb91a8a8c3b9af15 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 11 Oct 2022 11:59:00 +0100 Subject: [PATCH 061/378] Parses some minimal examples as expected --- src/Conjure/Language/AST/ASTParser.hs | 26 +- src/Conjure/Language/AST/Expression.hs | 15 +- src/Conjure/Language/AST/Reformer.hs | 21 +- src/Conjure/Language/AST/Syntax.hs | 27 +- src/Conjure/Language/Expression/Op.hs | 2 +- src/Conjure/Language/Lexemes.hs | 9 + src/Conjure/Language/Lexer.hs | 18 +- src/Conjure/Language/Validator.hs | 546 ++++++++++++++++--------- 8 files changed, 422 insertions(+), 242 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 044200401c..5c61a9b959 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -79,33 +79,31 @@ parseLetting = do lLetting <- need L_letting names <- commaList parseIdentifier lBe <- want L_be - choice - [ finishDomain $ LettingDomain lLetting names lBe - , try $ finishEnum $ LettingEnum lLetting names lBe - , try $ finishAnon $ LettingAnon lLetting names lBe - , finishExpression $ LettingExpr lLetting names lBe + let start = LettingStatementNode lLetting names lBe + start <$> choice + [ finishDomain + , try finishEnum + , try finishAnon + , LettingExpr <$> parseExpression ] where - finishDomain start = do + finishDomain = do lDomain <- need L_domain domain <- parseDomain - return $ start lDomain domain - finishExpression start = do - expr <- parseExpression - return $ start expr - finishEnum start = do + return $ LettingDomain lDomain domain + finishEnum = do lNew <- need L_new lType <- need L_type lEnum <- need L_enum members <- curlyBracketList $ commaList parseIdentifier - return $ start lNew lType lEnum members - finishAnon start = do + return $ LettingEnum lNew lType lEnum members + finishAnon = do lNew <- need L_new lType <- want L_type lOf <- want L_of lSize <- want L_size expr <- parseExpression - return $ start lNew lType lOf lSize expr + return $ LettingAnon lNew lType lOf lSize expr parseGiven :: Parser GivenStatementNode parseGiven = do diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index 696ee0d5d7..a27c829401 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -37,17 +37,24 @@ parseAtomicExpression = do , ParenExpression <$> parseParenExpression parensPair , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) , QuantificationExpr <$> parseQuantificationStatement + , DomainExpression <$> parseDomainExpression , MissingExpressionNode <$> makeMissing L_Missing ] --- mPostfix <- optional parsePostfixOp --- case mPostfix of --- Nothing -> return e --- Just f -> return $ f e + + +parseDomainExpression :: Parser DomainExpressionNode +parseDomainExpression = do + lTick <- need L_BackTick + domain <- parseDomain + rTick <- want L_BackTick + return $ DomainExpressionNode lTick domain rTick -- [a,b,c : int (1..2)] -- [a,b,c : int (1..4) | x < 3,letting x be int] + + parseMatrixBasedExpression :: Parser LiteralNode parseMatrixBasedExpression = do openB <- need L_OpenBracket diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 19df917b66..c960bc875e 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -25,12 +25,16 @@ instance Flattenable ETok DeclarationStatementNode where GivenStatement gsn -> flatten gsn LettingStatement lsn -> flatten lsn -instance Flattenable ETok LettingStatementNode where + +instance Flattenable ETok LettingStatementNode where + flatten (LettingStatementNode a b c d) = concat[ flatten a, flatten b, flatten c,flatten d] + +instance Flattenable ETok LettingAssignmentNode where flatten x = case x of - LettingExpr a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - LettingDomain a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] - LettingEnum a b c d e f g -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f, flatten g] - LettingAnon a b c d e f g h -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f, flatten g, flatten h] + LettingExpr d -> flatten d + LettingDomain d e -> flatten d ++ flatten e + LettingEnum d e f g -> concat [flatten d, flatten e, flatten f, flatten g] + LettingAnon d e f g h -> concat [flatten d, flatten e, flatten f, flatten g, flatten h] instance Flattenable ETok FindStatementNode where flatten (FindStatementNode a b c d) = concat [flatten a, flatten b, flatten c, flatten d] @@ -76,9 +80,13 @@ instance Flattenable ETok ExpressionNode where OperatorExpressionNode oen -> flatten oen ParenExpression pen ->flatten pen AbsExpression pen -> flatten pen + DomainExpression dex -> flatten dex FunctionalApplicationNode lt ln -> flatten lt ++ flatten ln MissingExpressionNode _ -> [] + +instance Flattenable ETok DomainExpressionNode where + flatten (DomainExpressionNode a b c) = flatten a ++ flatten b ++ flatten c instance Flattenable ETok QuantificationExpressionNode where flatten (QuantificationExpressionNode a b c d e f) = concat [ flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] @@ -97,7 +105,7 @@ instance Flattenable ETok QuanticationGuard where instance Flattenable ETok AbstractPatternNode where flatten x = case x of AbstractIdentifier nn -> flatten nn - AbstractPatternMetaVar lt -> flatten lt + AbstractMetaVar lt -> flatten lt AbstractPatternTuple a b -> flatten a ++ flatten b AbstractPatternMatrix ln -> flatten ln AbstractPatternSet ln -> flatten ln @@ -164,6 +172,7 @@ instance Flattenable ETok ComprehensionBodyNode where flatten x = case x of CompBodyCondition en -> flatten en CompBodyDomain ndn -> flatten ndn + CompBodyGenExpr a b c -> flatten a ++ flatten b ++ flatten c CompBodyLettingNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] instance Flattenable ETok OperatorExpressionNode where diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index ce69ab7699..87c3692ec2 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -85,29 +85,24 @@ data GivenStatementNode deriving (Show) data LettingStatementNode - = LettingExpr - LToken -- lLetting - (Sequence NameNode) -- name - LToken -- lBe + = LettingStatementNode + LToken + (Sequence NameNode) + LToken -- + LettingAssignmentNode + deriving (Show) +data LettingAssignmentNode + = LettingExpr ExpressionNode | LettingDomain - LToken -- lLetting - (Sequence NameNode) -- name - LToken -- lBe LToken -- domain DomainNode | LettingEnum - LToken -- lLetting - (Sequence NameNode) -- name - LToken -- lBe LToken -- lNew LToken -- lType LToken -- lEnum (ListNode NameNode) -- nameList | LettingAnon - LToken -- lLettingAnon - (Sequence NameNode) -- name - LToken -- lBe LToken -- lNew LToken -- lType LToken -- lOf @@ -176,12 +171,16 @@ data ExpressionNode | IdentifierNode NameNode | QuantificationExpr QuantificationExpressionNode | OperatorExpressionNode OperatorExpressionNode + | DomainExpression DomainExpressionNode | ParenExpression ParenExpressionNode | AbsExpression ParenExpressionNode | FunctionalApplicationNode LToken (ListNode ExpressionNode) | MissingExpressionNode LToken deriving (Show) +data DomainExpressionNode + = DomainExpressionNode LToken DomainNode LToken + deriving (Show) data ParenExpressionNode = ParenExpressionNode LToken ExpressionNode LToken deriving (Show) @@ -255,7 +254,7 @@ data OverDomainNode = OverDomainNode LToken DomainNode deriving (Show) data AbstractPatternNode = AbstractIdentifier NameNode - | AbstractPatternMetaVar LToken + | AbstractMetaVar LToken | AbstractPatternTuple (Maybe LToken) (ListNode AbstractPatternNode) | AbstractPatternMatrix (ListNode AbstractPatternNode) | AbstractPatternSet (ListNode AbstractPatternNode) diff --git a/src/Conjure/Language/Expression/Op.hs b/src/Conjure/Language/Expression/Op.hs index fc5668968d..0580076045 100644 --- a/src/Conjure/Language/Expression/Op.hs +++ b/src/Conjure/Language/Expression/Op.hs @@ -19,7 +19,7 @@ import Conjure.Language.Expression.Op.Internal.Generated mkBinOp :: (Op x :< x, ExpressionLike x) => Text -> x -> x -> x mkBinOp op a b = - case textToLexeme op of + trace ("BINOP["++ show op ++ "]") $ case textToLexeme op of Nothing -> bug ("Unknown binary operator:" <+> pretty op) Just l -> let diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index d44a54394e..ec9929e0d4 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -450,6 +450,12 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_transform, "transform") ] +textToLexeme :: T.Text -> Maybe Lexeme +textToLexeme t = M.lookup t mapTextToLexeme + +mapTextToLexeme :: M.HashMap T.Text Lexeme +mapTextToLexeme = M.fromList lexemes + mapLexemeToText :: M.HashMap Lexeme T.Text mapLexemeToText = M.fromList $ map swap lexemes @@ -466,6 +472,9 @@ lexemeFace l = Nothing -> (show l) Just t -> (T.unpack t) +lexemeText :: Lexeme -> T.Text +lexemeText l = T.pack $ show (lexemeFace l) + --Categories functionAttributes :: [Lexeme] functionAttributes = [L_injective,L_size] diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index d4bac9b6aa..2a50ead1d6 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -14,7 +14,7 @@ module Conjure.Language.Lexer , lexemeFace ) where import Conjure.Prelude hiding (some,many) -import Conjure.Language.Lexemes hiding (lexemeFace,mapLexemeToText) +import Conjure.Language.Lexemes hiding (lexemeFace) import Data.Char ( isAlpha, isAlphaNum ) import Data.Void import qualified Data.HashMap.Strict as M @@ -286,11 +286,11 @@ data LexemePos = LexemePos -- instance Hashable Lexeme -lexemeText :: Lexeme -> T.Text -lexemeText l = T.pack $ show (lexemeFace l) +-- lexemeText :: Lexeme -> T.Text +-- lexemeText l = T.pack $ show (lexemeFace l) -textToLexeme :: T.Text -> Maybe Lexeme -textToLexeme t = M.lookup t mapTextToLexeme +-- textToLexeme :: T.Text -> Maybe Lexeme +-- textToLexeme t = M.lookup t mapTextToLexeme lexemeFace :: Lexeme -> Pr.Doc lexemeFace L_Newline = "new line" @@ -316,11 +316,11 @@ lexemeWidth l = Nothing -> 0 Just t -> T.length t -mapTextToLexeme :: M.HashMap T.Text Lexeme -mapTextToLexeme = M.fromList lexemes +-- mapTextToLexeme :: M.HashMap T.Text Lexeme +-- mapTextToLexeme = M.fromList lexemes -mapLexemeToText :: M.HashMap Lexeme T.Text -mapLexemeToText = M.fromList $ map swap lexemes +-- mapLexemeToText :: M.HashMap Lexeme T.Text +-- mapLexemeToText = M.fromList $ map swap lexemes -- lexemes :: [(T.Text, Lexeme)] -- lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index d9b11964ac..7de8d9e55d 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -5,82 +5,131 @@ module Conjure.Language.Validator where import Conjure.Language.AST.ASTParser import Conjure.Language.AST.Syntax as S import Conjure.Language.Definition +import Conjure.Language.Domain import Conjure.Language.Lexemes +import Conjure.Language.NewLexer (ETok (ETok, capture, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0) import Conjure.Prelude import Control.Applicative -import Conjure.Language.NewLexer (ETok (lexeme, capture, ETok), ETokenStream (ETokenStream), eLex, sourcePos0) -import Conjure.Language.Domain -import Data.Text (unpack, pack) import Conjure.Language.Type -import Shelly (ls) -import Text.Megaparsec (parseMaybe) +import Data.Text (pack, unpack) +import Text.Megaparsec (parseMaybe, runParser) +import Conjure.Language (mkOp, mkBinOp, Op (MkOpRelationProj, MkOpSlicing, MkOpIndexing), OpRelationProj (OpRelationProj), OpIndexing (OpIndexing), opPowerSet) +import Conjure.Language.Expression.Op (OpSlicing(..)) +import Conjure.Language (Op(..)) +import Conjure.Language (OpPowerSet(..), OpImage (OpImage)) validateModel :: ProgramTree -> Either Doc Model validateModel model = Left "TODO" +validateProgramTree :: ProgramTree -> Validator [Statement] +validateProgramTree (ProgramTree sts _) = do + q <- validateArray validateStatement sts + return $ concat q + -- todo "all" + +validateStatement :: StatementNode -> Validator [Statement] +validateStatement (DeclarationStatement dsn) = validateDeclarationStatement dsn +validateStatement (BranchingStatement bsn) = validateBranchingStatement bsn +validateStatement (SuchThatStatement stsn) = validateSuchThatStatement stsn +validateStatement (WhereStatement wsn) = validateWhereStatement wsn +validateStatement (ObjectiveStatement osn) = validateObjectiveStatement osn +validateStatement (UnexpectedToken lt) = invalid $ TokenError lt + +validateWhereStatement :: WhereStatementNode -> Validator [Statement] +validateWhereStatement (WhereStatementNode l1 exprs) = do + checkSymbols [l1] >> sequence [Where <$> validateSequence validateExpression exprs] + +validateObjectiveStatement :: ObjectiveStatementNode -> Validator [Statement] +validateObjectiveStatement (ObjectiveMin lt en) = + checkSymbols [lt] >> sequence [Objective Minimising <$> validateExpression en] +validateObjectiveStatement (ObjectiveMax lt en) = + checkSymbols [lt] >> sequence [Objective Maximising <$> validateExpression en] + +validateSuchThatStatement :: SuchThatStatementNode -> Validator [Statement] +validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do + checkSymbols [l1, l2] + exprs' <- validateSequence validateExpression exprs + return [SuchThat exprs'] + +validateBranchingStatement :: BranchingStatementNode -> Validator [Statement] +validateBranchingStatement (BranchingStatementNode l1 l2 statements) = do + checkSymbols [l1, l2] + statements <- todo "branching" + todo "branching" + +validateDeclarationStatement :: DeclarationStatementNode -> Validator [Statement] +validateDeclarationStatement stmt = + fmap Declaration <$> case stmt of + FindStatement fsn -> validateFind fsn + GivenStatement gsn -> validateGiven gsn + LettingStatement lsn -> validateLetting lsn + +validateGiven :: GivenStatementNode -> Validator [Declaration] +validateGiven (GivenStatementNode l1 idents l2 domain) = + do + checkSymbols [l1, l2] + names <- validate $ validateNameList idents + dom <- validate $ validateDomain domain + verify $ zipWith (FindOrGiven Given) <$> names <*> (repeat <$> dom) +validateGiven (GivenEnumNode l1 se l2 l3 l4) = + do + checkSymbols [l1, l2, l3, l4] + names <- validate $ validateNameList se + verify $ fmap GivenDomainDefnEnum <$> names + +validateLetting :: LettingStatementNode -> Validator [Declaration] +-- Letting [names] be +validateLetting (LettingStatementNode l1 names l2 assign) = do + checkSymbols [l1, l2] + names' <- validate $ validateNameList names + assignment <- validateLettingAssignment assign + verify $ fmap assignment <$> names' + +validateLettingAssignment :: LettingAssignmentNode -> Validator (Name -> Declaration) +validateLettingAssignment (LettingExpr en) = do + expr <- validateExpression en + return (`Letting` expr) +validateLettingAssignment (LettingDomain lt dn) = do + checkSymbols [lt] + domain <- validateDomain dn + return (`Letting` Domain domain) +validateLettingAssignment (LettingEnum l1 l2 l3 names) = do + checkSymbols [l1, l2, l3] + members <- validateList validateName names + return (`LettingDomainDefnEnum` members) +validateLettingAssignment (LettingAnon l1 l2 l3 l4 szExp) = do + checkSymbols [l1, l2, l3, l4] + size <- validateExpression szExp + return (`LettingDomainDefnUnnamed` size) -validateProgramTree :: ProgramTree -> Validator [Declaration] -validateProgramTree (ProgramTree (x:xs) l) = validateStatement x -validateProgramTree _ = todo - - -validateStatement :: StatementNode -> Validator [Declaration] -validateStatement a = case a of - DeclarationStatement (FindStatement f) -> validateFind f - _ -> todo data ValidatorError = TypeError String | TokenError LToken | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere - | NotImplemented + | NotImplemented String deriving (Show) --- --validateFind :: ValidatorState -> FindStatementNode -> (ValidatorState,FindOrGiven) --- validateFind :: FindStatementNode -> Validator [Declaration] --- validateFind (FindStatementNode l names b domain) = --- do --- validateSymbol l --- names' <- validateSeq $ validateName names --- validateSymbol b --- domain' <- validateDomain domain --- return $ FindOrGiven FindOrGiven Name (Domain () Expression) - --- validateList :: ListNode a -> (a -> Validator b) -> Validator [b] --- validateList xs f = map q xs --- where q e= do --- a <- f e --- return e - --- validateSymbol :: LToken -> Validator () --- validateSymbol a = do put $ ValidatorState [] - --- validateName :: NameNode -> Validator String --- validateName (NameNode (LIdentifier s)) = s --- validateName (NameNode (_)) = do --- raise "missing synbol" --- return "" - data Validator a = Validator { value :: Maybe a , errors :: [ValidatorError] } deriving (Show) -data Validated a = Valid a | Invalid +-- data Validated a = Just a | Nothing -instance Functor Validated where - fmap :: (a -> b) -> Validated a -> Validated b - fmap fab (Valid a) = Valid (fab a) - fmap _ Invalid = Invalid +-- instance Functor Validated where +-- fmap :: (a -> b) -> Validated a -> Validated b +-- fmap fab (Just a) = Just (fab a) +-- fmap _ Nothing = Nothing -instance Applicative Validated where - pure :: a -> Validated a - pure = Valid - (<*>) :: Validated (a -> b) -> Validated a -> Validated b - (Valid fab) <*> (Valid a) = Valid (fab a) - Invalid <*> (Valid _) = Invalid - _ <*> Invalid = Invalid +-- instance Applicative Validated where +-- pure :: a -> Validated a +-- pure = Valid +-- (<*>) :: Validated (a -> b) -> Validated a -> Validated b +-- (Just fab) <*> (Just a) = Just (fab a) +-- Nothing <*> (Just _) = Nothing +-- _ <*> Nothing = Nothing data Foo = Foo Int Int Int deriving (Show) @@ -94,115 +143,105 @@ instance Functor Validator where (Just a) -> Just $ fab a , errors = ves } - + instance Applicative Validator where pure :: a -> Validator a pure x = Validator (Just x) [] (<*>) :: Validator (a -> b) -> Validator a -> Validator b (Validator Nothing es) <*> (Validator _ e2s) = Validator Nothing (es ++ e2s) (Validator (Just f) es) <*> (Validator a e2s) = Validator val (es ++ e2s) - where - val = case a of - Just a' -> Just $ f a' - Nothing -> Nothing + where + val = case a of + Just a' -> Just $ f a' + Nothing -> Nothing instance Monad Validator where (>>=) :: Validator a -> (a -> Validator b) -> Validator b - (Validator Nothing ves) >>= _ - = Validator {value = Nothing, errors = ves} - (Validator (Just n) ves) >>= f = let r = f n in - r {errors = ves ++ errors r} - + (Validator Nothing ves) >>= _ = + Validator{value = Nothing, errors = ves} + (Validator (Just n) ves) >>= f = + let r = f n + in r{errors = ves ++ errors r} -validate :: Validator a -> Validator (Validated a) +validate :: Validator a -> Validator (Maybe a) validate n = do - case n of - Validator Nothing ves -> Validator (Just Invalid) ves - Validator (Just a) ves -> Validator (Just $ Valid a) ves - + case n of + Validator Nothing ves -> Validator (Just Nothing) ves + Validator (Just a) ves -> Validator (Just $ Just a) ves getPrefix :: Validator Int getPrefix = Validator Nothing [TypeError "ERR"] g :: Validator Foo g = do - _ <- validate getPrefix - a <- validate $ do return 1 - b <- validate $ do return 1:: Validator Int - c <- validate $ do return 1 - verify $ Foo <$> a <*> b <*> c + _ <- validate getPrefix + a <- validate $ do return 1 + b <- validate $ do return 1 :: Validator Int + c <- validate $ do return 1 + verify $ Foo <$> a <*> b <*> c -verify :: Validated a -> Validator a -verify (Valid a) = Validator {value = Just a, errors = []} -verify Invalid = Validator {value = Nothing, errors = []} +verify :: Maybe a -> Validator a +verify (Just a) = Validator{value = Just a, errors = []} +verify Nothing = Validator{value = Nothing, errors = []} invalid :: ValidatorError -> Validator a invalid err = Validator Nothing [err] --- qq :: Checker Foo --- qq = do --- getPrefix --- q <- get --- return $ Foo <$> q a b - rg :: String rg = case g of - (Validator x es) -> show (x,es) + (Validator x es) -> show (x, es) -- type Checker a = State [ValidatorError] (Maybe a) validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of - RealToken et -> return $ lexeme et + RealToken et -> return $ lexeme et _ -> invalid $ TokenError s - -- [MissingTokenError ] - +-- [MissingTokenError ] validateFind :: FindStatementNode -> Validator [Declaration] -validateFind (FindStatementNode find names colon domain ) = do - checkSymbols [find,colon] +validateFind (FindStatementNode find names colon domain) = do + checkSymbols [find, colon] names' <- validate $ validateNameList names domain' <- validate $ validateDomain domain verify $ map <$> (makeFind <$> domain') <*> names' - where - makeFind :: Domain () Expression -> Name -> Declaration - makeFind dom nm = FindOrGiven Find nm dom - - - - + where + makeFind :: Domain () Expression -> Name -> Declaration + makeFind dom nm = FindOrGiven Find nm dom type DomainValidator = Validator (Domain () Expression) validateDomain :: DomainNode -> DomainValidator validateDomain dm = case dm of - BoolDomainNode lt -> validateSymbol lt >> return DomainBool - RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs - RangedEnumNode nn ranges -> validateEnumRange nn ranges - EnumDomainNode nn -> validateNamedEnumDomain nn - TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms - RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom - VariantDomainNode l1 ndom -> checkSymbols [l1] >> validateVariantDomain ndom - MatrixDomainNode l1 l2 l3 idoms l4 dom -> checkSymbols [l1,l2,l3,l4] >> validateMatrixDomain idoms dom - SetDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validateSetDomain attrs dom - MSetDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validateMSetDomain attrs dom - FunctionDomainNode l1 attrs dom1 l2 dom2 -> checkSymbols [l1,l2] >> validateFunctionDomain attrs dom1 dom2 - SequenceDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validateSequenceDomain attrs dom - RelationDomainNode l1 attrs l2 doms -> checkSymbols [l1,l2] >> validateRelationDomain attrs doms - PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1,l2] >> validatePartitionDomain attrs dom - MissingDomainNode lt -> invalid $ TokenError lt + BoolDomainNode lt -> validateSymbol lt >> return DomainBool + RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs + RangedEnumNode nn ranges -> validateEnumRange nn ranges + EnumDomainNode nn -> validateNamedEnumDomain nn + ShortTupleDomainNode lst -> validateTupleDomain lst + TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms + RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom + VariantDomainNode l1 ndom -> checkSymbols [l1] >> validateVariantDomain ndom + MatrixDomainNode l1 l2 l3 idoms l4 dom -> checkSymbols [l1, l2, l3, l4] >> validateMatrixDomain idoms dom + SetDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSetDomain attrs dom + MSetDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateMSetDomain attrs dom + FunctionDomainNode l1 attrs dom1 l2 dom2 -> checkSymbols [l1, l2] >> validateFunctionDomain attrs dom1 dom2 + SequenceDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSequenceDomain attrs dom + RelationDomainNode l1 attrs l2 doms -> checkSymbols [l1, l2] >> validateRelationDomain attrs doms + PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validatePartitionDomain attrs dom + MissingDomainNode lt -> invalid $ TokenError lt where - validateRangedInt :: ListNode RangeNode ->DomainValidator - validateRangedInt ranges = do + validateRangedInt :: Maybe (ListNode RangeNode) -> DomainValidator + validateRangedInt (Just ranges) = do ranges' <- validateList validateRange ranges return $ DomainInt TagInt ranges' + validateRangedInt Nothing = return $ DomainInt TagInt [] validateEnumRange :: NameNode -> ListNode RangeNode -> DomainValidator validateEnumRange name ranges = do name' <- validate $ validateIdentifier name ranges' <- validateList validateRange ranges - --scopecheck (see parser:313) + -- scopecheck (see parser:313) verify $ (\n -> DomainEnum (Name n) (Just ranges') Nothing) <$> name' validateNamedEnumDomain :: NameNode -> DomainValidator validateNamedEnumDomain name = do @@ -214,76 +253,77 @@ validateDomain dm = case dm of validateRecordDomain namedDoms = DomainRecord <$> validateList validateNamedDomain namedDoms validateVariantDomain :: ListNode NamedDomainNode -> DomainValidator validateVariantDomain namedDoms = DomainRecord <$> validateList validateNamedDomain namedDoms - validateMatrixDomain ::ListNode DomainNode -> DomainNode -> DomainValidator + validateMatrixDomain :: ListNode DomainNode -> DomainNode -> DomainValidator validateMatrixDomain indexes dom = do idoms <- validate $ validateList validateDomain indexes dom' <- validate $ validateDomain dom verify $ foldr DomainMatrix <$> dom' <*> idoms - validateSetDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + validateSetDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validateSetDomain attrs dom = do - let repr = Valid () + let repr = Just () attrs' <- validate $ validateSetAttributes attrs dom' <- validate $ validateDomain dom verify $ DomainSet <$> repr <*> attrs' <*> dom' - validateMSetDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator - validateMSetDomain attrs dom = do - let repr = Valid () + validateMSetDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator + validateMSetDomain attrs dom = do + let repr = Just () attrs' <- validate $ validateMSetAttributes attrs dom' <- validate $ validateDomain dom verify $ DomainMSet <$> repr <*> attrs' <*> dom' - validateFunctionDomain :: ListNode AttributeNode-> DomainNode -> DomainNode -> DomainValidator + validateFunctionDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainNode -> DomainValidator validateFunctionDomain attrs dom1 dom2 = do - let repr = Valid () - attrs' <- validate $ validateFuncAttributes attrs + let repr = Just () + attrs' <- case attrs of + Just a -> validate $ validateFuncAttributes a + Nothing -> return $ Just def dom1' <- validate $ validateDomain dom1 dom2' <- validate $ validateDomain dom2 verify $ DomainFunction <$> repr <*> attrs' <*> dom1' <*> dom2' - -- attrs <- validateAttributes - validateSequenceDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + + -- attrs <- validateAttributes + validateSequenceDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validateSequenceDomain attrs dom = do - let repr = Valid () + let repr = Just () attrs' <- validate $ validateSeqAttributes attrs dom' <- validate $ validateDomain dom verify $ DomainSequence <$> repr <*> attrs' <*> dom' - validateRelationDomain :: ListNode AttributeNode-> ListNode DomainNode -> DomainValidator + validateRelationDomain :: ListNode AttributeNode -> ListNode DomainNode -> DomainValidator validateRelationDomain attrs doms = do - let repr = Valid () + let repr = Just () attrs' <- validate $ validateRelationAttributes attrs doms' <- validate $ validateList validateDomain doms verify $ DomainRelation <$> repr <*> attrs' <*> doms' - validatePartitionDomain :: ListNode AttributeNode-> DomainNode -> DomainValidator + validatePartitionDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validatePartitionDomain attrs dom = do - let repr = Valid () + let repr = Just () attrs' <- validate $ validatePartitionAttributes attrs dom' <- validate $ validateDomain dom verify $ DomainPartition <$> repr <*> attrs' <*> dom' -todo:: Validator a -todo = invalid NotImplemented - - +todo :: String -> Validator a +todo s = invalid $ NotImplemented s ---TODO:THIS IS NOT DONE +-- TODO:THIS IS NOT DONE validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) -validateSetAttributes a = do verify $ Invalid +validateSetAttributes a = do verify $ Nothing validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) -validateMSetAttributes a = do verify $ Invalid +validateMSetAttributes a = do verify $ Nothing validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) -validateFuncAttributes a = do verify $ Invalid +validateFuncAttributes a = do verify $ Nothing validateSeqAttributes :: ListNode AttributeNode -> Validator (SequenceAttr Expression) -validateSeqAttributes a = do verify $ Invalid +validateSeqAttributes a = do verify $ Nothing validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr Expression) -validateRelationAttributes a = do verify $ Invalid +validateRelationAttributes a = do verify $ Nothing validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) -validatePartitionAttributes a = do verify $ Invalid +validatePartitionAttributes a = do verify $ Nothing -validateNamedDomain :: NamedDomainNode -> Validator (Name,Domain () Expression) +validateNamedDomain :: NamedDomainNode -> Validator (Name, Domain () Expression) validateNamedDomain (NameDomainNode name l1 domain) = do checkSymbols [l1] name' <- validate $ validateName name @@ -292,65 +332,181 @@ validateNamedDomain (NameDomainNode name l1 domain) = do validateRange :: RangeNode -> Validator (Range Expression) validateRange range = case range of - SingleRangeNode en -> RangeSingle <$> validateExpression en - OpenRangeNode (DoubleDotNode a b) -> checkSymbols [a,b] >> return RangeOpen - RightUnboundedRangeNode e1 (DoubleDotNode a b) -> checkSymbols [a,b] >> RangeLowerBounded <$> validateExpression e1 - LeftUnboundedRangeNode (DoubleDotNode a b) e1 -> checkSymbols [a,b] >> RangeUpperBounded <$> validateExpression e1 - BoundedRangeNode e1 (DoubleDotNode a b) e2 -> do - _ <- checkSymbols [a,b] - e1' <- validate $ validateExpression e1 - e2' <- validate $ validateExpression e2 - verify $ RangeBounded <$> e1' <*> e2' - - -validateArrowPair :: ArrowPairNode -> Validator (Expression,Expression) + SingleRangeNode en -> RangeSingle <$> validateExpression en + OpenRangeNode dots -> checkSymbols [dots] >> return RangeOpen + RightUnboundedRangeNode e1 dots -> checkSymbols [dots] >> RangeLowerBounded <$> validateExpression e1 + LeftUnboundedRangeNode dots e1 -> checkSymbols [dots] >> RangeUpperBounded <$> validateExpression e1 + BoundedRangeNode e1 dots e2 -> do + _ <- checkSymbols [dots] + e1' <- validate $ validateExpression e1 + e2' <- validate $ validateExpression e2 + verify $ RangeBounded <$> e1' <*> e2' + +validateArrowPair :: ArrowPairNode -> Validator (Expression, Expression) validateArrowPair (ArrowPairNode e1 s e2) = do checkSymbols [s] e1' <- validate $ validateExpression e1 e2' <- validate $ validateExpression e2 verify $ (,) <$> e1' <*> e2' - validateExpression :: ExpressionNode -> Validator Expression validateExpression expr = case expr of - Literal ln -> validateLiteral ln - IdentifierNode nn -> todo - QuantificationExpr qen -> todo - ComprehensionExpr cen -> todo - OperatorExpressionNode oen -> todo - ParenExpression pen -> todo - AbsExpression pen -> todo - FunctionalApplicationNode lt ln -> todo - MissingExpressionNode lt -> invalid $ TokenError lt + Literal ln -> validateLiteral ln + IdentifierNode nn -> validateIdentifierExpr nn + QuantificationExpr qen -> validateQuantificationExpression qen + OperatorExpressionNode oen -> validateOperatorExpression oen + DomainExpression dex -> validateDomainExpression dex + ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp + AbsExpression (ParenExpressionNode l1 exp l2) -> do + checkSymbols [l1,l2] + exp' <- validateExpression exp + return $ mkOp "twoBars" [exp'] + FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln + MissingExpressionNode lt -> invalid $ TokenError lt + +translateQnName :: Lexeme -> Text +translateQnName qnName = case qnName of + L_ForAll -> "and" + L_Exists -> "or" + _ -> lexemeText qnName + +validateQuantificationExpression :: QuantificationExpressionNode -> Validator Expression +validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = + do + checkSymbols [dot] + name' <- validate $ validateSymbol name + patterns <- validate $ validateSequence validateAbstractPattern pats + over' <- validate $ validateQuantificationOver over + guard' <- validate $ validateQuantificationGuard m_guard + body <- validate $ validateExpression expr + let gens = map <$> over' <*> patterns + let qBody = Comprehension <$> body <*> ((++) <$> guard' <*> gens) + verify $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) + where + validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] + validateQuantificationGuard Nothing = pure [] + validateQuantificationGuard (Just (QuanticationGuard l1 exp) ) = do + checkSymbols [l1] + expr' <- validateExpression exp + return [Condition expr'] + validateQuantificationOver :: QuantificationOverNode -> Validator (AbstractPattern -> GeneratorOrCondition) + validateQuantificationOver ( QuantifiedSubsetOfNode lt en ) = do + checkSymbols [lt] + exp <- validateExpression en + return (\pat -> Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet exp)) + validateQuantificationOver ( QuantifiedMemberOfNode lt en ) = do + checkSymbols [lt] + exp <- validateExpression en + return (\pat -> Generator $ GenInExpr pat exp) + validateQuantificationOver ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do + checkSymbols [l1] + dom' <- validateDomain dom + return (\pat -> Generator $ GenDomainNoRepr pat dom') + + + +validateAbstractPattern :: AbstractPatternNode -> Validator AbstractPattern +validateAbstractPattern (AbstractIdentifier nn) = Single <$> validateName nn +validateAbstractPattern (AbstractMetaVar lt) = AbstractPatternMetaVar <$> todo "absMetaVar" +validateAbstractPattern (AbstractPatternMatrix ln) = AbsPatMatrix <$> validateList validateAbstractPattern ln +validateAbstractPattern (AbstractPatternSet ln) = AbsPatSet <$> validateList validateAbstractPattern ln +validateAbstractPattern (AbstractPatternTuple m_lt ln) = do + maybe (pure ()) (\n ->checkSymbols [n]) m_lt + AbsPatTuple <$> validateList validateAbstractPattern ln + +validateDomainExpression :: DomainExpressionNode -> Validator Expression +validateDomainExpression (DomainExpressionNode l1 dom l2) = do + checkSymbols [l1,l2] + Domain <$> validateDomain dom + +validateFunctionApplication :: LToken -> ListNode ExpressionNode -> Validator Expression +validateFunctionApplication name args = do + name' <- validate $ validateSymbol name + args' <- validate $ validateList validateExpression args + verify $ do + n <- name' + a <- args' + return $ case (n,a) of + (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z + _ -> mkOp (pack . lexemeFace $ n) a + +validateIdentifierExpr :: NameNode -> Validator Expression +validateIdentifierExpr name = Reference <$> ( Name <$> validateIdentifier name) <*> pure Nothing + +validateOperatorExpression :: OperatorExpressionNode -> Validator Expression + +validateOperatorExpression (PrefixOpNode lt expr) = do + checkSymbols [lt] + --lookup symbol + todo "operator expression prefix" +validateOperatorExpression (BinaryOpNode lexp op rexp) = do + lExpr <- validate $ validateExpression lexp + rExpr <- validate $ validateExpression rexp + op' <- validate $ validateSymbol op + verify $ mkBinOp <$> ( pack . lexemeFace <$> op') <*> lExpr <*> rExpr +validateOperatorExpression (PostfixOpNode expr pon) = do + expr' <- validate $ validateExpression expr + postFixOp <- validate $ validatePostfixOp pon + verify $ postFixOp <*> expr' + +validatePostfixOp :: PostfixOpNode -> Validator (Expression -> Expression) +validatePostfixOp (OpFactorial lt) = do + checkSymbols [lt] + return (\x -> mkOp "factorial" [x]) +validatePostfixOp (ApplicationNode args) = do + args' <- validateList validateExpression args + let underscore = Reference "_" Nothing + let ys = [if underscore == x then Nothing else Just x | x <- args'] + return $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys +validatePostfixOp (IndexedNode ln) = do + ranges <-validateList validateRange ln + let indices = map interpretRange ranges + return $ flip (foldl (\m f -> f m)) indices + where + interpretRange :: Range Expression -> (Expression-> Expression) + interpretRange x = + let a = case x of + RangeOpen -> Right (Nothing,Nothing) + RangeSingle ex -> Left ex + RangeLowerBounded ex -> Right (Just ex,Nothing) + RangeUpperBounded ex -> Right (Nothing,Just ex) + RangeBounded exl exr -> Right (Just exl,Just exr) + in case a of + Left ex -> \m -> Op $ MkOpIndexing (OpIndexing m ex) + Right (i,j) -> \m -> Op $ MkOpSlicing (OpSlicing m i j) validateLiteral :: LiteralNode -> Validator Expression validateLiteral ln = case ln of - IntLiteral lt -> Constant <$> validateIntLiteral lt - BoolLiteral lt -> Constant <$> validateBoolLiteral lt - MatrixLiteral mln -> todo - TupleLiteralNode lt -> todo - TupleLiteralNodeShort st -> todo - RecordLiteral lt ln' -> todo - VariantLiteral lt ln' -> todo - SetLiteral ln' -> todo - MSetLiteral lt ln' -> todo - FunctionLiteral lt ln' -> todo - SequenceLiteral lt ln' -> todo - RelationLiteral lt ln' -> todo - PartitionLiteral lt ln' -> todo + IntLiteral lt -> Constant <$> validateIntLiteral lt + BoolLiteral lt -> Constant <$> validateBoolLiteral lt + MatrixLiteral mln -> validateMatrixLiteral mln + TupleLiteralNode lt -> todo "Tuple literal" + TupleLiteralNodeShort st -> todo "Short tuple literal" + RecordLiteral lt ln' -> todo "Record literal" + VariantLiteral lt ln' -> todo "Variant literal" + SetLiteral ln' -> todo "Set literal" + MSetLiteral lt ln' -> todo "MSet Literal" + FunctionLiteral lt ln' -> todo "Function Literal" + SequenceLiteral lt ln' -> todo "Sequence Literal" + RelationLiteral lt ln' -> todo "Relation literal" + PartitionLiteral lt ln' -> todo "Partition literal" + +validateMatrixLiteral :: MatrixLiteralNode -> Validator Expression +validateMatrixLiteral (MatrixLiteralNode l1 se m_dom m_comp l2) = do + checkSymbols [l1,l2] + todo "matrix literal" + + checkSymbols :: [LToken] -> Validator () checkSymbols = mapM_ (validate . validateSymbol) - validateShortTuple :: ShortTuple -> Validator [Expression] validateShortTuple (ShortTuple exs) = validateList validateExpression exs - validateLongTuple :: LongTuple -> Validator [Expression] validateLongTuple (LongTuple lt exs) = checkSymbols [lt] >> validateList validateExpression exs - validateIntLiteral :: LToken -> Validator Constant validateIntLiteral t = do l <- validateSymbol t @@ -366,7 +522,6 @@ validateBoolLiteral t = do L_false -> return $ ConstantBool False _ -> invalid $ IllegalToken t - validateNameList :: Sequence NameNode -> Validator [Name] validateNameList = validateSequence validateName @@ -374,36 +529,39 @@ validateIdentifier :: NameNode -> Validator Text validateIdentifier (NameNode iden) = do q <- validate $ validateSymbol iden verify $ case q of - Valid (LIdentifier x) ->Valid x - _ -> Invalid + Just (LIdentifier x) -> Just x + _ -> Nothing validateName :: NameNode -> Validator Name validateName name = Name <$> validateIdentifier name -validateList :: (a -> Validator b) -> ListNode a -> Validator [b] -validateList validator (ListNode st seq end) = do +validateArray :: (a -> Validator b) -> [a] -> Validator [b] +validateArray f l = catMaybes <$> mapM (validate . f) l + +validateList :: (a -> Validator b) -> ListNode a -> Validator [b] +validateList validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end validateSequence validator seq -validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] -validateSequence f (Seq vals) = mapM (validateSequenceElem f) vals +validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] +validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator b -validateSequenceElem f (SeqElem i (Just x)) = validate (validateSymbol x) >> f i -validateSequenceElem f (SeqElem i Nothing) = f i - +validateSequenceElem f (SeqElem (Just x) i) = validate (validateSymbol x) >> f i +validateSequenceElem f (SeqElem Nothing i) = f i val :: String -> IO () val s = do let str = s let other = [ETok (0, 0, 0, sourcePos0) [] L_EOF ""] - let txt = pack str - let lexed = parseMaybe eLex txt + let txt = pack str + let lexed = parseMaybe eLex txt let stream = ETokenStream txt $ fromMaybe other lexed -- parseTest parseProgram stream - let progStruct = parseMaybe parseProgram stream + let progStruct = runParser parseProgram "TEST" stream case progStruct of - Nothing -> putStrLn "error" - Just p@(ProgramTree{}) -> print (validateProgramTree p) - -- putStrLn validateFind \ No newline at end of file + Left a -> putStrLn "error" + Right p@(ProgramTree{}) -> print (validateProgramTree p) + +-- putStrLn validateFind \ No newline at end of file From f0e8cd5293862bb55b016d1590b2e01715c20cbc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 11 Oct 2022 17:35:34 +0100 Subject: [PATCH 062/378] Further work integrating parser --- src/Conjure/Language/AST/ASTParser.hs | 12 ++- src/Conjure/Language/AST/Expression.hs | 15 +-- src/Conjure/Language/AST/Helpers.hs | 21 +++- src/Conjure/Language/AST/Reformer.hs | 4 +- src/Conjure/Language/AST/Syntax.hs | 8 +- src/Conjure/Language/Expression/Op.hs | 2 +- src/Conjure/Language/NameResolution.hs | 8 +- src/Conjure/Language/NewLexer.hs | 44 +++++---- src/Conjure/Language/Parser.hs | 116 +++++++++++++--------- src/Conjure/Language/ParserC.hs | 39 ++------ src/Conjure/Language/TH.hs | 44 ++++----- src/Conjure/Language/Validator.hs | 127 ++++++++++++++++++++++--- src/Conjure/UI/IO.hs | 5 +- src/Conjure/UI/Model.hs | 9 +- 14 files changed, 301 insertions(+), 153 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 5c61a9b959..a744322b53 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -7,7 +7,7 @@ import Conjure.Prelude hiding (many) import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax -import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Language.NewLexer import Conjure.Language.AST.Expression import Conjure.Language.Lexemes @@ -17,12 +17,22 @@ import Data.Text (pack) import Data.Void (Void) import Conjure.Language.AST.Reformer (Flattenable(..)) +data ParserError = ParserError + deriving (Show) +runASTParser :: Parser a -> ETokenStream -> Either ParserError a +runASTParser p str = case runParser p "Parser" str of + Left peb -> Left ParserError + Right res -> Right res + parseProgram :: Parser ProgramTree parseProgram = do (tl,ending) <- manyTill_ parseTopLevel pEnding return $ ProgramTree tl ending "Program" +parseTopLevels :: Parser [StatementNode] +parseTopLevels = manyTill parseTopLevel pEnding + parseTopLevel :: Parser StatementNode parseTopLevel = do diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index a27c829401..dcf2abc07c 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -34,6 +34,7 @@ parseAtomicExpression = do [ Literal <$> parseLiteral , parseFunction , IdentifierNode <$> parseIdentifierStrict + , MetaVarExpr <$> parseMetaVar , ParenExpression <$> parseParenExpression parensPair , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) , QuantificationExpr <$> parseQuantificationStatement @@ -215,7 +216,7 @@ parseAbstractPattern = do parseAbstractId :: Parser AbstractPatternNode parseAbstractId = AbstractIdentifier <$> parseIdentifierStrict parseAbstractMetaVar :: Parser AbstractPatternNode - parseAbstractMetaVar = AbstractIdentifier <$> parseIdentifierStrict + parseAbstractMetaVar = AbstractMetaVar <$> parseMetaVar parseAbstractPatternTuple :: Parser AbstractPatternNode parseAbstractPatternTuple = do lTuple <- optional $ need L_tuple @@ -242,22 +243,21 @@ parseComprehensionCondition = do where letting = do lLetting <- need L_letting - v <- parseIdentifier + v <- parseAbstractPattern lBe <- want L_be expr <- parseExpression return $ CompBodyLettingNode lLetting v lBe expr - generator = + generator = try $ do + pats <- commaList parseAbstractPattern choice [ try $ do - ident <- parseIdentifierStrict lColon <- need L_Colon domain <- parseDomain - return $ CompBodyDomain (NameDomainNode ident lColon domain) + return $ CompBodyDomain pats lColon domain , try $ do - pat <- parseAbstractPattern lArrow <- need L_LeftArrow expr <- parseExpression - return $ CompBodyGenExpr pat lArrow expr + return $ CompBodyGenExpr pats lArrow expr ] condition = CompBodyCondition <$> parseExpressionStrict @@ -337,6 +337,7 @@ parseDomain = choice [ BoolDomainNode <$> need L_bool , parseIntDomain + , MetaVarDomain <$> parseMetaVar , parseTuple , parseRecord , parseVariant diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index f210224eaa..d4cc6a7425 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -2,7 +2,7 @@ module Conjure.Language.AST.Helpers where import Conjure.Language.AST.Syntax import Conjure.Language.Lexemes -import Conjure.Language.NewLexer hiding (Parser) +import Conjure.Language.NewLexer import Conjure.Prelude hiding (many) import qualified Data.Set as Set import Data.Void @@ -24,9 +24,19 @@ identifier = token test Set.empty "Identifier" ETok {lexeme=(LIdentifier _) } -> Just x ETok{} -> Nothing -lIdent :: Lexeme -lIdent = LIdentifier "" +metaVar :: Parser ETok +metaVar = token test Set.empty "Metavar" + where + test x = case x of + ETok {lexeme=(LMetaVar _) } -> Just x + ETok{} -> Nothing + +anIdent :: Lexeme +anIdent = LIdentifier "" + +aMetaVar :: Lexeme +aMetaVar = LMetaVar "" intLiteral :: Parser ETok intLiteral = token test Set.empty "Int Literal" where @@ -62,9 +72,12 @@ need a = RealToken <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" parseIdentifier :: Parser NameNode parseIdentifier = do - x <- want lIdent + x <- want anIdent return $ NameNode x +parseMetaVar :: Parser LToken +parseMetaVar = RealToken <$> metaVar + parseIdentifierStrict :: Parser NameNode parseIdentifierStrict = do NameNode . RealToken <$> identifier diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index c960bc875e..fbb2ffd202 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -76,6 +76,7 @@ instance Flattenable ETok ExpressionNode where flatten x = case x of Literal ln -> flatten ln IdentifierNode nn -> flatten nn + MetaVarExpr tk -> flatten tk QuantificationExpr qen -> flatten qen OperatorExpressionNode oen -> flatten oen ParenExpression pen ->flatten pen @@ -171,7 +172,7 @@ instance Flattenable ETok ComprehensionExpressionNode where instance Flattenable ETok ComprehensionBodyNode where flatten x = case x of CompBodyCondition en -> flatten en - CompBodyDomain ndn -> flatten ndn + CompBodyDomain a b c -> flatten a ++ flatten b ++ flatten c CompBodyGenExpr a b c -> flatten a ++ flatten b ++ flatten c CompBodyLettingNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] @@ -191,6 +192,7 @@ instance Flattenable ETok DomainNode where flatten x = case x of BoolDomainNode lt -> flatten lt RangedIntDomainNode lt ln -> flatten lt ++ flatten ln + MetaVarDomain a -> flatten a RangedEnumNode nn ln -> flatten nn ++ flatten ln EnumDomainNode nn -> flatten nn ShortTupleDomainNode ln -> flatten ln diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 87c3692ec2..0c5e51014d 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -129,6 +129,7 @@ data DomainNode | RangedIntDomainNode LToken (Maybe (ListNode RangeNode)) | RangedEnumNode NameNode (ListNode RangeNode) | EnumDomainNode NameNode + | MetaVarDomain LToken | ShortTupleDomainNode (ListNode DomainNode) | TupleDomainNode LToken (ListNode DomainNode) | RecordDomainNode LToken (ListNode NamedDomainNode) @@ -169,6 +170,7 @@ newtype NameNode = NameNode LToken data ExpressionNode = Literal LiteralNode | IdentifierNode NameNode + | MetaVarExpr LToken | QuantificationExpr QuantificationExpressionNode | OperatorExpressionNode OperatorExpressionNode | DomainExpression DomainExpressionNode @@ -276,9 +278,9 @@ data ComprehensionExpressionNode data ComprehensionBodyNode = CompBodyCondition ExpressionNode - | CompBodyDomain NamedDomainNode - | CompBodyGenExpr AbstractPatternNode LToken ExpressionNode - | CompBodyLettingNode LToken NameNode LToken ExpressionNode + | CompBodyDomain (Sequence AbstractPatternNode) LToken DomainNode + | CompBodyGenExpr (Sequence AbstractPatternNode) LToken ExpressionNode + | CompBodyLettingNode LToken AbstractPatternNode LToken ExpressionNode deriving (Show) data OperatorExpressionNode diff --git a/src/Conjure/Language/Expression/Op.hs b/src/Conjure/Language/Expression/Op.hs index 0580076045..fc5668968d 100644 --- a/src/Conjure/Language/Expression/Op.hs +++ b/src/Conjure/Language/Expression/Op.hs @@ -19,7 +19,7 @@ import Conjure.Language.Expression.Op.Internal.Generated mkBinOp :: (Op x :< x, ExpressionLike x) => Text -> x -> x -> x mkBinOp op a b = - trace ("BINOP["++ show op ++ "]") $ case textToLexeme op of + case textToLexeme op of Nothing -> bug ("Unknown binary operator:" <+> pretty op) Just l -> let diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index adde5d9fc2..115bdb8cad 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -13,6 +13,10 @@ import Conjure.Bug import Conjure.UserError import Conjure.Language.Definition import Conjure.Language.Domain + ( changeRepr, + typeOfDomain, + Domain(DomainUnnamed, DomainReference, DomainRecord, + DomainVariant) ) import Conjure.Language.Constant import Conjure.Language.Type import Conjure.Language.Pretty @@ -310,12 +314,12 @@ resolveAbsPat _ (Single nm) x = addName nm $ Alias x resolveAbsPat context (AbsPatTuple ps) x = sequence_ [ resolveAbsPat context p [essence| &x[&i] |] | (p, i_) <- zip ps allNats - , let i :: Constant = fromInt i_ + , let i = fromInt i_ ] resolveAbsPat context (AbsPatMatrix ps) x = sequence_ [ resolveAbsPat context p [essence| &x[&i] |] | (p, i_) <- zip ps allNats - , let i :: Constant = fromInt i_ + , let i = fromInt i_ ] resolveAbsPat context (AbsPatSet ps) x = do ys <- case x of diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index 6aa035c76d..e3a2292af3 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -54,8 +54,9 @@ isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis type Offsets = (Int, Int, Int, SourcePos) -type Parser = Parsec Void T.Text +type Lexer = Parsec Void T.Text +-- type Lexer = Parsec Void T.Text ETokenStream data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text deriving (Show, Eq, Ord) @@ -80,14 +81,23 @@ tokenSourcePos ETok{offsets=(_,_,_,s)} = s makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok -eLex :: Parser [ETok] +data LexerError = LexerError + deriving (Show) + +runLexer :: Text -> Either LexerError ETokenStream +runLexer txt = case runParser eLex "Lexer" txt of + Left peb -> Left LexerError + Right ets -> Right $ ETokenStream txt ets + + +eLex :: Lexer [ETok] eLex = do main <- many $ try aToken end <- pEOF return $ main ++ [end] -aToken :: Parser ETok +aToken :: Lexer ETok aToken = do start <- getOffset whiteSpace <- pTrivia @@ -97,7 +107,7 @@ aToken = do tokenEnd <- getOffset return $ makeToken (start, wse, tokenEnd - start, spos) whiteSpace tok cap -pEOF :: Parser ETok +pEOF :: Lexer ETok pEOF = do start <- getOffset whiteSpace <- pTrivia @@ -108,10 +118,10 @@ pEOF = do return $ makeToken (start, wse, tokenEnd - start, spos) whiteSpace L_EOF "" -aLexeme :: Parser (Lexeme,Text) +aLexeme :: Lexer (Lexeme,Text) aLexeme = aLexemeStrict <|> pFallback -aLexemeStrict :: Parser (Lexeme,Text) +aLexemeStrict :: Lexer (Lexeme,Text) aLexemeStrict = try pNumber @@ -120,34 +130,34 @@ aLexemeStrict = <|> try pMetaVar -pNumber :: Parser (Lexeme,Text) +pNumber :: Lexer (Lexeme,Text) pNumber = do v <- L.decimal return (LIntLiteral v,T.pack $ show v) "Numeric Literal" -pMetaVar :: Parser (Lexeme,Text) +pMetaVar :: Lexer (Lexeme,Text) pMetaVar = do amp <- chunk "&" (_,cap) <- pIdentifier return (LMetaVar cap,amp `T.append` cap) -pIdentifier :: Parser (Lexeme,Text) +pIdentifier :: Lexer (Lexeme,Text) pIdentifier = do firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter rest <- takeWhileP Nothing isIdentifierLetter let ident = T.append firstLetter rest return ( LIdentifier ident, ident) "Identifier" -pFallback :: Parser (Lexeme,Text) +pFallback :: Lexer (Lexeme,Text) pFallback = do q <- T.pack <$> someTill anySingle (lookAhead $ try somethingValid) return (LUnexpected q,q) where - somethingValid :: Parser () + somethingValid :: Lexer () somethingValid = void pTrivia <|> void aLexemeStrict <|> eof -pLexeme :: (T.Text, Lexeme) -> Parser (Lexeme,Text) +pLexeme :: (T.Text, Lexeme) -> Lexer (Lexeme,Text) pLexeme (s, l) = do tok <- string s notFollowedBy $ if isIdentifierLetter $ T.last tok then nonIden else empty @@ -156,24 +166,24 @@ pLexeme (s, l) = do where nonIden = takeWhile1P Nothing isIdentifierLetter -pTrivia :: Parser [Trivia] +pTrivia :: Lexer [Trivia] pTrivia = many (whiteSpace <|> lineComment <|> blockComment) -whiteSpace :: Parser Trivia +whiteSpace :: Lexer Trivia whiteSpace = do s <- some spaceChar return $ WhiteSpace $ T.pack s -lineEnd :: Parser [Char] +lineEnd :: Lexer [Char] lineEnd = T.unpack <$> eol <|> ( eof >> return []) -lineComment :: Parser Trivia +lineComment :: Lexer Trivia lineComment = do _ <- try (chunk "$") (text,end) <- manyTill_ L.charLiteral lineEnd return $ LineComment $ T.pack ('$' : text++end) -blockComment :: Parser Trivia +blockComment :: Lexer Trivia blockComment = do _ <- try (chunk "/*") text <- manyTill L.charLiteral (chunk "*/") diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 71ad3c15fe..dddc1f2623 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -8,40 +8,66 @@ module Conjure.Language.Parser , parseExpr , parseDomain , parseDomainWithRepr - , Parser, ParserState(..) + , Pipeline ) where -- conjure import Conjure.Prelude -import Conjure.Bug +-- import Conjure.Bug import Conjure.Language.Definition import Conjure.Language.Domain -import Conjure.Language.Domain.AddAttributes -import Conjure.Language.Type -import Conjure.Language.TypeOf -import Conjure.Language.Expression.Op -import Conjure.Language.Pretty +-- import Conjure.Language.Domain.AddAttributes +-- import Conjure.Language.Type +-- import Conjure.Language.TypeOf +-- import Conjure.Language.Expression.Op +-- import Conjure.Language.Pretty import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace, lexemeText, runLexer ) - +import qualified Conjure.Language.NewLexer as L +-- megaparsec +-- megaparsec -- megaparsec -import Text.Megaparsec ( (), label, token, try, eof, ParsecT) -import Text.Megaparsec.Error ( ParseError(..),ErrorItem, errorOffset ) -import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn , Pos) -import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) -import Text.Megaparsec.Stream -import Control.Monad.Combinators.Expr ( makeExprParser, Operator(..) ) -import qualified Text.Megaparsec as P ( runParser ) +-- megaparsec +import Text.Megaparsec ( (), label, token, try, eof, ParsecT,Parsec, runParser, errorBundlePretty) +-- import Text.Megaparsec.Error ( ParseError(..),ErrorItem, errorOffset ) +-- import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn , Pos) +-- import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) +-- import Text.Megaparsec.Stream +-- import Control.Monad.Combinators.Expr ( makeExprParser, Operator(..) ) +-- import qualified Text.Megaparsec as P ( runParser ) -- text import qualified Data.Text as T - +import Conjure.Language.NewLexer (ETokenStream, LexerError) +import Conjure.Language.Validator (Validator(..)) +import qualified Conjure.Language.Validator as V +import qualified Conjure.Language.AST.ASTParser as P +import qualified Conjure.Language.AST.Syntax as S +import qualified Conjure.Language.AST.Expression as E +import Conjure.Language.AST.ASTParser (ParserError, runASTParser, parseProgram) -- containers -import qualified Data.Set as S ( null, fromList, toList ) +-- import qualified Data.Set as S ( null, fromList, toList ) import Data.Void (Void) +import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) +import Conjure.Language.AST.Expression (parseExpression) + + +type Pipeline a b = (Parsec Void ETokenStream a,a -> Validator b) + + +data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError [V.ValidatorError] + deriving (Show) + +runPipeline :: Pipeline a b -> Text -> Either PipelineError b +runPipeline (parse,val) txt = do + lexResult <- either (Left . LexErr) Right $ L.runLexer txt + parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult + case val parseResult of + Validator (Just res) [] -> Right res + Validator _ xs -> Left $ ValidatorError xs dummyModel :: Model -dummyModel = Model (LanguageVersion "Essence" [1]) [] dummyModelInfo +dummyModel = Model (LanguageVersion "Essence" [1]) [] def dummyModelInfo :: ModelInfo dummyModelInfo = ModelInfo @@ -63,10 +89,8 @@ dummyModelInfo = ModelInfo [] --Int 0 -parseModel :: Parser Model -parseModel = do - let x = dummyModel - return x +parseModel :: Pipeline ProgramTree Model +parseModel = (parseProgram,V.validateModel) -- inCompleteFile $ do -- let -- pLanguage :: Parser LanguageVersion @@ -94,11 +118,11 @@ parseModel = do -- } -parseIO :: MonadFailDoc m => Parser a -> String -> m a -parseIO p s = - case runLexerAndParser (inCompleteFile p) "" (T.pack s) of - Left err -> failDoc err - Right x -> return x +parseIO :: MonadFailDoc m => Pipeline i a -> String -> m a +parseIO p s = do + case runPipeline p $ T.pack s of + Left err -> failDoc $ show errorBundlePretty err + Right x -> return x -- translateQnName :: Text -> Text @@ -115,8 +139,8 @@ parseIO p s = -- -- Actual parsers -------------------------------------------------------------- -- -------------------------------------------------------------------------------- -parseTopLevels :: Parser [Statement] -parseTopLevels = do return [] -- +parseTopLevels :: Pipeline ProgramTree [Statement] +parseTopLevels = (P.parseProgram,V.validateProgramTree) -- let one = satisfyL $ \case -- L_find -> Just $ do -- decls <- flip sepEndBy1 comma $ do @@ -228,14 +252,12 @@ parseTopLevels = do return [] -- -- x <- p -- return (RangeSingle x) -parseDomain :: Parser (Domain () Expression) -parseDomain = do --(forgetRepr <$> parseDomainWithRepr) "domain" - let x = DomainBool - return x +parseDomain :: Pipeline DomainNode (Domain () Expression) +parseDomain = (E.parseDomain,V.validateDomain) -parseDomainWithRepr :: Parser (Domain HasRepresentation Expression) -parseDomainWithRepr = do return DomainBool +parseDomainWithRepr :: Pipeline DomainNode (Domain HasRepresentation Expression) +parseDomainWithRepr = (E.parseDomain,V.validateDomainWithRepr) -- -- TODO: uncomment the following to parse (union, intersect and minus) for domains -- -- let -- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] @@ -626,8 +648,8 @@ parseDomainWithRepr = do return DomainBool -- metaVarInE :: String -> Expression -- metaVarInE = ExpressionMetaVar -parseExpr :: Parser Expression -parseExpr = do return $ Constant $ ConstantBool True +parseExpr :: Pipeline S.ExpressionNode Expression +parseExpr = (E.parseExpression,V.validateExpression) -- let -- mergeOp op = mkBinOp (lexemeText op) @@ -993,11 +1015,13 @@ parseExpr = do return $ Constant $ ConstantBool True -data ParserState = ParserState { enumDomains :: [Name] } -type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a +-- data ParserState = ParserState { enumDomains :: [Name] } +-- type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a -runLexerAndParser :: MonadFailDoc m => Parser a -> String -> T.Text -> m a -runLexerAndParser p file inp = do failDoc "Nothing" +runLexerAndParser :: MonadFailDoc m => Pipeline n a -> String -> T.Text -> m a +runLexerAndParser p file inp = case runPipeline p inp of + Left pe -> failDoc $ errorBundlePretty pe + Right a -> return a -- ls <- runLexer inp -- case runParser p file ls of -- Left (msg, line, col) -> @@ -1115,8 +1139,8 @@ runLexerAndParser p file inp = do failDoc "Nothing" -- j <- p -- return (i,j) -inCompleteFile :: Parser a -> Parser a -inCompleteFile parser = do - result <- parser - eof - return result +-- inCompleteFile :: Parser a -> Parser a +-- inCompleteFile parser = do +-- result <- parser +-- eof +-- return result diff --git a/src/Conjure/Language/ParserC.hs b/src/Conjure/Language/ParserC.hs index 2bedb9de51..2fb00bcd37 100644 --- a/src/Conjure/Language/ParserC.hs +++ b/src/Conjure/Language/ParserC.hs @@ -1,6 +1,6 @@ {-# LANGUAGE RecordWildCards #-} -module Conjure.Language.ParserC ( parseModel ) where +module Conjure.Language.ParserC ( module X ) where -- conjure import Conjure.Prelude @@ -10,7 +10,7 @@ import Conjure.Language.Type import Conjure.Language.TypeOf import Conjure.Language.Pretty import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace ) -import Conjure.Language.Parser ( Parser, ParserState(..) ) +import Conjure.Language.Parser as X -- megaparsec import Text.Megaparsec ( (), label, token, try, eof ) @@ -25,33 +25,14 @@ import qualified Data.Text as T -- containers import qualified Data.Set as S ( null, fromList, toList ) -dummyModel :: Model -dummyModel = Model (LanguageVersion "Essence" [1]) [] dummyModelInfo - -dummyModelInfo :: ModelInfo -dummyModelInfo = ModelInfo - []--([Name]) - []--([(Name, Expression)]) - []--([Name]) - []--([Declaration]) - []--([(Name, Expression)]) - []--([(Name, Domain () Expression)]) - []--([(Name, Domain HasRepresentation Expression)]) - []--([(Name, [Tree (Maybe HasRepresentation)])]) - []--Strategy - (PickFirst) - (PickFirst)--([(Int, Int, Int)]) - []--([(Int, Int)]) - []--([Decision]) - []--([TrailRewrites]) - []--([(Text, Int)]) - [] --Int - 0 - -parseModel :: Parser Model -parseModel = do - let m = dummyModel - return m + + + + +-- parseModel :: Parser Model +-- parseModel = do +-- let m = dummyModel +-- return m -- inCompleteFile $ do -- let -- pLanguage :: Parser LanguageVersion diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index b06b3e5d0b..b6361cb6ee 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -11,11 +11,11 @@ import Conjure.Language.Parser import Conjure.Language.Lenses as X ( fixTHParsing ) -- reexporting because it is needed by the QQ --- megaparsec -import Text.Megaparsec ( setOffset , SourcePos) -import qualified Text.Megaparsec as MP +-- -- megaparsec +-- import Text.Megaparsec ( setOffset , SourcePos) +-- import qualified Text.Megaparsec as MP --- template-haskell +-- -- template-haskell import Language.Haskell.TH ( Q, Loc(..), location, mkName, ExpQ, varE, appE, PatQ, varP, wildP ) import Language.Haskell.TH.Quote ( QuasiQuoter(..), dataToExpQ, dataToPatQ ) @@ -26,13 +26,13 @@ import Data.Generics.Aliases ( extQ ) essenceStmts :: QuasiQuoter essenceStmts = QuasiQuoter { quoteExp = \ str -> do - l <- locationTH - e :: [Statement] <- do return [] --parseIO (setOffset 1000000000000000 *> parseTopLevels) str + -- l <- locationTH + e :: [Statement] <- parseIO parseTopLevels str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do - l <- locationTH - e :: [Statement] <- do return [] --parseIO (setOffset 1000000000000000 *> parseTopLevels) str + -- l <- locationTH + e :: [Statement] <- parseIO parseTopLevels str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" @@ -41,13 +41,13 @@ essenceStmts = QuasiQuoter essence :: QuasiQuoter essence = QuasiQuoter { quoteExp = \ str -> do - l <- locationTH - e <- do return $ Constant $ ConstantBool True --parseIO (setOffset 100000000000 *> parseExpr) str + -- l <- locationTH + e <- do parseIO parseExpr str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do - l <- locationTH - e <- do return $ Constant $ ConstantBool True--parseIO (setOffset 100000000000000 *> parseExpr) str + -- l <- locationTH + e <- do parseIO parseExpr str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" @@ -56,24 +56,24 @@ essence = QuasiQuoter essenceDomain :: QuasiQuoter essenceDomain = QuasiQuoter { quoteExp = \ str -> do - l <- locationTH - e :: Domain () () <- do return $ DomainBool--parseIO (setOffset 100000000000 *> parseDomain) str + -- l <- locationTH + e <- parseIO parseDomain str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do - l <- locationTH - e :: Domain () () <- do return $ DomainBool--parseIO (setOffset 1 *> parseDomain) str + -- l <- locationTH + e <- do parseIO parseDomain str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } -locationTH :: Q SourcePos -locationTH = do - loc <- location - let file = loc_filename loc - let (line, col) = loc_start loc - return (MP.SourcePos file (MP.mkPos line) (MP.mkPos col)) +-- locationTH :: Q SourcePos +-- locationTH = do +-- loc <- location +-- let file = loc_filename loc +-- let (line, col) = loc_start loc +-- return (MP.SourcePos file (MP.mkPos line) (MP.mkPos col)) expE :: Expression -> Maybe ExpQ expE (ExpressionMetaVar x) = Just [| $(varE (mkName x)) |] diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 7de8d9e55d..2d60be8b5c 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -12,15 +12,27 @@ import Conjure.Prelude import Control.Applicative import Conjure.Language.Type +import Conjure.Language.Definition import Data.Text (pack, unpack) import Text.Megaparsec (parseMaybe, runParser) -import Conjure.Language (mkOp, mkBinOp, Op (MkOpRelationProj, MkOpSlicing, MkOpIndexing), OpRelationProj (OpRelationProj), OpIndexing (OpIndexing), opPowerSet) -import Conjure.Language.Expression.Op (OpSlicing(..)) -import Conjure.Language (Op(..)) -import Conjure.Language (OpPowerSet(..), OpImage (OpImage)) -validateModel :: ProgramTree -> Either Doc Model -validateModel model = Left "TODO" +import Conjure.Language.Expression.Op + ( OpSlicing(..), + Op(..), + OpPowerSet(..), + OpImage(OpImage), + mkOp, + mkBinOp, + Op(MkOpRelationProj, MkOpSlicing, MkOpIndexing), + OpRelationProj(OpRelationProj), + OpIndexing(OpIndexing), + ) + +validateModel :: ProgramTree -> Validator Model +validateModel model = do + sts <- validateProgramTree model + return $ Model (LanguageVersion "Essence" [1] ) sts def + validateProgramTree :: ProgramTree -> Validator [Statement] validateProgramTree (ProgramTree sts _) = do @@ -105,6 +117,7 @@ validateLettingAssignment (LettingAnon l1 l2 l3 l4 szExp) = do data ValidatorError = TypeError String + | StateError String | TokenError LToken | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere | NotImplemented String @@ -213,8 +226,12 @@ validateFind (FindStatementNode find names colon domain) = do type DomainValidator = Validator (Domain () Expression) +validateDomainWithRepr :: DomainNode -> Validator (Domain HasRepresentation Expression) +validateDomainWithRepr dom = changeRepr NoRepresentation <$> validateDomain dom + validateDomain :: DomainNode -> DomainValidator validateDomain dm = case dm of + MetaVarDomain lt -> DomainMetaVar <$> validateMetaVar lt BoolDomainNode lt -> validateSymbol lt >> return DomainBool RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges @@ -353,6 +370,7 @@ validateExpression :: ExpressionNode -> Validator Expression validateExpression expr = case expr of Literal ln -> validateLiteral ln IdentifierNode nn -> validateIdentifierExpr nn + MetaVarExpr tok -> ExpressionMetaVar <$> validateMetaVar tok QuantificationExpr qen -> validateQuantificationExpression qen OperatorExpressionNode oen -> validateOperatorExpression oen DomainExpression dex -> validateDomainExpression dex @@ -407,13 +425,20 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ validateAbstractPattern :: AbstractPatternNode -> Validator AbstractPattern validateAbstractPattern (AbstractIdentifier nn) = Single <$> validateName nn -validateAbstractPattern (AbstractMetaVar lt) = AbstractPatternMetaVar <$> todo "absMetaVar" +validateAbstractPattern (AbstractMetaVar lt) = AbstractPatternMetaVar <$> validateMetaVar lt validateAbstractPattern (AbstractPatternMatrix ln) = AbsPatMatrix <$> validateList validateAbstractPattern ln validateAbstractPattern (AbstractPatternSet ln) = AbsPatSet <$> validateList validateAbstractPattern ln validateAbstractPattern (AbstractPatternTuple m_lt ln) = do maybe (pure ()) (\n ->checkSymbols [n]) m_lt AbsPatTuple <$> validateList validateAbstractPattern ln +validateMetaVar :: LToken -> Validator String +validateMetaVar tok = do + lx <- validateSymbol tok + case lx of + LMetaVar s -> return $ unpack s + _ -> invalid $ IllegalToken tok + validateDomainExpression :: DomainExpressionNode -> Validator Expression validateDomainExpression (DomainExpressionNode l1 dom l2) = do checkSymbols [l1,l2] @@ -423,8 +448,8 @@ validateFunctionApplication :: LToken -> ListNode ExpressionNode -> Validator Ex validateFunctionApplication name args = do name' <- validate $ validateSymbol name args' <- validate $ validateList validateExpression args - verify $ do - n <- name' + verify $ do + n <- name' a <- args' return $ case (n,a) of (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z @@ -434,11 +459,14 @@ validateIdentifierExpr :: NameNode -> Validator Expression validateIdentifierExpr name = Reference <$> ( Name <$> validateIdentifier name) <*> pure Nothing validateOperatorExpression :: OperatorExpressionNode -> Validator Expression - validateOperatorExpression (PrefixOpNode lt expr) = do - checkSymbols [lt] + op <- validate $ validateSymbol lt + expr <- validate $ validateExpression expr + verify $ do + op' <- op + expr' <- expr + return $ mkOp (mapPrefixToOp op') [expr'] --lookup symbol - todo "operator expression prefix" validateOperatorExpression (BinaryOpNode lexp op rexp) = do lExpr <- validate $ validateExpression lexp rExpr <- validate $ validateExpression rexp @@ -492,9 +520,74 @@ validateLiteral ln = case ln of PartitionLiteral lt ln' -> todo "Partition literal" validateMatrixLiteral :: MatrixLiteralNode -> Validator Expression -validateMatrixLiteral (MatrixLiteralNode l1 se m_dom m_comp l2) = do +validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do + checkSymbols [l1,l2] + elems <- validate $ validateSequence validateExpression se + dom <- validate $ validateOverDomain m_dom + let lit = do + xs <- elems + case dom of + Just (Just d) ->return $ AbsLitMatrix d xs + _ -> return $ AbsLitMatrix (mkDomainIntB 1 (fromInt $ genericLength xs)) xs + verify $ mkAbstractLiteral <$> lit + where + validateOverDomain :: Maybe OverDomainNode -> Validator (Maybe (Domain () Expression)) + validateOverDomain Nothing = pure Nothing + validateOverDomain (Just (OverDomainNode l3 dom)) = checkSymbols [l3] >> Just<$> validateDomain dom + + + +validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do checkSymbols [l1,l2] - todo "matrix literal" + elems <- validate $ validateSequence validateExpression se + gens <- validate $ validateComprehension comp + enforceConstraint ((\x -> length x == 1 )<$> elems) "List comprehension must contain exactly one expression before |" + verify $ do + ms <- elems + gs <- gens + case ms of + [x] -> return $ Comprehension x gs + _ -> Nothing + + + +validateComprehension :: ComprehensionNode -> Validator [GeneratorOrCondition] +validateComprehension (ComprehensionNode l1 body) = checkSymbols [l1] >> concat <$> validateSequence validateComprehensionBody body + +validateComprehensionBody :: ComprehensionBodyNode -> Validator [GeneratorOrCondition] +validateComprehensionBody (CompBodyCondition en) = (:[]) . Condition <$> validateExpression en +validateComprehensionBody (CompBodyDomain apn l1 dom) = do + checkSymbols [l1] + pats <- validate $ validateSequence validateAbstractPattern apn + domain <- validate $ validateDomain dom + verify $ do + ps <- pats + d <- domain + return [Generator (GenDomainNoRepr pat d) | pat <- ps] + +validateComprehensionBody (CompBodyGenExpr apn lt en) = do + checkSymbols [lt] + pats <- validate $ validateSequence validateAbstractPattern apn + exp <- validate $ validateExpression en + verify $ do + ps <- pats + e <- exp + return [Generator (GenInExpr pat e)| pat <- ps] +validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do + checkSymbols [l1,l2] + pat <- validate $ validateAbstractPattern nn + expr <- validate $ validateExpression en + verify $ (:[]) <$> (ComprehensionLetting <$> pat <*> expr) + +--placeholder for pre-evaluation +mkAbstractLiteral :: AbstractLiteral Expression -> Expression +mkAbstractLiteral = AbstractLiteral + +enforceConstraint :: Maybe Bool -> String -> Validator () +enforceConstraint p msg = do + case p of + Just True-> pure () + _ -> invalid $ StateError msg @@ -544,6 +637,12 @@ validateList validator (ListNode st seq end) = do _ <- validateSymbol end validateSequence validator seq + +mapPrefixToOp :: Lexeme -> Text +mapPrefixToOp x = case x of + L_Minus -> "negate" + L_ExclamationMark -> "not" + _ -> pack $ lexemeFace x validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 6833bb1a30..81498a69d9 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -17,7 +17,7 @@ import Conjure.UI import Conjure.Language import qualified Conjure.Language.Parser as Parser import qualified Conjure.Language.ParserC as ParserC -import Conjure.Language.Parser ( Parser ) +import Conjure.Language.Parser -- aeson import qualified Data.Aeson ( eitherDecodeStrict ) @@ -33,6 +33,7 @@ import qualified Data.Text.Encoding as T ( encodeUtf8 ) -- bytestring import qualified Data.ByteString as BS ( readFile, writeFile ) import qualified Data.ByteString.Char8 as BS ( putStrLn ) +import Conjure.Language.AST.Syntax (ProgramTree) readModelFromFile :: @@ -126,7 +127,7 @@ readModelInfoFromFile fp = do readModel :: MonadFailDoc m => MonadUserError m => - Parser Model -> + Parser.Pipeline ProgramTree Model -> Maybe (Text -> Text) -> (FilePath, Text) -> m Model diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index 67f758ac1a..9f3aae6341 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -119,6 +119,7 @@ import Pipes ( Pipe, Producer, await, yield, (>->), cat ) import qualified Pipes.Prelude as Pipes ( foldM ) import qualified Data.Aeson.Types as JSON -- aeson +import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- containers import qualified Data.Vector as V -- vector @@ -309,13 +310,13 @@ modelRepresentationsJSON :: modelRepresentationsJSON model = do reprs <- modelRepresentations model return $ JSON.Array $ V.fromList - [ JSON.Object $ M.fromList + [ JSON.Object $ KM.fromList [ "name" ~~ r name , "representations" ~~ representationsJSON ] | (name, domains) <- reprs , let representationsJSON = JSON.Array $ V.fromList - [ JSON.Object $ M.fromList + [ JSON.Object $ KM.fromList [ "description" ~~ r d , "answer" ~~ toJSON i ] @@ -323,8 +324,8 @@ modelRepresentationsJSON model = do ] ] where - (~~) :: Text -> JSONValue -> (Text, JSONValue) - x ~~ y = (x, y) + (~~) :: JSON.Key -> JSONValue -> (JSON.Key, JSONValue) + x ~~ y = ( x, y) r s = JSON.String $ stringToText $ render 100000 $ pretty s From 135c9d963a9453d732592e455b53cf2942d4a729 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 13 Oct 2022 16:17:43 +0100 Subject: [PATCH 063/378] Further integration --- src/Conjure/Language/AST/Expression.hs | 14 +- .../Language/Expression/Op/Internal/Common.hs | 5 +- src/Conjure/Language/Lexemes.hs | 5 +- src/Conjure/Language/Validator.hs | 4 +- src/Conjure/UI/TypeScript.hs | 477 +++++++++--------- 5 files changed, 260 insertions(+), 245 deletions(-) diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index dcf2abc07c..1bd239475d 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -39,7 +39,7 @@ parseAtomicExpression = do , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) , QuantificationExpr <$> parseQuantificationStatement , DomainExpression <$> parseDomainExpression - , MissingExpressionNode <$> makeMissing L_Missing + , MissingExpressionNode <$> makeMissing (L_Missing "Expression") ] @@ -86,6 +86,7 @@ parseLiteral = , parseBoolLiteral , parseMatrixBasedExpression , parseTupleLiteral + , parseShortTupleLiteral , parseRecordLiteral , parseSetLiteral , parseMSetLiteral @@ -95,6 +96,15 @@ parseLiteral = , parsePartitionLiteral ] +parseShortTupleLiteral :: Parser LiteralNode +parseShortTupleLiteral = try $ do + lOpen <- need L_OpenParen + exprs <- commaList parseExpression + let Seq xs = exprs + guard (length xs > 1) + lClose <- want L_CloseParen + return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) + parseIntLiteral :: Parser LiteralNode parseIntLiteral = IntLiteral . RealToken <$> intLiteral @@ -499,6 +509,6 @@ parseAttribute = do parseMissingDomain :: Parser DomainNode parseMissingDomain = do - m <- makeMissing L_Missing + m <- makeMissing (L_Missing "Domain") return $ MissingDomainNode m "Anything" \ No newline at end of file diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index 3778290af1..ac270cf290 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -285,7 +285,7 @@ functionals = , LIdentifier "and" , LIdentifier "or" - , LIdentifier "sum" + , L_Sum , LIdentifier "product" , LIdentifier "xor" @@ -301,7 +301,8 @@ functionals = quantifiers :: [Lexeme] quantifiers = [ L_ForAll, - L_Exists + L_Exists, + L_Sum ] raiseTypeError :: MonadFailDoc m => Pretty a => a -> m b diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index ec9929e0d4..c8d92ddd14 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -208,6 +208,7 @@ data Lexeme | L_ForAll | L_Exists + | L_Sum -- others | L_Dot @@ -258,7 +259,7 @@ data Lexeme | L_transform -- helper - | L_Missing + | L_Missing String | L_EOF deriving (Eq, Ord, Show,Generic) --Generic @@ -373,7 +374,7 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_ForAll , "forAll" ) , ( L_Exists , "exists" ) - + , ( L_Sum , "sum" ) , ( L_Plus , "+" ) , ( L_Minus , "-" ) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 2d60be8b5c..337a34af92 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -508,8 +508,8 @@ validateLiteral ln = case ln of IntLiteral lt -> Constant <$> validateIntLiteral lt BoolLiteral lt -> Constant <$> validateBoolLiteral lt MatrixLiteral mln -> validateMatrixLiteral mln - TupleLiteralNode lt -> todo "Tuple literal" - TupleLiteralNodeShort st -> todo "Short tuple literal" + TupleLiteralNode lt -> mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt + TupleLiteralNodeShort st -> mkAbstractLiteral . AbsLitTuple <$> validateShortTuple st RecordLiteral lt ln' -> todo "Record literal" VariantLiteral lt ln' -> todo "Variant literal" SetLiteral ln' -> todo "Set literal" diff --git a/src/Conjure/UI/TypeScript.hs b/src/Conjure/UI/TypeScript.hs index e73de8c7e9..d1ce2da905 100644 --- a/src/Conjure/UI/TypeScript.hs +++ b/src/Conjure/UI/TypeScript.hs @@ -5,6 +5,7 @@ module Conjure.UI.TypeScript ( tsDef ) where + import Conjure.Prelude hiding ( (<>) ) import Conjure.Language -- ( Model, Expression ) @@ -12,245 +13,247 @@ import Conjure.Language -- ( Model, Expression ) import Data.Aeson.Types ( defaultOptions ) -- aeson-typescript -import Data.Aeson.TypeScript.TH +import Data.Aeson.TypeScript.TH +tsDef :: IO () +tsDef = pure () -deriveTypeScript defaultOptions ''AbstractLiteral -deriveTypeScript defaultOptions ''AbstractPattern -deriveTypeScript defaultOptions ''AttrName -deriveTypeScript defaultOptions ''BinaryRelationAttr -deriveTypeScript defaultOptions ''BinaryRelationAttrs -deriveTypeScript defaultOptions ''Constant -deriveTypeScript defaultOptions ''Decision -deriveTypeScript defaultOptions ''Declaration -deriveTypeScript defaultOptions ''Domain -deriveTypeScript defaultOptions ''Expression -deriveTypeScript defaultOptions ''FindOrGiven -deriveTypeScript defaultOptions ''FunctionAttr -deriveTypeScript defaultOptions ''Generator -deriveTypeScript defaultOptions ''GeneratorOrCondition -deriveTypeScript defaultOptions ''HasRepresentation -deriveTypeScript defaultOptions ''InBubble -deriveTypeScript defaultOptions ''IntTag -deriveTypeScript defaultOptions ''JectivityAttr -deriveTypeScript defaultOptions ''LanguageVersion -deriveTypeScript defaultOptions ''Model -deriveTypeScript defaultOptions ''ModelInfo -deriveTypeScript defaultOptions ''MSetAttr -deriveTypeScript defaultOptions ''Name -deriveTypeScript defaultOptions ''Objective -deriveTypeScript defaultOptions ''OccurAttr -deriveTypeScript defaultOptions ''Op -deriveTypeScript defaultOptions ''OpActive -deriveTypeScript defaultOptions ''OpAllDiff -deriveTypeScript defaultOptions ''OpAllDiffExcept -deriveTypeScript defaultOptions ''OpAnd -deriveTypeScript defaultOptions ''OpApart -deriveTypeScript defaultOptions ''OpAtLeast -deriveTypeScript defaultOptions ''OpAtMost -deriveTypeScript defaultOptions ''OpAttributeAsConstraint -deriveTypeScript defaultOptions ''OpCatchUndef -deriveTypeScript defaultOptions ''OpDefined -deriveTypeScript defaultOptions ''OpDiv -deriveTypeScript defaultOptions ''OpDontCare -deriveTypeScript defaultOptions ''OpDotLeq -deriveTypeScript defaultOptions ''OpDotLt -deriveTypeScript defaultOptions ''OpEq -deriveTypeScript defaultOptions ''OpFactorial -deriveTypeScript defaultOptions ''OpFlatten -deriveTypeScript defaultOptions ''OpFreq -deriveTypeScript defaultOptions ''OpGCC -deriveTypeScript defaultOptions ''OpGeq -deriveTypeScript defaultOptions ''OpGt -deriveTypeScript defaultOptions ''OpHist -deriveTypeScript defaultOptions ''OpIff -deriveTypeScript defaultOptions ''OpImage -deriveTypeScript defaultOptions ''OpImageSet -deriveTypeScript defaultOptions ''OpImply -deriveTypeScript defaultOptions ''OpIn -deriveTypeScript defaultOptions ''OpIndexing -deriveTypeScript defaultOptions ''OpIntersect -deriveTypeScript defaultOptions ''OpInverse -deriveTypeScript defaultOptions ''OpLeq -deriveTypeScript defaultOptions ''OpLexLeq -deriveTypeScript defaultOptions ''OpLexLt -deriveTypeScript defaultOptions ''OpLt -deriveTypeScript defaultOptions ''OpMakeTable -deriveTypeScript defaultOptions ''OpMax -deriveTypeScript defaultOptions ''OpMin -deriveTypeScript defaultOptions ''OpMinus -deriveTypeScript defaultOptions ''OpMod -deriveTypeScript defaultOptions ''OpNegate -deriveTypeScript defaultOptions ''OpNeq -deriveTypeScript defaultOptions ''OpNot -deriveTypeScript defaultOptions ''OpOr -deriveTypeScript defaultOptions ''OpParticipants -deriveTypeScript defaultOptions ''OpParts -deriveTypeScript defaultOptions ''OpParty -deriveTypeScript defaultOptions ''OpPow -deriveTypeScript defaultOptions ''OpPowerSet -deriveTypeScript defaultOptions ''OpPred -deriveTypeScript defaultOptions ''OpPreImage -deriveTypeScript defaultOptions ''OpProduct -deriveTypeScript defaultOptions ''OpRange -deriveTypeScript defaultOptions ''OpRelationProj -deriveTypeScript defaultOptions ''OpRestrict -deriveTypeScript defaultOptions ''OpSlicing -deriveTypeScript defaultOptions ''OpSubsequence -deriveTypeScript defaultOptions ''OpSubset -deriveTypeScript defaultOptions ''OpSubsetEq -deriveTypeScript defaultOptions ''OpSubstring -deriveTypeScript defaultOptions ''OpSucc -deriveTypeScript defaultOptions ''OpSum -deriveTypeScript defaultOptions ''OpSupset -deriveTypeScript defaultOptions ''OpSupsetEq -deriveTypeScript defaultOptions ''OpTable -deriveTypeScript defaultOptions ''OpTildeLeq -deriveTypeScript defaultOptions ''OpTildeLt -deriveTypeScript defaultOptions ''OpTogether -deriveTypeScript defaultOptions ''OpToInt -deriveTypeScript defaultOptions ''OpToMSet -deriveTypeScript defaultOptions ''OpToRelation -deriveTypeScript defaultOptions ''OpToSet -deriveTypeScript defaultOptions ''OpTransform -deriveTypeScript defaultOptions ''OpTrue -deriveTypeScript defaultOptions ''OpTwoBars -deriveTypeScript defaultOptions ''OpUnion -deriveTypeScript defaultOptions ''OpXor -deriveTypeScript defaultOptions ''PartialityAttr -deriveTypeScript defaultOptions ''PartitionAttr -deriveTypeScript defaultOptions ''Range -deriveTypeScript defaultOptions ''ReferenceTo -deriveTypeScript defaultOptions ''Region -deriveTypeScript defaultOptions ''RelationAttr -deriveTypeScript defaultOptions ''SearchOrder -deriveTypeScript defaultOptions ''SequenceAttr -deriveTypeScript defaultOptions ''SetAttr -deriveTypeScript defaultOptions ''SizeAttr -deriveTypeScript defaultOptions ''Statement -deriveTypeScript defaultOptions ''Strategy -deriveTypeScript defaultOptions ''TrailRewrites -deriveTypeScript defaultOptions ''Tree -- base -deriveTypeScript defaultOptions ''Type +-- deriveTypeScript defaultOptions ''AbstractLiteral +-- deriveTypeScript defaultOptions ''AbstractPattern +-- deriveTypeScript defaultOptions ''AttrName +-- deriveTypeScript defaultOptions ''BinaryRelationAttr +-- deriveTypeScript defaultOptions ''BinaryRelationAttrs +-- deriveTypeScript defaultOptions ''Constant +-- deriveTypeScript defaultOptions ''Decision +-- deriveTypeScript defaultOptions ''Declaration +-- deriveTypeScript defaultOptions ''Domain +-- deriveTypeScript defaultOptions ''Expression +-- deriveTypeScript defaultOptions ''FindOrGiven +-- deriveTypeScript defaultOptions ''FunctionAttr +-- deriveTypeScript defaultOptions ''Generator +-- deriveTypeScript defaultOptions ''GeneratorOrCondition +-- deriveTypeScript defaultOptions ''HasRepresentation +-- deriveTypeScript defaultOptions ''InBubble +-- deriveTypeScript defaultOptions ''IntTag +-- deriveTypeScript defaultOptions ''JectivityAttr +-- deriveTypeScript defaultOptions ''LanguageVersion +-- deriveTypeScript defaultOptions ''Model +-- deriveTypeScript defaultOptions ''ModelInfo +-- deriveTypeScript defaultOptions ''MSetAttr +-- deriveTypeScript defaultOptions ''Name +-- deriveTypeScript defaultOptions ''Objective +-- deriveTypeScript defaultOptions ''OccurAttr +-- deriveTypeScript defaultOptions ''Op +-- deriveTypeScript defaultOptions ''OpActive +-- deriveTypeScript defaultOptions ''OpAllDiff +-- deriveTypeScript defaultOptions ''OpAllDiffExcept +-- deriveTypeScript defaultOptions ''OpAnd +-- deriveTypeScript defaultOptions ''OpApart +-- deriveTypeScript defaultOptions ''OpAtLeast +-- deriveTypeScript defaultOptions ''OpAtMost +-- deriveTypeScript defaultOptions ''OpAttributeAsConstraint +-- deriveTypeScript defaultOptions ''OpCatchUndef +-- deriveTypeScript defaultOptions ''OpDefined +-- deriveTypeScript defaultOptions ''OpDiv +-- deriveTypeScript defaultOptions ''OpDontCare +-- deriveTypeScript defaultOptions ''OpDotLeq +-- deriveTypeScript defaultOptions ''OpDotLt +-- deriveTypeScript defaultOptions ''OpEq +-- deriveTypeScript defaultOptions ''OpFactorial +-- deriveTypeScript defaultOptions ''OpFlatten +-- deriveTypeScript defaultOptions ''OpFreq +-- deriveTypeScript defaultOptions ''OpGCC +-- deriveTypeScript defaultOptions ''OpGeq +-- deriveTypeScript defaultOptions ''OpGt +-- deriveTypeScript defaultOptions ''OpHist +-- deriveTypeScript defaultOptions ''OpIff +-- deriveTypeScript defaultOptions ''OpImage +-- deriveTypeScript defaultOptions ''OpImageSet +-- deriveTypeScript defaultOptions ''OpImply +-- deriveTypeScript defaultOptions ''OpIn +-- deriveTypeScript defaultOptions ''OpIndexing +-- deriveTypeScript defaultOptions ''OpIntersect +-- deriveTypeScript defaultOptions ''OpInverse +-- deriveTypeScript defaultOptions ''OpLeq +-- deriveTypeScript defaultOptions ''OpLexLeq +-- deriveTypeScript defaultOptions ''OpLexLt +-- deriveTypeScript defaultOptions ''OpLt +-- deriveTypeScript defaultOptions ''OpMakeTable +-- deriveTypeScript defaultOptions ''OpMax +-- deriveTypeScript defaultOptions ''OpMin +-- deriveTypeScript defaultOptions ''OpMinus +-- deriveTypeScript defaultOptions ''OpMod +-- deriveTypeScript defaultOptions ''OpNegate +-- deriveTypeScript defaultOptions ''OpNeq +-- deriveTypeScript defaultOptions ''OpNot +-- deriveTypeScript defaultOptions ''OpOr +-- deriveTypeScript defaultOptions ''OpParticipants +-- deriveTypeScript defaultOptions ''OpParts +-- deriveTypeScript defaultOptions ''OpParty +-- deriveTypeScript defaultOptions ''OpPow +-- deriveTypeScript defaultOptions ''OpPowerSet +-- deriveTypeScript defaultOptions ''OpPred +-- deriveTypeScript defaultOptions ''OpPreImage +-- deriveTypeScript defaultOptions ''OpProduct +-- deriveTypeScript defaultOptions ''OpRange +-- deriveTypeScript defaultOptions ''OpRelationProj +-- deriveTypeScript defaultOptions ''OpRestrict +-- deriveTypeScript defaultOptions ''OpSlicing +-- deriveTypeScript defaultOptions ''OpSubsequence +-- deriveTypeScript defaultOptions ''OpSubset +-- deriveTypeScript defaultOptions ''OpSubsetEq +-- deriveTypeScript defaultOptions ''OpSubstring +-- deriveTypeScript defaultOptions ''OpSucc +-- deriveTypeScript defaultOptions ''OpSum +-- deriveTypeScript defaultOptions ''OpSupset +-- deriveTypeScript defaultOptions ''OpSupsetEq +-- deriveTypeScript defaultOptions ''OpTable +-- deriveTypeScript defaultOptions ''OpTildeLeq +-- deriveTypeScript defaultOptions ''OpTildeLt +-- deriveTypeScript defaultOptions ''OpTogether +-- deriveTypeScript defaultOptions ''OpToInt +-- deriveTypeScript defaultOptions ''OpToMSet +-- deriveTypeScript defaultOptions ''OpToRelation +-- deriveTypeScript defaultOptions ''OpToSet +-- deriveTypeScript defaultOptions ''OpTransform +-- deriveTypeScript defaultOptions ''OpTrue +-- deriveTypeScript defaultOptions ''OpTwoBars +-- deriveTypeScript defaultOptions ''OpUnion +-- deriveTypeScript defaultOptions ''OpXor +-- deriveTypeScript defaultOptions ''PartialityAttr +-- deriveTypeScript defaultOptions ''PartitionAttr +-- deriveTypeScript defaultOptions ''Range +-- deriveTypeScript defaultOptions ''ReferenceTo +-- deriveTypeScript defaultOptions ''Region +-- deriveTypeScript defaultOptions ''RelationAttr +-- deriveTypeScript defaultOptions ''SearchOrder +-- deriveTypeScript defaultOptions ''SequenceAttr +-- deriveTypeScript defaultOptions ''SetAttr +-- deriveTypeScript defaultOptions ''SizeAttr +-- deriveTypeScript defaultOptions ''Statement +-- deriveTypeScript defaultOptions ''Strategy +-- deriveTypeScript defaultOptions ''TrailRewrites +-- deriveTypeScript defaultOptions ''Tree -- base +-- deriveTypeScript defaultOptions ''Type -tsDef :: IO () -tsDef = putStrLn $ formatTSDeclarations $ mconcat - [ getTypeScriptDeclarations (Proxy :: Proxy AbstractLiteral) - , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) - , getTypeScriptDeclarations (Proxy :: Proxy AttrName) - , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) - , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) - , getTypeScriptDeclarations (Proxy :: Proxy Constant) - , getTypeScriptDeclarations (Proxy :: Proxy Decision) - , getTypeScriptDeclarations (Proxy :: Proxy Declaration) - , getTypeScriptDeclarations (Proxy :: Proxy Domain) - , getTypeScriptDeclarations (Proxy :: Proxy Expression) - , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) - , getTypeScriptDeclarations (Proxy :: Proxy FunctionAttr) - , getTypeScriptDeclarations (Proxy :: Proxy Generator) - , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) - , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) - , getTypeScriptDeclarations (Proxy :: Proxy InBubble) - , getTypeScriptDeclarations (Proxy :: Proxy IntTag) - , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) - , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) - , getTypeScriptDeclarations (Proxy :: Proxy Model) - , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) - , getTypeScriptDeclarations (Proxy :: Proxy MSetAttr) - , getTypeScriptDeclarations (Proxy :: Proxy Name) - , getTypeScriptDeclarations (Proxy :: Proxy Objective) - , getTypeScriptDeclarations (Proxy :: Proxy OccurAttr) - , getTypeScriptDeclarations (Proxy :: Proxy Op) - , getTypeScriptDeclarations (Proxy :: Proxy OpActive) - , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiff) - , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiffExcept) - , getTypeScriptDeclarations (Proxy :: Proxy OpAnd) - , getTypeScriptDeclarations (Proxy :: Proxy OpApart) - , getTypeScriptDeclarations (Proxy :: Proxy OpAtLeast) - , getTypeScriptDeclarations (Proxy :: Proxy OpAtMost) - , getTypeScriptDeclarations (Proxy :: Proxy OpAttributeAsConstraint) - , getTypeScriptDeclarations (Proxy :: Proxy OpCatchUndef) - , getTypeScriptDeclarations (Proxy :: Proxy OpDefined) - , getTypeScriptDeclarations (Proxy :: Proxy OpDiv) - , getTypeScriptDeclarations (Proxy :: Proxy OpDontCare) - , getTypeScriptDeclarations (Proxy :: Proxy OpDotLeq) - , getTypeScriptDeclarations (Proxy :: Proxy OpDotLt) - , getTypeScriptDeclarations (Proxy :: Proxy OpEq) - , getTypeScriptDeclarations (Proxy :: Proxy OpFactorial) - , getTypeScriptDeclarations (Proxy :: Proxy OpFlatten) - , getTypeScriptDeclarations (Proxy :: Proxy OpFreq) - , getTypeScriptDeclarations (Proxy :: Proxy OpGCC) - , getTypeScriptDeclarations (Proxy :: Proxy OpGeq) - , getTypeScriptDeclarations (Proxy :: Proxy OpGt) - , getTypeScriptDeclarations (Proxy :: Proxy OpHist) - , getTypeScriptDeclarations (Proxy :: Proxy OpIff) - , getTypeScriptDeclarations (Proxy :: Proxy OpImage) - , getTypeScriptDeclarations (Proxy :: Proxy OpImageSet) - , getTypeScriptDeclarations (Proxy :: Proxy OpImply) - , getTypeScriptDeclarations (Proxy :: Proxy OpIn) - , getTypeScriptDeclarations (Proxy :: Proxy OpIndexing) - , getTypeScriptDeclarations (Proxy :: Proxy OpIntersect) - , getTypeScriptDeclarations (Proxy :: Proxy OpInverse) - , getTypeScriptDeclarations (Proxy :: Proxy OpLeq) - , getTypeScriptDeclarations (Proxy :: Proxy OpLexLeq) - , getTypeScriptDeclarations (Proxy :: Proxy OpLexLt) - , getTypeScriptDeclarations (Proxy :: Proxy OpLt) - , getTypeScriptDeclarations (Proxy :: Proxy OpMax) - , getTypeScriptDeclarations (Proxy :: Proxy OpMin) - , getTypeScriptDeclarations (Proxy :: Proxy OpMinus) - , getTypeScriptDeclarations (Proxy :: Proxy OpMod) - , getTypeScriptDeclarations (Proxy :: Proxy OpNegate) - , getTypeScriptDeclarations (Proxy :: Proxy OpNeq) - , getTypeScriptDeclarations (Proxy :: Proxy OpNot) - , getTypeScriptDeclarations (Proxy :: Proxy OpOr) - , getTypeScriptDeclarations (Proxy :: Proxy OpParticipants) - , getTypeScriptDeclarations (Proxy :: Proxy OpParts) - , getTypeScriptDeclarations (Proxy :: Proxy OpParty) - , getTypeScriptDeclarations (Proxy :: Proxy OpPow) - , getTypeScriptDeclarations (Proxy :: Proxy OpPowerSet) - , getTypeScriptDeclarations (Proxy :: Proxy OpPred) - , getTypeScriptDeclarations (Proxy :: Proxy OpPreImage) - , getTypeScriptDeclarations (Proxy :: Proxy OpProduct) - , getTypeScriptDeclarations (Proxy :: Proxy OpRange) - , getTypeScriptDeclarations (Proxy :: Proxy OpRelationProj) - , getTypeScriptDeclarations (Proxy :: Proxy OpRestrict) - , getTypeScriptDeclarations (Proxy :: Proxy OpSlicing) - , getTypeScriptDeclarations (Proxy :: Proxy OpSubsequence) - , getTypeScriptDeclarations (Proxy :: Proxy OpSubset) - , getTypeScriptDeclarations (Proxy :: Proxy OpSubsetEq) - , getTypeScriptDeclarations (Proxy :: Proxy OpSubstring) - , getTypeScriptDeclarations (Proxy :: Proxy OpSucc) - , getTypeScriptDeclarations (Proxy :: Proxy OpSum) - , getTypeScriptDeclarations (Proxy :: Proxy OpSupset) - , getTypeScriptDeclarations (Proxy :: Proxy OpSupsetEq) - , getTypeScriptDeclarations (Proxy :: Proxy OpTable) - , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLeq) - , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLt) - , getTypeScriptDeclarations (Proxy :: Proxy OpTogether) - , getTypeScriptDeclarations (Proxy :: Proxy OpToInt) - , getTypeScriptDeclarations (Proxy :: Proxy OpToMSet) - , getTypeScriptDeclarations (Proxy :: Proxy OpToRelation) - , getTypeScriptDeclarations (Proxy :: Proxy OpToSet) - , getTypeScriptDeclarations (Proxy :: Proxy OpTransform) - , getTypeScriptDeclarations (Proxy :: Proxy OpTrue) - , getTypeScriptDeclarations (Proxy :: Proxy OpTwoBars) - , getTypeScriptDeclarations (Proxy :: Proxy OpUnion) - , getTypeScriptDeclarations (Proxy :: Proxy OpXor) - , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) - , getTypeScriptDeclarations (Proxy :: Proxy PartitionAttr) - , getTypeScriptDeclarations (Proxy :: Proxy Range) - , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) - , getTypeScriptDeclarations (Proxy :: Proxy Region) - , getTypeScriptDeclarations (Proxy :: Proxy RelationAttr) - , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) - , getTypeScriptDeclarations (Proxy :: Proxy SequenceAttr) - , getTypeScriptDeclarations (Proxy :: Proxy SetAttr) - , getTypeScriptDeclarations (Proxy :: Proxy SizeAttr) - , getTypeScriptDeclarations (Proxy :: Proxy Statement) - , getTypeScriptDeclarations (Proxy :: Proxy Strategy) - , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) - , getTypeScriptDeclarations (Proxy :: Proxy Tree) - , getTypeScriptDeclarations (Proxy :: Proxy Type) - ] +-- tsDef :: IO () +-- tsDef = putStrLn $ formatTSDeclarations $ mconcat +-- [ getTypeScriptDeclarations (Proxy :: Proxy AbstractLiteral) +-- , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) +-- , getTypeScriptDeclarations (Proxy :: Proxy AttrName) +-- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) +-- , getTypeScriptDeclarations (Proxy :: Proxy Constant) +-- , getTypeScriptDeclarations (Proxy :: Proxy Decision) +-- , getTypeScriptDeclarations (Proxy :: Proxy Declaration) +-- , getTypeScriptDeclarations (Proxy :: Proxy Domain) +-- , getTypeScriptDeclarations (Proxy :: Proxy Expression) +-- , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) +-- , getTypeScriptDeclarations (Proxy :: Proxy FunctionAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy Generator) +-- , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) +-- , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) +-- , getTypeScriptDeclarations (Proxy :: Proxy InBubble) +-- , getTypeScriptDeclarations (Proxy :: Proxy IntTag) +-- , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) +-- , getTypeScriptDeclarations (Proxy :: Proxy Model) +-- , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) +-- , getTypeScriptDeclarations (Proxy :: Proxy MSetAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy Name) +-- , getTypeScriptDeclarations (Proxy :: Proxy Objective) +-- , getTypeScriptDeclarations (Proxy :: Proxy OccurAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy Op) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpActive) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiff) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiffExcept) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpAnd) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpApart) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpAtLeast) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpAtMost) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpAttributeAsConstraint) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpCatchUndef) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpDefined) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpDiv) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpDontCare) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLeq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLt) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpEq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpFactorial) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpFlatten) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpFreq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpGCC) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpGeq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpGt) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpHist) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpIff) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpImage) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpImageSet) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpImply) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpIn) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpIndexing) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpIntersect) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpInverse) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpLeq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLeq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLt) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpLt) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpMax) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpMin) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpMinus) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpMod) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpNegate) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpNeq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpNot) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpOr) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpParticipants) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpParts) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpParty) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpPow) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpPowerSet) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpPred) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpPreImage) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpProduct) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpRange) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpRelationProj) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpRestrict) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSlicing) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsequence) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSubset) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsetEq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSubstring) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSucc) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSum) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSupset) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpSupsetEq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTable) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLeq) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLt) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTogether) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpToInt) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpToMSet) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpToRelation) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpToSet) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTransform) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTrue) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpTwoBars) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpUnion) +-- , getTypeScriptDeclarations (Proxy :: Proxy OpXor) +-- , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy PartitionAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy Range) +-- , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) +-- , getTypeScriptDeclarations (Proxy :: Proxy Region) +-- , getTypeScriptDeclarations (Proxy :: Proxy RelationAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) +-- , getTypeScriptDeclarations (Proxy :: Proxy SequenceAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy SetAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy SizeAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy Statement) +-- , getTypeScriptDeclarations (Proxy :: Proxy Strategy) +-- , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) +-- , getTypeScriptDeclarations (Proxy :: Proxy Tree) +-- , getTypeScriptDeclarations (Proxy :: Proxy Type) +-- ] From e969f98a36587173d8490475163a7153621bd108 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 13 Oct 2022 17:34:10 +0100 Subject: [PATCH 064/378] update to disambiguate functionals --- conjure-cp.cabal | 9 + src/Conjure/Language/AST/Domain.hs | 163 ------------------ src/Conjure/Language/AST/Expression.hs | 11 +- .../Language/Expression/DomainSizeOf.hs | 2 +- src/Conjure/Language/Expression/Op.hs | 38 ++-- .../Language/Expression/Op/Internal/Common.hs | 17 +- src/Conjure/Language/Lexemes.hs | 15 +- src/Conjure/Language/Validator.hs | 28 +-- .../Representations/Function/FunctionND.hs | 2 +- 9 files changed, 82 insertions(+), 203 deletions(-) delete mode 100644 src/Conjure/Language/AST/Domain.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 6f6cd35a30..e622cd2aa4 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -39,6 +39,13 @@ Library , Conjure.Language.TH , Conjure.Language.Type + , Conjure.Language.Lexemes + , Conjure.Language.Validator + , Conjure.Language.AST.ASTParser + , Conjure.Language.AST.Expression + , Conjure.Language.AST.Helpers + , Conjure.Language.AST.Reformer + , Conjure.Language.AST.Syntax , Conjure.Language.Expression.Internal.Generated , Conjure.Language.Expression.DomainSizeOf @@ -142,6 +149,8 @@ Library , Conjure.Language.ParserC , Conjure.Language.Pretty , Conjure.Language.ZeroVal + + , Conjure.Process.AttributeAsConstraints , Conjure.Process.DealWithCuts , Conjure.Process.Enumerate diff --git a/src/Conjure/Language/AST/Domain.hs b/src/Conjure/Language/AST/Domain.hs deleted file mode 100644 index c30c6782ac..0000000000 --- a/src/Conjure/Language/AST/Domain.hs +++ /dev/null @@ -1,163 +0,0 @@ -{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} - -{-# HLINT ignore "Use <$>" #-} -module Conjure.Language.AST.Expression where - --- import Conjure.Language.AST.Expression -import Conjure.Language.AST.Helpers -import Conjure.Language.AST.Syntax -import Conjure.Language.Lexemes -import Conjure.Prelude -import Text.Megaparsec - --- parseDomain :: Parser DomainNode --- parseDomain = do --- choice --- [ BoolDomainNode <$> need L_bool --- , parseIntDomain --- , parseTuple --- , parseRecord --- , parseVariant --- , parseMatrix --- , parseSet --- , parseMSet --- , parseFunctionDomain --- , parseSequenceDomain --- , parseRelation --- , parsePartition --- , parseEnumDomain --- , parseMissingDomain --- ] - --- parseIntDomain :: Parser DomainNode --- parseIntDomain = do --- lInt <- need L_int --- ranges <- parenList $ commaList parseRange --- return $ RangedIntDomainNode lInt ranges - --- parseTuple :: Parser DomainNode --- parseTuple = do --- lTuple <- need L_tuple --- members <- parenList $ commaList parseDomain --- return $ TupleDomainNode lTuple members - --- parseRecord :: Parser DomainNode --- parseRecord = do --- lRecord <- need L_record --- members <- curlyBracketList $ commaList parseNameDomain --- return $ RecordDomainNode lRecord members - --- parseVariant :: Parser DomainNode --- parseVariant = do --- lVariant <- need L_variant --- members <- curlyBracketList $ commaList parseNameDomain --- return $ VariantDomainNode lVariant members - --- parseMatrix :: Parser DomainNode --- parseMatrix = do --- lMatrix <- need L_matrix --- lIndexed <- want L_indexed --- lBy <- want L_by --- members <- squareBracketList $ commaList parseDomain --- lOf <- want L_of --- domain <- parseDomain --- return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain - --- parseSet :: Parser DomainNode --- parseSet = do --- lSet <- need L_set --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domain <- parseDomain --- return $ SetDomainNode lSet attributes lOf domain - --- parseMSet :: Parser DomainNode --- parseMSet = do --- lMSet <- need L_mset --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domain <- parseDomain --- return $ MSetDomainNode lMSet attributes lOf domain - --- parseFunctionDomain :: Parser DomainNode --- parseFunctionDomain = do --- lFunction <- need L_function --- attributes <- parenList $ commaList parseAttribute --- fromDomain <- parseDomain --- arrow <- want L_LongArrow --- toDomain <- parseDomain --- return $ FunctionDomainNode lFunction attributes fromDomain arrow toDomain - --- parseSequenceDomain :: Parser DomainNode --- parseSequenceDomain = do --- lSequence <- need L_sequence --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domain <- parseDomain --- return $ SequenceDomainNode lSequence attributes lOf domain - --- parseRelation :: Parser DomainNode --- parseRelation = do --- lRelation <- need L_relation --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domains <- parenList $ parseSequence L_Times parseDomain --- return $ RelationDomainNode lRelation attributes lOf domains - --- parsePartition :: Parser DomainNode --- parsePartition = do --- lPartition <- need L_partition --- attributes <- parenList $ commaList parseAttribute --- lFrom <- want L_from --- domain <- parseDomain --- return $ PartitionDomainNode lPartition attributes lFrom domain - --- parseEnumDomain :: Parser DomainNode --- parseEnumDomain = do --- name <- parseIdentifierStrict --- brackets <- optional $ parenListStrict (commaList parseRange) --- case brackets of --- Nothing -> return $ EnumDomainNode name --- Just parens -> return $ RangedEnumNode name parens --- -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) --- -- <|> return (EnumDomainNode name) - --- -- Util --- parseNameDomain :: Parser NamedDomainNode --- parseNameDomain = do --- name <- parseIdentifierStrict --- lColon <- want L_Colon --- domain <- parseDomain --- return $ NameDomainNode name lColon domain - --- parseRange :: Parser RangeNode --- parseRange = --- do --- lExpr <- optional parseExpressionStrict --- dots <- parseDoubleDot --- rExpr <- optional parseExpressionStrict --- case (lExpr, rExpr) of --- (Nothing, Nothing) -> return $ OpenRangeNode dots --- (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots --- (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r --- (Just l, Just r) -> return $ BoundedRangeNode l dots r --- <|> SingleRangeNode <$> parseExpression - --- parseDoubleDot :: Parser DoubleDotNode --- parseDoubleDot = do --- a <- need L_Dot --- b <- want L_Dot --- return $ DoubleDotNode a b - --- parseAttribute :: Parser AttributeNode --- parseAttribute = do --- name <- choice $ map need functionAttributes -- TODO This is wrong --- expr <- optional parseExpressionStrict --- case expr of --- Nothing -> return $ NamedAttributeNode (NameNode name) --- Just en -> return $ NamedExpressionAttribute (NameNode name) en - --- parseMissingDomain :: Parser DomainNode --- parseMissingDomain = do --- m <- makeMissing L_domain --- return $ MissingDomainNode m \ No newline at end of file diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index 1bd239475d..054ebd735d 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -12,6 +12,8 @@ import Text.Megaparsec import Control.Monad.Combinators.Expr (Operator (..), makeExprParser) import Conjure.Language.Expression.Op.Internal.Common +import Conjure.Language.NewLexer (ETok(..)) +import Conjure.Language.Expression.Op.Internal.Common (overloadedFunctionals) -- import Text.Megaparsec.Debug (dbg) @@ -279,11 +281,14 @@ parseOperator :: Parser ExpressionNode parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") parseFunction :: Parser ExpressionNode -parseFunction = do +parseFunction = try $ do name <- choice $ map need functionals - args <- parenList $ commaList parseExpression + let parenP = if isOverloaded name then parenListStrict else parenList + args <- parenP $ commaList parseExpression return $ FunctionalApplicationNode name args - + where + isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals + isOverloaded _ = False parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) parsePostfixOp = do op <- diff --git a/src/Conjure/Language/Expression/DomainSizeOf.hs b/src/Conjure/Language/Expression/DomainSizeOf.hs index 8cdf540f14..f5f6bf1a24 100644 --- a/src/Conjure/Language/Expression/DomainSizeOf.hs +++ b/src/Conjure/Language/Expression/DomainSizeOf.hs @@ -105,7 +105,7 @@ getMaxNumberOfElementsInContainer domain@(DomainSet _ (SetAttr sizeAttr) inner) getMaxNumberOfElementsInContainer domain@(DomainMSet _ (MSetAttr sizeAttr occurAttr) inner) = case (getMaxFrom_SizeAttr sizeAttr, getMaxFrom_OccurAttr occurAttr, domainSizeOf inner) of (Just n, _ , _ ) -> n - (_ , Just o, Just (n :: Expression)) -> [essence| &o * &n |] + (_ , Just o, Just n) -> [essence| &o * &n |] _ -> bug $ "getMaxNumberOfElementsInContainer, DomainMSet:" <+> pretty domain getMaxNumberOfElementsInContainer domain@(DomainSequence _ (SequenceAttr sizeAttr _) _) = case getMaxFrom_SizeAttr sizeAttr of diff --git a/src/Conjure/Language/Expression/Op.hs b/src/Conjure/Language/Expression/Op.hs index fc5668968d..a58d0101ec 100644 --- a/src/Conjure/Language/Expression/Op.hs +++ b/src/Conjure/Language/Expression/Op.hs @@ -2,6 +2,7 @@ module Conjure.Language.Expression.Op ( module Conjure.Language.Expression.Op.Internal.Generated , module Conjure.Language.Expression.Op.Internal.Common , mkBinOp, mkOp + , OpType (..) ) where -- conjure @@ -65,22 +66,28 @@ mkBinOp op a b = in f a b +data OpType + = PrefixOp Lexeme + | FactorialOp + | TwoBarOp + | FunctionOp Lexeme -mkOp :: (Op x :< x, ReferenceContainer x, ExpressionLike x) => Text -> [x] -> x -mkOp op xs = - case textToLexeme op of - Nothing -> case op of - "and" -> inject $ MkOpAnd $ OpAnd (arg xs 0 "and") - "or" -> inject $ MkOpOr $ OpOr (arg xs 0 "or") - "xor" -> inject $ MkOpXor $ OpXor (arg xs 0 "xor") - "sum" -> inject $ MkOpSum $ OpSum (arg xs 0 "sum") - "product" -> inject $ MkOpProduct $ OpProduct (arg xs 0 "product") - "not" -> inject $ MkOpNot $ OpNot (arg xs 0 "not") - "negate" -> inject $ MkOpNegate $ OpNegate (arg xs 0 "negate") - "twoBars" -> inject $ MkOpTwoBars $ OpTwoBars (arg xs 0 "twoBars") - _ -> bug ("Unknown operator:" <+> vcat [pretty op, pretty $ show $ textToLexeme op]) + +mkOp :: (Op x :< x, ReferenceContainer x, ExpressionLike x) => OpType -> [x] -> x +mkOp op xs = case op of + PrefixOp lex -> case lex of + L_ExclamationMark -> inject $ MkOpNot $ OpNot (arg xs 0 "not") + L_Minus -> inject $ MkOpNegate $ OpNegate (arg xs 0 "negate") + _ -> bug $ "Unexpected Prefix operator :" <+> pretty (show lex) + FactorialOp -> inject $ MkOpFactorial $ OpFactorial (arg xs 0 "factorial") + TwoBarOp -> inject $ MkOpTwoBars $ OpTwoBars (arg xs 0 "twoBars") + FunctionOp lex -> case lex of + L_fAnd -> inject $ MkOpAnd $ OpAnd (arg xs 0 "and") + L_fOr -> inject $ MkOpOr $ OpOr (arg xs 0 "or") + L_fXor -> inject $ MkOpXor $ OpXor (arg xs 0 "xor") + L_Sum -> inject $ MkOpSum $ OpSum (arg xs 0 "sum") + L_Product -> inject $ MkOpProduct $ OpProduct (arg xs 0 "product") -- _ -> opImage (fromName (Name op)) xs - Just l -> case l of L_true -> inject $ MkOpTrue $ OpTrue (arg xs 0 "true") L_toInt -> inject $ MkOpToInt $ OpToInt (arg xs 0 "toInt") L_makeTable -> inject $ MkOpMakeTable $ OpMakeTable (arg xs 0 "makeTable") @@ -140,7 +147,8 @@ mkOp op xs = let n' = fromInteger $ fromMaybe (bug "The 1st argument of flatten has to be a constant integer.") (intOut "flatten" n) in inject $ MkOpFlatten $ OpFlatten (Just n') m _ -> bug "flatten takes 1 or 2 arguments." - _ -> bug ("Unknown lexeme for operator:" <+> pretty (show l)) + _ -> bug ("Unknown lexeme for function type operator:" <+> pretty (show lex)) + arg :: [a] -> Int -> Doc -> a arg xs n op = diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index ac270cf290..b52477db7c 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -6,7 +6,9 @@ module Conjure.Language.Expression.Op.Internal.Common , BinaryOperator(..) , prettyPrecBinOp - , Fixity(..), operators, functionals,quantifiers + , Fixity(..), operators, functionals + , overloadedFunctionals + , quantifiers , EssenceOperatorParsingDescr(..) , raiseTypeError @@ -240,6 +242,11 @@ operators = , ( UnaryPrefix L_ExclamationMark , 2000 ) ] +overloadedFunctionals :: [Lexeme] +overloadedFunctionals = [ + L_Sum + ] + functionals :: [Lexeme] functionals = [ L_toInt @@ -283,11 +290,11 @@ functionals = , L_transform , L_true - , LIdentifier "and" - , LIdentifier "or" + , L_fAnd + , L_fOr , L_Sum - , LIdentifier "product" - , LIdentifier "xor" + , L_Product + , L_fXor , L_active diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index c8d92ddd14..dcf16988da 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -178,7 +178,7 @@ data Lexeme | L_Or -- \/ -- logical-or, infix. | L_Imply -- -> -- implication, infix | L_Iff -- <-> -- iff, infix. - -- | L_Not -- ! -- negation, prefix + | L_Not -- ! -- negation, prefix | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark -- the function arrow @@ -209,6 +209,12 @@ data Lexeme | L_ForAll | L_Exists | L_Sum + | L_Product + | L_fXor + + | L_fAnd + | L_fOr + -- others | L_Dot @@ -375,6 +381,11 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_ForAll , "forAll" ) , ( L_Exists , "exists" ) , ( L_Sum , "sum" ) + , ( L_Product , "product" ) + , ( L_Not , "not" ) + , ( L_fXor , "xor" ) + , ( L_fAnd , "and" ) + , ( L_fOr , "or" ) , ( L_Plus , "+" ) , ( L_Minus , "-" ) @@ -480,3 +491,5 @@ lexemeText l = T.pack $ show (lexemeFace l) functionAttributes :: [Lexeme] functionAttributes = [L_injective,L_size] + + diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 337a34af92..47810d09d4 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -25,7 +25,7 @@ import Conjure.Language.Expression.Op mkBinOp, Op(MkOpRelationProj, MkOpSlicing, MkOpIndexing), OpRelationProj(OpRelationProj), - OpIndexing(OpIndexing), + OpIndexing(OpIndexing), OpType (..), ) validateModel :: ProgramTree -> Validator Model @@ -378,15 +378,15 @@ validateExpression expr = case expr of AbsExpression (ParenExpressionNode l1 exp l2) -> do checkSymbols [l1,l2] exp' <- validateExpression exp - return $ mkOp "twoBars" [exp'] + return $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln MissingExpressionNode lt -> invalid $ TokenError lt -translateQnName :: Lexeme -> Text +translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of - L_ForAll -> "and" - L_Exists -> "or" - _ -> lexemeText qnName + L_ForAll -> FunctionOp L_fAnd + L_Exists -> FunctionOp L_fOr + _ -> FunctionOp qnName validateQuantificationExpression :: QuantificationExpressionNode -> Validator Expression validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = @@ -453,7 +453,7 @@ validateFunctionApplication name args = do a <- args' return $ case (n,a) of (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z - _ -> mkOp (pack . lexemeFace $ n) a + _ -> mkOp (FunctionOp n) a validateIdentifierExpr :: NameNode -> Validator Expression validateIdentifierExpr name = Reference <$> ( Name <$> validateIdentifier name) <*> pure Nothing @@ -465,7 +465,7 @@ validateOperatorExpression (PrefixOpNode lt expr) = do verify $ do op' <- op expr' <- expr - return $ mkOp (mapPrefixToOp op') [expr'] + return $ mkOp (PrefixOp op') [expr'] --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do lExpr <- validate $ validateExpression lexp @@ -480,7 +480,7 @@ validateOperatorExpression (PostfixOpNode expr pon) = do validatePostfixOp :: PostfixOpNode -> Validator (Expression -> Expression) validatePostfixOp (OpFactorial lt) = do checkSymbols [lt] - return (\x -> mkOp "factorial" [x]) + return (\x -> mkOp FactorialOp [x]) validatePostfixOp (ApplicationNode args) = do args' <- validateList validateExpression args let underscore = Reference "_" Nothing @@ -638,11 +638,11 @@ validateList validator (ListNode st seq end) = do validateSequence validator seq -mapPrefixToOp :: Lexeme -> Text -mapPrefixToOp x = case x of - L_Minus -> "negate" - L_ExclamationMark -> "not" - _ -> pack $ lexemeFace x +-- mapPrefixToOp :: Lexeme -> Text +-- mapPrefixToOp x = case x of +-- L_Minus -> "negate" +-- L_ExclamationMark -> "not" +-- _ -> pack $ lexemeFace x validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals diff --git a/src/Conjure/Representations/Function/FunctionND.hs b/src/Conjure/Representations/Function/FunctionND.hs index 7444a51be5..e72cffa416 100644 --- a/src/Conjure/Representations/Function/FunctionND.hs +++ b/src/Conjure/Representations/Function/FunctionND.hs @@ -60,7 +60,7 @@ functionND = Representation chck downD structuralCons downC up symmetryOrdering let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] :: [Constant] + DomainTuple ts -> map fromInt [1 .. genericLength ts] DomainRecord rs -> map (fromName . fst) rs _ -> bug $ vcat [ "FunctionNDPartial.structuralCons" , "innerDomainFr:" <+> pretty innerDomainFr From 8fcd7363401c5df64a0f155be341563778163843 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 13 Oct 2022 17:38:59 +0100 Subject: [PATCH 065/378] removing old broken annotation --- src/Conjure/Representations/Partition/PartitionAsSet.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/Representations/Partition/PartitionAsSet.hs b/src/Conjure/Representations/Partition/PartitionAsSet.hs index 12ac058e06..92d116a620 100644 --- a/src/Conjure/Representations/Partition/PartitionAsSet.hs +++ b/src/Conjure/Representations/Partition/PartitionAsSet.hs @@ -128,7 +128,7 @@ partitionAsSet dispatch reprOptions useLevels = Representation chck downD struct sumOfParts rel = do case domainSizeOf innerDomain of Left _err -> return [] - Right (n::Expression) -> do + Right n -> do (iPat, i) <- quantifiedVar return $ return [essence| &n = sum([ |&i| | &iPat <- &rel ]) |] From 63a9fc521e9ac543dbf630531f5af0bb8e674622 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 13 Oct 2022 17:49:18 +0100 Subject: [PATCH 066/378] Further rendundant annotation removal --- src/Conjure/Language/TH.hs | 4 ++-- src/Conjure/Representations/Function/FunctionNDPartial.hs | 4 ++-- .../Representations/Function/FunctionNDPartialDummy.hs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index b6361cb6ee..769b9dea7f 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -27,12 +27,12 @@ essenceStmts :: QuasiQuoter essenceStmts = QuasiQuoter { quoteExp = \ str -> do -- l <- locationTH - e :: [Statement] <- parseIO parseTopLevels str + e <- parseIO parseTopLevels str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do -- l <- locationTH - e :: [Statement] <- parseIO parseTopLevels str + e <- parseIO parseTopLevels str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" diff --git a/src/Conjure/Representations/Function/FunctionNDPartial.hs b/src/Conjure/Representations/Function/FunctionNDPartial.hs index c24aee9d28..bf31f13661 100644 --- a/src/Conjure/Representations/Function/FunctionNDPartial.hs +++ b/src/Conjure/Representations/Function/FunctionNDPartial.hs @@ -63,7 +63,7 @@ functionNDPartial = Representation chck downD structuralCons downC up symmetryOr innerDomainTo) | all domainCanIndexMatrix innerDomainFrs = do let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] :: [Constant] + DomainTuple ts -> map fromInt [1 .. genericLength ts] DomainRecord rs -> map (fromName . fst) rs _ -> bug $ vcat [ "FunctionNDPartial.structuralCons" , "innerDomainFr:" <+> pretty innerDomainFr @@ -284,7 +284,7 @@ functionNDPartial = Representation chck downD structuralCons downC up symmetryOr -- setting up the quantification let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] ::[Constant] + DomainTuple ts -> map fromInt [1 .. genericLength ts] DomainRecord rs -> map (fromName . fst) rs _ -> bug $ vcat [ "FunctionND.rule_Comprehension" , "indexDomain:" <+> pretty innerDomainFr diff --git a/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs b/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs index 2f1c5b68bd..b825a2371d 100644 --- a/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs +++ b/src/Conjure/Representations/Function/FunctionNDPartialDummy.hs @@ -93,7 +93,7 @@ functionNDPartialDummy = Representation chck downD structuralCons downC up symme innerDomainTo) | all domainCanIndexMatrix innerDomainFrs = do let kRange = case innerDomainFr of - DomainTuple ts -> map fromInt [1 .. genericLength ts] :: [Constant] + DomainTuple ts -> map fromInt [1 .. genericLength ts] DomainRecord rs -> map (fromName . fst) rs _ -> [] toIndex x = if null kRange then [x] else [ [essence| &x[&k] |] | k <- kRange ] From 8583a83314b42132d71e30c7338b8257913bf2e6 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 15 Oct 2022 20:02:43 +0100 Subject: [PATCH 067/378] Fix compilation errors, some syntax still missing --- src/Conjure/Language/AST/ASTParser.hs | 579 ++++++++- src/Conjure/Language/AST/Expression.hs | 1040 +++++++++-------- src/Conjure/Language/AST/Reformer.hs | 8 + src/Conjure/Language/AST/Syntax.hs | 9 +- src/Conjure/Language/Lexemes.hs | 5 +- src/Conjure/Language/Parser.hs | 8 +- src/Conjure/Language/Validator.hs | 68 +- .../Vertical/Function/Function1DPartial.hs | 4 +- .../Vertical/Function/FunctionNDPartial.hs | 4 +- .../Vertical/Sequence/ExplicitBounded.hs | 4 +- src/Conjure/UI/MainHelper.hs | 4 +- 11 files changed, 1187 insertions(+), 546 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index a744322b53..7642e8ac50 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -3,19 +3,23 @@ {-# HLINT ignore "Use <$>" #-} module Conjure.Language.AST.ASTParser where -import Conjure.Prelude hiding (many) +import Conjure.Prelude hiding (many,some) import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax import Conjure.Language.NewLexer -import Conjure.Language.AST.Expression +-- import Conjure.Language.AST.Expression import Conjure.Language.Lexemes import Text.Megaparsec import Data.Text (pack) import Data.Void (Void) import Conjure.Language.AST.Reformer (Flattenable(..)) +import Conjure.Language.Expression.Op (Fixity(..)) +import Conjure.Language.Expression.Op.Internal.Common +import Control.Monad.Combinators.Expr +import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) data ParserError = ParserError deriving (Show) @@ -34,7 +38,7 @@ parseTopLevels :: Parser [StatementNode] parseTopLevels = manyTill parseTopLevel pEnding parseTopLevel :: Parser StatementNode -parseTopLevel = +parseTopLevel = do parseDeclaration <|> parseBranching @@ -82,7 +86,7 @@ parseDeclaration = GivenStatement <$> parseGiven, FindStatement <$> parseFind ] - + parseLetting :: Parser LettingStatementNode parseLetting = do @@ -91,10 +95,10 @@ parseLetting = do lBe <- want L_be let start = LettingStatementNode lLetting names lBe start <$> choice - [ finishDomain - , try finishEnum - , try finishAnon - , LettingExpr <$> parseExpression + [ finishDomain + , try finishEnum + , try finishAnon + , LettingExpr <$> parseExpression ] where finishDomain = do @@ -159,6 +163,563 @@ pEnding = do case t of ETok {lexeme=L_EOF} -> return $ RealToken t _ -> empty + + + +--------------------------------------- + +--------------------------------------- + +parseExpression :: Parser ExpressionNode +parseExpression = parseSpecialCase <|> + parseOperator + <|> parseAtomicExpression + +parseExpressionStrict :: Parser ExpressionNode -- can fail +parseExpressionStrict = do + expr <- try parseExpression + case expr of + MissingExpressionNode _ -> empty + _ -> return expr + +parseAtomicExpression :: Parser ExpressionNode +parseAtomicExpression = do + try $ + choice + [ Literal <$> parseLiteral + , parseFunction + , parseAttributeAsConstraint + , IdentifierNode <$> parseIdentifierStrict + , MetaVarExpr <$> parseMetaVar + , ParenExpression <$> parseParenExpression parensPair + , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) + , QuantificationExpr <$> parseQuantificationStatement + , DomainExpression <$> parseDomainExpression + , MissingExpressionNode <$> makeMissing (L_Missing "Expression") + ] + + + +parseDomainExpression :: Parser DomainExpressionNode +parseDomainExpression = try $ do + lTick <- need L_BackTick + domain <- parseDomain + case domain of + MissingDomainNode _ -> empty + _ -> pure () + rTick <- want L_BackTick + return $ DomainExpressionNode lTick domain rTick + +-- [a,b,c : int (1..2)] +-- [a,b,c : int (1..4) | x < 3,letting x be int] + + + +parseMatrixBasedExpression :: Parser LiteralNode +parseMatrixBasedExpression = do + openB <- need L_OpenBracket + exprs <- commaList parseExpression + range <- optional pOverDomain + comprehension <- optional pComp + closeB <- want L_CloseBracket + let es = case exprs of + Seq [SeqElem Nothing (MissingExpressionNode _)] -> Seq [] + _ -> exprs + return $ MatrixLiteral $ MatrixLiteralNode openB es range comprehension closeB + where + pOverDomain = OverDomainNode <$> need L_SemiColon <*> parseDomain + pComp = do + bar <- need L_Bar + body <- commaList parseComprehensionCondition + return $ ComprehensionNode bar body + +parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode +parseParenExpression (open, close) = try $ do + lParen <- need open + body <- parseExpression + notFollowedBy $ need L_Comma + rParen <- want close + return $ ParenExpressionNode lParen body rParen + +parseLiteral :: Parser LiteralNode +parseLiteral = + choice + [ parseIntLiteral + , parseBoolLiteral + , parseMatrixBasedExpression + , parseTupleLiteral + , parseShortTupleLiteral + , parseRecordLiteral + , parseSetLiteral + , parseMSetLiteral + , parseFunctionLiteral + , parseSequenceLiteral + , parseRelationLiteral + , parsePartitionLiteral + ] + +parseShortTupleLiteral :: Parser LiteralNode +parseShortTupleLiteral = try $ do + lOpen <- need L_OpenParen + exprs <- commaList parseExpression + let Seq xs = exprs + guard (length xs > 1) + lClose <- want L_CloseParen + return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) + +parseIntLiteral :: Parser LiteralNode +parseIntLiteral = IntLiteral . RealToken <$> intLiteral + +parseBoolLiteral :: Parser LiteralNode +parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) + +parseTupleLiteral :: Parser LiteralNode +parseTupleLiteral = do + lTuple <- need L_tuple + members <- parenList $ commaList parseExpression + return $ TupleLiteralNode $ LongTuple lTuple members + +parseRecordLiteral :: Parser LiteralNode +parseRecordLiteral = do + lRecord <- need L_record + members <- curlyBracketList (commaList parseRecordMember) + return $ RecordLiteral lRecord members + +parseVariantLiteral :: Parser LiteralNode +parseVariantLiteral = do + lVariant <- need L_variant + members <- curlyBracketList (commaList parseRecordMember) + return $ RecordLiteral lVariant members + +parseRecordMember :: Parser RecordMemberNode +parseRecordMember = do + name <- parseIdentifier + lEqual <- want L_Eq + val <- parseExpression + return $ RecordMemberNode name lEqual val + +parseSetLiteral :: Parser LiteralNode +parseSetLiteral = do + -- cant just recycle list as it does not require first char + lOpen <- need L_OpenCurly + members <- commaList parseExpression + lClose <- want L_CloseCurly + return $ SetLiteral (ListNode lOpen members lClose) + +parseMSetLiteral :: Parser LiteralNode +parseMSetLiteral = do + lMSet <- need L_mset + members <- parenList (commaList parseExpression) + return $ MSetLiteral lMSet members + +parseFunctionLiteral :: Parser LiteralNode +parseFunctionLiteral = do + lFunc <- need L_function + args <- parenList (commaList parseArrowPair) + return $ FunctionLiteral lFunc args + +parseArrowPair :: Parser ArrowPairNode +parseArrowPair = try $ do + lhs <- parseExpression + arrow <- want L_LongArrow + rhs <- parseExpression + return $ ArrowPairNode lhs arrow rhs + +parseSequenceLiteral :: Parser LiteralNode +parseSequenceLiteral = do + lSeq <- need L_sequence + members <- parenList (commaList parseExpression) + return $ SequenceLiteral lSeq members + +parseRelationLiteral :: Parser LiteralNode +parseRelationLiteral = do + lRel <- need L_relation + members <- parenList (commaList parseRelationMember) + return $ RelationLiteral lRel members + +parseRelationMember :: Parser RelationElemNode +parseRelationMember = do + f <- optional $ need L_tuple + members <- parenList $ commaList parseExpression + return $ case f of + Nothing -> RelationElemNodeShort $ ShortTuple members + Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members + +parsePartitionLiteral :: Parser LiteralNode +parsePartitionLiteral = do + lPartition <- need L_partition + members <- parenList (commaList parsePartitionElem) + return $ PartitionLiteral lPartition members + +parsePartitionElem :: Parser PartitionElemNode +parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) + +parseQuantificationStatement :: Parser QuantificationExpressionNode +parseQuantificationStatement = do + lType <- choice $ map need quantifiers + terms <- commaList parseAbstractPattern + over <- parseQuantificationOver + qGuard <- optional $ do + lComma <- need L_Comma + expr <- parseExpression + return $ QuanticationGuard lComma expr + lDot <- want L_Dot + expr <- parseExpression + return $ QuantificationExpressionNode lType terms over qGuard lDot expr + where + parseQuantificationOver :: Parser QuantificationOverNode + parseQuantificationOver = + choice + [ QuantifiedMemberOfNode <$> need L_in <*> parseExpression + , QuantifiedSubsetOfNode <$> need L_subsetEq <*> parseExpression + , QuantifiedDomainNode <$> (OverDomainNode <$> want L_Colon <*> parseDomain) + ] + +parseAbstractPattern :: Parser AbstractPatternNode +parseAbstractPattern = do + choice + [ parseAbstractId + , parseAbstractMetaVar + , parseAbstractPatternTuple + , parseAbstractPatternMatrix + , parseAbstractPatternSet + ] + where + parseAbstractId :: Parser AbstractPatternNode + parseAbstractId = AbstractIdentifier <$> parseIdentifierStrict + parseAbstractMetaVar :: Parser AbstractPatternNode + parseAbstractMetaVar = AbstractMetaVar <$> parseMetaVar + parseAbstractPatternTuple :: Parser AbstractPatternNode + parseAbstractPatternTuple = do + lTuple <- optional $ need L_tuple + openB <- (if null lTuple then need else want) L_OpenParen + es <- commaList parseAbstractPattern + closeB <- want L_CloseParen + return $ AbstractPatternTuple lTuple (ListNode openB es closeB) + parseAbstractPatternMatrix :: Parser AbstractPatternNode + parseAbstractPatternMatrix = do + openB <- need L_OpenBracket + es <- commaList parseAbstractPattern + closeB <- want L_CloseBracket + return $ AbstractPatternMatrix (ListNode openB es closeB) + parseAbstractPatternSet :: Parser AbstractPatternNode + parseAbstractPatternSet = do + openB <- need L_OpenCurly + es <- commaList parseAbstractPattern + closeB <- want L_CloseCurly + return $ AbstractPatternMatrix (ListNode openB es closeB) + +parseComprehensionCondition :: Parser ComprehensionBodyNode +parseComprehensionCondition = do + letting <|> generator <|> condition + where + letting = do + lLetting <- need L_letting + v <- parseAbstractPattern + lBe <- want L_be + expr <- parseExpression + return $ CompBodyLettingNode lLetting v lBe expr + generator = try $ do + pats <- commaList parseAbstractPattern + choice + [ try $ do + lColon <- need L_Colon + domain <- parseDomain + return $ CompBodyDomain pats lColon domain + , try $ do + lArrow <- need L_LeftArrow + expr <- parseExpression + return $ CompBodyGenExpr pats lArrow expr + ] + + condition = CompBodyCondition <$> parseExpressionStrict + +-- TODO look over this, asignment of domains should happen in next stage +-- Current implementation is hacky + +parseOperator :: Parser ExpressionNode +parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") + +parseFunction :: Parser ExpressionNode +parseFunction = try $ do + name <- choice $ map need functionals + let parenP = if isOverloaded name then parenListStrict else parenList + args <- parenP $ commaList parseExpression + return $ FunctionalApplicationNode name args + where + isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals + isOverloaded _ = False + +parseAttributeAsConstraint :: Parser ExpressionNode +parseAttributeAsConstraint = do + name <- choice $ map need (attributesAsLexemes allSupportedAttributes) + args <- parenList $ commaList parseExpression + return $ AttributeAsConstriant name args + + +parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) +parsePostfixOp = do + op <- + try $ + choice + [ indexed + , factorial + , application + , explicitDomain + ] + return $ \e -> OperatorExpressionNode $ PostfixOpNode e op + where + indexed = do + lBracket <- need L_OpenBracket + indexer <- commaList parseRange + rBracket <- want L_CloseBracket + return $ IndexedNode $ ListNode lBracket indexer rBracket + factorial = OpFactorial <$> need L_ExclamationMark + application = do + lBracket <- need L_OpenParen + args <- commaList parseExpression + rBracket <- want L_CloseParen + return $ ApplicationNode $ ListNode lBracket args rBracket + explicitDomain = try $ do + lColon <- need L_Colon + lTickl <- need L_BackTick + dom <- parseDomain + lTickr <- want L_BackTick + return $ ExplicitDomain lColon lTickl dom lTickr + +-- TODO treat funcitonals differently or actually don't but why + +operatorTable :: [[Operator Parser ExpressionNode]] +operatorTable = + let operatorsGrouped = + operators + |> sortBy (\(_, a) (_, b) -> compare a b) + |> groupBy (\(_, a) (_, b) -> a == b) + |> reverse + in postfixOps + : [ [ case descr of + BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op + BinaryOp op FNone -> InfixN $ prefixBinary <$> need op + BinaryOp op FRight -> InfixR $ prefixBinary <$> need op + UnaryPrefix op -> Prefix $ prefixUnary <$> need op + | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot + -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) + (descr, _) <- operatorsInGroup + ] + | operatorsInGroup <- operatorsGrouped + ] + +prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode +prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t + +prefixUnary :: LToken -> ExpressionNode -> ExpressionNode +prefixUnary l = OperatorExpressionNode . PrefixOpNode l + +postfixOps :: [Operator Parser ExpressionNode] +postfixOps = + [ Postfix $ foldr1 (.) <$> some parsePostfixOp + ] + +-- DOMAINS +parseDomain :: Parser DomainNode +parseDomain = + do + choice + [ BoolDomainNode <$> need L_bool + , parseIntDomain + , MetaVarDomain <$> parseMetaVar + , parseTuple + , parseRecord + , parseVariant + , parseMatrix + , parseSet + , parseMSet + , parseFunctionDomain + , parseSequenceDomain + , parseRelation + , parsePartition + , parseEnumDomain + , parseShortTuple + ] + "Domain" + <|> parseMissingDomain + "missingDomain" + +parseSpecialCase :: Parser ExpressionNode +parseSpecialCase = do + lt <- need L_SpecialCase + SpecialCase lt <$> choice [parseWithDecls] + where + parseWithDecls = + do + p1 <- need L_OpenCurly + exp1 <- parseExpression + at <- need L_At + (decsl,p2) <- manyTill_ parseTopLevel (need L_CloseCurly) + + return $ ExprWithDecls p1 exp1 at decsl p2 + + + +parseIntDomain :: Parser DomainNode +parseIntDomain = do + lInt <- need L_int + ranges <- parenList $ commaList parseRange + let range = case ranges of + ListNode (MissingToken _) (Seq []) (MissingToken _) -> Nothing + _ -> Just ranges + return $ RangedIntDomainNode lInt range + +parseTuple :: Parser DomainNode +parseTuple = do + lTuple <- need L_tuple + members <- parenList $ commaList parseDomain + return $ TupleDomainNode lTuple members + +parseShortTuple :: Parser DomainNode +parseShortTuple = do + openB <- need L_OpenParen + lst <- commaList parseDomain + closeB <- want L_CloseParen + return $ ShortTupleDomainNode $ ListNode openB lst closeB + +parseRecord :: Parser DomainNode +parseRecord = do + lRecord <- need L_record + members <- curlyBracketList $ commaList parseNameDomain + return $ RecordDomainNode lRecord members + +parseVariant :: Parser DomainNode +parseVariant = do + lVariant <- need L_variant + members <- curlyBracketList $ commaList parseNameDomain + return $ VariantDomainNode lVariant members + +parseMatrix :: Parser DomainNode +parseMatrix = do + lMatrix <- need L_matrix + lIndexed <- want L_indexed + lBy <- want L_by + members <- squareBracketList $ commaList parseDomain + lOf <- want L_of + domain <- parseDomain + return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain + +parseSet :: Parser DomainNode +parseSet = do + lSet <- need L_set + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ SetDomainNode lSet attributes lOf domain + +parseMSet :: Parser DomainNode +parseMSet = do + lMSet <- need L_mset + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ MSetDomainNode lMSet attributes lOf domain + +parseFunctionDomain :: Parser DomainNode +parseFunctionDomain = do + lFunction <- need L_function + attributes <- optional parseFunctionAttributes + fromDom <- parseDomain + arrow <- want L_LongArrow + toDom <- parseDomain + return $ FunctionDomainNode lFunction attributes fromDom arrow toDom + where + parseFunctionAttributes :: Parser (ListNode AttributeNode) + parseFunctionAttributes = try $ do + openB <- want L_OpenParen + lst <- commaList1 parseAttribute + closeB <- want L_CloseBracket + return $ ListNode openB lst closeB + +parseSequenceDomain :: Parser DomainNode +parseSequenceDomain = do + lSequence <- need L_sequence + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domain <- parseDomain + return $ SequenceDomainNode lSequence attributes lOf domain + +parseRelation :: Parser DomainNode +parseRelation = do + lRelation <- need L_relation + attributes <- parenList $ commaList parseAttribute + lOf <- want L_of + domains <- parenList $ parseSequence L_Times parseDomain + return $ RelationDomainNode lRelation attributes lOf domains + +parsePartition :: Parser DomainNode +parsePartition = do + lPartition <- need L_partition + attributes <- parenList $ commaList parseAttribute + lFrom <- want L_from + domain <- parseDomain + return $ PartitionDomainNode lPartition attributes lFrom domain + +parseEnumDomain :: Parser DomainNode +parseEnumDomain = do + name <- parseIdentifierStrict + brackets <- optional $ parenListStrict (commaList parseRange) + case brackets of + Nothing -> return $ EnumDomainNode name + Just parens -> return $ RangedEnumNode name parens + +-- (RangedEnumNode name <$> try (parenList (commaList parseRange))) +-- <|> return (EnumDomainNode name) + +-- Util +parseNameDomain :: Parser NamedDomainNode +parseNameDomain = do + name <- parseIdentifierStrict + lColon <- want L_Colon + domain <- parseDomain + return $ NameDomainNode name lColon domain + +parseRange :: Parser RangeNode +parseRange = ranged <|> singleR + where + ranged = try $ do + lExpr <- optional $ try parseExpressionStrict + dots <- need L_DoubleDot + rExpr <- optional parseExpressionStrict + case (lExpr, rExpr) of + (Nothing, Nothing) -> return $ OpenRangeNode dots + (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots + (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r + (Just l, Just r) -> return $ BoundedRangeNode l dots r + singleR = SingleRangeNode <$> parseExpressionStrict + +parseAttribute :: Parser AttributeNode +parseAttribute = do + name <- choice $ map need functionAttributes -- TODO This is wrong + expr <- optional parseExpressionStrict + case expr of + Nothing -> return $ NamedAttributeNode (NameNode name) + Just en -> return $ NamedExpressionAttribute (NameNode name) en + +parseMissingDomain :: Parser DomainNode +parseMissingDomain = + do + m <- makeMissing (L_Missing "Domain") + return $ MissingDomainNode m + "Anything" + + +attributesAsLexemes :: [(Name,Int)] -> [Lexeme] +attributesAsLexemes xs = do + let xs' = map fst xs + let ys = [t | Name t <- xs'] + let lexes = map textToLexeme ys + catMaybes lexes + +--------------------------------------- +---EXAMPLES AND TESTING ---- +--------------------------------------- example :: String -> IO () example s = do let str = s @@ -241,7 +802,7 @@ parsePrint text = do parseAndRevalidate ::(VisualStream a,TraversableStream a,Stream a,Show b) => a -> ParsecT Void a Identity b -> (b -> String) -> String -> IO (Either (String,String) b) parseAndRevalidate src p f ref = do case runParser p "" src of - Left _ -> do + Left _ -> do putStrLn "Parse error" parseTest p src >> empty Right res -> return (if f res == ref then Right res else Left (f res,ref)) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs index 054ebd735d..99dcef2cbe 100644 --- a/src/Conjure/Language/AST/Expression.hs +++ b/src/Conjure/Language/AST/Expression.hs @@ -1,519 +1,537 @@ -{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +-- {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} -{-# HLINT ignore "Use <$>" #-} +-- {-# HLINT ignore "Use <$>" #-} module Conjure.Language.AST.Expression where -import Conjure.Language.AST.Helpers -import Conjure.Language.AST.Syntax -import Conjure.Language.Lexemes -import Conjure.Prelude hiding (many, some) -import Text.Megaparsec +-- import Conjure.Language.AST.Helpers +-- import Conjure.Language.AST.Syntax +-- import Conjure.Language.Lexemes +-- import Conjure.Prelude hiding (many, some) +-- import Text.Megaparsec -import Control.Monad.Combinators.Expr (Operator (..), makeExprParser) +-- import Control.Monad.Combinators.Expr (Operator (..), makeExprParser) -import Conjure.Language.Expression.Op.Internal.Common -import Conjure.Language.NewLexer (ETok(..)) -import Conjure.Language.Expression.Op.Internal.Common (overloadedFunctionals) +-- import Conjure.Language.Expression.Op.Internal.Common +-- import Conjure.Language.NewLexer (ETok(..)) +-- import Conjure.Language.Expression.Op.Internal.Common (overloadedFunctionals) +-- import Conjure.Language.AST.ASTParser (parseTopLevel) -- import Text.Megaparsec.Debug (dbg) -parseExpression :: Parser ExpressionNode -parseExpression = - parseOperator - <|> parseAtomicExpression - -parseExpressionStrict :: Parser ExpressionNode -- can fail -parseExpressionStrict = do - expr <- try parseExpression - case expr of - MissingExpressionNode _ -> empty - _ -> return expr - -parseAtomicExpression :: Parser ExpressionNode -parseAtomicExpression = do - try $ - choice - [ Literal <$> parseLiteral - , parseFunction - , IdentifierNode <$> parseIdentifierStrict - , MetaVarExpr <$> parseMetaVar - , ParenExpression <$> parseParenExpression parensPair - , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) - , QuantificationExpr <$> parseQuantificationStatement - , DomainExpression <$> parseDomainExpression - , MissingExpressionNode <$> makeMissing (L_Missing "Expression") - ] - - - -parseDomainExpression :: Parser DomainExpressionNode -parseDomainExpression = do - lTick <- need L_BackTick - domain <- parseDomain - rTick <- want L_BackTick - return $ DomainExpressionNode lTick domain rTick - --- [a,b,c : int (1..2)] --- [a,b,c : int (1..4) | x < 3,letting x be int] - - - -parseMatrixBasedExpression :: Parser LiteralNode -parseMatrixBasedExpression = do - openB <- need L_OpenBracket - exprs <- commaList parseExpression - range <- optional pOverDomain - comprehension <- optional pComp - closeB <- want L_CloseBracket - return $ MatrixLiteral $ MatrixLiteralNode openB exprs range comprehension closeB - where - pOverDomain = OverDomainNode <$> need L_Colon <*> parseDomain - pComp = do - bar <- need L_Bar - body <- commaList parseComprehensionCondition - return $ ComprehensionNode bar body - -parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode -parseParenExpression (open, close) = try $ do - lParen <- need open - body <- parseExpression - notFollowedBy $ need L_Comma - rParen <- want close - return $ ParenExpressionNode lParen body rParen - -parseLiteral :: Parser LiteralNode -parseLiteral = - choice - [ parseIntLiteral - , parseBoolLiteral - , parseMatrixBasedExpression - , parseTupleLiteral - , parseShortTupleLiteral - , parseRecordLiteral - , parseSetLiteral - , parseMSetLiteral - , parseFunctionLiteral - , parseSequenceLiteral - , parseRelationLiteral - , parsePartitionLiteral - ] - -parseShortTupleLiteral :: Parser LiteralNode -parseShortTupleLiteral = try $ do - lOpen <- need L_OpenParen - exprs <- commaList parseExpression - let Seq xs = exprs - guard (length xs > 1) - lClose <- want L_CloseParen - return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) - -parseIntLiteral :: Parser LiteralNode -parseIntLiteral = IntLiteral . RealToken <$> intLiteral - -parseBoolLiteral :: Parser LiteralNode -parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) - -parseTupleLiteral :: Parser LiteralNode -parseTupleLiteral = do - lTuple <- need L_tuple - members <- parenList $ commaList parseExpression - return $ TupleLiteralNode $ LongTuple lTuple members - -parseRecordLiteral :: Parser LiteralNode -parseRecordLiteral = do - lRecord <- need L_record - members <- curlyBracketList (commaList parseRecordMember) - return $ RecordLiteral lRecord members - -parseVariantLiteral :: Parser LiteralNode -parseVariantLiteral = do - lVariant <- need L_variant - members <- curlyBracketList (commaList parseRecordMember) - return $ RecordLiteral lVariant members - -parseRecordMember :: Parser RecordMemberNode -parseRecordMember = do - name <- parseIdentifier - lEqual <- want L_Eq - val <- parseExpression - return $ RecordMemberNode name lEqual val - -parseSetLiteral :: Parser LiteralNode -parseSetLiteral = do - -- cant just recycle list as it does not require first char - lOpen <- need L_OpenCurly - members <- commaList parseExpression - lClose <- want L_CloseCurly - return $ SetLiteral (ListNode lOpen members lClose) - -parseMSetLiteral :: Parser LiteralNode -parseMSetLiteral = do - lMSet <- need L_mset - members <- parenList (commaList parseExpression) - return $ MSetLiteral lMSet members - -parseFunctionLiteral :: Parser LiteralNode -parseFunctionLiteral = do - lFunc <- need L_function - args <- parenList (commaList parseArrowPair) - return $ FunctionLiteral lFunc args - -parseArrowPair :: Parser ArrowPairNode -parseArrowPair = try $ do - lhs <- parseExpression - arrow <- want L_LongArrow - rhs <- parseExpression - return $ ArrowPairNode lhs arrow rhs - -parseSequenceLiteral :: Parser LiteralNode -parseSequenceLiteral = do - lSeq <- need L_sequence - members <- parenList (commaList parseExpression) - return $ SequenceLiteral lSeq members - -parseRelationLiteral :: Parser LiteralNode -parseRelationLiteral = do - lRel <- need L_relation - members <- parenList (commaList parseRelationMember) - return $ RelationLiteral lRel members - -parseRelationMember :: Parser RelationElemNode -parseRelationMember = do - f <- optional $ need L_tuple - members <- parenList $ commaList parseExpression - return $ case f of - Nothing -> RelationElemNodeShort $ ShortTuple members - Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members - -parsePartitionLiteral :: Parser LiteralNode -parsePartitionLiteral = do - lPartition <- need L_partition - members <- parenList (commaList parsePartitionElem) - return $ PartitionLiteral lPartition members - -parsePartitionElem :: Parser PartitionElemNode -parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) - -parseQuantificationStatement :: Parser QuantificationExpressionNode -parseQuantificationStatement = do - lType <- choice $ map need quantifiers - terms <- commaList parseAbstractPattern - over <- parseQuantificationOver - qGuard <- optional $ do - lComma <- need L_Comma - expr <- parseExpression - return $ QuanticationGuard lComma expr - lDot <- want L_Dot - expr <- parseExpression - return $ QuantificationExpressionNode lType terms over qGuard lDot expr - where - parseQuantificationOver :: Parser QuantificationOverNode - parseQuantificationOver = - choice - [ QuantifiedMemberOfNode <$> need L_in <*> parseExpression - , QuantifiedSubsetOfNode <$> need L_subsetEq <*> parseExpression - , QuantifiedDomainNode <$> (OverDomainNode <$> want L_Colon <*> parseDomain) - ] - -parseAbstractPattern :: Parser AbstractPatternNode -parseAbstractPattern = do - choice - [ parseAbstractId - , parseAbstractMetaVar - , parseAbstractPatternTuple - , parseAbstractPatternMatrix - , parseAbstractPatternSet - ] - where - parseAbstractId :: Parser AbstractPatternNode - parseAbstractId = AbstractIdentifier <$> parseIdentifierStrict - parseAbstractMetaVar :: Parser AbstractPatternNode - parseAbstractMetaVar = AbstractMetaVar <$> parseMetaVar - parseAbstractPatternTuple :: Parser AbstractPatternNode - parseAbstractPatternTuple = do - lTuple <- optional $ need L_tuple - openB <- (if null lTuple then need else want) L_OpenParen - es <- commaList parseAbstractPattern - closeB <- want L_CloseParen - return $ AbstractPatternTuple lTuple (ListNode openB es closeB) - parseAbstractPatternMatrix :: Parser AbstractPatternNode - parseAbstractPatternMatrix = do - openB <- need L_OpenBracket - es <- commaList parseAbstractPattern - closeB <- want L_CloseBracket - return $ AbstractPatternMatrix (ListNode openB es closeB) - parseAbstractPatternSet :: Parser AbstractPatternNode - parseAbstractPatternSet = do - openB <- need L_OpenCurly - es <- commaList parseAbstractPattern - closeB <- want L_CloseCurly - return $ AbstractPatternMatrix (ListNode openB es closeB) - -parseComprehensionCondition :: Parser ComprehensionBodyNode -parseComprehensionCondition = do - letting <|> generator <|> condition - where - letting = do - lLetting <- need L_letting - v <- parseAbstractPattern - lBe <- want L_be - expr <- parseExpression - return $ CompBodyLettingNode lLetting v lBe expr - generator = try $ do - pats <- commaList parseAbstractPattern - choice - [ try $ do - lColon <- need L_Colon - domain <- parseDomain - return $ CompBodyDomain pats lColon domain - , try $ do - lArrow <- need L_LeftArrow - expr <- parseExpression - return $ CompBodyGenExpr pats lArrow expr - ] - - condition = CompBodyCondition <$> parseExpressionStrict - --- TODO look over this, asignment of domains should happen in next stage --- Current implementation is hacky - -parseOperator :: Parser ExpressionNode -parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") - -parseFunction :: Parser ExpressionNode -parseFunction = try $ do - name <- choice $ map need functionals - let parenP = if isOverloaded name then parenListStrict else parenList - args <- parenP $ commaList parseExpression - return $ FunctionalApplicationNode name args - where - isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals - isOverloaded _ = False -parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) -parsePostfixOp = do - op <- - try $ - choice - [ indexed - , factorial - , application - ] - return $ \e -> OperatorExpressionNode $ PostfixOpNode e op - where - indexed = do - lBracket <- need L_OpenBracket - indexer <- commaList parseRange - rBracket <- want L_CloseBracket - return $ IndexedNode $ ListNode lBracket indexer rBracket - factorial = OpFactorial <$> need L_ExclamationMark - application = do - lBracket <- need L_OpenParen - args <- commaList parseExpression - rBracket <- want L_CloseParen - return $ ApplicationNode $ ListNode lBracket args rBracket - --- TODO treat funcitonals differently or actually don't but why - -operatorTable :: [[Operator Parser ExpressionNode]] -operatorTable = - let operatorsGrouped = - operators - |> sortBy (\(_, a) (_, b) -> compare a b) - |> groupBy (\(_, a) (_, b) -> a == b) - |> reverse - in postfixOps - : [ [ case descr of - BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op - BinaryOp op FNone -> InfixN $ prefixBinary <$> need op - BinaryOp op FRight -> InfixR $ prefixBinary <$> need op - UnaryPrefix op -> Prefix $ prefixUnary <$> need op - | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot - -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) - (descr, _) <- operatorsInGroup - ] - | operatorsInGroup <- operatorsGrouped - ] - -prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode -prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t - -prefixUnary :: LToken -> ExpressionNode -> ExpressionNode -prefixUnary l = OperatorExpressionNode . PrefixOpNode l - -postfixOps :: [Operator Parser ExpressionNode] -postfixOps = - [ Postfix $ foldr1 (.) <$> some parsePostfixOp - ] - --- DOMAINS -parseDomain :: Parser DomainNode -parseDomain = - do - choice - [ BoolDomainNode <$> need L_bool - , parseIntDomain - , MetaVarDomain <$> parseMetaVar - , parseTuple - , parseRecord - , parseVariant - , parseMatrix - , parseSet - , parseMSet - , parseFunctionDomain - , parseSequenceDomain - , parseRelation - , parsePartition - , parseEnumDomain - , parseShortTuple - ] - "Domain" - <|> parseMissingDomain - "missingDomain" - -parseIntDomain :: Parser DomainNode -parseIntDomain = do - lInt <- need L_int - ranges <- parenList $ commaList parseRange - let range = case ranges of - ListNode (MissingToken _) (Seq []) (MissingToken _) -> Nothing - _ -> Just ranges - return $ RangedIntDomainNode lInt range - -parseTuple :: Parser DomainNode -parseTuple = do - lTuple <- need L_tuple - members <- parenList $ commaList parseDomain - return $ TupleDomainNode lTuple members - -parseShortTuple :: Parser DomainNode -parseShortTuple = do - openB <- need L_OpenParen - lst <- commaList parseDomain - closeB <- want L_CloseParen - return $ ShortTupleDomainNode $ ListNode openB lst closeB - -parseRecord :: Parser DomainNode -parseRecord = do - lRecord <- need L_record - members <- curlyBracketList $ commaList parseNameDomain - return $ RecordDomainNode lRecord members - -parseVariant :: Parser DomainNode -parseVariant = do - lVariant <- need L_variant - members <- curlyBracketList $ commaList parseNameDomain - return $ VariantDomainNode lVariant members - -parseMatrix :: Parser DomainNode -parseMatrix = do - lMatrix <- need L_matrix - lIndexed <- want L_indexed - lBy <- want L_by - members <- squareBracketList $ commaList parseDomain - lOf <- want L_of - domain <- parseDomain - return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain - -parseSet :: Parser DomainNode -parseSet = do - lSet <- need L_set - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domain <- parseDomain - return $ SetDomainNode lSet attributes lOf domain - -parseMSet :: Parser DomainNode -parseMSet = do - lMSet <- need L_mset - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domain <- parseDomain - return $ MSetDomainNode lMSet attributes lOf domain - -parseFunctionDomain :: Parser DomainNode -parseFunctionDomain = do - lFunction <- need L_function - attributes <- optional parseFunctionAttributes - fromDom <- parseDomain - arrow <- want L_LongArrow - toDom <- parseDomain - return $ FunctionDomainNode lFunction attributes fromDom arrow toDom - where - parseFunctionAttributes :: Parser (ListNode AttributeNode) - parseFunctionAttributes = try $ do - openB <- want L_OpenParen - lst <- commaList1 parseAttribute - closeB <- want L_CloseBracket - return $ ListNode openB lst closeB - -parseSequenceDomain :: Parser DomainNode -parseSequenceDomain = do - lSequence <- need L_sequence - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domain <- parseDomain - return $ SequenceDomainNode lSequence attributes lOf domain - -parseRelation :: Parser DomainNode -parseRelation = do - lRelation <- need L_relation - attributes <- parenList $ commaList parseAttribute - lOf <- want L_of - domains <- parenList $ parseSequence L_Times parseDomain - return $ RelationDomainNode lRelation attributes lOf domains - -parsePartition :: Parser DomainNode -parsePartition = do - lPartition <- need L_partition - attributes <- parenList $ commaList parseAttribute - lFrom <- want L_from - domain <- parseDomain - return $ PartitionDomainNode lPartition attributes lFrom domain - -parseEnumDomain :: Parser DomainNode -parseEnumDomain = do - name <- parseIdentifierStrict - brackets <- optional $ parenListStrict (commaList parseRange) - case brackets of - Nothing -> return $ EnumDomainNode name - Just parens -> return $ RangedEnumNode name parens - --- (RangedEnumNode name <$> try (parenList (commaList parseRange))) --- <|> return (EnumDomainNode name) - --- Util -parseNameDomain :: Parser NamedDomainNode -parseNameDomain = do - name <- parseIdentifierStrict - lColon <- want L_Colon - domain <- parseDomain - return $ NameDomainNode name lColon domain - -parseRange :: Parser RangeNode -parseRange = ranged <|> singleR - where - ranged = try $ do - lExpr <- optional $ try parseExpressionStrict - dots <- need L_DoubleDot - rExpr <- optional parseExpressionStrict - case (lExpr, rExpr) of - (Nothing, Nothing) -> return $ OpenRangeNode dots - (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots - (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r - (Just l, Just r) -> return $ BoundedRangeNode l dots r - singleR = SingleRangeNode <$> parseExpressionStrict - -parseAttribute :: Parser AttributeNode -parseAttribute = do - name <- choice $ map need functionAttributes -- TODO This is wrong - expr <- optional parseExpressionStrict - case expr of - Nothing -> return $ NamedAttributeNode (NameNode name) - Just en -> return $ NamedExpressionAttribute (NameNode name) en - -parseMissingDomain :: Parser DomainNode -parseMissingDomain = - do - m <- makeMissing (L_Missing "Domain") - return $ MissingDomainNode m - "Anything" \ No newline at end of file +-- parseExpression :: Parser ExpressionNode +-- parseExpression = +-- parseOperator +-- <|> parseAtomicExpression + +-- parseExpressionStrict :: Parser ExpressionNode -- can fail +-- parseExpressionStrict = do +-- expr <- try parseExpression +-- case expr of +-- MissingExpressionNode _ -> empty +-- _ -> return expr + +-- parseAtomicExpression :: Parser ExpressionNode +-- parseAtomicExpression = do +-- try $ +-- choice +-- [ Literal <$> parseLiteral +-- , parseFunction +-- , IdentifierNode <$> parseIdentifierStrict +-- , MetaVarExpr <$> parseMetaVar +-- , ParenExpression <$> parseParenExpression parensPair +-- , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) +-- , QuantificationExpr <$> parseQuantificationStatement +-- , DomainExpression <$> parseDomainExpression +-- , MissingExpressionNode <$> makeMissing (L_Missing "Expression") +-- ] + + + +-- parseDomainExpression :: Parser DomainExpressionNode +-- parseDomainExpression = do +-- lTick <- need L_BackTick +-- domain <- parseDomain +-- rTick <- want L_BackTick +-- return $ DomainExpressionNode lTick domain rTick + +-- -- [a,b,c : int (1..2)] +-- -- [a,b,c : int (1..4) | x < 3,letting x be int] + + + +-- parseMatrixBasedExpression :: Parser LiteralNode +-- parseMatrixBasedExpression = do +-- openB <- need L_OpenBracket +-- exprs <- commaList parseExpression +-- range <- optional pOverDomain +-- comprehension <- optional pComp +-- closeB <- want L_CloseBracket +-- return $ MatrixLiteral $ MatrixLiteralNode openB exprs range comprehension closeB +-- where +-- pOverDomain = OverDomainNode <$> need L_Colon <*> parseDomain +-- pComp = do +-- bar <- need L_Bar +-- body <- commaList parseComprehensionCondition +-- return $ ComprehensionNode bar body + +-- parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode +-- parseParenExpression (open, close) = try $ do +-- lParen <- need open +-- body <- parseExpression +-- notFollowedBy $ need L_Comma +-- rParen <- want close +-- return $ ParenExpressionNode lParen body rParen + +-- parseLiteral :: Parser LiteralNode +-- parseLiteral = +-- choice +-- [ parseIntLiteral +-- , parseBoolLiteral +-- , parseMatrixBasedExpression +-- , parseTupleLiteral +-- , parseShortTupleLiteral +-- , parseRecordLiteral +-- , parseSetLiteral +-- , parseMSetLiteral +-- , parseFunctionLiteral +-- , parseSequenceLiteral +-- , parseRelationLiteral +-- , parsePartitionLiteral +-- ] + +-- parseShortTupleLiteral :: Parser LiteralNode +-- parseShortTupleLiteral = try $ do +-- lOpen <- need L_OpenParen +-- exprs <- commaList parseExpression +-- let Seq xs = exprs +-- guard (length xs > 1) +-- lClose <- want L_CloseParen +-- return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) + +-- parseIntLiteral :: Parser LiteralNode +-- parseIntLiteral = IntLiteral . RealToken <$> intLiteral + +-- parseBoolLiteral :: Parser LiteralNode +-- parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) + +-- parseTupleLiteral :: Parser LiteralNode +-- parseTupleLiteral = do +-- lTuple <- need L_tuple +-- members <- parenList $ commaList parseExpression +-- return $ TupleLiteralNode $ LongTuple lTuple members + +-- parseRecordLiteral :: Parser LiteralNode +-- parseRecordLiteral = do +-- lRecord <- need L_record +-- members <- curlyBracketList (commaList parseRecordMember) +-- return $ RecordLiteral lRecord members + +-- parseVariantLiteral :: Parser LiteralNode +-- parseVariantLiteral = do +-- lVariant <- need L_variant +-- members <- curlyBracketList (commaList parseRecordMember) +-- return $ RecordLiteral lVariant members + +-- parseRecordMember :: Parser RecordMemberNode +-- parseRecordMember = do +-- name <- parseIdentifier +-- lEqual <- want L_Eq +-- val <- parseExpression +-- return $ RecordMemberNode name lEqual val + +-- parseSetLiteral :: Parser LiteralNode +-- parseSetLiteral = do +-- -- cant just recycle list as it does not require first char +-- lOpen <- need L_OpenCurly +-- members <- commaList parseExpression +-- lClose <- want L_CloseCurly +-- return $ SetLiteral (ListNode lOpen members lClose) + +-- parseMSetLiteral :: Parser LiteralNode +-- parseMSetLiteral = do +-- lMSet <- need L_mset +-- members <- parenList (commaList parseExpression) +-- return $ MSetLiteral lMSet members + +-- parseFunctionLiteral :: Parser LiteralNode +-- parseFunctionLiteral = do +-- lFunc <- need L_function +-- args <- parenList (commaList parseArrowPair) +-- return $ FunctionLiteral lFunc args + +-- parseArrowPair :: Parser ArrowPairNode +-- parseArrowPair = try $ do +-- lhs <- parseExpression +-- arrow <- want L_LongArrow +-- rhs <- parseExpression +-- return $ ArrowPairNode lhs arrow rhs + +-- parseSequenceLiteral :: Parser LiteralNode +-- parseSequenceLiteral = do +-- lSeq <- need L_sequence +-- members <- parenList (commaList parseExpression) +-- return $ SequenceLiteral lSeq members + +-- parseRelationLiteral :: Parser LiteralNode +-- parseRelationLiteral = do +-- lRel <- need L_relation +-- members <- parenList (commaList parseRelationMember) +-- return $ RelationLiteral lRel members + +-- parseRelationMember :: Parser RelationElemNode +-- parseRelationMember = do +-- f <- optional $ need L_tuple +-- members <- parenList $ commaList parseExpression +-- return $ case f of +-- Nothing -> RelationElemNodeShort $ ShortTuple members +-- Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members + +-- parsePartitionLiteral :: Parser LiteralNode +-- parsePartitionLiteral = do +-- lPartition <- need L_partition +-- members <- parenList (commaList parsePartitionElem) +-- return $ PartitionLiteral lPartition members + +-- parsePartitionElem :: Parser PartitionElemNode +-- parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) + +-- parseQuantificationStatement :: Parser QuantificationExpressionNode +-- parseQuantificationStatement = do +-- lType <- choice $ map need quantifiers +-- terms <- commaList parseAbstractPattern +-- over <- parseQuantificationOver +-- qGuard <- optional $ do +-- lComma <- need L_Comma +-- expr <- parseExpression +-- return $ QuanticationGuard lComma expr +-- lDot <- want L_Dot +-- expr <- parseExpression +-- return $ QuantificationExpressionNode lType terms over qGuard lDot expr +-- where +-- parseQuantificationOver :: Parser QuantificationOverNode +-- parseQuantificationOver = +-- choice +-- [ QuantifiedMemberOfNode <$> need L_in <*> parseExpression +-- , QuantifiedSubsetOfNode <$> need L_subsetEq <*> parseExpression +-- , QuantifiedDomainNode <$> (OverDomainNode <$> want L_Colon <*> parseDomain) +-- ] + +-- parseAbstractPattern :: Parser AbstractPatternNode +-- parseAbstractPattern = do +-- choice +-- [ parseAbstractId +-- , parseAbstractMetaVar +-- , parseAbstractPatternTuple +-- , parseAbstractPatternMatrix +-- , parseAbstractPatternSet +-- ] +-- where +-- parseAbstractId :: Parser AbstractPatternNode +-- parseAbstractId = AbstractIdentifier <$> parseIdentifierStrict +-- parseAbstractMetaVar :: Parser AbstractPatternNode +-- parseAbstractMetaVar = AbstractMetaVar <$> parseMetaVar +-- parseAbstractPatternTuple :: Parser AbstractPatternNode +-- parseAbstractPatternTuple = do +-- lTuple <- optional $ need L_tuple +-- openB <- (if null lTuple then need else want) L_OpenParen +-- es <- commaList parseAbstractPattern +-- closeB <- want L_CloseParen +-- return $ AbstractPatternTuple lTuple (ListNode openB es closeB) +-- parseAbstractPatternMatrix :: Parser AbstractPatternNode +-- parseAbstractPatternMatrix = do +-- openB <- need L_OpenBracket +-- es <- commaList parseAbstractPattern +-- closeB <- want L_CloseBracket +-- return $ AbstractPatternMatrix (ListNode openB es closeB) +-- parseAbstractPatternSet :: Parser AbstractPatternNode +-- parseAbstractPatternSet = do +-- openB <- need L_OpenCurly +-- es <- commaList parseAbstractPattern +-- closeB <- want L_CloseCurly +-- return $ AbstractPatternMatrix (ListNode openB es closeB) + +-- parseComprehensionCondition :: Parser ComprehensionBodyNode +-- parseComprehensionCondition = do +-- letting <|> generator <|> condition +-- where +-- letting = do +-- lLetting <- need L_letting +-- v <- parseAbstractPattern +-- lBe <- want L_be +-- expr <- parseExpression +-- return $ CompBodyLettingNode lLetting v lBe expr +-- generator = try $ do +-- pats <- commaList parseAbstractPattern +-- choice +-- [ try $ do +-- lColon <- need L_Colon +-- domain <- parseDomain +-- return $ CompBodyDomain pats lColon domain +-- , try $ do +-- lArrow <- need L_LeftArrow +-- expr <- parseExpression +-- return $ CompBodyGenExpr pats lArrow expr +-- ] + +-- condition = CompBodyCondition <$> parseExpressionStrict + +-- -- TODO look over this, asignment of domains should happen in next stage +-- -- Current implementation is hacky + +-- parseOperator :: Parser ExpressionNode +-- parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") + +-- parseFunction :: Parser ExpressionNode +-- parseFunction = try $ do +-- name <- choice $ map need functionals +-- let parenP = if isOverloaded name then parenListStrict else parenList +-- args <- parenP $ commaList parseExpression +-- return $ FunctionalApplicationNode name args +-- where +-- isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals +-- isOverloaded _ = False +-- parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) +-- parsePostfixOp = do +-- op <- +-- try $ +-- choice +-- [ indexed +-- , factorial +-- , application +-- ] +-- return $ \e -> OperatorExpressionNode $ PostfixOpNode e op +-- where +-- indexed = do +-- lBracket <- need L_OpenBracket +-- indexer <- commaList parseRange +-- rBracket <- want L_CloseBracket +-- return $ IndexedNode $ ListNode lBracket indexer rBracket +-- factorial = OpFactorial <$> need L_ExclamationMark +-- application = do +-- lBracket <- need L_OpenParen +-- args <- commaList parseExpression +-- rBracket <- want L_CloseParen +-- return $ ApplicationNode $ ListNode lBracket args rBracket + +-- -- TODO treat funcitonals differently or actually don't but why + +-- operatorTable :: [[Operator Parser ExpressionNode]] +-- operatorTable = +-- let operatorsGrouped = +-- operators +-- |> sortBy (\(_, a) (_, b) -> compare a b) +-- |> groupBy (\(_, a) (_, b) -> a == b) +-- |> reverse +-- in postfixOps +-- : [ [ case descr of +-- BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op +-- BinaryOp op FNone -> InfixN $ prefixBinary <$> need op +-- BinaryOp op FRight -> InfixR $ prefixBinary <$> need op +-- UnaryPrefix op -> Prefix $ prefixUnary <$> need op +-- | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot +-- -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) +-- (descr, _) <- operatorsInGroup +-- ] +-- | operatorsInGroup <- operatorsGrouped +-- ] + +-- prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode +-- prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t + +-- prefixUnary :: LToken -> ExpressionNode -> ExpressionNode +-- prefixUnary l = OperatorExpressionNode . PrefixOpNode l + +-- postfixOps :: [Operator Parser ExpressionNode] +-- postfixOps = +-- [ Postfix $ foldr1 (.) <$> some parsePostfixOp +-- ] + +-- -- DOMAINS +-- parseDomain :: Parser DomainNode +-- parseDomain = +-- do +-- choice +-- [ BoolDomainNode <$> need L_bool +-- , parseIntDomain +-- , MetaVarDomain <$> parseMetaVar +-- , parseTuple +-- , parseRecord +-- , parseVariant +-- , parseMatrix +-- , parseSet +-- , parseMSet +-- , parseFunctionDomain +-- , parseSequenceDomain +-- , parseRelation +-- , parsePartition +-- , parseEnumDomain +-- , parseShortTuple +-- ] +-- "Domain" +-- <|> parseMissingDomain +-- "missingDomain" + +-- parseSpecialCase :: Parser ExpressionNode +-- parseSpecialCase = do +-- lt <- need L_SpecialCase +-- SpecialCase lt <$> choice [parseWithDecls] + +-- where +-- parseWithDecls = +-- do +-- p1 <- need L_OpenBracket +-- exp1 <- parseExpression +-- at <- need L_At +-- decsl <- many parseTopLevel +-- p2 <- need L_CloseBracket +-- return $ ExprWithDecls p1 exp1 at dels p2 + + + +-- parseIntDomain :: Parser DomainNode +-- parseIntDomain = do +-- lInt <- need L_int +-- ranges <- parenList $ commaList parseRange +-- let range = case ranges of +-- ListNode (MissingToken _) (Seq []) (MissingToken _) -> Nothing +-- _ -> Just ranges +-- return $ RangedIntDomainNode lInt range + +-- parseTuple :: Parser DomainNode +-- parseTuple = do +-- lTuple <- need L_tuple +-- members <- parenList $ commaList parseDomain +-- return $ TupleDomainNode lTuple members + +-- parseShortTuple :: Parser DomainNode +-- parseShortTuple = do +-- openB <- need L_OpenParen +-- lst <- commaList parseDomain +-- closeB <- want L_CloseParen +-- return $ ShortTupleDomainNode $ ListNode openB lst closeB + +-- parseRecord :: Parser DomainNode +-- parseRecord = do +-- lRecord <- need L_record +-- members <- curlyBracketList $ commaList parseNameDomain +-- return $ RecordDomainNode lRecord members + +-- parseVariant :: Parser DomainNode +-- parseVariant = do +-- lVariant <- need L_variant +-- members <- curlyBracketList $ commaList parseNameDomain +-- return $ VariantDomainNode lVariant members + +-- parseMatrix :: Parser DomainNode +-- parseMatrix = do +-- lMatrix <- need L_matrix +-- lIndexed <- want L_indexed +-- lBy <- want L_by +-- members <- squareBracketList $ commaList parseDomain +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain + +-- parseSet :: Parser DomainNode +-- parseSet = do +-- lSet <- need L_set +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ SetDomainNode lSet attributes lOf domain + +-- parseMSet :: Parser DomainNode +-- parseMSet = do +-- lMSet <- need L_mset +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ MSetDomainNode lMSet attributes lOf domain + +-- parseFunctionDomain :: Parser DomainNode +-- parseFunctionDomain = do +-- lFunction <- need L_function +-- attributes <- optional parseFunctionAttributes +-- fromDom <- parseDomain +-- arrow <- want L_LongArrow +-- toDom <- parseDomain +-- return $ FunctionDomainNode lFunction attributes fromDom arrow toDom +-- where +-- parseFunctionAttributes :: Parser (ListNode AttributeNode) +-- parseFunctionAttributes = try $ do +-- openB <- want L_OpenParen +-- lst <- commaList1 parseAttribute +-- closeB <- want L_CloseBracket +-- return $ ListNode openB lst closeB + +-- parseSequenceDomain :: Parser DomainNode +-- parseSequenceDomain = do +-- lSequence <- need L_sequence +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domain <- parseDomain +-- return $ SequenceDomainNode lSequence attributes lOf domain + +-- parseRelation :: Parser DomainNode +-- parseRelation = do +-- lRelation <- need L_relation +-- attributes <- parenList $ commaList parseAttribute +-- lOf <- want L_of +-- domains <- parenList $ parseSequence L_Times parseDomain +-- return $ RelationDomainNode lRelation attributes lOf domains + +-- parsePartition :: Parser DomainNode +-- parsePartition = do +-- lPartition <- need L_partition +-- attributes <- parenList $ commaList parseAttribute +-- lFrom <- want L_from +-- domain <- parseDomain +-- return $ PartitionDomainNode lPartition attributes lFrom domain + +-- parseEnumDomain :: Parser DomainNode +-- parseEnumDomain = do +-- name <- parseIdentifierStrict +-- brackets <- optional $ parenListStrict (commaList parseRange) +-- case brackets of +-- Nothing -> return $ EnumDomainNode name +-- Just parens -> return $ RangedEnumNode name parens + +-- -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) +-- -- <|> return (EnumDomainNode name) + +-- -- Util +-- parseNameDomain :: Parser NamedDomainNode +-- parseNameDomain = do +-- name <- parseIdentifierStrict +-- lColon <- want L_Colon +-- domain <- parseDomain +-- return $ NameDomainNode name lColon domain + +-- parseRange :: Parser RangeNode +-- parseRange = ranged <|> singleR +-- where +-- ranged = try $ do +-- lExpr <- optional $ try parseExpressionStrict +-- dots <- need L_DoubleDot +-- rExpr <- optional parseExpressionStrict +-- case (lExpr, rExpr) of +-- (Nothing, Nothing) -> return $ OpenRangeNode dots +-- (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots +-- (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r +-- (Just l, Just r) -> return $ BoundedRangeNode l dots r +-- singleR = SingleRangeNode <$> parseExpressionStrict + +-- parseAttribute :: Parser AttributeNode +-- parseAttribute = do +-- name <- choice $ map need functionAttributes -- TODO This is wrong +-- expr <- optional parseExpressionStrict +-- case expr of +-- Nothing -> return $ NamedAttributeNode (NameNode name) +-- Just en -> return $ NamedExpressionAttribute (NameNode name) en + +-- parseMissingDomain :: Parser DomainNode +-- parseMissingDomain = +-- do +-- m <- makeMissing (L_Missing "Domain") +-- return $ MissingDomainNode m +-- "Anything" \ No newline at end of file diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index fbb2ffd202..909d5d2a12 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -83,8 +83,13 @@ instance Flattenable ETok ExpressionNode where AbsExpression pen -> flatten pen DomainExpression dex -> flatten dex FunctionalApplicationNode lt ln -> flatten lt ++ flatten ln + SpecialCase lt nd -> flatten lt ++ flatten nd + AttributeAsConstriant l1 exprs -> flatten l1 ++ flatten exprs MissingExpressionNode _ -> [] +instance Flattenable ETok SpecialCaseNode where + flatten x = case x of + ExprWithDecls l1 en l2 sns l3 -> concat [flatten l1,flatten l2, flatten l2, flatten sns , flatten l3] instance Flattenable ETok DomainExpressionNode where flatten (DomainExpressionNode a b c) = flatten a ++ flatten b ++ flatten c @@ -187,6 +192,7 @@ instance Flattenable ETok PostfixOpNode where IndexedNode l -> flatten l OpFactorial lt -> flatten lt ApplicationNode ln -> flatten ln + ExplicitDomain l1 l2 dom l3 -> concat [flatten l1,flatten l2,flatten dom,flatten l3] instance Flattenable ETok DomainNode where flatten x = case x of @@ -245,6 +251,8 @@ instance Flattenable ETok b => Flattenable ETok (Sequence b) where instance Flattenable ETok b => Flattenable ETok (SeqElem b) where flatten (SeqElem s v) = flatten s ++ flatten v +instance Flattenable ETok b => Flattenable ETok [b] where + flatten = concatMap flatten diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 0c5e51014d..c1901cc821 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -170,16 +170,22 @@ newtype NameNode = NameNode LToken data ExpressionNode = Literal LiteralNode | IdentifierNode NameNode - | MetaVarExpr LToken + | MetaVarExpr LToken | QuantificationExpr QuantificationExpressionNode | OperatorExpressionNode OperatorExpressionNode | DomainExpression DomainExpressionNode | ParenExpression ParenExpressionNode | AbsExpression ParenExpressionNode | FunctionalApplicationNode LToken (ListNode ExpressionNode) + | AttributeAsConstriant LToken (ListNode ExpressionNode) | MissingExpressionNode LToken + | SpecialCase LToken SpecialCaseNode deriving (Show) +data SpecialCaseNode = ExprWithDecls LToken ExpressionNode LToken [StatementNode] LToken + deriving (Show) + + data DomainExpressionNode = DomainExpressionNode LToken DomainNode LToken deriving (Show) @@ -293,6 +299,7 @@ data OperatorExpressionNode data PostfixOpNode = IndexedNode (ListNode RangeNode) | OpFactorial LToken + | ExplicitDomain LToken LToken DomainNode LToken | ApplicationNode (ListNode ExpressionNode) deriving (Show) diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index dcf16988da..bcf5dbc2c1 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -267,6 +267,7 @@ data Lexeme -- helper | L_Missing String | L_EOF + | L_SpecialCase deriving (Eq, Ord, Show,Generic) --Generic @@ -460,6 +461,8 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_transform, "transform") + + , ( L_SpecialCase, "?#") ] textToLexeme :: T.Text -> Maybe Lexeme @@ -485,7 +488,7 @@ lexemeFace l = Just t -> (T.unpack t) lexemeText :: Lexeme -> T.Text -lexemeText l = T.pack $ show (lexemeFace l) +lexemeText l = fromMaybe (T.pack $ show l) (M.lookup l mapLexemeToText) --Categories functionAttributes :: [Lexeme] diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index dddc1f2623..14a9aaec1a 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -42,13 +42,11 @@ import Conjure.Language.Validator (Validator(..)) import qualified Conjure.Language.Validator as V import qualified Conjure.Language.AST.ASTParser as P import qualified Conjure.Language.AST.Syntax as S -import qualified Conjure.Language.AST.Expression as E import Conjure.Language.AST.ASTParser (ParserError, runASTParser, parseProgram) -- containers -- import qualified Data.Set as S ( null, fromList, toList ) import Data.Void (Void) import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) -import Conjure.Language.AST.Expression (parseExpression) type Pipeline a b = (Parsec Void ETokenStream a,a -> Validator b) @@ -253,11 +251,11 @@ parseTopLevels = (P.parseProgram,V.validateProgramTree) -- return (RangeSingle x) parseDomain :: Pipeline DomainNode (Domain () Expression) -parseDomain = (E.parseDomain,V.validateDomain) +parseDomain = (P.parseDomain,V.validateDomain) parseDomainWithRepr :: Pipeline DomainNode (Domain HasRepresentation Expression) -parseDomainWithRepr = (E.parseDomain,V.validateDomainWithRepr) +parseDomainWithRepr = (P.parseDomain,V.validateDomainWithRepr) -- -- TODO: uncomment the following to parse (union, intersect and minus) for domains -- -- let -- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] @@ -649,7 +647,7 @@ parseDomainWithRepr = (E.parseDomain,V.validateDomainWithRepr) -- metaVarInE = ExpressionMetaVar parseExpr :: Pipeline S.ExpressionNode Expression -parseExpr = (E.parseExpression,V.validateExpression) +parseExpr = (P.parseExpression,V.validateExpression) -- let -- mergeOp op = mkBinOp (lexemeText op) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 47810d09d4..0be531ba01 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -25,8 +25,9 @@ import Conjure.Language.Expression.Op mkBinOp, Op(MkOpRelationProj, MkOpSlicing, MkOpIndexing), OpRelationProj(OpRelationProj), - OpIndexing(OpIndexing), OpType (..), + OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), ) +import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) validateModel :: ProgramTree -> Validator Model validateModel model = do @@ -380,8 +381,43 @@ validateExpression expr = case expr of exp' <- validateExpression exp return $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln + AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs + SpecialCase l1 scn -> checkSymbols [l1] >> validateSpecialCase scn MissingExpressionNode lt -> invalid $ TokenError lt +validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> Validator Expression +validateAttributeAsConstraint l1 exprs = do + checkSymbols [l1] + es <- validateList validateExpression exprs + do + lx <- validateSymbol l1 + let n = lookup (Name (lexemeText lx)) allSupportedAttributes + case (n,es) of + (Just 1 , [e,v]) -> return $ aacBuilder e lx (Just v) + (Just 1 , _) -> invalid $ StateError $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es) + (Just 0 , [e]) -> return $ aacBuilder e lx Nothing + (Just 0 , _) -> invalid $ StateError $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es) + (_,_) -> invalid (IllegalToken l1) + where + aacBuilder e lx y= Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e (fromString (lexemeFace lx)) y + +validateSpecialCase :: SpecialCaseNode -> Validator Expression +validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do + checkSymbols [l1,l2,l3] + expr <- validateExpression ex + conds <- validateProgramTree $ ProgramTree sts l3 + let decls = + [ Declaration (FindOrGiven LocalFind nm dom) + | Declaration (FindOrGiven Find nm dom) <- conds ] + let cons = concat + [ xs + | SuchThat xs <- conds + ] + let locals = if null decls + then DefinednessConstraints cons + else AuxiliaryVars (decls ++ [SuchThat cons]) + return (WithLocals expr locals) + translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of L_ForAll -> FunctionOp L_fAnd @@ -464,7 +500,7 @@ validateOperatorExpression (PrefixOpNode lt expr) = do expr <- validate $ validateExpression expr verify $ do op' <- op - expr' <- expr + expr' <- expr return $ mkOp (PrefixOp op') [expr'] --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do @@ -502,6 +538,16 @@ validatePostfixOp (IndexedNode ln) = do in case a of Left ex -> \m -> Op $ MkOpIndexing (OpIndexing m ex) Right (i,j) -> \m -> Op $ MkOpSlicing (OpSlicing m i j) +validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do + checkSymbols [l1,l2,l3] + dom' <- validateDomain dom + let t = getType dom' + case t of + Nothing -> invalid $ StateError $ "Some type bug with:" ++ show dom' + Just ty -> return (\ex -> Typed ex ty) + where + getType :: Domain () Expression -> Maybe Type + getType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d validateLiteral :: LiteralNode -> Validator Expression validateLiteral ln = case ln of @@ -542,13 +588,13 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do elems <- validate $ validateSequence validateExpression se gens <- validate $ validateComprehension comp enforceConstraint ((\x -> length x == 1 )<$> elems) "List comprehension must contain exactly one expression before |" - verify $ do - ms <- elems + verify $ do + ms <- elems gs <- gens - case ms of + case ms of [x] -> return $ Comprehension x gs - _ -> Nothing - + _ -> Nothing + validateComprehension :: ComprehensionNode -> Validator [GeneratorOrCondition] @@ -560,7 +606,7 @@ validateComprehensionBody (CompBodyDomain apn l1 dom) = do checkSymbols [l1] pats <- validate $ validateSequence validateAbstractPattern apn domain <- validate $ validateDomain dom - verify $ do + verify $ do ps <- pats d <- domain return [Generator (GenDomainNoRepr pat d) | pat <- ps] @@ -569,7 +615,7 @@ validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] pats <- validate $ validateSequence validateAbstractPattern apn exp <- validate $ validateExpression en - verify $ do + verify $ do ps <- pats e <- exp return [Generator (GenInExpr pat e)| pat <- ps] @@ -584,9 +630,9 @@ mkAbstractLiteral :: AbstractLiteral Expression -> Expression mkAbstractLiteral = AbstractLiteral enforceConstraint :: Maybe Bool -> String -> Validator () -enforceConstraint p msg = do +enforceConstraint p msg = do case p of - Just True-> pure () + Just True-> pure () _ -> invalid $ StateError msg diff --git a/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs b/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs index 3c827208c2..7f366e93ab 100644 --- a/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs +++ b/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs @@ -78,7 +78,7 @@ rule_Image_NotABool = "function-image{Function1DPartial}-not-a-bool" `namedRule` [flags,values] <- downX1 f return ( "Function image, Function1DPartial representation, not-a-bool" - , return [essence| { &values[&x] + , return [essence| ?#{ &values[&x] @ such that &flags[&x] } |] @@ -97,7 +97,7 @@ rule_Image_Bool = "function-image{Function1DPartial}-bool" `namedRule` theRule w TypeBool -> do [flags,values] <- downX1 f tell $ return [essence| &flags[&x] |] - return [essence| { &values[&x] @ such that &flags[&x] } |] + return [essence| ?#{ &values[&x] @ such that &flags[&x] } |] _ -> return ch imageChild ch = return ch topMost <- asks isTopMostZ diff --git a/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs b/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs index dd7ebcc40a..d3c652ee8a 100644 --- a/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs +++ b/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs @@ -21,7 +21,7 @@ rule_Image_NotABool = "function-image{FunctionNDPartial}-not-a-bool" `namedRule` return ( "Function image, FunctionNDPartial representation, not-a-bool" - , return [essence| { &valuesIndexed + , return [essence| ?#{ &valuesIndexed @ such that &flagsIndexed } |] ) @@ -52,7 +52,7 @@ rule_Image_Bool = "function-image{FunctionNDPartial}-bool" `namedRule` theRule w let flagsCombined = make opAnd $ fromList flags return ( "Function image, FunctionNDPartial representation, bool" - , return [essence| { &p' @ such that &flagsCombined } |] + , return [essence| ?#{ &p' @ such that &flagsCombined } |] ) diff --git a/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs b/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs index a0425ea492..9bd6c066b9 100644 --- a/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs +++ b/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs @@ -61,7 +61,7 @@ rule_Image_NotABool = "sequence-image{ExplicitBounded}-not-a-bool" `namedRule` t [sLength,sValues] <- downX1 sequ return ( "Sequence image, ExplicitBounded representation, not-a-bool" - , return [essence| { &sValues[&x] + , return [essence| ?#{ &sValues[&x] @ such that &x <= &sLength } |] @@ -90,7 +90,7 @@ rule_Image_Bool = "sequence-image{ExplicitBounded}-bool" `namedRule` theRule whe let flagsCombined = make opAnd $ fromList flags return ( "Sequence image, ExplicitBounded representation, bool" - , return [essence| { &p' @ such that &flagsCombined } |] + , return [essence| ?#{ &p' @ such that &flagsCombined } |] ) rule_Leq :: Rule diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 4bf3cf9c29..22366d5f3c 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -51,7 +51,7 @@ import qualified Data.HashMap.Strict as M -- unordered-containers import System.FilePath ( splitFileName, takeBaseName, (<.>) ) -- system-filepath -import qualified Filesystem.Path as Sys ( FilePath ) +-- import qualified Filesystem.Path as Sys ( FilePath ) -- directory import System.Directory ( copyFile, findExecutable ) @@ -743,7 +743,7 @@ pp LogNone = const $ return () pp _ = liftIO . putStrLn . renderNormal -savilerowScriptName :: Sys.FilePath +savilerowScriptName :: FilePath savilerowScriptName | os `elem` ["darwin", "linux"] = "savilerow" | os `elem` ["mingw32"] = "savilerow.bat" From 897292f2746e340cf7dceaed8bc12d583af57cf9 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 15 Oct 2022 20:11:00 +0100 Subject: [PATCH 068/378] Fixed compilation errors in tests --- src/test/Conjure/Custom.hs | 4 ++-- src/test/Conjure/ModelAllSolveAll.hs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/test/Conjure/Custom.hs b/src/test/Conjure/Custom.hs index 93e4420711..fa54ed16ee 100644 --- a/src/test/Conjure/Custom.hs +++ b/src/test/Conjure/Custom.hs @@ -15,7 +15,7 @@ import Test.Tasty.HUnit ( testCaseSteps, assertFailure ) import Data.Text.IO as T ( readFile, writeFile ) -- shelly -import Shelly ( cd, bash, errExit, lastStderr ) +import Shelly ( cd, bash, errExit, lastStderr,FilePath ) -- system-filepath import Filesystem.Path.CurrentOS as Path ( fromText ) @@ -68,7 +68,7 @@ testSingleDir (TestTimeLimit timeLimitMin timeLimitMax) TestDirFiles{..} = step "Running" (stdout, stderr) <- sh $ errExit False $ do -- stdout <- run (tBaseDir "run.sh") [] - cd (Path.fromText $ stringToText $ tBaseDir) + cd (tBaseDir) stdout <- bash "./run.sh" [] stderr <- lastStderr return (stdout, stderr) diff --git a/src/test/Conjure/ModelAllSolveAll.hs b/src/test/Conjure/ModelAllSolveAll.hs index 973fd853bc..7f1316970b 100644 --- a/src/test/Conjure/ModelAllSolveAll.hs +++ b/src/test/Conjure/ModelAllSolveAll.hs @@ -42,7 +42,8 @@ import qualified Data.Text.IO as T ( readFile ) import qualified Data.Set as S ( fromList, toList, empty, null, difference ) -- Diff -import Data.Algorithm.Diff ( Diff(..), getGroupedDiff ) +-- Diff +import Data.Algorithm.Diff ( Diff(..), getGroupedDiff, PolyDiff (..) ) import Data.Algorithm.DiffOutput ( ppDiff ) From d63ed284bbbc56f572371bf5290d01dff279eb64 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Oct 2022 15:30:38 +0100 Subject: [PATCH 069/378] WIP: trying to fix infinite loop --- src/Conjure/Language/AST/ASTParser.hs | 30 +- src/Conjure/Language/AST/Helpers.hs | 54 +++- src/Conjure/Language/AST/Reformer.hs | 6 +- src/Conjure/Language/AST/Syntax.hs | 78 ++++- src/Conjure/Language/Validator.hs | 32 +- src/Conjure/UI/TypeScript.hs | 431 +++++++++++++------------- 6 files changed, 379 insertions(+), 252 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 7642e8ac50..832b366c96 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -16,13 +16,15 @@ import Text.Megaparsec import Data.Text (pack) import Data.Void (Void) import Conjure.Language.AST.Reformer (Flattenable(..)) -import Conjure.Language.Expression.Op (Fixity(..)) import Conjure.Language.Expression.Op.Internal.Common import Control.Monad.Combinators.Expr import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) +import Language.Haskell.TH.PprLib (rparen) data ParserError = ParserError deriving (Show) + + runASTParser :: Parser a -> ETokenStream -> Either ParserError a runASTParser p str = case runParser p "Parser" str of Left peb -> Left ParserError @@ -192,7 +194,7 @@ parseAtomicExpression = do , IdentifierNode <$> parseIdentifierStrict , MetaVarExpr <$> parseMetaVar , ParenExpression <$> parseParenExpression parensPair - , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) + , AbsExpression <$> parseAbsExpression , QuantificationExpr <$> parseQuantificationStatement , DomainExpression <$> parseDomainExpression , MissingExpressionNode <$> makeMissing (L_Missing "Expression") @@ -222,9 +224,7 @@ parseMatrixBasedExpression = do range <- optional pOverDomain comprehension <- optional pComp closeB <- want L_CloseBracket - let es = case exprs of - Seq [SeqElem Nothing (MissingExpressionNode _)] -> Seq [] - _ -> exprs + let es = exprs return $ MatrixLiteral $ MatrixLiteralNode openB es range comprehension closeB where pOverDomain = OverDomainNode <$> need L_SemiColon <*> parseDomain @@ -233,6 +233,14 @@ parseMatrixBasedExpression = do body <- commaList parseComprehensionCondition return $ ComprehensionNode bar body +--TODO look into adding enviorment to the parser to configure forgiveness +parseAbsExpression :: Parser ParenExpressionNode +parseAbsExpression = try $ do + lParen <- need L_Bar + expr <- parseExpression + rParen <- need L_Bar + return $ ParenExpressionNode lParen expr rParen + parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode parseParenExpression (open, close) = try $ do lParen <- need open @@ -554,10 +562,10 @@ parseSpecialCase = do do p1 <- need L_OpenCurly exp1 <- parseExpression - at <- need L_At + lAt <- need L_At (decsl,p2) <- manyTill_ parseTopLevel (need L_CloseCurly) - return $ ExprWithDecls p1 exp1 at decsl p2 + return $ ExprWithDecls p1 exp1 lAt decsl p2 @@ -731,6 +739,14 @@ example s = do let stream = ETokenStream txt $ fromMaybe other lexed parseTest parseProgram stream +exampleFile :: String -> IO () +exampleFile p = do + path <- readFileIfExists p + case path of + Nothing -> putStrLn "NO such file" + Just s -> example s + return () + demoString :: String demoString = intercalate diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index d4cc6a7425..88a92cc930 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -84,10 +84,10 @@ parseIdentifierStrict = do -- List helpers -commaList :: Parser a -> Parser (Sequence a) +commaList ::(Null a) => Parser a -> Parser (Sequence a) commaList = parseSequence L_Comma -commaList1 ::(Show a) => Parser a -> Parser (Sequence a) +commaList1 ::(Null a) => Parser a -> Parser (Sequence a) commaList1 = parseNESequence L_Comma squareBracketList :: Parser (Sequence a) -> Parser (ListNode a) @@ -116,24 +116,48 @@ parseListStrict startB endB seq = do endB' <- want endB return $ ListNode startB' vals endB' -parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) +-- parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) +-- parseSequence divider pElem = do +-- start <- optional seqElemNoSep +-- rest <- many $ try seqElemSep +-- case start of +-- Nothing -> return $ Seq rest +-- Just se -> return $ Seq (se:rest) +-- where +-- seqElemNoSep = do +-- SeqElem Nothing <$> pElem +-- seqElemSep = do +-- s <- need divider +-- SeqElem (Just s) <$> pElem + +parseSequence :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = do - start <- optional seqElemNoSep - rest <- many $ try seqElemSep - case start of - Nothing -> return $ Seq rest - Just se -> return $ Seq (se:rest) + missingPlaceholder <- makeMissing $ L_Missing "SequenceElem" + elem <- optional pElem + sep <- want divider + case (elem, isMissing sep) of + (a,True) | isMissing a -> return $ Seq [] + _ -> do + Seq rest <- parseSequence divider pElem + makeElem rest elem sep missingPlaceholder + where - seqElemNoSep = do - SeqElem Nothing <$> pElem - seqElemSep = do - s <- need divider - SeqElem (Just s) <$> pElem + makeElem rest el sep plc = do + let newElem = case (el, isMissing sep) of + (Just a, True) -> [SeqElem a $ if null rest then Nothing else Just sep ] + (a,False) | isMissing a -> [MissingSeqElem plc sep] + (Just a,_) -> [SeqElem a $ Just sep] + _ -> [] + return $ Seq $ newElem++rest + + + + + -parseNESequence :: (Show a) => Lexeme -> Parser a -> Parser (Sequence a) +parseNESequence :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) parseNESequence divider pElem = do lst <- try $ parseSequence divider pElem - q <- return $ trace ("test" ++ show lst) () case lst of Seq {elems=[]} -> empty Seq _ -> return lst diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 909d5d2a12..9f9464cdb8 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -89,7 +89,7 @@ instance Flattenable ETok ExpressionNode where instance Flattenable ETok SpecialCaseNode where flatten x = case x of - ExprWithDecls l1 en l2 sns l3 -> concat [flatten l1,flatten l2, flatten l2, flatten sns , flatten l3] + ExprWithDecls l1 en l2 sns l3 -> concat [flatten l1,flatten en,flatten l2, flatten l2, flatten sns , flatten l3] instance Flattenable ETok DomainExpressionNode where flatten (DomainExpressionNode a b c) = flatten a ++ flatten b ++ flatten c @@ -249,8 +249,8 @@ instance Flattenable ETok b => Flattenable ETok (Sequence b) where flatten (Seq es) = concatMap flatten es instance Flattenable ETok b => Flattenable ETok (SeqElem b) where - flatten (SeqElem s v) = flatten s ++ flatten v - + flatten (SeqElem v s) = flatten v ++ flatten s + flatten (MissingSeqElem v s) = flatten v ++ flatten s instance Flattenable ETok b => Flattenable ETok [b] where flatten = concatMap flatten diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index c1901cc821..47b9b88a0c 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -14,6 +14,10 @@ data LToken | SkippedToken ETok deriving (Eq, Ord) +instance Null LToken where + isMissing (MissingToken _) = True + isMissing _ = False + instance Show LToken where show (RealToken x) = show x show (MissingToken x) = "MISSING[" ++ show x ++ "]" @@ -119,9 +123,13 @@ data BranchingStatementNode (ListNode BranchingOnNode) deriving (Show) + data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode deriving (Show) +instance Null BranchingOnNode where + isMissing (BranchingOnName n) = isMissing n + isMissing (BranchingOnExpression e) = isMissing e -- Domains data DomainNode @@ -143,6 +151,10 @@ data DomainNode | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode | MissingDomainNode LToken deriving (Show) +instance Null DomainNode where + isMissing (MissingDomainNode {}) = True + isMissing _ = False + data RangeNode = SingleRangeNode ExpressionNode @@ -151,21 +163,35 @@ data RangeNode | LeftUnboundedRangeNode DoubleDotNode ExpressionNode | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode deriving (Show) +instance Null RangeNode where + isMissing (SingleRangeNode e) = isMissing e + isMissing _ = False type DoubleDotNode = LToken -- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) -data AttributeNode = NamedAttributeNode NameNode | NamedExpressionAttribute NameNode ExpressionNode +data AttributeNode + = NamedAttributeNode NameNode + | NamedExpressionAttribute NameNode ExpressionNode deriving (Show) +instance Null AttributeNode where + isMissing (NamedAttributeNode n) = isMissing n + isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e + data NamedDomainNode = NameDomainNode NameNode LToken DomainNode deriving (Show) +instance Null NamedDomainNode where + isMissing (NameDomainNode (NameNode a) b c) = isMissing a && isMissing b && isMissing c -- Common Statements newtype NameNode = NameNode LToken deriving (Show) +instance Null NameNode where + isMissing (NameNode e) = isMissing e + -- Expressions data ExpressionNode = Literal LiteralNode @@ -182,6 +208,10 @@ data ExpressionNode | SpecialCase LToken SpecialCaseNode deriving (Show) +instance Null ExpressionNode where + isMissing (MissingExpressionNode _ ) = True + isMissing _ = False + data SpecialCaseNode = ExprWithDecls LToken ExpressionNode LToken [StatementNode] LToken deriving (Show) @@ -193,8 +223,14 @@ data ParenExpressionNode = ParenExpressionNode LToken ExpressionNode LToken deriving (Show) newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) +instance Null ShortTuple where + isMissing (ShortTuple ls ) = isMissing ls data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) +instance Null LongTuple where + isMissing (LongTuple s ls) = isMissing s && isMissing ls + + -- Literals data LiteralNode @@ -231,16 +267,27 @@ data ComprehensionNode data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode deriving (Show) +instance Null RecordMemberNode where + isMissing (RecordMemberNode (NameNode s) t e) = isMissing s && isMissing t && isMissing e + data ArrowPairNode = ArrowPairNode ExpressionNode LToken ExpressionNode deriving (Show) +instance Null ArrowPairNode where + isMissing (ArrowPairNode l a b) = isMissing l && isMissing a && isMissing b data RelationElemNode = RelationElemNodeLabeled LongTuple | RelationElemNodeShort ShortTuple deriving (Show) +instance Null RelationElemNode where + isMissing (RelationElemNodeLabeled lt) = isMissing lt + isMissing (RelationElemNodeShort st) = isMissing st + newtype PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) deriving (Show) +instance Null PartitionElemNode where + isMissing (PartitionElemNode l ) = isMissing l data QuantificationExpressionNode = QuantificationExpressionNode @@ -267,6 +314,10 @@ data AbstractPatternNode = | AbstractPatternMatrix (ListNode AbstractPatternNode) | AbstractPatternSet (ListNode AbstractPatternNode) deriving (Show) + +instance Null AbstractPatternNode where + isMissing (AbstractIdentifier (NameNode s) ) = isMissing s + isMissing _ = False data QuanticationGuard = QuanticationGuard LToken ExpressionNode deriving (Show) data QuantificationPattern = @@ -289,6 +340,11 @@ data ComprehensionBodyNode | CompBodyLettingNode LToken AbstractPatternNode LToken ExpressionNode deriving (Show) +instance Null ComprehensionBodyNode where + isMissing (CompBodyCondition a) = isMissing a + isMissing (CompBodyDomain a b c) = isMissing a && isMissing b && isMissing c + isMissing (CompBodyGenExpr s t e) = isMissing s && isMissing t && isMissing e + isMissing (CompBodyLettingNode t p l e) = isMissing t && isMissing p && isMissing l && isMissing e data OperatorExpressionNode = PostfixOpNode ExpressionNode PostfixOpNode | PrefixOpNode LToken ExpressionNode @@ -315,19 +371,33 @@ data ListNode itemType = ListNode , lClBracket :: LToken } deriving (Show) - +instance Null (ListNode a) where + isMissing (ListNode l1 s l2 ) = isMissing l1 && isMissing s && isMissing l2 newtype Sequence itemType = Seq { elems :: [SeqElem itemType] } deriving (Show) +instance Null (Sequence a) where + isMissing (Seq []) = True + isMissing _ = False + -- deriving (Show) -- instance (Show a) => Show (Sequence a) where -- show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" data SeqElem itemType = SeqElem { - separator :: Maybe LToken, - item :: itemType + item :: itemType, + separator :: Maybe LToken } + | MissingSeqElem LToken LToken deriving (Show) + +class Null a where + isMissing :: a -> Bool + + +instance (Null a) => Null (Maybe a) where + isMissing Nothing = True + isMissing (Just s) = isMissing s \ No newline at end of file diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 0be531ba01..7d95553262 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -39,7 +39,7 @@ validateProgramTree :: ProgramTree -> Validator [Statement] validateProgramTree (ProgramTree sts _) = do q <- validateArray validateStatement sts return $ concat q - -- todo "all" + validateStatement :: StatementNode -> Validator [Statement] validateStatement (DeclarationStatement dsn) = validateDeclarationStatement dsn @@ -550,7 +550,7 @@ validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do getType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d validateLiteral :: LiteralNode -> Validator Expression -validateLiteral ln = case ln of +validateLiteral litNode = case litNode of IntLiteral lt -> Constant <$> validateIntLiteral lt BoolLiteral lt -> Constant <$> validateBoolLiteral lt MatrixLiteral mln -> validateMatrixLiteral mln @@ -558,13 +558,22 @@ validateLiteral ln = case ln of TupleLiteralNodeShort st -> mkAbstractLiteral . AbsLitTuple <$> validateShortTuple st RecordLiteral lt ln' -> todo "Record literal" VariantLiteral lt ln' -> todo "Variant literal" - SetLiteral ln' -> todo "Set literal" - MSetLiteral lt ln' -> todo "MSet Literal" + SetLiteral ls -> validateSetLiteral ls + MSetLiteral lt ls -> checkSymbols [lt] >> validateMSetLiteral ls FunctionLiteral lt ln' -> todo "Function Literal" SequenceLiteral lt ln' -> todo "Sequence Literal" RelationLiteral lt ln' -> todo "Relation literal" PartitionLiteral lt ln' -> todo "Partition literal" +validateSetLiteral :: ListNode ExpressionNode -> Validator Expression +validateSetLiteral ls = do + xs <- validateList validateExpression ls + return $mkAbstractLiteral $ AbsLitSet xs + +validateMSetLiteral :: ListNode ExpressionNode -> Validator Expression +validateMSetLiteral ls = do + xs <- validateList validateExpression ls + return $mkAbstractLiteral $ AbsLitMSet xs validateMatrixLiteral :: MatrixLiteralNode -> Validator Expression validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do checkSymbols [l1,l2] @@ -693,8 +702,9 @@ validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator b -validateSequenceElem f (SeqElem (Just x) i) = validate (validateSymbol x) >> f i -validateSequenceElem f (SeqElem Nothing i) = f i +validateSequenceElem f (SeqElem i (Just x)) = validate (validateSymbol x) >> f i +validateSequenceElem f (SeqElem i Nothing) = f i +validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid (TokenError plc) val :: String -> IO () val s = do @@ -706,7 +716,15 @@ val s = do -- parseTest parseProgram stream let progStruct = runParser parseProgram "TEST" stream case progStruct of - Left a -> putStrLn "error" + Left _ -> putStrLn "error" Right p@(ProgramTree{}) -> print (validateProgramTree p) + +valFile :: String -> IO () +valFile p = do + path <- readFileIfExists p + case path of + Nothing -> putStrLn "NO such file" + Just s -> val s + return () -- putStrLn validateFind \ No newline at end of file diff --git a/src/Conjure/UI/TypeScript.hs b/src/Conjure/UI/TypeScript.hs index d1ce2da905..05c9f117e4 100644 --- a/src/Conjure/UI/TypeScript.hs +++ b/src/Conjure/UI/TypeScript.hs @@ -1,6 +1,7 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE KindSignatures #-} {-# OPTIONS_GHC -fno-warn-orphans #-} +{-# LANGUAGE InstanceSigs #-} module Conjure.UI.TypeScript ( tsDef ) where @@ -15,245 +16,243 @@ import Data.Aeson.Types ( defaultOptions ) -- aeson-typescript import Data.Aeson.TypeScript.TH -tsDef :: IO () -tsDef = pure () -- deriveTypeScript defaultOptions ''AbstractLiteral -- deriveTypeScript defaultOptions ''AbstractPattern --- deriveTypeScript defaultOptions ''AttrName --- deriveTypeScript defaultOptions ''BinaryRelationAttr --- deriveTypeScript defaultOptions ''BinaryRelationAttrs +deriveTypeScript defaultOptions ''AttrName +deriveTypeScript defaultOptions ''BinaryRelationAttr +deriveTypeScript defaultOptions ''BinaryRelationAttrs -- deriveTypeScript defaultOptions ''Constant --- deriveTypeScript defaultOptions ''Decision +deriveTypeScript defaultOptions ''Decision -- deriveTypeScript defaultOptions ''Declaration -- deriveTypeScript defaultOptions ''Domain -- deriveTypeScript defaultOptions ''Expression --- deriveTypeScript defaultOptions ''FindOrGiven +deriveTypeScript defaultOptions ''FindOrGiven -- deriveTypeScript defaultOptions ''FunctionAttr -- deriveTypeScript defaultOptions ''Generator -- deriveTypeScript defaultOptions ''GeneratorOrCondition --- deriveTypeScript defaultOptions ''HasRepresentation +deriveTypeScript defaultOptions ''HasRepresentation -- deriveTypeScript defaultOptions ''InBubble --- deriveTypeScript defaultOptions ''IntTag --- deriveTypeScript defaultOptions ''JectivityAttr +deriveTypeScript defaultOptions ''IntTag +deriveTypeScript defaultOptions ''JectivityAttr -- deriveTypeScript defaultOptions ''LanguageVersion -- deriveTypeScript defaultOptions ''Model -- deriveTypeScript defaultOptions ''ModelInfo -- deriveTypeScript defaultOptions ''MSetAttr --- deriveTypeScript defaultOptions ''Name --- deriveTypeScript defaultOptions ''Objective --- deriveTypeScript defaultOptions ''OccurAttr +deriveTypeScript defaultOptions ''Name +deriveTypeScript defaultOptions ''Objective +deriveTypeScript defaultOptions ''OccurAttr -- deriveTypeScript defaultOptions ''Op --- deriveTypeScript defaultOptions ''OpActive --- deriveTypeScript defaultOptions ''OpAllDiff --- deriveTypeScript defaultOptions ''OpAllDiffExcept --- deriveTypeScript defaultOptions ''OpAnd --- deriveTypeScript defaultOptions ''OpApart --- deriveTypeScript defaultOptions ''OpAtLeast --- deriveTypeScript defaultOptions ''OpAtMost --- deriveTypeScript defaultOptions ''OpAttributeAsConstraint --- deriveTypeScript defaultOptions ''OpCatchUndef --- deriveTypeScript defaultOptions ''OpDefined --- deriveTypeScript defaultOptions ''OpDiv --- deriveTypeScript defaultOptions ''OpDontCare --- deriveTypeScript defaultOptions ''OpDotLeq --- deriveTypeScript defaultOptions ''OpDotLt --- deriveTypeScript defaultOptions ''OpEq --- deriveTypeScript defaultOptions ''OpFactorial --- deriveTypeScript defaultOptions ''OpFlatten --- deriveTypeScript defaultOptions ''OpFreq --- deriveTypeScript defaultOptions ''OpGCC --- deriveTypeScript defaultOptions ''OpGeq --- deriveTypeScript defaultOptions ''OpGt --- deriveTypeScript defaultOptions ''OpHist --- deriveTypeScript defaultOptions ''OpIff --- deriveTypeScript defaultOptions ''OpImage --- deriveTypeScript defaultOptions ''OpImageSet --- deriveTypeScript defaultOptions ''OpImply --- deriveTypeScript defaultOptions ''OpIn --- deriveTypeScript defaultOptions ''OpIndexing --- deriveTypeScript defaultOptions ''OpIntersect --- deriveTypeScript defaultOptions ''OpInverse --- deriveTypeScript defaultOptions ''OpLeq --- deriveTypeScript defaultOptions ''OpLexLeq --- deriveTypeScript defaultOptions ''OpLexLt --- deriveTypeScript defaultOptions ''OpLt --- deriveTypeScript defaultOptions ''OpMakeTable --- deriveTypeScript defaultOptions ''OpMax --- deriveTypeScript defaultOptions ''OpMin --- deriveTypeScript defaultOptions ''OpMinus --- deriveTypeScript defaultOptions ''OpMod --- deriveTypeScript defaultOptions ''OpNegate --- deriveTypeScript defaultOptions ''OpNeq --- deriveTypeScript defaultOptions ''OpNot --- deriveTypeScript defaultOptions ''OpOr --- deriveTypeScript defaultOptions ''OpParticipants --- deriveTypeScript defaultOptions ''OpParts --- deriveTypeScript defaultOptions ''OpParty --- deriveTypeScript defaultOptions ''OpPow --- deriveTypeScript defaultOptions ''OpPowerSet --- deriveTypeScript defaultOptions ''OpPred --- deriveTypeScript defaultOptions ''OpPreImage --- deriveTypeScript defaultOptions ''OpProduct --- deriveTypeScript defaultOptions ''OpRange --- deriveTypeScript defaultOptions ''OpRelationProj --- deriveTypeScript defaultOptions ''OpRestrict --- deriveTypeScript defaultOptions ''OpSlicing --- deriveTypeScript defaultOptions ''OpSubsequence --- deriveTypeScript defaultOptions ''OpSubset --- deriveTypeScript defaultOptions ''OpSubsetEq --- deriveTypeScript defaultOptions ''OpSubstring --- deriveTypeScript defaultOptions ''OpSucc --- deriveTypeScript defaultOptions ''OpSum --- deriveTypeScript defaultOptions ''OpSupset --- deriveTypeScript defaultOptions ''OpSupsetEq --- deriveTypeScript defaultOptions ''OpTable --- deriveTypeScript defaultOptions ''OpTildeLeq --- deriveTypeScript defaultOptions ''OpTildeLt --- deriveTypeScript defaultOptions ''OpTogether --- deriveTypeScript defaultOptions ''OpToInt --- deriveTypeScript defaultOptions ''OpToMSet --- deriveTypeScript defaultOptions ''OpToRelation --- deriveTypeScript defaultOptions ''OpToSet --- deriveTypeScript defaultOptions ''OpTransform --- deriveTypeScript defaultOptions ''OpTrue --- deriveTypeScript defaultOptions ''OpTwoBars --- deriveTypeScript defaultOptions ''OpUnion --- deriveTypeScript defaultOptions ''OpXor --- deriveTypeScript defaultOptions ''PartialityAttr +deriveTypeScript defaultOptions ''OpActive +deriveTypeScript defaultOptions ''OpAllDiff +deriveTypeScript defaultOptions ''OpAllDiffExcept +deriveTypeScript defaultOptions ''OpAnd +deriveTypeScript defaultOptions ''OpApart +deriveTypeScript defaultOptions ''OpAtLeast +deriveTypeScript defaultOptions ''OpAtMost +deriveTypeScript defaultOptions ''OpAttributeAsConstraint +deriveTypeScript defaultOptions ''OpCatchUndef +deriveTypeScript defaultOptions ''OpDefined +deriveTypeScript defaultOptions ''OpDiv +deriveTypeScript defaultOptions ''OpDontCare +deriveTypeScript defaultOptions ''OpDotLeq +deriveTypeScript defaultOptions ''OpDotLt +deriveTypeScript defaultOptions ''OpEq +deriveTypeScript defaultOptions ''OpFactorial +deriveTypeScript defaultOptions ''OpFlatten +deriveTypeScript defaultOptions ''OpFreq +deriveTypeScript defaultOptions ''OpGCC +deriveTypeScript defaultOptions ''OpGeq +deriveTypeScript defaultOptions ''OpGt +deriveTypeScript defaultOptions ''OpHist +deriveTypeScript defaultOptions ''OpIff +deriveTypeScript defaultOptions ''OpImage +deriveTypeScript defaultOptions ''OpImageSet +deriveTypeScript defaultOptions ''OpImply +deriveTypeScript defaultOptions ''OpIn +deriveTypeScript defaultOptions ''OpIndexing +deriveTypeScript defaultOptions ''OpIntersect +deriveTypeScript defaultOptions ''OpInverse +deriveTypeScript defaultOptions ''OpLeq +deriveTypeScript defaultOptions ''OpLexLeq +deriveTypeScript defaultOptions ''OpLexLt +deriveTypeScript defaultOptions ''OpLt +deriveTypeScript defaultOptions ''OpMakeTable +deriveTypeScript defaultOptions ''OpMax +deriveTypeScript defaultOptions ''OpMin +deriveTypeScript defaultOptions ''OpMinus +deriveTypeScript defaultOptions ''OpMod +deriveTypeScript defaultOptions ''OpNegate +deriveTypeScript defaultOptions ''OpNeq +deriveTypeScript defaultOptions ''OpNot +deriveTypeScript defaultOptions ''OpOr +deriveTypeScript defaultOptions ''OpParticipants +deriveTypeScript defaultOptions ''OpParts +deriveTypeScript defaultOptions ''OpParty +deriveTypeScript defaultOptions ''OpPow +deriveTypeScript defaultOptions ''OpPowerSet +deriveTypeScript defaultOptions ''OpPred +deriveTypeScript defaultOptions ''OpPreImage +deriveTypeScript defaultOptions ''OpProduct +deriveTypeScript defaultOptions ''OpRange +deriveTypeScript defaultOptions ''OpRelationProj +deriveTypeScript defaultOptions ''OpRestrict +deriveTypeScript defaultOptions ''OpSlicing +deriveTypeScript defaultOptions ''OpSubsequence +deriveTypeScript defaultOptions ''OpSubset +deriveTypeScript defaultOptions ''OpSubsetEq +deriveTypeScript defaultOptions ''OpSubstring +deriveTypeScript defaultOptions ''OpSucc +deriveTypeScript defaultOptions ''OpSum +deriveTypeScript defaultOptions ''OpSupset +deriveTypeScript defaultOptions ''OpSupsetEq +deriveTypeScript defaultOptions ''OpTable +deriveTypeScript defaultOptions ''OpTildeLeq +deriveTypeScript defaultOptions ''OpTildeLt +deriveTypeScript defaultOptions ''OpTogether +deriveTypeScript defaultOptions ''OpToInt +deriveTypeScript defaultOptions ''OpToMSet +deriveTypeScript defaultOptions ''OpToRelation +deriveTypeScript defaultOptions ''OpToSet +deriveTypeScript defaultOptions ''OpTransform +deriveTypeScript defaultOptions ''OpTrue +deriveTypeScript defaultOptions ''OpTwoBars +deriveTypeScript defaultOptions ''OpUnion +deriveTypeScript defaultOptions ''OpXor +deriveTypeScript defaultOptions ''PartialityAttr -- deriveTypeScript defaultOptions ''PartitionAttr --- deriveTypeScript defaultOptions ''Range +deriveTypeScript defaultOptions ''Range -- deriveTypeScript defaultOptions ''ReferenceTo --- deriveTypeScript defaultOptions ''Region +deriveTypeScript defaultOptions ''Region -- deriveTypeScript defaultOptions ''RelationAttr -- deriveTypeScript defaultOptions ''SearchOrder -- deriveTypeScript defaultOptions ''SequenceAttr -- deriveTypeScript defaultOptions ''SetAttr --- deriveTypeScript defaultOptions ''SizeAttr +deriveTypeScript defaultOptions ''SizeAttr -- deriveTypeScript defaultOptions ''Statement --- deriveTypeScript defaultOptions ''Strategy --- deriveTypeScript defaultOptions ''TrailRewrites --- deriveTypeScript defaultOptions ''Tree -- base --- deriveTypeScript defaultOptions ''Type +deriveTypeScript defaultOptions ''Strategy +deriveTypeScript defaultOptions ''TrailRewrites +deriveTypeScript defaultOptions ''Tree -- base +deriveTypeScript defaultOptions ''Type --- tsDef :: IO () --- tsDef = putStrLn $ formatTSDeclarations $ mconcat --- [ getTypeScriptDeclarations (Proxy :: Proxy AbstractLiteral) --- , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) --- , getTypeScriptDeclarations (Proxy :: Proxy AttrName) --- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) --- , getTypeScriptDeclarations (Proxy :: Proxy Constant) --- , getTypeScriptDeclarations (Proxy :: Proxy Decision) --- , getTypeScriptDeclarations (Proxy :: Proxy Declaration) --- , getTypeScriptDeclarations (Proxy :: Proxy Domain) --- , getTypeScriptDeclarations (Proxy :: Proxy Expression) --- , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) --- , getTypeScriptDeclarations (Proxy :: Proxy FunctionAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy Generator) --- , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) --- , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) --- , getTypeScriptDeclarations (Proxy :: Proxy InBubble) --- , getTypeScriptDeclarations (Proxy :: Proxy IntTag) --- , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) --- , getTypeScriptDeclarations (Proxy :: Proxy Model) --- , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) --- , getTypeScriptDeclarations (Proxy :: Proxy MSetAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy Name) --- , getTypeScriptDeclarations (Proxy :: Proxy Objective) --- , getTypeScriptDeclarations (Proxy :: Proxy OccurAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy Op) --- , getTypeScriptDeclarations (Proxy :: Proxy OpActive) --- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiff) --- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiffExcept) --- , getTypeScriptDeclarations (Proxy :: Proxy OpAnd) --- , getTypeScriptDeclarations (Proxy :: Proxy OpApart) --- , getTypeScriptDeclarations (Proxy :: Proxy OpAtLeast) --- , getTypeScriptDeclarations (Proxy :: Proxy OpAtMost) --- , getTypeScriptDeclarations (Proxy :: Proxy OpAttributeAsConstraint) --- , getTypeScriptDeclarations (Proxy :: Proxy OpCatchUndef) --- , getTypeScriptDeclarations (Proxy :: Proxy OpDefined) --- , getTypeScriptDeclarations (Proxy :: Proxy OpDiv) --- , getTypeScriptDeclarations (Proxy :: Proxy OpDontCare) --- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLeq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLt) --- , getTypeScriptDeclarations (Proxy :: Proxy OpEq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpFactorial) --- , getTypeScriptDeclarations (Proxy :: Proxy OpFlatten) --- , getTypeScriptDeclarations (Proxy :: Proxy OpFreq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpGCC) --- , getTypeScriptDeclarations (Proxy :: Proxy OpGeq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpGt) --- , getTypeScriptDeclarations (Proxy :: Proxy OpHist) --- , getTypeScriptDeclarations (Proxy :: Proxy OpIff) --- , getTypeScriptDeclarations (Proxy :: Proxy OpImage) --- , getTypeScriptDeclarations (Proxy :: Proxy OpImageSet) --- , getTypeScriptDeclarations (Proxy :: Proxy OpImply) --- , getTypeScriptDeclarations (Proxy :: Proxy OpIn) --- , getTypeScriptDeclarations (Proxy :: Proxy OpIndexing) --- , getTypeScriptDeclarations (Proxy :: Proxy OpIntersect) --- , getTypeScriptDeclarations (Proxy :: Proxy OpInverse) --- , getTypeScriptDeclarations (Proxy :: Proxy OpLeq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLeq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLt) --- , getTypeScriptDeclarations (Proxy :: Proxy OpLt) --- , getTypeScriptDeclarations (Proxy :: Proxy OpMax) --- , getTypeScriptDeclarations (Proxy :: Proxy OpMin) --- , getTypeScriptDeclarations (Proxy :: Proxy OpMinus) --- , getTypeScriptDeclarations (Proxy :: Proxy OpMod) --- , getTypeScriptDeclarations (Proxy :: Proxy OpNegate) --- , getTypeScriptDeclarations (Proxy :: Proxy OpNeq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpNot) --- , getTypeScriptDeclarations (Proxy :: Proxy OpOr) --- , getTypeScriptDeclarations (Proxy :: Proxy OpParticipants) --- , getTypeScriptDeclarations (Proxy :: Proxy OpParts) --- , getTypeScriptDeclarations (Proxy :: Proxy OpParty) --- , getTypeScriptDeclarations (Proxy :: Proxy OpPow) --- , getTypeScriptDeclarations (Proxy :: Proxy OpPowerSet) --- , getTypeScriptDeclarations (Proxy :: Proxy OpPred) --- , getTypeScriptDeclarations (Proxy :: Proxy OpPreImage) --- , getTypeScriptDeclarations (Proxy :: Proxy OpProduct) --- , getTypeScriptDeclarations (Proxy :: Proxy OpRange) --- , getTypeScriptDeclarations (Proxy :: Proxy OpRelationProj) --- , getTypeScriptDeclarations (Proxy :: Proxy OpRestrict) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSlicing) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsequence) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSubset) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsetEq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSubstring) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSucc) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSum) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSupset) --- , getTypeScriptDeclarations (Proxy :: Proxy OpSupsetEq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTable) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLeq) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLt) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTogether) --- , getTypeScriptDeclarations (Proxy :: Proxy OpToInt) --- , getTypeScriptDeclarations (Proxy :: Proxy OpToMSet) --- , getTypeScriptDeclarations (Proxy :: Proxy OpToRelation) --- , getTypeScriptDeclarations (Proxy :: Proxy OpToSet) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTransform) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTrue) --- , getTypeScriptDeclarations (Proxy :: Proxy OpTwoBars) --- , getTypeScriptDeclarations (Proxy :: Proxy OpUnion) --- , getTypeScriptDeclarations (Proxy :: Proxy OpXor) --- , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy PartitionAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy Range) --- , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) --- , getTypeScriptDeclarations (Proxy :: Proxy Region) --- , getTypeScriptDeclarations (Proxy :: Proxy RelationAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) --- , getTypeScriptDeclarations (Proxy :: Proxy SequenceAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy SetAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy SizeAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy Statement) --- , getTypeScriptDeclarations (Proxy :: Proxy Strategy) --- , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) --- , getTypeScriptDeclarations (Proxy :: Proxy Tree) --- , getTypeScriptDeclarations (Proxy :: Proxy Type) --- ] +tsDef :: IO () +tsDef = putStrLn $ formatTSDeclarations $ mconcat + [ --getTypeScriptDeclarations (Proxy :: Proxy AbstractLiteral) + -- , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) + getTypeScriptDeclarations (Proxy :: Proxy AttrName) + , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) + , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) + -- , getTypeScriptDeclarations (Proxy :: Proxy Constant) + , getTypeScriptDeclarations (Proxy :: Proxy Decision) + -- , getTypeScriptDeclarations (Proxy :: Proxy Declaration) + -- , getTypeScriptDeclarations (Proxy :: Proxy Domain) + -- , getTypeScriptDeclarations (Proxy :: Proxy Expression) + , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) + -- , getTypeScriptDeclarations (Proxy :: Proxy FunctionAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy Generator) + -- , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) + , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) + -- , getTypeScriptDeclarations (Proxy :: Proxy InBubble) + , getTypeScriptDeclarations (Proxy :: Proxy IntTag) + , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) + -- , getTypeScriptDeclarations (Proxy :: Proxy Model) + -- , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) + -- , getTypeScriptDeclarations (Proxy :: Proxy MSetAttr) + , getTypeScriptDeclarations (Proxy :: Proxy Name) + , getTypeScriptDeclarations (Proxy :: Proxy Objective) + -- , getTypeScriptDeclarations (Proxy :: Proxy OccurAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy Op) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpActive) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiff) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiffExcept) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpAnd) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpApart) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpAtLeast) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpAtMost) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpAttributeAsConstraint) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpCatchUndef) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpDefined) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpDiv) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpDontCare) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLeq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLt) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpEq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpFactorial) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpFlatten) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpFreq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpGCC) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpGeq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpGt) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpHist) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpIff) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpImage) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpImageSet) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpImply) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpIn) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpIndexing) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpIntersect) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpInverse) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpLeq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLeq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLt) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpLt) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpMax) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpMin) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpMinus) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpMod) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpNegate) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpNeq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpNot) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpOr) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpParticipants) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpParts) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpParty) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpPow) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpPowerSet) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpPred) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpPreImage) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpProduct) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpRange) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpRelationProj) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpRestrict) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSlicing) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsequence) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubset) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsetEq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubstring) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSucc) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSum) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSupset) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpSupsetEq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTable) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLeq) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLt) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTogether) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpToInt) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpToMSet) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpToRelation) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpToSet) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTransform) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTrue) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpTwoBars) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpUnion) + -- , getTypeScriptDeclarations (Proxy :: Proxy OpXor) + , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy PartitionAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy Range) + -- , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) + , getTypeScriptDeclarations (Proxy :: Proxy Region) + -- , getTypeScriptDeclarations (Proxy :: Proxy RelationAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) + -- , getTypeScriptDeclarations (Proxy :: Proxy SequenceAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy SetAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy SizeAttr) + -- , getTypeScriptDeclarations (Proxy :: Proxy Statement) + , getTypeScriptDeclarations (Proxy :: Proxy Strategy) + , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) + -- , getTypeScriptDeclarations (Proxy :: Proxy Tree) + , getTypeScriptDeclarations (Proxy :: Proxy Type) + ] From 8d2928673a1938a25ed0ef0e27160870f9f6b7a0 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Oct 2022 17:17:20 +0100 Subject: [PATCH 070/378] fixed incorrect ordering of indexes --- src/Conjure/Language/AST/ASTParser.hs | 2 +- src/Conjure/Language/AST/Helpers.hs | 2 +- src/Conjure/Language/Validator.hs | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 832b366c96..b15b61d407 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -525,7 +525,7 @@ prefixUnary l = OperatorExpressionNode . PrefixOpNode l postfixOps :: [Operator Parser ExpressionNode] postfixOps = - [ Postfix $ foldr1 (.) <$> some parsePostfixOp + [ Postfix $ foldr1 (.) . reverse <$> some parsePostfixOp ] -- DOMAINS diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 88a92cc930..93b88ac8ea 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -147,7 +147,7 @@ parseSequence divider pElem = do (Just a, True) -> [SeqElem a $ if null rest then Nothing else Just sep ] (a,False) | isMissing a -> [MissingSeqElem plc sep] (Just a,_) -> [SeqElem a $ Just sep] - _ -> [] + _ -> [] return $ Seq $ newElem++rest diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 7d95553262..f6f169dcd7 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -525,7 +525,7 @@ validatePostfixOp (ApplicationNode args) = do validatePostfixOp (IndexedNode ln) = do ranges <-validateList validateRange ln let indices = map interpretRange ranges - return $ flip (foldl (\m f -> f m)) indices + return $ \x -> (foldl (\m f -> f m)) x indices where interpretRange :: Range Expression -> (Expression-> Expression) interpretRange x = @@ -636,7 +636,10 @@ validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do --placeholder for pre-evaluation mkAbstractLiteral :: AbstractLiteral Expression -> Expression -mkAbstractLiteral = AbstractLiteral +mkAbstractLiteral x = case e2c (AbstractLiteral x) of + Nothing -> AbstractLiteral x + Just c -> Constant c + enforceConstraint :: Maybe Bool -> String -> Validator () enforceConstraint p msg = do From 3af2a63c71587e458658ba2d7f097a00904095fe Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Oct 2022 12:04:19 +0100 Subject: [PATCH 071/378] Updates to address some infinite loops --- src/Conjure/Language/AST/ASTParser.hs | 4 +- src/Conjure/Language/Parser.hs | 30 ++-------- src/Conjure/Language/Validator.hs | 55 ++++++++++++++++--- .../Partition/PartitionAsSet.hs | 2 +- src/Conjure/Rules/Horizontal/Sequence.hs | 2 +- src/Conjure/UI/IO.hs | 8 ++- 6 files changed, 61 insertions(+), 40 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index b15b61d407..8d269a5cf9 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -453,11 +453,13 @@ parseFunction = try $ do name <- choice $ map need functionals let parenP = if isOverloaded name then parenListStrict else parenList args <- parenP $ commaList parseExpression + guard $ argsHasNoLeadingTrivia args return $ FunctionalApplicationNode name args where isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals isOverloaded _ = False - + argsHasNoLeadingTrivia (ListNode (RealToken ETok{trivia=[]}) y z) = True + argsHasNoLeadingTrivia _ = False parseAttributeAsConstraint :: Parser ExpressionNode parseAttributeAsConstraint = do name <- choice $ map need (attributesAsLexemes allSupportedAttributes) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 14a9aaec1a..b96ce6f1a6 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -47,6 +47,7 @@ import Conjure.Language.AST.ASTParser (ParserError, runASTParser, parseProgram) -- import qualified Data.Set as S ( null, fromList, toList ) import Data.Void (Void) import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) +import Text.PrettyPrint (text) type Pipeline a b = (Parsec Void ETokenStream a,a -> Validator b) @@ -64,29 +65,6 @@ runPipeline (parse,val) txt = do Validator _ xs -> Left $ ValidatorError xs -dummyModel :: Model -dummyModel = Model (LanguageVersion "Essence" [1]) [] def - -dummyModelInfo :: ModelInfo -dummyModelInfo = ModelInfo - []--([Name]) - []--([(Name, Expression)]) - []--([Name]) - []--([Declaration]) - []--([(Name, Expression)]) - []--([(Name, Domain () Expression)]) - []--([(Name, Domain HasRepresentation Expression)]) - []--([(Name, [Tree (Maybe HasRepresentation)])]) - []--Strategy - (PickFirst) - (PickFirst)--([(Int, Int, Int)]) - []--([(Int, Int)]) - []--([Decision]) - []--([TrailRewrites]) - []--([(Text, Int)]) - [] --Int - 0 - parseModel :: Pipeline ProgramTree Model parseModel = (parseProgram,V.validateModel) -- inCompleteFile $ do @@ -1016,10 +994,10 @@ parseExpr = (P.parseExpression,V.validateExpression) -- data ParserState = ParserState { enumDomains :: [Name] } -- type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a -runLexerAndParser :: MonadFailDoc m => Pipeline n a -> String -> T.Text -> m a +runLexerAndParser :: Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of - Left pe -> failDoc $ errorBundlePretty pe - Right a -> return a + Left pe -> Left $ "Parser error:" <+> errorBundlePretty pe + Right a -> Right a -- ls <- runLexer inp -- case runParser p file ls of -- Left (msg, line, col) -> diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index f6f169dcd7..02bab7b5ce 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -32,7 +32,7 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) validateModel :: ProgramTree -> Validator Model validateModel model = do sts <- validateProgramTree model - return $ Model (LanguageVersion "Essence" [1] ) sts def + return $ Model (LanguageVersion "Essence" [1,3] ) sts def validateProgramTree :: ProgramTree -> Validator [Statement] @@ -119,6 +119,7 @@ validateLettingAssignment (LettingAnon l1 l2 l3 l4 szExp) = do data ValidatorError = TypeError String | StateError String + | SyntaxError String | TokenError LToken | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere | NotImplemented String @@ -556,14 +557,49 @@ validateLiteral litNode = case litNode of MatrixLiteral mln -> validateMatrixLiteral mln TupleLiteralNode lt -> mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt TupleLiteralNodeShort st -> mkAbstractLiteral . AbsLitTuple <$> validateShortTuple st - RecordLiteral lt ln' -> todo "Record literal" - VariantLiteral lt ln' -> todo "Variant literal" + RecordLiteral lt ln -> checkSymbols [lt] >> validateRecordLiteral ln + VariantLiteral lt ln -> checkSymbols [lt] >> validateVariantLiteral ln SetLiteral ls -> validateSetLiteral ls MSetLiteral lt ls -> checkSymbols [lt] >> validateMSetLiteral ls - FunctionLiteral lt ln' -> todo "Function Literal" - SequenceLiteral lt ln' -> todo "Sequence Literal" - RelationLiteral lt ln' -> todo "Relation literal" - PartitionLiteral lt ln' -> todo "Partition literal" + FunctionLiteral lt ln -> checkSymbols [lt] >> validateFunctionLiteral ln + SequenceLiteral lt ln -> checkSymbols [lt] >> mkAbstractLiteral . AbsLitSequence <$> validateExprList ln + RelationLiteral lt ln -> todo "Relation literal" + PartitionLiteral lt ln -> checkSymbols [lt] >> validatePartitionLiteral ln + +validatePartitionLiteral :: ListNode PartitionElemNode -> Validator Expression +validatePartitionLiteral ln = do + members <- validateList (\(PartitionElemNode exprs) -> validateExprList exprs) ln + return . mkAbstractLiteral $ AbsLitPartition members + + + + +validateRecordLiteral :: ListNode RecordMemberNode -> Validator Expression +validateRecordLiteral ln = do + members <- validateList validateRecordMember ln + return $ mkAbstractLiteral $ AbsLitRecord members + +validateVariantLiteral :: ListNode RecordMemberNode -> Validator Expression +validateVariantLiteral ln = do + members <- validateList validateRecordMember ln + case members of + [] -> invalid $ SyntaxError "Variants must contain exactly one member" + [(n,x)]-> return $ mkAbstractLiteral $ AbsLitVariant Nothing n x + _:_ -> invalid $ SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected + + + +validateRecordMember :: RecordMemberNode -> Validator (Name,Expression) +validateRecordMember (RecordMemberNode name lEq expr) = do + checkSymbols [lEq] + name' <- validate $ validateName name + expr' <- validate $ validateExpression expr + verify $ (,) <$> name' <*> expr' + +validateFunctionLiteral :: ListNode ArrowPairNode -> Validator Expression +validateFunctionLiteral ln = do + pairs <- validateList validateArrowPair ln + return $ mkAbstractLiteral $ AbsLitFunction pairs validateSetLiteral :: ListNode ExpressionNode -> Validator Expression validateSetLiteral ls = do @@ -695,7 +731,6 @@ validateList validator (ListNode st seq end) = do _ <- validateSymbol end validateSequence validator seq - -- mapPrefixToOp :: Lexeme -> Text -- mapPrefixToOp x = case x of -- L_Minus -> "negate" @@ -709,6 +744,10 @@ validateSequenceElem f (SeqElem i (Just x)) = validate (validateSymbol x) >> f i validateSequenceElem f (SeqElem i Nothing) = f i validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid (TokenError plc) +validateExprList :: ListNode ExpressionNode -> Validator [Expression] +validateExprList = validateList validateExpression + + val :: String -> IO () val s = do let str = s diff --git a/src/Conjure/Representations/Partition/PartitionAsSet.hs b/src/Conjure/Representations/Partition/PartitionAsSet.hs index 92d116a620..0fba0e307d 100644 --- a/src/Conjure/Representations/Partition/PartitionAsSet.hs +++ b/src/Conjure/Representations/Partition/PartitionAsSet.hs @@ -100,7 +100,7 @@ partitionAsSet dispatch reprOptions useLevels = Representation chck downD struct else return $ return $ -- for list [essence| forAll &iPat : &innerDomain . - 1 = sum ([ 1 + 1 = sum([ 1 | &jPat <- &rel , &i in &j ]) diff --git a/src/Conjure/Rules/Horizontal/Sequence.hs b/src/Conjure/Rules/Horizontal/Sequence.hs index 0a67c58f58..3175631510 100644 --- a/src/Conjure/Rules/Horizontal/Sequence.hs +++ b/src/Conjure/Rules/Horizontal/Sequence.hs @@ -149,7 +149,7 @@ rule_Eq_Comprehension = "sequence-eq-comprehension" `namedRule` theRule where let cardinality = Comprehension 1 goc return [essence| - |&x| = sum (&cardinality) /\ + |&x| = sum(&cardinality) /\ and([ &y[&i[1]] = &i[2] | &iPat <- &x ]) diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 81498a69d9..0619a5bb39 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -136,9 +136,11 @@ readModel modelParser preprocess (fp, con) = do model <- case preprocess of Nothing -> return def Just prep -> - case Parser.runLexerAndParser modelParser fp (prep con) of - Left e -> userErr1 e - Right x -> return x + do + let res = Parser.runLexerAndParser modelParser fp (prep con) + case res of + Left e -> userErr1 e + Right x -> return x let infoBlock = con From 68cc185e1a06ce79eefd9ef09b5849c73acf2395 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Oct 2022 12:08:36 +0100 Subject: [PATCH 072/378] Reverting to monadfail syntax --- src/Conjure/Language/Expression/Op/Factorial.hs | 7 ++++--- src/Conjure/Language/Expression/Op/Inverse.hs | 15 ++++++--------- src/Conjure/Language/Expression/Op/Restrict.hs | 13 +++++-------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/Conjure/Language/Expression/Op/Factorial.hs b/src/Conjure/Language/Expression/Op/Factorial.hs index c6d92e0324..a35fb440d5 100644 --- a/src/Conjure/Language/Expression/Op/Factorial.hs +++ b/src/Conjure/Language/Expression/Op/Factorial.hs @@ -21,10 +21,11 @@ instance FromJSON x => FromJSON (OpFactorial x) where parseJSON = genericParse instance (TypeOf x, Pretty x) => TypeOf (OpFactorial x) where typeOf p@(OpFactorial a) = do - typeOfA <- typeOf a --TODO: Not sure on this - case typeOfA of - TypeInt _ -> return typeOfA + TypeInt t <- typeOf a + case t of + TagInt -> return () _ -> raiseTypeError p + return (TypeInt t) instance SimplifyOp OpFactorial x where simplifyOp _ = na "simplifyOp{OpFactorial}" diff --git a/src/Conjure/Language/Expression/Op/Inverse.hs b/src/Conjure/Language/Expression/Op/Inverse.hs index 7dd4db71a9..88d7061827 100644 --- a/src/Conjure/Language/Expression/Op/Inverse.hs +++ b/src/Conjure/Language/Expression/Op/Inverse.hs @@ -20,15 +20,12 @@ instance ToJSON x => ToJSON (OpInverse x) where toJSON = genericToJSON jso instance FromJSON x => FromJSON (OpInverse x) where parseJSON = genericParseJSON jsonOptions instance (TypeOf x, Pretty x) => TypeOf (OpInverse x) where - typeOf p@(OpInverse f g) = do --TODO: not sure on this refactor - typeOfF <- typeOf f - typeOfG <- typeOf g - case (typeOfF,typeOfG) of - (TypeFunction fFrom fTo,TypeFunction gFrom gTo) -> - if typesUnify [fFrom, gTo] && typesUnify [fTo, gFrom] - then return TypeBool - else raiseTypeError p - _ -> raiseTypeError p + typeOf p@(OpInverse f g) = do + TypeFunction fFrom fTo <- typeOf f + TypeFunction gFrom gTo <- typeOf g + if typesUnify [fFrom, gTo] && typesUnify [fTo, gFrom] + then return TypeBool + else raiseTypeError p instance SimplifyOp OpInverse x where simplifyOp _ = na "simplifyOp{OpInverse}" diff --git a/src/Conjure/Language/Expression/Op/Restrict.hs b/src/Conjure/Language/Expression/Op/Restrict.hs index 08955b54d5..4d53c170a9 100644 --- a/src/Conjure/Language/Expression/Op/Restrict.hs +++ b/src/Conjure/Language/Expression/Op/Restrict.hs @@ -25,14 +25,11 @@ instance FromJSON x => FromJSON (OpRestrict x) where parseJSON = genericParseJ instance (TypeOf x, Pretty x, Domain () x :< x) => TypeOf (OpRestrict x) where typeOf p@(OpRestrict f domX) = do dom :: Domain () x <- project domX - typeOfF <- typeOf f --TODO: not sure about this change - case typeOfF of - TypeFunction from to -> do - from' <- typeOfDomain dom - if typesUnify [from, from'] - then return (TypeFunction (mostDefined [from', from]) to) - else raiseTypeError p - _ -> raiseTypeError p + TypeFunction from to <- typeOf f + from' <- typeOfDomain dom + if typesUnify [from, from'] + then return (TypeFunction (mostDefined [from', from]) to) + else raiseTypeError p instance SimplifyOp OpRestrict x where From c630828068a88211377dbf76d676537da6cee7ff Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Oct 2022 15:11:56 +0100 Subject: [PATCH 073/378] Fix monadfail implementation errors --- src/Conjure/Language/NameGen.hs | 5 ++++- src/Conjure/Prelude.hs | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Conjure/Language/NameGen.hs b/src/Conjure/Language/NameGen.hs index 8f1eb430e8..c58347d80b 100644 --- a/src/Conjure/Language/NameGen.hs +++ b/src/Conjure/Language/NameGen.hs @@ -33,12 +33,15 @@ type NameKind = Text newtype NameGenM m a = NameGenM (StateT NameGenState m a) deriving ( Functor, Applicative, Monad - , MonadFail, MonadUserError + , MonadUserError , MonadLog , MonadTrans , MonadState NameGenState , MonadIO ) +instance (MonadFail m) => MonadFail (NameGenM m) where + fail = lift . fail + instance (Functor m, Applicative m, MonadFail m) => MonadFailDoc (NameGenM m) where failDoc = lift . fail . show diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index 39838cdde4..b7767a7fbb 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -228,6 +228,7 @@ import System.TimeIt as X ( timeIt, timeItNamed ) import Debug.Trace as X ( trace, traceM ) import Data.Void (Void) + tracing :: Show a => String -> a -> a tracing s a = trace ("tracing " ++ s ++ ": " ++ show a) a From 08c78cff1507a7b53b38da8dc1ee497d6a1566ae Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Oct 2022 15:12:17 +0100 Subject: [PATCH 074/378] removed statistics dep? --- conjure-cp.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index e622cd2aa4..6772d6bef4 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -305,7 +305,7 @@ Library , ansi-terminal >= 0.8.2 , timeit >= 2.0 , primes >= 0.2.1.0 - , statistics >= 0.15.2.0 + -- , statistics >= 0.15.2.0 , parser-combinators if impl(ghc == 7.8.*) From 3d44349bb55b3079d1c17f83c0fd7ad9cd32714f Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Oct 2022 15:52:29 +0100 Subject: [PATCH 075/378] added language version support --- src/Conjure/Language/AST/ASTParser.hs | 11 ++++++++- src/Conjure/Language/AST/Reformer.hs | 4 +++- src/Conjure/Language/AST/Syntax.hs | 12 +++++++--- src/Conjure/Language/Parser.hs | 4 ++-- src/Conjure/Language/Validator.hs | 32 ++++++++++++++++++++++----- 5 files changed, 50 insertions(+), 13 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 8d269a5cf9..cc5df3d76f 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -32,10 +32,19 @@ runASTParser p str = case runParser p "Parser" str of parseProgram :: Parser ProgramTree parseProgram = do + langV <- optional parseLangVersion (tl,ending) <- manyTill_ parseTopLevel pEnding - return $ ProgramTree tl ending + return $ ProgramTree langV tl ending "Program" +parseLangVersion :: Parser LangVersionNode +parseLangVersion = do + lLang <- need L_language + lLName <- parseIdentifier + nums <- parseSequence L_Dot (RealToken <$> intLiteral) + return $ LangVersionNode lLang lLName nums + + parseTopLevels :: Parser [StatementNode] parseTopLevels = manyTill parseTopLevel pEnding diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 9f9464cdb8..3bb36d2088 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -8,8 +8,10 @@ class Flattenable v a where flatten :: Flattenable v a => a -> [v] instance Flattenable ETok ProgramTree where - flatten (ProgramTree sts end) = concatMap flatten sts ++ flatten end + flatten (ProgramTree lv sts end) = flatten lv ++ concatMap flatten sts ++ flatten end +instance Flattenable ETok LangVersionNode where + flatten (LangVersionNode l1 l2 l3) = flatten l1 ++ flatten l2 ++ flatten l3 instance Flattenable ETok StatementNode where flatten x = case x of DeclarationStatement dsn -> flatten dsn diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 47b9b88a0c..edd9c4c5a6 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -23,10 +23,16 @@ instance Show LToken where show (MissingToken x) = "MISSING[" ++ show x ++ "]" show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" -data ProgramTree = ProgramTree [StatementNode] LToken - +data ProgramTree = ProgramTree { + langVersionInfo :: Maybe LangVersionNode, + statements :: [StatementNode], + eofToken :: LToken +} + +data LangVersionNode = LangVersionNode LToken NameNode (Sequence LToken) + instance Show ProgramTree where - show (ProgramTree xs eof) = "ProgramTree \n" ++ + show (ProgramTree lv xs eof) = "ProgramTree \n" ++ intercalate "\n\n" (map show xs) ++ "\n\n" ++ show eof diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index b96ce6f1a6..e89172af7d 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -115,8 +115,8 @@ parseIO p s = do -- -- Actual parsers -------------------------------------------------------------- -- -------------------------------------------------------------------------------- -parseTopLevels :: Pipeline ProgramTree [Statement] -parseTopLevels = (P.parseProgram,V.validateProgramTree) +parseTopLevels :: Pipeline [S.StatementNode] [Statement] +parseTopLevels = (P.parseTopLevels,V.validateProgramTree) -- let one = satisfyL $ \case -- L_find -> Just $ do -- decls <- flip sepEndBy1 comma $ do diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 02bab7b5ce..77fa287a94 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -31,16 +31,36 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) validateModel :: ProgramTree -> Validator Model validateModel model = do - sts <- validateProgramTree model - return $ Model (LanguageVersion "Essence" [1,3] ) sts def + sts <- validateProgramTree (statements model) + langVersion <- validateLanguageVersion $ langVersionInfo model + return $ Model langVersion sts def -validateProgramTree :: ProgramTree -> Validator [Statement] -validateProgramTree (ProgramTree sts _) = do +validateProgramTree :: [StatementNode] -> Validator [Statement] +validateProgramTree sts = do q <- validateArray validateStatement sts return $ concat q +validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion +validateLanguageVersion Nothing = return $ LanguageVersion "Essence" [1,3] +validateLanguageVersion (Just (LangVersionNode l1 n v)) = do + checkSymbols [l1] + name <- validate $ validateIdentifier n + nums <- validate $ validateSequence getNum v + return $ + LanguageVersion + (Name $ fromMaybe "Essence" name) + (fromMaybe [1,3] nums) + where + getNum :: LToken -> Validator Int + getNum c = do + c' <- validateSymbol c + case c' of + LIntLiteral x -> return $ fromInteger x + _ -> invalid $ TokenError c + + validateStatement :: StatementNode -> Validator [Statement] validateStatement (DeclarationStatement dsn) = validateDeclarationStatement dsn validateStatement (BranchingStatement bsn) = validateBranchingStatement bsn @@ -406,7 +426,7 @@ validateSpecialCase :: SpecialCaseNode -> Validator Expression validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do checkSymbols [l1,l2,l3] expr <- validateExpression ex - conds <- validateProgramTree $ ProgramTree sts l3 + conds <- validateProgramTree sts let decls = [ Declaration (FindOrGiven LocalFind nm dom) | Declaration (FindOrGiven Find nm dom) <- conds ] @@ -759,7 +779,7 @@ val s = do let progStruct = runParser parseProgram "TEST" stream case progStruct of Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> print (validateProgramTree p) + Right p@(ProgramTree{}) -> print (validateModel p) valFile :: String -> IO () From 72c82e4ca81b1605f4c18070b6d2a53b348bf94a Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Oct 2022 17:06:37 +0100 Subject: [PATCH 076/378] cleanup and groundwork for diagnostics --- src/Conjure/Language/Validator.hs | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 77fa287a94..3913048082 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -151,21 +151,6 @@ data Validator a = Validator } deriving (Show) --- data Validated a = Just a | Nothing - --- instance Functor Validated where --- fmap :: (a -> b) -> Validated a -> Validated b --- fmap fab (Just a) = Just (fab a) --- fmap _ Nothing = Nothing - --- instance Applicative Validated where --- pure :: a -> Validated a --- pure = Valid --- (<*>) :: Validated (a -> b) -> Validated a -> Validated b --- (Just fab) <*> (Just a) = Just (fab a) --- Nothing <*> (Just _) = Nothing --- _ <*> Nothing = Nothing - data Foo = Foo Int Int Int deriving (Show) @@ -690,7 +675,7 @@ validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do expr <- validate $ validateExpression en verify $ (:[]) <$> (ComprehensionLetting <$> pat <*> expr) ---placeholder for pre-evaluation + mkAbstractLiteral :: AbstractLiteral Expression -> Expression mkAbstractLiteral x = case e2c (AbstractLiteral x) of Nothing -> AbstractLiteral x @@ -708,6 +693,13 @@ enforceConstraint p msg = do checkSymbols :: [LToken] -> Validator () checkSymbols = mapM_ (validate . validateSymbol) +--Raise a non structural error (i.e type error) +raiseError :: ValidatorError -> Validator () +raiseError e = Validator (Just ()) [e] + +--todo warn and info + + validateShortTuple :: ShortTuple -> Validator [Expression] validateShortTuple (ShortTuple exs) = validateList validateExpression exs From 5a30c9d84a467d0a8f1e7c83a4eba80429be2073 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 23 Oct 2022 18:01:32 +0100 Subject: [PATCH 077/378] Added domain attribute support --- conjure-cp.cabal | 1 + src/Conjure/Language/AST/ASTParser.hs | 7 +- src/Conjure/Language/AST/Operator.hs | 2 - src/Conjure/Language/AST/Reformer.hs | 4 +- src/Conjure/Language/AST/Syntax.hs | 8 +- src/Conjure/Language/Attributes.hs | 108 ++++ src/Conjure/Language/Lexemes.hs | 43 +- src/Conjure/Language/Parser.hs | 22 +- src/Conjure/Language/Validator.hs | 755 ++++++++++++++++---------- 9 files changed, 630 insertions(+), 320 deletions(-) delete mode 100644 src/Conjure/Language/AST/Operator.hs create mode 100644 src/Conjure/Language/Attributes.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 6772d6bef4..e67ffbbc42 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -40,6 +40,7 @@ Library , Conjure.Language.Type , Conjure.Language.Lexemes + , Conjure.Language.Attributes , Conjure.Language.Validator , Conjure.Language.AST.ASTParser , Conjure.Language.AST.Expression diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index cc5df3d76f..2ddf31d874 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -20,6 +20,7 @@ import Conjure.Language.Expression.Op.Internal.Common import Control.Monad.Combinators.Expr import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Language.Haskell.TH.PprLib (rparen) +import Conjure.Language.Attributes (allAttributLexemes) data ParserError = ParserError deriving (Show) @@ -715,11 +716,9 @@ parseRange = ranged <|> singleR parseAttribute :: Parser AttributeNode parseAttribute = do - name <- choice $ map need functionAttributes -- TODO This is wrong + name <- (choice (map need allAttributLexemes)) <|> RealToken <$> identifier expr <- optional parseExpressionStrict - case expr of - Nothing -> return $ NamedAttributeNode (NameNode name) - Just en -> return $ NamedExpressionAttribute (NameNode name) en + return $ NamedAttributeNode name expr parseMissingDomain :: Parser DomainNode parseMissingDomain = diff --git a/src/Conjure/Language/AST/Operator.hs b/src/Conjure/Language/AST/Operator.hs deleted file mode 100644 index c83fb4ea8b..0000000000 --- a/src/Conjure/Language/AST/Operator.hs +++ /dev/null @@ -1,2 +0,0 @@ -module Conjure.Language.AST.Operator where -import Conjure.Language.AST.Helpers diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 3bb36d2088..57dbe9fb54 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -221,8 +221,8 @@ instance (Flattenable ETok a) => Flattenable ETok (Maybe a) where flatten Nothing = [] instance Flattenable ETok AttributeNode where flatten x = case x of - NamedAttributeNode nn -> flatten nn - NamedExpressionAttribute nn en -> flatten nn ++ flatten en + NamedAttributeNode nn m_e -> flatten nn ++ flatten m_e + -- NamedExpressionAttribute nn en -> flatten nn ++ flatten en instance Flattenable ETok RangeNode where flatten x = case x of diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index edd9c4c5a6..226d4cab2b 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -177,13 +177,13 @@ type DoubleDotNode = LToken -- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) data AttributeNode - = NamedAttributeNode NameNode - | NamedExpressionAttribute NameNode ExpressionNode + = NamedAttributeNode LToken (Maybe ExpressionNode) + -- | TODO: Add dont care deriving (Show) instance Null AttributeNode where - isMissing (NamedAttributeNode n) = isMissing n - isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e + isMissing (NamedAttributeNode n m_e) = isMissing n && isMissing m_e + -- isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e data NamedDomainNode = NameDomainNode NameNode LToken DomainNode deriving (Show) diff --git a/src/Conjure/Language/Attributes.hs b/src/Conjure/Language/Attributes.hs new file mode 100644 index 0000000000..03f7a311bd --- /dev/null +++ b/src/Conjure/Language/Attributes.hs @@ -0,0 +1,108 @@ +module Conjure.Language.Attributes where + +import Conjure.Language.Expression.Op.Internal.Common (Lexeme (..)) +import Conjure.Prelude +import Data.Map (Map) +import qualified Data.Map.Strict as M +import Conjure.Language.Domain (BinaryRelationAttr(..)) + +type Attr = (Lexeme,Bool) + +mapFrom :: [[Attr]] -> Map Lexeme Bool +mapFrom attrs = M.fromList $ concat attrs + +setValidAttrs :: Map Lexeme Bool +setValidAttrs = mapFrom [sizeyAttrs] + +msetValidAttrs :: Map Lexeme Bool +msetValidAttrs = mapFrom [sizeyAttrs,occursAttrs] + +funAttrs :: Map Lexeme Bool +funAttrs = mapFrom [sizeyAttrs,jectivityAttrs] + +seqAttrs :: Map Lexeme Bool +seqAttrs = mapFrom [sizeyAttrs,jectivityAttrs] + +relAttrs :: Map Lexeme Bool +relAttrs = mapFrom [sizeyAttrs , binRelAttrs] + +partitionAttrs :: Map Lexeme Bool +partitionAttrs = mapFrom [sizeyAttrs,partSizeAttrs,regularity] + +sizeyAttrs :: [Attr] +sizeyAttrs = + [ (L_size,True) + , (L_maxSize,True) + , (L_minSize,True) + ] + +occursAttrs :: [Attr] +occursAttrs = + [ (L_minOccur,True) + , (L_maxOccur,True) + ] + +partNumAttrs :: [Attr] +partNumAttrs = + [ (L_numParts,True) + , (L_maxNumParts,True) + , (L_minNumParts,True) + ] + +partSizeAttrs :: [(Lexeme, Bool)] +partSizeAttrs = + [ (L_partSize,True) + , (L_minPartSize,True) + , (L_maxPartSize,True) + ] + +jectivityAttrs :: [(Lexeme, Bool)] +jectivityAttrs = + [ (L_injective,False) + , (L_bijective,False) + , (L_surjective,False) + ] + +binRelAttrs :: [(Lexeme, Bool)] +binRelAttrs = + [ (L_reflexive,False) + , (L_irreflexive,False) + , (L_coreflexive,False) + , (L_symmetric,False) + , (L_antiSymmetric,False) + , (L_aSymmetric,False) + , (L_transitive,False) + , (L_total,False) + , (L_connex,False) + , (L_Euclidean,False) + , (L_serial,False) + , (L_equivalence,False) + , (L_partialOrder,False) + ] + +lexemeToBinRel :: Lexeme -> Maybe BinaryRelationAttr +lexemeToBinRel L_reflexive = Just BinRelAttr_Reflexive +lexemeToBinRel L_irreflexive = Just BinRelAttr_Irreflexive +lexemeToBinRel L_coreflexive = Just BinRelAttr_Coreflexive +lexemeToBinRel L_symmetric = Just BinRelAttr_Symmetric +lexemeToBinRel L_antiSymmetric = Just BinRelAttr_AntiSymmetric +lexemeToBinRel L_aSymmetric = Just BinRelAttr_ASymmetric +lexemeToBinRel L_transitive = Just BinRelAttr_Transitive +lexemeToBinRel L_total = Just BinRelAttr_Total +lexemeToBinRel L_connex = Just BinRelAttr_Connex +lexemeToBinRel L_Euclidean = Just BinRelAttr_Euclidean +lexemeToBinRel L_serial = Just BinRelAttr_Serial +lexemeToBinRel L_equivalence = Just BinRelAttr_Equivalence +lexemeToBinRel L_partialOrder = Just BinRelAttr_PartialOrder +lexemeToBinRel _ = Nothing + +totalityAttrs :: [Attr] +totalityAttrs = [(L_total,False)] + +regularity :: [Attr] +regularity = [(L_regular,False)] + + +allAttributLexemes :: [Lexeme] +allAttributLexemes = concatMap (map fst) [sizeyAttrs , jectivityAttrs , binRelAttrs] + \ No newline at end of file diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index bcf5dbc2c1..0954f4992f 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -1,4 +1,6 @@ {-# LANGUAGE DeriveGeneric #-} +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} +{-# HLINT ignore "Use camelCase" #-} module Conjure.Language.Lexemes where @@ -86,7 +88,18 @@ data Lexeme -- type: relation | L_relation - + | L_reflexive + | L_irreflexive + | L_coreflexive + | L_symmetric + | L_antiSymmetric + | L_aSymmetric + | L_transitive + | L_connex + | L_Euclidean + | L_serial + | L_equivalence + | L_partialOrder -- type: partition | L_partition | L_regular @@ -323,15 +336,27 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_surjective, "surjective" ) , ( L_bijective, "bijective" ) , ( L_sequence, "sequence" ) - , ( L_relation, "relation" ) + , ( L_relation, "relation") + , ( L_reflexive, "reflexive") + , ( L_irreflexive, "irreflexive") + , ( L_coreflexive, "coreflexive") + , ( L_symmetric, "symmetric") + , ( L_antiSymmetric, "antiSymmetric") + , ( L_aSymmetric, "aSymmetric") + , ( L_transitive, "transitive") + , ( L_connex, "connex") + , ( L_Euclidean, "Euclidean") + , ( L_serial, "serial") + , ( L_equivalence, "equivalence") + , ( L_partialOrder, "partialOrder") , ( L_partition, "partition" ) - -- , ( L_regular, "regular" ) - -- , ( L_partSize, "partSize" ) - -- , ( L_minPartSize, "minPartSize" ) - -- , ( L_maxPartSize, "maxPartSize" ) - -- , ( L_numParts, "numParts" ) - -- , ( L_minNumParts, "minNumParts" ) - -- , ( L_maxNumParts, "maxNumParts" ) + , ( L_regular, "regular" ) + , ( L_partSize, "partSize" ) + , ( L_minPartSize, "minPartSize" ) + , ( L_maxPartSize, "maxPartSize" ) + , ( L_numParts, "numParts" ) + , ( L_minNumParts, "minNumParts" ) + , ( L_maxNumParts, "maxNumParts" ) , ( L_union, "union" ) , ( L_intersect, "intersect" ) , ( L_subset, "subset" ) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index e89172af7d..dda6ac9a27 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -50,7 +50,7 @@ import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) import Text.PrettyPrint (text) -type Pipeline a b = (Parsec Void ETokenStream a,a -> Validator b) +type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError [V.ValidatorError] @@ -60,13 +60,17 @@ runPipeline :: Pipeline a b -> Text -> Either PipelineError b runPipeline (parse,val) txt = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult - case val parseResult of - Validator (Just res) [] -> Right res - Validator _ xs -> Left $ ValidatorError xs + let x = V.runValidator (val parseResult) (V.SymbolTable []) + case x of + (Just m, []) -> Right m + (_, ves) -> Left $ ValidatorError ves + + -- Validator (Just res) [] -> Right res + -- Validator _ xs -> Left $ ValidatorError xs parseModel :: Pipeline ProgramTree Model -parseModel = (parseProgram,V.validateModel) +parseModel = (parseProgram,V.strict . V.validateModel) -- inCompleteFile $ do -- let -- pLanguage :: Parser LanguageVersion @@ -116,7 +120,7 @@ parseIO p s = do -- -------------------------------------------------------------------------------- parseTopLevels :: Pipeline [S.StatementNode] [Statement] -parseTopLevels = (P.parseTopLevels,V.validateProgramTree) +parseTopLevels = (P.parseTopLevels,V.strict . V.validateProgramTree) -- let one = satisfyL $ \case -- L_find -> Just $ do -- decls <- flip sepEndBy1 comma $ do @@ -229,11 +233,11 @@ parseTopLevels = (P.parseTopLevels,V.validateProgramTree) -- return (RangeSingle x) parseDomain :: Pipeline DomainNode (Domain () Expression) -parseDomain = (P.parseDomain,V.validateDomain) +parseDomain = (P.parseDomain,V.strict . V.validateDomain) parseDomainWithRepr :: Pipeline DomainNode (Domain HasRepresentation Expression) -parseDomainWithRepr = (P.parseDomain,V.validateDomainWithRepr) +parseDomainWithRepr = (P.parseDomain,V.strict . V.validateDomainWithRepr) -- -- TODO: uncomment the following to parse (union, intersect and minus) for domains -- -- let -- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] @@ -625,7 +629,7 @@ parseDomainWithRepr = (P.parseDomain,V.validateDomainWithRepr) -- metaVarInE = ExpressionMetaVar parseExpr :: Pipeline S.ExpressionNode Expression -parseExpr = (P.parseExpression,V.validateExpression) +parseExpr = (P.parseExpression,V.strict . V.validateExpression) -- let -- mergeOp op = mkBinOp (lexemeText op) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 3913048082..1a61d317c4 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -1,4 +1,5 @@ {-# LANGUAGE InstanceSigs #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Conjure.Language.Validator where @@ -8,11 +9,18 @@ import Conjure.Language.Definition import Conjure.Language.Domain import Conjure.Language.Lexemes import Conjure.Language.NewLexer (ETok (ETok, capture, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0) + +import Conjure.Language.Attributes import Conjure.Prelude -import Control.Applicative + +import Control.Monad.Writer.Strict (Writer) import Conjure.Language.Type -import Conjure.Language.Definition + +import Data.Map.Strict (Map) +import qualified Data.Map.Strict as M +import qualified Data.Set as S + import Data.Text (pack, unpack) import Text.Megaparsec (parseMaybe, runParser) @@ -28,36 +36,108 @@ import Conjure.Language.Expression.Op OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), ) import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) +import Control.Applicative (empty, Alternative) +import Conjure.Language.Attributes (lexemeToBinRel) + + +data ValidatorError + = TypeError String + | StateError String + | SyntaxError String + | RegionError String -- Add region + | TokenError LToken + | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere + | NotImplemented String + deriving (Show) + +data SymbolTable = SymbolTable [String] + +newtype ValidatorT r w a = ValidatorT (MaybeT (ReaderT r (Writer [w])) a) + deriving (Monad,Applicative ,Functor,MonadReader r ,MonadWriter [w],MonadFail) + + +--synonym wrapped in maybe to allow errors to propagate +type Validator a = ValidatorT SymbolTable ValidatorError (Maybe a) + +--Non maybe version used in outward facing applications/ lists +type ValidatorS a = ValidatorT SymbolTable ValidatorError a + +strict :: Validator a -> ValidatorS a +strict a = do Just res <- a; return res + + +runValidator :: (ValidatorT r w a) -> r -> (Maybe a,[w]) +runValidator (ValidatorT r) d = runWriter (runReaderT (runMaybeT r) d) +-- data Validator a = Validator +-- { value :: Maybe a +-- , errors :: [ValidatorError] +-- } +-- deriving (Show) + +data Foo = Foo Int Int Int + deriving (Show) + +-- instance Functor Validator where +-- fmap :: (a -> b) -> Validator a -> Validator b +-- fmap fab (Validator m_a ves) = +-- Validator +-- { value = case m_a of +-- Nothing -> Nothing +-- (Just a) -> Just $ fab a +-- , errors = ves +-- } + +-- instance Applicative Validator where +-- pure :: a -> Validator a +-- pure x = Validator (Just x) [] +-- (<*>) :: Validator (a -> b) -> Validator a -> Validator b +-- (Validator Nothing es) <*> (Validator _ e2s) = Validator Nothing (es ++ e2s) +-- (Validator (Just f) es) <*> (Validator a e2s) = Validator val (es ++ e2s) +-- where +-- val = case a of +-- Just a' -> Just $ f a' +-- Nothing -> Nothing + +-- instance Monad Validator where +-- (>>=) :: Validator a -> (a -> Validator b) -> Validator b +-- (Validator Nothing ves) >>= _ = +-- Validator{value = Nothing, errors = ves} +-- (Validator (Just n) ves) >>= f = +-- let r = f n in r{errors = ves ++ errors r} + + +validateModelS :: ProgramTree -> ValidatorS Model +validateModelS = strict . validateModel validateModel :: ProgramTree -> Validator Model validateModel model = do sts <- validateProgramTree (statements model) langVersion <- validateLanguageVersion $ langVersionInfo model - return $ Model langVersion sts def + return $ Model <$> langVersion <*> sts <*> pure def validateProgramTree :: [StatementNode] -> Validator [Statement] validateProgramTree sts = do q <- validateArray validateStatement sts - return $ concat q + return . pure $ concat q validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion -validateLanguageVersion Nothing = return $ LanguageVersion "Essence" [1,3] +validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3] validateLanguageVersion (Just (LangVersionNode l1 n v)) = do checkSymbols [l1] - name <- validate $ validateIdentifier n - nums <- validate $ validateSequence getNum v - return $ - LanguageVersion + name <- validateIdentifier n + nums <- validateSequence getNum v + return . pure $ + LanguageVersion (Name $ fromMaybe "Essence" name) - (fromMaybe [1,3] nums) - where + (if null nums then [1,3] else nums) + where getNum :: LToken -> Validator Int getNum c = do c' <- validateSymbol c case c' of - LIntLiteral x -> return $ fromInteger x + Just (LIntLiteral x) -> return . pure $ fromInteger x _ -> invalid $ TokenError c @@ -71,19 +151,25 @@ validateStatement (UnexpectedToken lt) = invalid $ TokenError lt validateWhereStatement :: WhereStatementNode -> Validator [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do - checkSymbols [l1] >> sequence [Where <$> validateSequence validateExpression exprs] + checkSymbols [l1] + ws <- Where <$> validateSequence validateExpression exprs + return . pure $ [ws] validateObjectiveStatement :: ObjectiveStatementNode -> Validator [Statement] -validateObjectiveStatement (ObjectiveMin lt en) = - checkSymbols [lt] >> sequence [Objective Minimising <$> validateExpression en] -validateObjectiveStatement (ObjectiveMax lt en) = - checkSymbols [lt] >> sequence [Objective Maximising <$> validateExpression en] +validateObjectiveStatement (ObjectiveMin lt en) = do + checkSymbols [lt] + Just exp <- validateExpression en + return . pure $ [Objective Minimising exp] +validateObjectiveStatement (ObjectiveMax lt en) =do + checkSymbols [lt] + Just exp <- validateExpression en + return . pure $ [Objective Maximising exp] validateSuchThatStatement :: SuchThatStatementNode -> Validator [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do checkSymbols [l1, l2] exprs' <- validateSequence validateExpression exprs - return [SuchThat exprs'] + return . pure $ [SuchThat exprs'] validateBranchingStatement :: BranchingStatementNode -> Validator [Statement] validateBranchingStatement (BranchingStatementNode l1 l2 statements) = do @@ -92,131 +178,89 @@ validateBranchingStatement (BranchingStatementNode l1 l2 statements) = do todo "branching" validateDeclarationStatement :: DeclarationStatementNode -> Validator [Statement] -validateDeclarationStatement stmt = - fmap Declaration <$> case stmt of +validateDeclarationStatement stmt = do + Just stmt' <- case stmt of FindStatement fsn -> validateFind fsn GivenStatement gsn -> validateGiven gsn LettingStatement lsn -> validateLetting lsn + return . pure $ Declaration <$> stmt' validateGiven :: GivenStatementNode -> Validator [Declaration] validateGiven (GivenStatementNode l1 idents l2 domain) = do checkSymbols [l1, l2] - names <- validate $ validateNameList idents - dom <- validate $ validateDomain domain - verify $ zipWith (FindOrGiven Given) <$> names <*> (repeat <$> dom) + names <- validateNameList idents + Just dom <- validateDomain domain + return . pure $ [ FindOrGiven Given nm dom|nm <- names ] validateGiven (GivenEnumNode l1 se l2 l3 l4) = do checkSymbols [l1, l2, l3, l4] - names <- validate $ validateNameList se - verify $ fmap GivenDomainDefnEnum <$> names + names <- validateNameList se + return . pure $ [GivenDomainDefnEnum n | n <- names] validateLetting :: LettingStatementNode -> Validator [Declaration] -- Letting [names] be validateLetting (LettingStatementNode l1 names l2 assign) = do checkSymbols [l1, l2] - names' <- validate $ validateNameList names + names' <- validateNameList names assignment <- validateLettingAssignment assign - verify $ fmap assignment <$> names' + return $ fmap <$> assignment <*> pure names' validateLettingAssignment :: LettingAssignmentNode -> Validator (Name -> Declaration) validateLettingAssignment (LettingExpr en) = do - expr <- validateExpression en - return (`Letting` expr) + Just expr <- validateExpression en + return . pure $ (`Letting` expr) validateLettingAssignment (LettingDomain lt dn) = do checkSymbols [lt] - domain <- validateDomain dn - return (`Letting` Domain domain) + Just domain <- validateDomain dn + return . pure $ (`Letting` Domain domain) validateLettingAssignment (LettingEnum l1 l2 l3 names) = do checkSymbols [l1, l2, l3] members <- validateList validateName names - return (`LettingDomainDefnEnum` members) + return . pure $ (`LettingDomainDefnEnum` members) validateLettingAssignment (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] - size <- validateExpression szExp - return (`LettingDomainDefnUnnamed` size) + Just size <- validateExpression szExp + return . pure $ (`LettingDomainDefnUnnamed` size) -data ValidatorError - = TypeError String - | StateError String - | SyntaxError String - | TokenError LToken - | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere - | NotImplemented String - deriving (Show) -data Validator a = Validator - { value :: Maybe a - , errors :: [ValidatorError] - } - deriving (Show) +-- validate :: Validator a -> Validator (Maybe a) +-- validate n = do +-- case n of +-- Validator Nothing ves -> Validator (Just Nothing) ves +-- Validator (Just a) ves -> Validator (Just $ Just a) ves -data Foo = Foo Int Int Int - deriving (Show) +-- getPrefix :: Validator Int +-- getPrefix = Validator Nothing [TypeError "ERR"] + +-- g :: Validator Foo +-- g = do +-- _ <- validate getPrefix +-- a <- do return 1 +-- b <- do return 1 :: Validator Int +-- c <- do return 1 +-- return $ Foo <$> a <*> b <*> c -instance Functor Validator where - fmap :: (a -> b) -> Validator a -> Validator b - fmap fab (Validator m_a ves) = - Validator - { value = case m_a of - Nothing -> Nothing - (Just a) -> Just $ fab a - , errors = ves - } - -instance Applicative Validator where - pure :: a -> Validator a - pure x = Validator (Just x) [] - (<*>) :: Validator (a -> b) -> Validator a -> Validator b - (Validator Nothing es) <*> (Validator _ e2s) = Validator Nothing (es ++ e2s) - (Validator (Just f) es) <*> (Validator a e2s) = Validator val (es ++ e2s) - where - val = case a of - Just a' -> Just $ f a' - Nothing -> Nothing - -instance Monad Validator where - (>>=) :: Validator a -> (a -> Validator b) -> Validator b - (Validator Nothing ves) >>= _ = - Validator{value = Nothing, errors = ves} - (Validator (Just n) ves) >>= f = - let r = f n - in r{errors = ves ++ errors r} - -validate :: Validator a -> Validator (Maybe a) -validate n = do - case n of - Validator Nothing ves -> Validator (Just Nothing) ves - Validator (Just a) ves -> Validator (Just $ Just a) ves - -getPrefix :: Validator Int -getPrefix = Validator Nothing [TypeError "ERR"] - -g :: Validator Foo -g = do - _ <- validate getPrefix - a <- validate $ do return 1 - b <- validate $ do return 1 :: Validator Int - c <- validate $ do return 1 - verify $ Foo <$> a <*> b <*> c - -verify :: Maybe a -> Validator a -verify (Just a) = Validator{value = Just a, errors = []} -verify Nothing = Validator{value = Nothing, errors = []} +-- verify :: Maybe a -> Validator a +-- verify (Just a) = Validator{value = Just a, errors = []} +-- verify Nothing = Validator{value = Nothing, errors = []} invalid :: ValidatorError -> Validator a -invalid err = Validator Nothing [err] +invalid err = do + raiseError err + return Nothing + -- Validator Nothing [err] -rg :: String -rg = case g of - (Validator x es) -> show (x, es) +-- rg :: String +-- rg = case g of +-- (Validator x es) -> show (x, es) -- type Checker a = State [ValidatorError] (Maybe a) validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of - RealToken et -> return $ lexeme et + RealToken et -> return . pure $ lexeme et _ -> invalid $ TokenError s -- [MissingTokenError ] @@ -224,9 +268,9 @@ validateSymbol s = validateFind :: FindStatementNode -> Validator [Declaration] validateFind (FindStatementNode find names colon domain) = do checkSymbols [find, colon] - names' <- validate $ validateNameList names - domain' <- validate $ validateDomain domain - verify $ map <$> (makeFind <$> domain') <*> names' + names' <- validateNameList names + domain' <- validateDomain domain + return $ map <$> (makeFind <$> domain') <*> pure names' where makeFind :: Domain () Expression -> Name -> Declaration makeFind dom nm = FindOrGiven Find nm dom @@ -234,12 +278,14 @@ validateFind (FindStatementNode find names colon domain) = do type DomainValidator = Validator (Domain () Expression) validateDomainWithRepr :: DomainNode -> Validator (Domain HasRepresentation Expression) -validateDomainWithRepr dom = changeRepr NoRepresentation <$> validateDomain dom +validateDomainWithRepr dom = do + dom' <- validateDomain dom + return $ changeRepr NoRepresentation <$> dom' validateDomain :: DomainNode -> DomainValidator validateDomain dm = case dm of - MetaVarDomain lt -> DomainMetaVar <$> validateMetaVar lt - BoolDomainNode lt -> validateSymbol lt >> return DomainBool + MetaVarDomain lt -> do mv <- validateMetaVar lt ; return $ DomainMetaVar <$> mv + BoolDomainNode lt -> pure <$> (validateSymbol lt >> return DomainBool) RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges EnumDomainNode nn -> validateNamedEnumDomain nn @@ -259,133 +305,235 @@ validateDomain dm = case dm of validateRangedInt :: Maybe (ListNode RangeNode) -> DomainValidator validateRangedInt (Just ranges) = do ranges' <- validateList validateRange ranges - return $ DomainInt TagInt ranges' - validateRangedInt Nothing = return $ DomainInt TagInt [] + return . pure $ DomainInt TagInt ranges' + validateRangedInt Nothing = return . pure $ DomainInt TagInt [] validateEnumRange :: NameNode -> ListNode RangeNode -> DomainValidator validateEnumRange name ranges = do - name' <- validate $ validateIdentifier name + name' <- validateIdentifier name + -- vars <- get ranges' <- validateList validateRange ranges -- scopecheck (see parser:313) - verify $ (\n -> DomainEnum (Name n) (Just ranges') Nothing) <$> name' + return $ (\n -> DomainEnum (Name n) (Just ranges') Nothing) <$> name' validateNamedEnumDomain :: NameNode -> DomainValidator validateNamedEnumDomain name = do name' <- validateName name - return $ DomainReference name' Nothing + return $ DomainReference <$> name' <*> pure Nothing validateTupleDomain :: ListNode DomainNode -> DomainValidator - validateTupleDomain doms = DomainTuple <$> validateList validateDomain doms + validateTupleDomain doms = pure . DomainTuple <$> validateList validateDomain doms validateRecordDomain :: ListNode NamedDomainNode -> DomainValidator - validateRecordDomain namedDoms = DomainRecord <$> validateList validateNamedDomain namedDoms + validateRecordDomain namedDoms = pure . DomainRecord <$> validateList validateNamedDomain namedDoms validateVariantDomain :: ListNode NamedDomainNode -> DomainValidator - validateVariantDomain namedDoms = DomainRecord <$> validateList validateNamedDomain namedDoms + validateVariantDomain namedDoms = do + lst <- validateList validateNamedDomain namedDoms + return . pure $ DomainVariant lst validateMatrixDomain :: ListNode DomainNode -> DomainNode -> DomainValidator validateMatrixDomain indexes dom = do - idoms <- validate $ validateList validateDomain indexes - dom' <- validate $ validateDomain dom - verify $ foldr DomainMatrix <$> dom' <*> idoms + idoms <- validateList validateDomain indexes + dom' <- validateDomain dom + return $ foldr DomainMatrix <$> dom' <*> pure idoms validateSetDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validateSetDomain attrs dom = do let repr = Just () - attrs' <- validate $ validateSetAttributes attrs - dom' <- validate $ validateDomain dom - verify $ DomainSet <$> repr <*> attrs' <*> dom' + attrs' <- validateSetAttributes attrs + dom' <- validateDomain dom + return $ DomainSet <$> repr <*> attrs' <*> dom' validateMSetDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validateMSetDomain attrs dom = do let repr = Just () - attrs' <- validate $ validateMSetAttributes attrs - dom' <- validate $ validateDomain dom - verify $ DomainMSet <$> repr <*> attrs' <*> dom' + attrs' <- validateMSetAttributes attrs + dom' <- validateDomain dom + return $ DomainMSet <$> repr <*> attrs' <*> dom' validateFunctionDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainNode -> DomainValidator validateFunctionDomain attrs dom1 dom2 = do let repr = Just () attrs' <- case attrs of - Just a -> validate $ validateFuncAttributes a + Just a -> validateFuncAttributes a Nothing -> return $ Just def - dom1' <- validate $ validateDomain dom1 - dom2' <- validate $ validateDomain dom2 - verify $ DomainFunction <$> repr <*> attrs' <*> dom1' <*> dom2' + dom1' <- validateDomain dom1 + dom2' <- validateDomain dom2 + return $ DomainFunction <$> repr <*> attrs' <*> dom1' <*> dom2' -- attrs <- validateAttributes validateSequenceDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validateSequenceDomain attrs dom = do let repr = Just () - attrs' <- validate $ validateSeqAttributes attrs - dom' <- validate $ validateDomain dom - verify $ DomainSequence <$> repr <*> attrs' <*> dom' + attrs' <- validateSeqAttributes attrs + dom' <- validateDomain dom + return $ DomainSequence <$> repr <*> attrs' <*> dom' validateRelationDomain :: ListNode AttributeNode -> ListNode DomainNode -> DomainValidator validateRelationDomain attrs doms = do let repr = Just () - attrs' <- validate $ validateRelationAttributes attrs - doms' <- validate $ validateList validateDomain doms - verify $ DomainRelation <$> repr <*> attrs' <*> doms' + attrs' <- validateRelationAttributes attrs + doms' <- validateList validateDomain doms + return $ DomainRelation <$> repr <*> attrs' <*> pure doms' validatePartitionDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator validatePartitionDomain attrs dom = do let repr = Just () - attrs' <- validate $ validatePartitionAttributes attrs - dom' <- validate $ validateDomain dom - verify $ DomainPartition <$> repr <*> attrs' <*> dom' + attrs' <- validatePartitionAttributes attrs + dom' <- validateDomain dom + return $ DomainPartition <$> repr <*> attrs' <*> dom' todo :: String -> Validator a todo s = invalid $ NotImplemented s --- TODO:THIS IS NOT DONE +validateSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) +validateSizeAttributes attrs = do + let sizeAttrs = [L_size,L_minSize,L_maxSize] + let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs + case filtered of + [] -> return $ Just SizeAttr_None + [(L_size,Just a)] -> return $ Just (SizeAttr_Size a) + [(L_minSize, Just a)] -> return $ Just (SizeAttr_MinSize a) + [(L_maxSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) + [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) + as -> do invalid $ RegionError "Incompatible attributes" + +validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) +validatePartSizeAttributes attrs = do + let sizeAttrs = [L_partSize,L_maxPartSize,L_maxPartSize] + let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs + case filtered of + [] -> return $ Just SizeAttr_None + [(L_size,Just a)] -> return $ Just (SizeAttr_Size a) + [(L_minPartSize, Just a)] -> return $ Just (SizeAttr_MinSize a) + [(L_maxPartSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) + [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) + as -> do invalid $ RegionError "Incompatible attributes" + +validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> Validator JectivityAttr +validateJectivityAttributes attrs = do + let sizeAttrs = [L_injective,L_surjective,L_bijective] + let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs + case filtered of + [] -> return $ Just JectivityAttr_None + [(L_injective,_)] -> return $ Just JectivityAttr_Injective + [(L_surjective, _)] -> return $ Just JectivityAttr_Surjective + [(L_bijective, _)] -> return $ Just JectivityAttr_Bijective + [(L_injective, _),(L_surjective, _)] -> do + info "Inj and Sur can be combined to bijective" + return $ Just JectivityAttr_Bijective + as -> do invalid $ RegionError "Incompatible attributes" + + validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) -validateSetAttributes a = do verify $ Nothing +validateSetAttributes atts = do + attrs <- validateList (validateAttributeNode setValidAttrs) atts + size <- validateSizeAttributes attrs + return $ SetAttr <$> size + validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) -validateMSetAttributes a = do verify $ Nothing +validateMSetAttributes atts = do + attrs <- validateList (validateAttributeNode msetValidAttrs) atts + size <- validateSizeAttributes attrs + occurs <- validateOccursAttrs attrs + return $ MSetAttr <$> size <*> occurs + where + validateOccursAttrs attrs = do + let sizeAttrs = [L_size,L_minSize,L_maxSize] + let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs + case filtered of + [] -> return $ Just OccurAttr_None + [(L_minOccur,Just a)] -> return $ Just (OccurAttr_MinOccur a) + [(L_maxOccur, Just a)] -> return $ Just (OccurAttr_MaxOccur a) + [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ Just (OccurAttr_MinMaxOccur a b) + _ -> invalid $ StateError "Bad args to occurs" + validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) -validateFuncAttributes a = do verify $ Nothing +validateFuncAttributes atts = do + attrs <- validateList (validateAttributeNode funAttrs) atts + size <- validateSizeAttributes attrs + parts <- return . Just $ if L_total `elem` map fst attrs then PartialityAttr_Total else PartialityAttr_Partial + jectivity <- validateJectivityAttributes attrs + return $ FunctionAttr <$> size <*> parts <*> jectivity validateSeqAttributes :: ListNode AttributeNode -> Validator (SequenceAttr Expression) -validateSeqAttributes a = do verify $ Nothing +validateSeqAttributes atts = do + attrs <- validateList (validateAttributeNode seqAttrs) atts + size <- validateSizeAttributes attrs + jectivity <- validateJectivityAttributes attrs + return $ SequenceAttr <$> size <*> jectivity + validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr Expression) -validateRelationAttributes a = do verify $ Nothing +validateRelationAttributes atts = do + attrs <- validateList (validateAttributeNode relAttrs) atts + size <- validateSizeAttributes attrs + others <- validateArray validateBinaryRel (filter (const True) attrs) + return $ RelationAttr <$> size <*> pure (BinaryRelationAttrs $ S.fromList others ) + where + validateBinaryRel :: (Lexeme , Maybe Expression) -> Validator BinaryRelationAttr + validateBinaryRel (l,_) = do + case lexemeToBinRel l of + Just b -> return . pure $ b + Nothing -> invalid $ StateError $ "Not found (bin rel) " ++ show l validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) -validatePartitionAttributes a = do verify $ Nothing +validatePartitionAttributes atts = do + attrs <- validateList (validateAttributeNode partitionAttrs) atts + size <- validateSizeAttributes attrs + partSize <- validatePartSizeAttributes attrs + regular <- return . Just $ L_regular `elem` map fst attrs + return $ PartitionAttr <$> size <*> partSize <*> regular + +validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,Maybe Expression) +validateAttributeNode vs (NamedAttributeNode t Nothing) = do + Just name <- validateSymbol t + case M.lookup name vs of + Nothing -> invalid $ TokenError t + Just True -> invalid $ RegionError "Argument required" + Just False -> return . pure $ (name , Nothing) + +validateAttributeNode vs (NamedAttributeNode t (Just e)) = do + expr <- validateExpression e + Just name <- validateSymbol t + case M.lookup name vs of + Nothing -> invalid $ TokenError t + Just False -> invalid $ RegionError "name: does not take an argument" + Just True -> return $(\x -> (name,Just x)) <$> expr + validateNamedDomain :: NamedDomainNode -> Validator (Name, Domain () Expression) validateNamedDomain (NameDomainNode name l1 domain) = do checkSymbols [l1] - name' <- validate $ validateName name - domain' <- validate $ validateDomain domain - verify $ (,) <$> name' <*> domain' + name' <- validateName name + domain' <- validateDomain domain + return $ (,) <$> name' <*> domain' validateRange :: RangeNode -> Validator (Range Expression) validateRange range = case range of - SingleRangeNode en -> RangeSingle <$> validateExpression en - OpenRangeNode dots -> checkSymbols [dots] >> return RangeOpen - RightUnboundedRangeNode e1 dots -> checkSymbols [dots] >> RangeLowerBounded <$> validateExpression e1 - LeftUnboundedRangeNode dots e1 -> checkSymbols [dots] >> RangeUpperBounded <$> validateExpression e1 + SingleRangeNode en -> do ex <- validateExpression en ; return $ RangeSingle <$> ex + OpenRangeNode dots -> do checkSymbols [dots] ; return . pure $ RangeOpen + RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ; ex <- validateExpression e1 ; return $ RangeLowerBounded <$>ex + LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; ex <- validateExpression e1 ; return $ RangeUpperBounded <$> ex BoundedRangeNode e1 dots e2 -> do _ <- checkSymbols [dots] - e1' <- validate $ validateExpression e1 - e2' <- validate $ validateExpression e2 - verify $ RangeBounded <$> e1' <*> e2' + e1' <- validateExpression e1 + e2' <- validateExpression e2 + return $ RangeBounded <$> e1' <*> e2' validateArrowPair :: ArrowPairNode -> Validator (Expression, Expression) validateArrowPair (ArrowPairNode e1 s e2) = do checkSymbols [s] - e1' <- validate $ validateExpression e1 - e2' <- validate $ validateExpression e2 - verify $ (,) <$> e1' <*> e2' + e1' <- validateExpression e1 + e2' <- validateExpression e2 + return $ (,) <$> e1' <*> e2' validateExpression :: ExpressionNode -> Validator Expression validateExpression expr = case expr of Literal ln -> validateLiteral ln IdentifierNode nn -> validateIdentifierExpr nn - MetaVarExpr tok -> ExpressionMetaVar <$> validateMetaVar tok + MetaVarExpr tok -> do x <- validateMetaVar tok ; return $ ExpressionMetaVar <$> x QuantificationExpr qen -> validateQuantificationExpression qen OperatorExpressionNode oen -> validateOperatorExpression oen DomainExpression dex -> validateDomainExpression dex ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp AbsExpression (ParenExpressionNode l1 exp l2) -> do checkSymbols [l1,l2] - exp' <- validateExpression exp - return $ mkOp TwoBarOp [exp'] + Just exp' <- validateExpression exp + return . pure $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs SpecialCase l1 scn -> checkSymbols [l1] >> validateSpecialCase scn @@ -396,12 +544,12 @@ validateAttributeAsConstraint l1 exprs = do checkSymbols [l1] es <- validateList validateExpression exprs do - lx <- validateSymbol l1 + Just lx <- validateSymbol l1 let n = lookup (Name (lexemeText lx)) allSupportedAttributes case (n,es) of - (Just 1 , [e,v]) -> return $ aacBuilder e lx (Just v) + (Just 1 , [e,v]) -> return . pure $ aacBuilder e lx (Just v) (Just 1 , _) -> invalid $ StateError $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es) - (Just 0 , [e]) -> return $ aacBuilder e lx Nothing + (Just 0 , [e]) -> return . pure $ aacBuilder e lx Nothing (Just 0 , _) -> invalid $ StateError $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es) (_,_) -> invalid (IllegalToken l1) where @@ -411,7 +559,7 @@ validateSpecialCase :: SpecialCaseNode -> Validator Expression validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do checkSymbols [l1,l2,l3] expr <- validateExpression ex - conds <- validateProgramTree sts + Just conds <- validateProgramTree sts let decls = [ Declaration (FindOrGiven LocalFind nm dom) | Declaration (FindOrGiven Find nm dom) <- conds ] @@ -422,7 +570,7 @@ validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do let locals = if null decls then DefinednessConstraints cons else AuxiliaryVars (decls ++ [SuchThat cons]) - return (WithLocals expr locals) + return (WithLocals <$> expr <*> pure locals) translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of @@ -434,104 +582,105 @@ validateQuantificationExpression :: QuantificationExpressionNode -> Validator Ex validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = do checkSymbols [dot] - name' <- validate $ validateSymbol name - patterns <- validate $ validateSequence validateAbstractPattern pats - over' <- validate $ validateQuantificationOver over - guard' <- validate $ validateQuantificationGuard m_guard - body <- validate $ validateExpression expr - let gens = map <$> over' <*> patterns + name' <- validateSymbol name + patterns <- validateSequence validateAbstractPattern pats + over' <- validateQuantificationOver over + guard' <- validateQuantificationGuard m_guard + body <- validateExpression expr + let gens = map <$> over' <*> pure patterns let qBody = Comprehension <$> body <*> ((++) <$> guard' <*> gens) - verify $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) + return $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) where validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] - validateQuantificationGuard Nothing = pure [] + validateQuantificationGuard Nothing = return $ pure [] validateQuantificationGuard (Just (QuanticationGuard l1 exp) ) = do checkSymbols [l1] - expr' <- validateExpression exp - return [Condition expr'] + Just expr' <- validateExpression exp + return . pure $ [Condition expr'] validateQuantificationOver :: QuantificationOverNode -> Validator (AbstractPattern -> GeneratorOrCondition) validateQuantificationOver ( QuantifiedSubsetOfNode lt en ) = do checkSymbols [lt] - exp <- validateExpression en - return (\pat -> Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet exp)) + Just exp <- validateExpression en + return . pure $ (\pat -> Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet exp)) validateQuantificationOver ( QuantifiedMemberOfNode lt en ) = do checkSymbols [lt] - exp <- validateExpression en - return (\pat -> Generator $ GenInExpr pat exp) + Just exp <- validateExpression en + return . pure $ (\pat -> Generator $ GenInExpr pat exp) validateQuantificationOver ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do checkSymbols [l1] - dom' <- validateDomain dom - return (\pat -> Generator $ GenDomainNoRepr pat dom') + Just dom' <- validateDomain dom + return . pure $ (\pat -> Generator $ GenDomainNoRepr pat dom') validateAbstractPattern :: AbstractPatternNode -> Validator AbstractPattern -validateAbstractPattern (AbstractIdentifier nn) = Single <$> validateName nn -validateAbstractPattern (AbstractMetaVar lt) = AbstractPatternMetaVar <$> validateMetaVar lt -validateAbstractPattern (AbstractPatternMatrix ln) = AbsPatMatrix <$> validateList validateAbstractPattern ln -validateAbstractPattern (AbstractPatternSet ln) = AbsPatSet <$> validateList validateAbstractPattern ln +validateAbstractPattern (AbstractIdentifier nn) = validateName nn >>= \x -> return $ Single <$> x +validateAbstractPattern (AbstractMetaVar lt) = validateMetaVar lt >>= \x -> return $ AbstractPatternMetaVar <$> x +validateAbstractPattern (AbstractPatternMatrix ln) = pure . AbsPatMatrix <$> validateList validateAbstractPattern ln +validateAbstractPattern (AbstractPatternSet ln) = pure . AbsPatSet <$> validateList validateAbstractPattern ln validateAbstractPattern (AbstractPatternTuple m_lt ln) = do maybe (pure ()) (\n ->checkSymbols [n]) m_lt - AbsPatTuple <$> validateList validateAbstractPattern ln + pure . AbsPatTuple <$> validateList validateAbstractPattern ln validateMetaVar :: LToken -> Validator String validateMetaVar tok = do - lx <- validateSymbol tok + Just lx <- validateSymbol tok case lx of - LMetaVar s -> return $ unpack s + LMetaVar s -> return .pure $ unpack s _ -> invalid $ IllegalToken tok validateDomainExpression :: DomainExpressionNode -> Validator Expression validateDomainExpression (DomainExpressionNode l1 dom l2) = do checkSymbols [l1,l2] - Domain <$> validateDomain dom + dom' <- validateDomain dom + return $ Domain <$> dom' validateFunctionApplication :: LToken -> ListNode ExpressionNode -> Validator Expression validateFunctionApplication name args = do - name' <- validate $ validateSymbol name - args' <- validate $ validateList validateExpression args - verify $ do - n <- name' - a <- args' - return $ case (n,a) of - (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z - _ -> mkOp (FunctionOp n) a + name' <- validateSymbol name + args' <- validateList validateExpression args + return $ do + n <- name' + let a = args' + case (n,a) of + (L_image,[y,z]) -> return $ Op $ MkOpImage $ OpImage y z + _ -> return $ mkOp (FunctionOp n) a + validateIdentifierExpr :: NameNode -> Validator Expression -validateIdentifierExpr name = Reference <$> ( Name <$> validateIdentifier name) <*> pure Nothing +validateIdentifierExpr name = do + n <- validateIdentifier name + return $ Reference <$> (Name <$> n) <*> pure Nothing validateOperatorExpression :: OperatorExpressionNode -> Validator Expression validateOperatorExpression (PrefixOpNode lt expr) = do - op <- validate $ validateSymbol lt - expr <- validate $ validateExpression expr - verify $ do - op' <- op - expr' <- expr - return $ mkOp (PrefixOp op') [expr'] + expr <- validateExpression expr + Just op <- validateSymbol lt + return $ (\x -> mkOp (PrefixOp op) [x]) <$> (expr) --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do - lExpr <- validate $ validateExpression lexp - rExpr <- validate $ validateExpression rexp - op' <- validate $ validateSymbol op - verify $ mkBinOp <$> ( pack . lexemeFace <$> op') <*> lExpr <*> rExpr + lExpr <- validateExpression lexp + rExpr <- validateExpression rexp + op' <- validateSymbol op + return $ mkBinOp <$> ( pack . lexemeFace <$> op') <*> lExpr <*> rExpr validateOperatorExpression (PostfixOpNode expr pon) = do - expr' <- validate $ validateExpression expr - postFixOp <- validate $ validatePostfixOp pon - verify $ postFixOp <*> expr' + expr' <- validateExpression expr + postFixOp <- validatePostfixOp pon + return $ postFixOp <*> expr' validatePostfixOp :: PostfixOpNode -> Validator (Expression -> Expression) validatePostfixOp (OpFactorial lt) = do checkSymbols [lt] - return (\x -> mkOp FactorialOp [x]) + return . pure $ (\x -> mkOp FactorialOp [x]) validatePostfixOp (ApplicationNode args) = do args' <- validateList validateExpression args let underscore = Reference "_" Nothing let ys = [if underscore == x then Nothing else Just x | x <- args'] - return $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys + return . pure $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys validatePostfixOp (IndexedNode ln) = do ranges <-validateList validateRange ln let indices = map interpretRange ranges - return $ \x -> (foldl (\m f -> f m)) x indices + return . pure $ \x -> (foldl (\m f -> f m)) x indices where interpretRange :: Range Expression -> (Expression-> Expression) interpretRange x = @@ -546,35 +695,54 @@ validatePostfixOp (IndexedNode ln) = do Right (i,j) -> \m -> Op $ MkOpSlicing (OpSlicing m i j) validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do checkSymbols [l1,l2,l3] - dom' <- validateDomain dom + Just dom' <- validateDomain dom let t = getType dom' case t of Nothing -> invalid $ StateError $ "Some type bug with:" ++ show dom' - Just ty -> return (\ex -> Typed ex ty) + Just ty -> return . pure $ (\ex -> Typed ex ty) where getType :: Domain () Expression -> Maybe Type getType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d + + validateLiteral :: LiteralNode -> Validator Expression validateLiteral litNode = case litNode of - IntLiteral lt -> Constant <$> validateIntLiteral lt - BoolLiteral lt -> Constant <$> validateBoolLiteral lt + IntLiteral lt -> validateIntLiteral lt >>= \x -> return $ Constant <$> x + BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ Constant <$> x MatrixLiteral mln -> validateMatrixLiteral mln - TupleLiteralNode lt -> mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt - TupleLiteralNodeShort st -> mkAbstractLiteral . AbsLitTuple <$> validateShortTuple st + TupleLiteralNode lt -> Just . mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt + TupleLiteralNodeShort st -> Just . mkAbstractLiteral.AbsLitTuple <$> validateShortTuple st RecordLiteral lt ln -> checkSymbols [lt] >> validateRecordLiteral ln VariantLiteral lt ln -> checkSymbols [lt] >> validateVariantLiteral ln SetLiteral ls -> validateSetLiteral ls MSetLiteral lt ls -> checkSymbols [lt] >> validateMSetLiteral ls FunctionLiteral lt ln -> checkSymbols [lt] >> validateFunctionLiteral ln - SequenceLiteral lt ln -> checkSymbols [lt] >> mkAbstractLiteral . AbsLitSequence <$> validateExprList ln - RelationLiteral lt ln -> todo "Relation literal" + SequenceLiteral lt ln -> checkSymbols [lt] >> validateSequenceLiteral ln + RelationLiteral lt ln -> checkSymbols [lt] >> validateRelationLiteral ln PartitionLiteral lt ln -> checkSymbols [lt] >> validatePartitionLiteral ln +validateSequenceLiteral :: ListNode ExpressionNode -> Validator Expression +validateSequenceLiteral x = do + l <- validateExprList x + return . pure $ mkAbstractLiteral $ AbsLitSequence l + + +validateRelationLiteral :: ListNode RelationElemNode -> Validator Expression +validateRelationLiteral ln = do + members <- validateList validateRelationMember ln + return . pure $ mkAbstractLiteral $ AbsLitRelation members + where + validateRelationMember :: RelationElemNode -> Validator [Expression] + validateRelationMember x = case x of + RelationElemNodeLabeled lt -> Just <$> validateLongTuple lt + RelationElemNodeShort st -> Just <$> validateShortTuple st + + validatePartitionLiteral :: ListNode PartitionElemNode -> Validator Expression validatePartitionLiteral ln = do - members <- validateList (\(PartitionElemNode exprs) -> validateExprList exprs) ln - return . mkAbstractLiteral $ AbsLitPartition members + members <- validateList (\(PartitionElemNode exprs) -> Just <$> validateExprList exprs) ln + return . pure . mkAbstractLiteral $ AbsLitPartition members @@ -582,14 +750,14 @@ validatePartitionLiteral ln = do validateRecordLiteral :: ListNode RecordMemberNode -> Validator Expression validateRecordLiteral ln = do members <- validateList validateRecordMember ln - return $ mkAbstractLiteral $ AbsLitRecord members + return . pure $ mkAbstractLiteral $ AbsLitRecord members validateVariantLiteral :: ListNode RecordMemberNode -> Validator Expression validateVariantLiteral ln = do members <- validateList validateRecordMember ln case members of [] -> invalid $ SyntaxError "Variants must contain exactly one member" - [(n,x)]-> return $ mkAbstractLiteral $ AbsLitVariant Nothing n x + [(n,x)]-> return . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n x _:_ -> invalid $ SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected @@ -597,35 +765,35 @@ validateVariantLiteral ln = do validateRecordMember :: RecordMemberNode -> Validator (Name,Expression) validateRecordMember (RecordMemberNode name lEq expr) = do checkSymbols [lEq] - name' <- validate $ validateName name - expr' <- validate $ validateExpression expr - verify $ (,) <$> name' <*> expr' + name' <- validateName name + expr' <- validateExpression expr + return $ (,) <$> name' <*> expr' validateFunctionLiteral :: ListNode ArrowPairNode -> Validator Expression validateFunctionLiteral ln = do pairs <- validateList validateArrowPair ln - return $ mkAbstractLiteral $ AbsLitFunction pairs + return . pure $ mkAbstractLiteral $ AbsLitFunction pairs validateSetLiteral :: ListNode ExpressionNode -> Validator Expression validateSetLiteral ls = do xs <- validateList validateExpression ls - return $mkAbstractLiteral $ AbsLitSet xs + return . pure $ mkAbstractLiteral $ AbsLitSet xs validateMSetLiteral :: ListNode ExpressionNode -> Validator Expression validateMSetLiteral ls = do xs <- validateList validateExpression ls - return $mkAbstractLiteral $ AbsLitMSet xs + return .pure $ mkAbstractLiteral $ AbsLitMSet xs validateMatrixLiteral :: MatrixLiteralNode -> Validator Expression validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do checkSymbols [l1,l2] - elems <- validate $ validateSequence validateExpression se - dom <- validate $ validateOverDomain m_dom + elems <- validateSequence validateExpression se + dom <- validateOverDomain m_dom let lit = do - xs <- elems + let xs = elems case dom of - Just (Just d) ->return $ AbsLitMatrix d xs + Just (Just d) -> return $ AbsLitMatrix d xs _ -> return $ AbsLitMatrix (mkDomainIntB 1 (fromInt $ genericLength xs)) xs - verify $ mkAbstractLiteral <$> lit + pure . mkAbstractLiteral <$> lit where validateOverDomain :: Maybe OverDomainNode -> Validator (Maybe (Domain () Expression)) validateOverDomain Nothing = pure Nothing @@ -635,45 +803,44 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do checkSymbols [l1,l2] - elems <- validate $ validateSequence validateExpression se - gens <- validate $ validateComprehension comp + elems <- Just <$> validateSequence validateExpression se + gens <- validateComprehension comp enforceConstraint ((\x -> length x == 1 )<$> elems) "List comprehension must contain exactly one expression before |" - verify $ do - ms <- elems - gs <- gens - case ms of - [x] -> return $ Comprehension x gs - _ -> Nothing + return $ do + ms <- elems + gs <- gens + case ms of + [x] -> return $ Comprehension x gs + _ -> Nothing validateComprehension :: ComprehensionNode -> Validator [GeneratorOrCondition] -validateComprehension (ComprehensionNode l1 body) = checkSymbols [l1] >> concat <$> validateSequence validateComprehensionBody body +validateComprehension (ComprehensionNode l1 body) = do + checkSymbols [l1] + pure . concat <$> validateSequence validateComprehensionBody body validateComprehensionBody :: ComprehensionBodyNode -> Validator [GeneratorOrCondition] -validateComprehensionBody (CompBodyCondition en) = (:[]) . Condition <$> validateExpression en +validateComprehensionBody (CompBodyCondition en) = do + Just e <- validateExpression en + return . pure $ [Condition e] validateComprehensionBody (CompBodyDomain apn l1 dom) = do checkSymbols [l1] - pats <- validate $ validateSequence validateAbstractPattern apn - domain <- validate $ validateDomain dom - verify $ do - ps <- pats - d <- domain - return [Generator (GenDomainNoRepr pat d) | pat <- ps] + pats <- validateSequence validateAbstractPattern apn + Just domain <- validateDomain dom + return . pure $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] - pats <- validate $ validateSequence validateAbstractPattern apn - exp <- validate $ validateExpression en - verify $ do - ps <- pats - e <- exp - return [Generator (GenInExpr pat e)| pat <- ps] + pats <- validateSequence validateAbstractPattern apn + Just exp <- validateExpression en + return . pure $ [Generator (GenInExpr pat exp)| pat <- pats] validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do checkSymbols [l1,l2] - pat <- validate $ validateAbstractPattern nn - expr <- validate $ validateExpression en - verify $ (:[]) <$> (ComprehensionLetting <$> pat <*> expr) + pat <- validateAbstractPattern nn + expr <- validateExpression en + let gen = ComprehensionLetting <$> pat <*> expr + return (( : []) <$> gen) mkAbstractLiteral :: AbstractLiteral Expression -> Expression @@ -682,62 +849,68 @@ mkAbstractLiteral x = case e2c (AbstractLiteral x) of Just c -> Constant c -enforceConstraint :: Maybe Bool -> String -> Validator () +enforceConstraint :: Maybe Bool -> String -> ValidatorS () enforceConstraint p msg = do case p of - Just True-> pure () - _ -> invalid $ StateError msg + Just True-> return () + _ -> invalid (StateError msg) >> fail "" -checkSymbols :: [LToken] -> Validator () -checkSymbols = mapM_ (validate . validateSymbol) +checkSymbols :: [LToken] -> ValidatorS () +checkSymbols = mapM_ validateSymbol --Raise a non structural error (i.e type error) -raiseError :: ValidatorError -> Validator () -raiseError e = Validator (Just ()) [e] +raiseError :: ValidatorError -> ValidatorS () +raiseError e = tell [e] +type ValidatorInfo = String --todo warn and info +info :: ValidatorInfo -> ValidatorS () +info v = tell [RegionError $ "info : " ++ v] + -validateShortTuple :: ShortTuple -> Validator [Expression] +validateShortTuple :: ShortTuple -> ValidatorS [Expression] validateShortTuple (ShortTuple exs) = validateList validateExpression exs -validateLongTuple :: LongTuple -> Validator [Expression] +validateLongTuple :: LongTuple -> ValidatorS [Expression] validateLongTuple (LongTuple lt exs) = checkSymbols [lt] >> validateList validateExpression exs validateIntLiteral :: LToken -> Validator Constant validateIntLiteral t = do l <- validateSymbol t case l of - LIntLiteral x -> return $ ConstantInt TagInt x + Just (LIntLiteral x) -> return . pure $ ConstantInt TagInt x _ -> invalid $ IllegalToken t validateBoolLiteral :: LToken -> Validator Constant validateBoolLiteral t = do - l <- validateSymbol t + Just l <- validateSymbol t case l of - L_true -> return $ ConstantBool True - L_false -> return $ ConstantBool False + L_true -> return . pure $ ConstantBool True + L_false -> return . pure $ ConstantBool False _ -> invalid $ IllegalToken t -validateNameList :: Sequence NameNode -> Validator [Name] +validateNameList :: Sequence NameNode -> ValidatorS [Name] validateNameList = validateSequence validateName validateIdentifier :: NameNode -> Validator Text validateIdentifier (NameNode iden) = do - q <- validate $ validateSymbol iden - verify $ case q of - Just (LIdentifier x) -> Just x - _ -> Nothing + Just q <- validateSymbol iden + case q of + LIdentifier x -> return $ Just x + _ -> return Nothing validateName :: NameNode -> Validator Name -validateName name = Name <$> validateIdentifier name +validateName name = do + n <- validateIdentifier name + return $ (Name <$> n) -validateArray :: (a -> Validator b) -> [a] -> Validator [b] -validateArray f l = catMaybes <$> mapM (validate . f) l +validateArray :: (a -> Validator b) -> [a] -> ValidatorS [b] +validateArray f l = catMaybes <$> mapM f l -validateList :: (a -> Validator b) -> ListNode a -> Validator [b] +validateList :: (a -> Validator b) -> ListNode a -> ValidatorS [b] validateList validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end @@ -748,15 +921,15 @@ validateList validator (ListNode st seq end) = do -- L_Minus -> "negate" -- L_ExclamationMark -> "not" -- _ -> pack $ lexemeFace x -validateSequence :: (a -> Validator b) -> Sequence a -> Validator [b] +validateSequence :: (a -> Validator b) -> Sequence a -> ValidatorS [b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator b -validateSequenceElem f (SeqElem i (Just x)) = validate (validateSymbol x) >> f i +validateSequenceElem f (SeqElem i (Just x)) = validateSymbol x >> f i validateSequenceElem f (SeqElem i Nothing) = f i validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid (TokenError plc) -validateExprList :: ListNode ExpressionNode -> Validator [Expression] +validateExprList :: ListNode ExpressionNode -> ValidatorS [Expression] validateExprList = validateList validateExpression @@ -769,9 +942,11 @@ val s = do let stream = ETokenStream txt $ fromMaybe other lexed -- parseTest parseProgram stream let progStruct = runParser parseProgram "TEST" stream + case progStruct of Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> print (validateModel p) + Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (SymbolTable []) in + putStrLn $ show qpr valFile :: String -> IO () From 65bfe16fefcf9c4819a6605eb676c55ca902af70 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 24 Oct 2022 17:17:06 +0100 Subject: [PATCH 078/378] Fixing test bugs --- src/Conjure/Language/AST/ASTParser.hs | 86 +++++++++------ src/Conjure/Language/AST/Reformer.hs | 7 +- src/Conjure/Language/AST/Syntax.hs | 27 +++-- src/Conjure/Language/Attributes.hs | 90 +++++++++------- src/Conjure/Language/Parser.hs | 2 +- src/Conjure/Language/Validator.hs | 147 +++++++++++++++++--------- 6 files changed, 212 insertions(+), 147 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 2ddf31d874..822cdf6028 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -57,21 +57,23 @@ parseTopLevel = <|> parseSuchThat <|> parseWhere <|> parseObjective + <|> parseHeuristic <|> UnexpectedToken <$> makeUnexpected +parseHeuristic :: Parser StatementNode +parseHeuristic = do + lHeuristic <- need L_heuristic + expr <- parseExpression + return $ HeuristicStatement lHeuristic expr + parseBranching :: Parser StatementNode parseBranching = do lBranching <- need L_branching lOn <- want L_on - statements <- squareBracketList (commaList parseBranchingPart) + statements <- squareBracketList (commaList parseExpression) return $ BranchingStatement $ BranchingStatementNode lBranching lOn statements -parseBranchingPart :: Parser BranchingOnNode -parseBranchingPart = - do - BranchingOnName <$> parseIdentifier - <|> (BranchingOnExpression <$> parseExpression) parseSuchThat :: Parser StatementNode parseSuchThat = do @@ -216,7 +218,7 @@ parseDomainExpression :: Parser DomainExpressionNode parseDomainExpression = try $ do lTick <- need L_BackTick domain <- parseDomain - case domain of + case domain of MissingDomainNode _ -> empty _ -> pure () rTick <- want L_BackTick @@ -268,6 +270,7 @@ parseLiteral = , parseTupleLiteral , parseShortTupleLiteral , parseRecordLiteral + , parseVariantLiteral , parseSetLiteral , parseMSetLiteral , parseFunctionLiteral @@ -307,7 +310,7 @@ parseVariantLiteral :: Parser LiteralNode parseVariantLiteral = do lVariant <- need L_variant members <- curlyBracketList (commaList parseRecordMember) - return $ RecordLiteral lVariant members + return $ VariantLiteral lVariant members parseRecordMember :: Parser RecordMemberNode parseRecordMember = do @@ -356,12 +359,15 @@ parseRelationLiteral = do return $ RelationLiteral lRel members parseRelationMember :: Parser RelationElemNode -parseRelationMember = do +parseRelationMember = try $ do f <- optional $ need L_tuple members <- parenList $ commaList parseExpression - return $ case f of - Nothing -> RelationElemNodeShort $ ShortTuple members - Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members + case f of + Just lTup -> return $ RelationElemNodeLabeled $ LongTuple lTup members + Nothing -> case members of + ListNode l c r | (isMissing l || isMissing r) && isMissing c -> empty + _ -> return $ RelationElemNodeShort $ ShortTuple members + parsePartitionLiteral :: Parser LiteralNode parsePartitionLiteral = do @@ -370,7 +376,7 @@ parsePartitionLiteral = do return $ PartitionLiteral lPartition members parsePartitionElem :: Parser PartitionElemNode -parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) +parsePartitionElem = PartitionElemNode <$> parseList L_OpenCurly L_CloseCurly (commaList parseExpression) parseQuantificationStatement :: Parser QuantificationExpressionNode parseQuantificationStatement = do @@ -584,11 +590,8 @@ parseSpecialCase = do parseIntDomain :: Parser DomainNode parseIntDomain = do lInt <- need L_int - ranges <- parenList $ commaList parseRange - let range = case ranges of - ListNode (MissingToken _) (Seq []) (MissingToken _) -> Nothing - _ -> Just ranges - return $ RangedIntDomainNode lInt range + ranges <- optional $ parenListStrict $ commaList parseRange + return $ RangedIntDomainNode lInt ranges parseTuple :: Parser DomainNode parseTuple = do @@ -628,7 +631,7 @@ parseMatrix = do parseSet :: Parser DomainNode parseSet = do lSet <- need L_set - attributes <- parenList $ commaList parseAttribute + attributes <- optional parseAttributes lOf <- want L_of domain <- parseDomain return $ SetDomainNode lSet attributes lOf domain @@ -636,7 +639,7 @@ parseSet = do parseMSet :: Parser DomainNode parseMSet = do lMSet <- need L_mset - attributes <- parenList $ commaList parseAttribute + attributes <- optional parseAttributes lOf <- want L_of domain <- parseDomain return $ MSetDomainNode lMSet attributes lOf domain @@ -644,23 +647,23 @@ parseMSet = do parseFunctionDomain :: Parser DomainNode parseFunctionDomain = do lFunction <- need L_function - attributes <- optional parseFunctionAttributes + attributes <- optional parseAttributes fromDom <- parseDomain arrow <- want L_LongArrow toDom <- parseDomain return $ FunctionDomainNode lFunction attributes fromDom arrow toDom - where - parseFunctionAttributes :: Parser (ListNode AttributeNode) - parseFunctionAttributes = try $ do - openB <- want L_OpenParen - lst <- commaList1 parseAttribute - closeB <- want L_CloseBracket - return $ ListNode openB lst closeB +-- where +-- parseFunctionAttributes :: Parser (ListNode AttributeNode) +-- parseFunctionAttributes = try $ do +-- openB <- want L_OpenParen +-- lst <- commaList1 parseAttribute +-- closeB <- want L_CloseParen +-- return $ ListNode openB lst closeB parseSequenceDomain :: Parser DomainNode parseSequenceDomain = do lSequence <- need L_sequence - attributes <- parenList $ commaList parseAttribute + attributes <- optional parseAttributes lOf <- want L_of domain <- parseDomain return $ SequenceDomainNode lSequence attributes lOf domain @@ -668,7 +671,7 @@ parseSequenceDomain = do parseRelation :: Parser DomainNode parseRelation = do lRelation <- need L_relation - attributes <- parenList $ commaList parseAttribute + attributes <- optional parseAttributes lOf <- want L_of domains <- parenList $ parseSequence L_Times parseDomain return $ RelationDomainNode lRelation attributes lOf domains @@ -676,7 +679,7 @@ parseRelation = do parsePartition :: Parser DomainNode parsePartition = do lPartition <- need L_partition - attributes <- parenList $ commaList parseAttribute + attributes <- optional parseAttributes lFrom <- want L_from domain <- parseDomain return $ PartitionDomainNode lPartition attributes lFrom domain @@ -685,9 +688,7 @@ parseEnumDomain :: Parser DomainNode parseEnumDomain = do name <- parseIdentifierStrict brackets <- optional $ parenListStrict (commaList parseRange) - case brackets of - Nothing -> return $ EnumDomainNode name - Just parens -> return $ RangedEnumNode name parens + return $ RangedEnumNode name brackets -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) -- <|> return (EnumDomainNode name) @@ -714,6 +715,21 @@ parseRange = ranged <|> singleR (Just l, Just r) -> return $ BoundedRangeNode l dots r singleR = SingleRangeNode <$> parseExpressionStrict +parseAttributes :: Parser (ListNode AttributeNode) +parseAttributes = try $ do + attrs <- parenList (commaList parseAttribute) + case attrs of + ListNode _(Seq xs) _| not (validInterior xs) -> empty + _ -> return attrs + where + validInterior :: [SeqElem AttributeNode] -> Bool + validInterior members = not $ null [x | + (SeqElem (NamedAttributeNode x _) _) <- members,isNonIdentifier x + ] + isNonIdentifier :: LToken -> Bool + isNonIdentifier (RealToken ETok{lexeme=(LIdentifier _)}) = False + isNonIdentifier _ = True + parseAttribute :: Parser AttributeNode parseAttribute = do name <- (choice (map need allAttributLexemes)) <|> RealToken <$> identifier @@ -752,7 +768,7 @@ example s = do exampleFile :: String -> IO () exampleFile p = do path <- readFileIfExists p - case path of + case path of Nothing -> putStrLn "NO such file" Just s -> example s return () diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 57dbe9fb54..4e363a6986 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -19,6 +19,7 @@ instance Flattenable ETok StatementNode where SuchThatStatement stsn -> flatten stsn WhereStatement wsn -> flatten wsn ObjectiveStatement osn -> flatten osn + HeuristicStatement l1 ex -> flatten l1 ++ flatten ex UnexpectedToken tok -> flatten tok instance Flattenable ETok DeclarationStatementNode where @@ -51,10 +52,6 @@ instance Flattenable ETok GivenStatementNode where instance Flattenable ETok BranchingStatementNode where flatten (BranchingStatementNode lt lt' ln) = concat [flatten lt, flatten lt', flatten ln] -instance Flattenable ETok BranchingOnNode where - flatten x = case x of - BranchingOnName nn -> flatten nn - BranchingOnExpression en -> flatten en instance Flattenable ETok SuchThatStatementNode where flatten (SuchThatStatementNode l1 l2 l3) = flatten l1 ++ flatten l2 ++ flatten l3 @@ -202,7 +199,7 @@ instance Flattenable ETok DomainNode where RangedIntDomainNode lt ln -> flatten lt ++ flatten ln MetaVarDomain a -> flatten a RangedEnumNode nn ln -> flatten nn ++ flatten ln - EnumDomainNode nn -> flatten nn + -- EnumDomainNode nn -> flatten nn ShortTupleDomainNode ln -> flatten ln TupleDomainNode lt ln -> flatten lt ++ flatten ln RecordDomainNode lt ln -> flatten lt ++ flatten ln diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 226d4cab2b..cbaa3b7d1d 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -42,6 +42,7 @@ data StatementNode | SuchThatStatement SuchThatStatementNode | WhereStatement WhereStatementNode | ObjectiveStatement ObjectiveStatementNode + | HeuristicStatement LToken ExpressionNode | UnexpectedToken LToken deriving (Show) @@ -126,35 +127,31 @@ data BranchingStatementNode = BranchingStatementNode LToken LToken - (ListNode BranchingOnNode) + (ListNode ExpressionNode) deriving (Show) -data BranchingOnNode = BranchingOnName NameNode | BranchingOnExpression ExpressionNode - deriving (Show) - -instance Null BranchingOnNode where - isMissing (BranchingOnName n) = isMissing n - isMissing (BranchingOnExpression e) = isMissing e -- Domains +type MAttributes = Maybe (ListNode AttributeNode) + data DomainNode = BoolDomainNode LToken | RangedIntDomainNode LToken (Maybe (ListNode RangeNode)) - | RangedEnumNode NameNode (ListNode RangeNode) - | EnumDomainNode NameNode + | RangedEnumNode NameNode (Maybe (ListNode RangeNode)) + -- | EnumDomainNode NameNode | MetaVarDomain LToken | ShortTupleDomainNode (ListNode DomainNode) | TupleDomainNode LToken (ListNode DomainNode) | RecordDomainNode LToken (ListNode NamedDomainNode) | VariantDomainNode LToken (ListNode NamedDomainNode) | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode - | SetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | MSetDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | FunctionDomainNode LToken (Maybe (ListNode AttributeNode) ) DomainNode LToken DomainNode - | SequenceDomainNode LToken (ListNode AttributeNode) LToken DomainNode - | RelationDomainNode LToken (ListNode AttributeNode) LToken (ListNode DomainNode) - | PartitionDomainNode LToken (ListNode AttributeNode) LToken DomainNode + | SetDomainNode LToken MAttributes LToken DomainNode + | MSetDomainNode LToken MAttributes LToken DomainNode + | FunctionDomainNode LToken MAttributes DomainNode LToken DomainNode + | SequenceDomainNode LToken MAttributes LToken DomainNode + | RelationDomainNode LToken MAttributes LToken (ListNode DomainNode) + | PartitionDomainNode LToken MAttributes LToken DomainNode | MissingDomainNode LToken deriving (Show) instance Null DomainNode where diff --git a/src/Conjure/Language/Attributes.hs b/src/Conjure/Language/Attributes.hs index 03f7a311bd..99392dfe83 100644 --- a/src/Conjure/Language/Attributes.hs +++ b/src/Conjure/Language/Attributes.hs @@ -1,12 +1,12 @@ module Conjure.Language.Attributes where +import Conjure.Language.Domain (BinaryRelationAttr (..)) import Conjure.Language.Expression.Op.Internal.Common (Lexeme (..)) import Conjure.Prelude import Data.Map (Map) import qualified Data.Map.Strict as M -import Conjure.Language.Domain (BinaryRelationAttr(..)) -type Attr = (Lexeme,Bool) +type Attr = (Lexeme, Bool) mapFrom :: [[Attr]] -> Map Lexeme Bool mapFrom attrs = M.fromList $ concat attrs @@ -15,69 +15,68 @@ setValidAttrs :: Map Lexeme Bool setValidAttrs = mapFrom [sizeyAttrs] msetValidAttrs :: Map Lexeme Bool -msetValidAttrs = mapFrom [sizeyAttrs,occursAttrs] +msetValidAttrs = mapFrom [sizeyAttrs, occursAttrs] funAttrs :: Map Lexeme Bool -funAttrs = mapFrom [sizeyAttrs,jectivityAttrs] +funAttrs = mapFrom [sizeyAttrs, jectivityAttrs, totalityAttrs] seqAttrs :: Map Lexeme Bool -seqAttrs = mapFrom [sizeyAttrs,jectivityAttrs] +seqAttrs = mapFrom [sizeyAttrs, jectivityAttrs] relAttrs :: Map Lexeme Bool -relAttrs = mapFrom [sizeyAttrs , binRelAttrs] +relAttrs = mapFrom [sizeyAttrs, binRelAttrs, totalityAttrs] partitionAttrs :: Map Lexeme Bool -partitionAttrs = mapFrom [sizeyAttrs,partSizeAttrs,regularity] +partitionAttrs = mapFrom [sizeyAttrs, partSizeAttrs,partNumAttrs, regularity] sizeyAttrs :: [Attr] sizeyAttrs = - [ (L_size,True) - , (L_maxSize,True) - , (L_minSize,True) + [ (L_size, True) + , (L_maxSize, True) + , (L_minSize, True) ] occursAttrs :: [Attr] -occursAttrs = - [ (L_minOccur,True) - , (L_maxOccur,True) +occursAttrs = + [ (L_minOccur, True) + , (L_maxOccur, True) ] partNumAttrs :: [Attr] partNumAttrs = - [ (L_numParts,True) - , (L_maxNumParts,True) - , (L_minNumParts,True) + [ (L_numParts, True) + , (L_maxNumParts, True) + , (L_minNumParts, True) ] partSizeAttrs :: [(Lexeme, Bool)] partSizeAttrs = - [ (L_partSize,True) - , (L_minPartSize,True) - , (L_maxPartSize,True) + [ (L_partSize, True) + , (L_minPartSize, True) + , (L_maxPartSize, True) ] jectivityAttrs :: [(Lexeme, Bool)] jectivityAttrs = - [ (L_injective,False) - , (L_bijective,False) - , (L_surjective,False) + [ (L_injective, False) + , (L_bijective, False) + , (L_surjective, False) ] binRelAttrs :: [(Lexeme, Bool)] binRelAttrs = - [ (L_reflexive,False) - , (L_irreflexive,False) - , (L_coreflexive,False) - , (L_symmetric,False) - , (L_antiSymmetric,False) - , (L_aSymmetric,False) - , (L_transitive,False) - , (L_total,False) - , (L_connex,False) - , (L_Euclidean,False) - , (L_serial,False) - , (L_equivalence,False) - , (L_partialOrder,False) + [ (L_reflexive, False) + , (L_irreflexive, False) + , (L_coreflexive, False) + , (L_symmetric, False) + , (L_antiSymmetric, False) + , (L_aSymmetric, False) + , (L_transitive, False) + , (L_connex, False) + , (L_Euclidean, False) + , (L_serial, False) + , (L_equivalence, False) + , (L_partialOrder, False) ] lexemeToBinRel :: Lexeme -> Maybe BinaryRelationAttr @@ -88,7 +87,7 @@ lexemeToBinRel L_symmetric = Just BinRelAttr_Symmetric lexemeToBinRel L_antiSymmetric = Just BinRelAttr_AntiSymmetric lexemeToBinRel L_aSymmetric = Just BinRelAttr_ASymmetric lexemeToBinRel L_transitive = Just BinRelAttr_Transitive -lexemeToBinRel L_total = Just BinRelAttr_Total +-- lexemeToBinRel L_total = Just BinRelAttr_Total lexemeToBinRel L_connex = Just BinRelAttr_Connex lexemeToBinRel L_Euclidean = Just BinRelAttr_Euclidean lexemeToBinRel L_serial = Just BinRelAttr_Serial @@ -97,12 +96,21 @@ lexemeToBinRel L_partialOrder = Just BinRelAttr_PartialOrder lexemeToBinRel _ = Nothing totalityAttrs :: [Attr] -totalityAttrs = [(L_total,False)] +totalityAttrs = [(L_total, False)] regularity :: [Attr] -regularity = [(L_regular,False)] - +regularity = [(L_regular, False)] allAttributLexemes :: [Lexeme] -allAttributLexemes = concatMap (map fst) [sizeyAttrs , jectivityAttrs , binRelAttrs] - \ No newline at end of file +allAttributLexemes = + concatMap + (map fst) + [ sizeyAttrs + , jectivityAttrs + , occursAttrs + , partNumAttrs + , partSizeAttrs + , binRelAttrs + , totalityAttrs + , regularity + ] \ No newline at end of file diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index dda6ac9a27..442d7a45e9 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -1000,7 +1000,7 @@ parseExpr = (P.parseExpression,V.strict . V.validateExpression) runLexerAndParser :: Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of - Left pe -> Left $ "Parser error:" <+> errorBundlePretty pe + Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ errorBundlePretty pe) Right a -> Right a -- ls <- runLexer inp -- case runParser p file ls of diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 1a61d317c4..97666aa076 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -46,14 +46,16 @@ data ValidatorError | SyntaxError String | RegionError String -- Add region | TokenError LToken + | TaggedTokenError String LToken | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere | NotImplemented String deriving (Show) -data SymbolTable = SymbolTable [String] +data SymbolTable = SymbolTable [(Text,String)] + deriving (Show) -newtype ValidatorT r w a = ValidatorT (MaybeT (ReaderT r (Writer [w])) a) - deriving (Monad,Applicative ,Functor,MonadReader r ,MonadWriter [w],MonadFail) +newtype ValidatorT r w a = ValidatorT (MaybeT (StateT r (Writer [w])) a) + deriving (Monad,Applicative ,Functor,MonadState r ,MonadWriter [w],MonadFail) --synonym wrapped in maybe to allow errors to propagate @@ -62,12 +64,22 @@ type Validator a = ValidatorT SymbolTable ValidatorError (Maybe a) --Non maybe version used in outward facing applications/ lists type ValidatorS a = ValidatorT SymbolTable ValidatorError a +addEnumDefns :: [Text] -> SymbolTable -> SymbolTable +addEnumDefns names (SymbolTable enums) = SymbolTable $ enums ++ map (\m -> (m,"Enum")) names + +lookupSymbol :: Text -> ValidatorS (Maybe String) +lookupSymbol name = do + SymbolTable a <- get + return $ lookup name a + strict :: Validator a -> ValidatorS a strict a = do Just res <- a; return res +deState :: ((a,r),n) -> (a,n) +deState ((a,_),n) = (a,n) -runValidator :: (ValidatorT r w a) -> r -> (Maybe a,[w]) -runValidator (ValidatorT r) d = runWriter (runReaderT (runMaybeT r) d) +runValidator :: (ValidatorT r w a) -> r -> ((Maybe a),[w]) +runValidator (ValidatorT r) d = deState $ runWriter (runStateT (runMaybeT r) d) -- data Validator a = Validator -- { value :: Maybe a -- , errors :: [ValidatorError] @@ -147,8 +159,19 @@ validateStatement (BranchingStatement bsn) = validateBranchingStatement bsn validateStatement (SuchThatStatement stsn) = validateSuchThatStatement stsn validateStatement (WhereStatement wsn) = validateWhereStatement wsn validateStatement (ObjectiveStatement osn) = validateObjectiveStatement osn +validateStatement (HeuristicStatement lt exp) = validateHeuristicStatement lt exp validateStatement (UnexpectedToken lt) = invalid $ TokenError lt +validateHeuristicStatement :: LToken -> ExpressionNode -> Validator [Statement] +validateHeuristicStatement lt exp = do + checkSymbols [lt] + _ <- validateExpression exp + case exp of + IdentifierNode nn -> do + x <- validateName nn + return $ sequence [SearchHeuristic <$> x] + _ -> invalid $ StateError "Only identifiers are allowed as heuristics" + validateWhereStatement :: WhereStatementNode -> Validator [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do checkSymbols [l1] @@ -172,10 +195,18 @@ validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do return . pure $ [SuchThat exprs'] validateBranchingStatement :: BranchingStatementNode -> Validator [Statement] -validateBranchingStatement (BranchingStatementNode l1 l2 statements) = do +validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do checkSymbols [l1, l2] - statements <- todo "branching" - todo "branching" + branchings <- validateList validateBranchingParts sts + return . pure $ [SearchOrder branchings] + where + validateBranchingParts :: ExpressionNode -> Validator SearchOrder + validateBranchingParts (IdentifierNode nn) = do + n <- validateName nn + return $ BranchingOn <$> n + validateBranchingParts exp = do + x <- validateExpression exp + return $ Cut <$> x validateDeclarationStatement :: DeclarationStatementNode -> Validator [Statement] validateDeclarationStatement stmt = do @@ -196,6 +227,7 @@ validateGiven (GivenEnumNode l1 se l2 l3 l4) = do checkSymbols [l1, l2, l3, l4] names <- validateNameList se + modify $ addEnumDefns [ n | Name n <-names] return . pure $ [GivenDomainDefnEnum n | n <- names] validateLetting :: LettingStatementNode -> Validator [Declaration] @@ -203,25 +235,25 @@ validateLetting :: LettingStatementNode -> Validator [Declaration] validateLetting (LettingStatementNode l1 names l2 assign) = do checkSymbols [l1, l2] names' <- validateNameList names - assignment <- validateLettingAssignment assign - return $ fmap <$> assignment <*> pure names' + validateLettingAssignment names' assign -validateLettingAssignment :: LettingAssignmentNode -> Validator (Name -> Declaration) -validateLettingAssignment (LettingExpr en) = do +validateLettingAssignment :: [Name] -> LettingAssignmentNode -> Validator [Declaration] +validateLettingAssignment names (LettingExpr en) = do Just expr <- validateExpression en - return . pure $ (`Letting` expr) -validateLettingAssignment (LettingDomain lt dn) = do + return . pure $ [Letting n expr | n <- names] +validateLettingAssignment names (LettingDomain lt dn) = do checkSymbols [lt] Just domain <- validateDomain dn - return . pure $ (`Letting` Domain domain) -validateLettingAssignment (LettingEnum l1 l2 l3 names) = do + return . pure $ [Letting n (Domain domain)| n <- names] +validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do checkSymbols [l1, l2, l3] - members <- validateList validateName names - return . pure $ (`LettingDomainDefnEnum` members) -validateLettingAssignment (LettingAnon l1 l2 l3 l4 szExp) = do + members <- validateList validateName enames + modify $ addEnumDefns [ n | Name n <-names] + return . pure $ [LettingDomainDefnEnum n members| n <- names] +validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] Just size <- validateExpression szExp - return . pure $ (`LettingDomainDefnUnnamed` size) + return . pure $ [LettingDomainDefnUnnamed n size| n <- names] -- validate :: Validator a -> Validator (Maybe a) @@ -288,7 +320,7 @@ validateDomain dm = case dm of BoolDomainNode lt -> pure <$> (validateSymbol lt >> return DomainBool) RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges - EnumDomainNode nn -> validateNamedEnumDomain nn + -- EnumDomainNode nn -> validateNamedEnumDomain nn ShortTupleDomainNode lst -> validateTupleDomain lst TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom @@ -307,17 +339,22 @@ validateDomain dm = case dm of ranges' <- validateList validateRange ranges return . pure $ DomainInt TagInt ranges' validateRangedInt Nothing = return . pure $ DomainInt TagInt [] - validateEnumRange :: NameNode -> ListNode RangeNode -> DomainValidator + validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> DomainValidator validateEnumRange name ranges = do - name' <- validateIdentifier name - -- vars <- get - ranges' <- validateList validateRange ranges - -- scopecheck (see parser:313) - return $ (\n -> DomainEnum (Name n) (Just ranges') Nothing) <$> name' - validateNamedEnumDomain :: NameNode -> DomainValidator - validateNamedEnumDomain name = do - name' <- validateName name - return $ DomainReference <$> name' <*> pure Nothing + ranges' <- case ranges of + Just r -> pure <$> validateList validateRange r + Nothing -> pure Nothing + Just name' <- validateIdentifier name + a <- lookupSymbol name' + case a of + Just "Enum" ->return . pure $ DomainEnum (Name name') ranges' Nothing + Just t -> invalid $ StateError $ "Unknown type :" ++ t + Nothing -> case ranges' of + Nothing -> return . pure $ DomainReference (Name name') Nothing + Just _ -> do + raiseError (StateError "range not supported on non enum ranges") + return . pure $ DomainReference (Name name') Nothing + validateTupleDomain :: ListNode DomainNode -> DomainValidator validateTupleDomain doms = pure . DomainTuple <$> validateList validateDomain doms validateRecordDomain :: ListNode NamedDomainNode -> DomainValidator @@ -331,17 +368,21 @@ validateDomain dm = case dm of idoms <- validateList validateDomain indexes dom' <- validateDomain dom return $ foldr DomainMatrix <$> dom' <*> pure idoms - validateSetDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator + validateSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator validateSetDomain attrs dom = do let repr = Just () - attrs' <- validateSetAttributes attrs + attrs' <- case attrs of + Just a -> validateSetAttributes a + Nothing -> return $ Just def dom' <- validateDomain dom return $ DomainSet <$> repr <*> attrs' <*> dom' - validateMSetDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator + validateMSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator validateMSetDomain attrs dom = do let repr = Just () - attrs' <- validateMSetAttributes attrs + attrs' <- case attrs of + Just a -> validateMSetAttributes a + Nothing -> return $ Just def dom' <- validateDomain dom return $ DomainMSet <$> repr <*> attrs' <*> dom' validateFunctionDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainNode -> DomainValidator @@ -355,22 +396,28 @@ validateDomain dm = case dm of return $ DomainFunction <$> repr <*> attrs' <*> dom1' <*> dom2' -- attrs <- validateAttributes - validateSequenceDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator + validateSequenceDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator validateSequenceDomain attrs dom = do let repr = Just () - attrs' <- validateSeqAttributes attrs + attrs' <- case attrs of + Just a -> validateSeqAttributes a + Nothing -> return $ Just def dom' <- validateDomain dom return $ DomainSequence <$> repr <*> attrs' <*> dom' - validateRelationDomain :: ListNode AttributeNode -> ListNode DomainNode -> DomainValidator + validateRelationDomain ::Maybe (ListNode AttributeNode)-> ListNode DomainNode -> DomainValidator validateRelationDomain attrs doms = do let repr = Just () - attrs' <- validateRelationAttributes attrs + attrs' <- case attrs of + Just a -> validateRelationAttributes a + Nothing -> return $ Just def doms' <- validateList validateDomain doms return $ DomainRelation <$> repr <*> attrs' <*> pure doms' - validatePartitionDomain :: ListNode AttributeNode -> DomainNode -> DomainValidator + validatePartitionDomain :: Maybe (ListNode AttributeNode)-> DomainNode -> DomainValidator validatePartitionDomain attrs dom = do let repr = Just () - attrs' <- validatePartitionAttributes attrs + attrs' <- case attrs of + Just a -> validatePartitionAttributes a + Nothing -> return $ Just def dom' <- validateDomain dom return $ DomainPartition <$> repr <*> attrs' <*> dom' @@ -387,7 +434,7 @@ validateSizeAttributes attrs = do [(L_minSize, Just a)] -> return $ Just (SizeAttr_MinSize a) [(L_maxSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> do invalid $ RegionError "Incompatible attributes" + as -> do invalid $ RegionError $ "Incompatible attributes size:" ++ show as validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) validatePartSizeAttributes attrs = do @@ -395,11 +442,11 @@ validatePartSizeAttributes attrs = do let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of [] -> return $ Just SizeAttr_None - [(L_size,Just a)] -> return $ Just (SizeAttr_Size a) + [(L_partSize,Just a)] -> return $ Just (SizeAttr_Size a) [(L_minPartSize, Just a)] -> return $ Just (SizeAttr_MinSize a) [(L_maxPartSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> do invalid $ RegionError "Incompatible attributes" + as -> do invalid $ RegionError $ "Incompatible attributes partitionSize :" ++ show as validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> Validator JectivityAttr validateJectivityAttributes attrs = do @@ -413,7 +460,7 @@ validateJectivityAttributes attrs = do [(L_injective, _),(L_surjective, _)] -> do info "Inj and Sur can be combined to bijective" return $ Just JectivityAttr_Bijective - as -> do invalid $ RegionError "Incompatible attributes" + as -> do invalid $ RegionError $ "Incompatible attributes jectivity" ++ show as validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) @@ -431,14 +478,14 @@ validateMSetAttributes atts = do return $ MSetAttr <$> size <*> occurs where validateOccursAttrs attrs = do - let sizeAttrs = [L_size,L_minSize,L_maxSize] + let sizeAttrs = [L_minOccur,L_maxOccur] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of [] -> return $ Just OccurAttr_None [(L_minOccur,Just a)] -> return $ Just (OccurAttr_MinOccur a) [(L_maxOccur, Just a)] -> return $ Just (OccurAttr_MaxOccur a) - [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ Just (OccurAttr_MinMaxOccur a b) - _ -> invalid $ StateError "Bad args to occurs" + [(L_minOccur, Just a),(L_maxOccur, Just b)] -> return $ Just (OccurAttr_MinMaxOccur a b) + as -> invalid $ StateError $ "Bad args to occurs" ++ show as validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) @@ -461,7 +508,7 @@ validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr validateRelationAttributes atts = do attrs <- validateList (validateAttributeNode relAttrs) atts size <- validateSizeAttributes attrs - others <- validateArray validateBinaryRel (filter (const True) attrs) + others <- validateArray validateBinaryRel (filter (\x -> fst x `elem` map fst binRelAttrs) attrs) return $ RelationAttr <$> size <*> pure (BinaryRelationAttrs $ S.fromList others ) where validateBinaryRel :: (Lexeme , Maybe Expression) -> Validator BinaryRelationAttr @@ -490,7 +537,7 @@ validateAttributeNode vs (NamedAttributeNode t (Just e)) = do expr <- validateExpression e Just name <- validateSymbol t case M.lookup name vs of - Nothing -> invalid $ TokenError t + Nothing -> invalid $ TaggedTokenError "Not a valid attr " t Just False -> invalid $ RegionError "name: does not take an argument" Just True -> return $(\x -> (name,Just x)) <$> expr From d730b7699d1df330b5eb91cc3a34e2bde7ae5605 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 25 Oct 2022 12:56:59 +0100 Subject: [PATCH 079/378] Attribute fixes and removing broken tsDef --- src/Conjure/Language/Validator.hs | 16 +- src/Conjure/UI/TypeScript.hs | 603 +++++++++++++++++++----------- 2 files changed, 394 insertions(+), 225 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 97666aa076..0d11aedb06 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -448,6 +448,19 @@ validatePartSizeAttributes attrs = do [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) as -> do invalid $ RegionError $ "Incompatible attributes partitionSize :" ++ show as +validateNumPartAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) +validateNumPartAttributes attrs = do + let sizeAttrs = [L_numParts,L_maxNumParts,L_minNumParts] + let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs + case filtered of + [] -> return $ Just SizeAttr_None + [(L_numParts,Just a)] -> return $ Just (SizeAttr_Size a) + [(L_minNumParts, Just a)] -> return $ Just (SizeAttr_MinSize a) + [(L_maxNumParts, Just a)] -> return $ Just (SizeAttr_MaxSize a) + [(L_minNumParts, Just a),(L_maxNumParts, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) + as -> do invalid $ RegionError $ "Incompatible attributes partitionSize :" ++ show as + + validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> Validator JectivityAttr validateJectivityAttributes attrs = do let sizeAttrs = [L_injective,L_surjective,L_bijective] @@ -520,7 +533,8 @@ validateRelationAttributes atts = do validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) validatePartitionAttributes atts = do attrs <- validateList (validateAttributeNode partitionAttrs) atts - size <- validateSizeAttributes attrs + --guard size attrs and complete as this is default + size <- validateNumPartAttributes attrs partSize <- validatePartSizeAttributes attrs regular <- return . Just $ L_regular `elem` map fst attrs return $ PartitionAttr <$> size <*> partSize <*> regular diff --git a/src/Conjure/UI/TypeScript.hs b/src/Conjure/UI/TypeScript.hs index 05c9f117e4..bf2a4a4a96 100644 --- a/src/Conjure/UI/TypeScript.hs +++ b/src/Conjure/UI/TypeScript.hs @@ -2,6 +2,8 @@ {-# LANGUAGE KindSignatures #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE InstanceSigs #-} +{-# LANGUAGE MonoLocalBinds #-} +{-# LANGUAGE UndecidableInstances #-} module Conjure.UI.TypeScript ( tsDef ) where @@ -13,246 +15,399 @@ import Conjure.Language -- ( Model, Expression ) -- aeson import Data.Aeson.Types ( defaultOptions ) +-- import Conjure.UI.TypeScriptDefs (numDefs) +import Data.Traversable -- aeson-typescript -import Data.Aeson.TypeScript.TH +import Data.Aeson.TypeScript.TH as TS +import qualified Data.Aeson.TypeScript.TH as TS +import qualified Data.Aeson.TypeScript.Recursive as TS + + + + + +-- instance (TypeScript a,TypeScript b) => TypeScript (Domain b a) where +-- getTypeScriptType :: Proxy (Domain b a) -> String +-- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy (Domain () a)) +-- instance TypeScript Expression where +-- getTypeScriptType :: Proxy Expression -> String +-- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy Expression) +-- deriveTypeScript defaultOptions ''AttrName +-- deriveTypeScript defaultOptions ''Name +-- deriveTypeScript defaultOptions ''OpActive +-- deriveTypeScript defaultOptions ''OpAllDiff +-- deriveTypeScript defaultOptions ''OpAllDiffExcept +-- deriveTypeScript defaultOptions ''OpAnd +-- deriveTypeScript defaultOptions ''OpApart +-- deriveTypeScript defaultOptions ''OpAtLeast +-- deriveTypeScript defaultOptions ''OpAtMost +-- deriveTypeScript defaultOptions ''OpAttributeAsConstraint +-- deriveTypeScript defaultOptions ''OpCatchUndef +-- deriveTypeScript defaultOptions ''OpDefined +-- deriveTypeScript defaultOptions ''OpDiv +-- deriveTypeScript defaultOptions ''OpDontCare +-- deriveTypeScript defaultOptions ''OpDotLeq +-- deriveTypeScript defaultOptions ''OpDotLt +-- deriveTypeScript defaultOptions ''OpEq +-- deriveTypeScript defaultOptions ''OpFactorial +-- deriveTypeScript defaultOptions ''OpFlatten +-- deriveTypeScript defaultOptions ''OpFreq +-- deriveTypeScript defaultOptions ''OpGCC +-- deriveTypeScript defaultOptions ''OpGeq +-- deriveTypeScript defaultOptions ''OpGt +-- deriveTypeScript defaultOptions ''OpHist +-- deriveTypeScript defaultOptions ''OpIff +-- deriveTypeScript defaultOptions ''OpImage +-- deriveTypeScript defaultOptions ''OpImageSet +-- deriveTypeScript defaultOptions ''OpImply +-- deriveTypeScript defaultOptions ''OpIn +-- deriveTypeScript defaultOptions ''OpIndexing +-- deriveTypeScript defaultOptions ''OpIntersect +-- deriveTypeScript defaultOptions ''OpInverse +-- deriveTypeScript defaultOptions ''OpLeq +-- deriveTypeScript defaultOptions ''OpLexLeq +-- deriveTypeScript defaultOptions ''OpLexLt +-- deriveTypeScript defaultOptions ''OpLt +-- deriveTypeScript defaultOptions ''OpMakeTable +-- deriveTypeScript defaultOptions ''OpMax +-- deriveTypeScript defaultOptions ''OpMin +-- deriveTypeScript defaultOptions ''OpMinus +-- deriveTypeScript defaultOptions ''OpMod +-- deriveTypeScript defaultOptions ''OpNegate +-- deriveTypeScript defaultOptions ''OpNeq +-- deriveTypeScript defaultOptions ''OpNot +-- deriveTypeScript defaultOptions ''OpOr +-- deriveTypeScript defaultOptions ''OpParticipants +-- deriveTypeScript defaultOptions ''OpParts +-- deriveTypeScript defaultOptions ''OpParty +-- deriveTypeScript defaultOptions ''OpPow +-- deriveTypeScript defaultOptions ''OpPowerSet +-- deriveTypeScript defaultOptions ''OpPred +-- deriveTypeScript defaultOptions ''OpPreImage +-- deriveTypeScript defaultOptions ''OpProduct +-- deriveTypeScript defaultOptions ''OpRange +-- deriveTypeScript defaultOptions ''OpRelationProj +-- deriveTypeScript defaultOptions ''OpRestrict +-- deriveTypeScript defaultOptions ''OpSlicing +-- deriveTypeScript defaultOptions ''OpSubsequence +-- deriveTypeScript defaultOptions ''OpSubset +-- deriveTypeScript defaultOptions ''OpSubsetEq +-- deriveTypeScript defaultOptions ''OpSubstring +-- deriveTypeScript defaultOptions ''OpSucc +-- deriveTypeScript defaultOptions ''OpSum +-- deriveTypeScript defaultOptions ''OpSupset +-- deriveTypeScript defaultOptions ''OpSupsetEq +-- deriveTypeScript defaultOptions ''OpTable +-- deriveTypeScript defaultOptions ''OpTildeLeq +-- deriveTypeScript defaultOptions ''OpTildeLt +-- deriveTypeScript defaultOptions ''OpTogether +-- deriveTypeScript defaultOptions ''OpToInt +-- deriveTypeScript defaultOptions ''OpToMSet +-- deriveTypeScript defaultOptions ''OpToRelation +-- deriveTypeScript defaultOptions ''OpToSet +-- deriveTypeScript defaultOptions ''OpTransform +-- deriveTypeScript defaultOptions ''OpTrue +-- deriveTypeScript defaultOptions ''OpTwoBars +-- deriveTypeScript defaultOptions ''OpUnion +-- deriveTypeScript defaultOptions ''OpXor +-- deriveTypeScript defaultOptions ''Op + + + --- deriveTypeScript defaultOptions ''AbstractLiteral -- deriveTypeScript defaultOptions ''AbstractPattern -deriveTypeScript defaultOptions ''AttrName -deriveTypeScript defaultOptions ''BinaryRelationAttr -deriveTypeScript defaultOptions ''BinaryRelationAttrs + +-- deriveTypeScript defaultOptions ''BinaryRelationAttr +-- deriveTypeScript defaultOptions ''BinaryRelationAttrs +-- deriveTypeScript defaultOptions ''IntTag +-- deriveTypeScript defaultOptions ''AbstractLiteral +-- deriveTypeScript defaultOptions ''Type + -- deriveTypeScript defaultOptions ''Constant -deriveTypeScript defaultOptions ''Decision +-- deriveTypeScript defaultOptions ''Decision +-- deriveTypeScript defaultOptions ''FindOrGiven -- deriveTypeScript defaultOptions ''Declaration --- deriveTypeScript defaultOptions ''Domain --- deriveTypeScript defaultOptions ''Expression -deriveTypeScript defaultOptions ''FindOrGiven --- deriveTypeScript defaultOptions ''FunctionAttr +-- deriveTypeScript defaultOptions ''HasRepresentation -- deriveTypeScript defaultOptions ''Generator -- deriveTypeScript defaultOptions ''GeneratorOrCondition -deriveTypeScript defaultOptions ''HasRepresentation +-- deriveTypeScript defaultOptions ''SearchOrder +-- deriveTypeScript defaultOptions ''Objective +-- deriveTypeScript defaultOptions ''Statement -- deriveTypeScript defaultOptions ''InBubble -deriveTypeScript defaultOptions ''IntTag -deriveTypeScript defaultOptions ''JectivityAttr -- deriveTypeScript defaultOptions ''LanguageVersion --- deriveTypeScript defaultOptions ''Model --- deriveTypeScript defaultOptions ''ModelInfo + +-- deriveTypeScript defaultOptions ''JectivityAttr +-- deriveTypeScript defaultOptions ''OccurAttr +-- deriveTypeScript defaultOptions ''SizeAttr +-- deriveTypeScript defaultOptions ''PartialityAttr + +-- deriveTypeScript defaultOptions ''Region +-- deriveTypeScript defaultOptions ''ReferenceTo +-- -- deriveTypeScript defaultOptions ''Tree -- base +-- deriveTypeScript defaultOptions ''Strategy +-- -- deriveTypeScript defaultOptions ''Expression -- deriveTypeScript defaultOptions ''MSetAttr -deriveTypeScript defaultOptions ''Name -deriveTypeScript defaultOptions ''Objective -deriveTypeScript defaultOptions ''OccurAttr --- deriveTypeScript defaultOptions ''Op -deriveTypeScript defaultOptions ''OpActive -deriveTypeScript defaultOptions ''OpAllDiff -deriveTypeScript defaultOptions ''OpAllDiffExcept -deriveTypeScript defaultOptions ''OpAnd -deriveTypeScript defaultOptions ''OpApart -deriveTypeScript defaultOptions ''OpAtLeast -deriveTypeScript defaultOptions ''OpAtMost -deriveTypeScript defaultOptions ''OpAttributeAsConstraint -deriveTypeScript defaultOptions ''OpCatchUndef -deriveTypeScript defaultOptions ''OpDefined -deriveTypeScript defaultOptions ''OpDiv -deriveTypeScript defaultOptions ''OpDontCare -deriveTypeScript defaultOptions ''OpDotLeq -deriveTypeScript defaultOptions ''OpDotLt -deriveTypeScript defaultOptions ''OpEq -deriveTypeScript defaultOptions ''OpFactorial -deriveTypeScript defaultOptions ''OpFlatten -deriveTypeScript defaultOptions ''OpFreq -deriveTypeScript defaultOptions ''OpGCC -deriveTypeScript defaultOptions ''OpGeq -deriveTypeScript defaultOptions ''OpGt -deriveTypeScript defaultOptions ''OpHist -deriveTypeScript defaultOptions ''OpIff -deriveTypeScript defaultOptions ''OpImage -deriveTypeScript defaultOptions ''OpImageSet -deriveTypeScript defaultOptions ''OpImply -deriveTypeScript defaultOptions ''OpIn -deriveTypeScript defaultOptions ''OpIndexing -deriveTypeScript defaultOptions ''OpIntersect -deriveTypeScript defaultOptions ''OpInverse -deriveTypeScript defaultOptions ''OpLeq -deriveTypeScript defaultOptions ''OpLexLeq -deriveTypeScript defaultOptions ''OpLexLt -deriveTypeScript defaultOptions ''OpLt -deriveTypeScript defaultOptions ''OpMakeTable -deriveTypeScript defaultOptions ''OpMax -deriveTypeScript defaultOptions ''OpMin -deriveTypeScript defaultOptions ''OpMinus -deriveTypeScript defaultOptions ''OpMod -deriveTypeScript defaultOptions ''OpNegate -deriveTypeScript defaultOptions ''OpNeq -deriveTypeScript defaultOptions ''OpNot -deriveTypeScript defaultOptions ''OpOr -deriveTypeScript defaultOptions ''OpParticipants -deriveTypeScript defaultOptions ''OpParts -deriveTypeScript defaultOptions ''OpParty -deriveTypeScript defaultOptions ''OpPow -deriveTypeScript defaultOptions ''OpPowerSet -deriveTypeScript defaultOptions ''OpPred -deriveTypeScript defaultOptions ''OpPreImage -deriveTypeScript defaultOptions ''OpProduct -deriveTypeScript defaultOptions ''OpRange -deriveTypeScript defaultOptions ''OpRelationProj -deriveTypeScript defaultOptions ''OpRestrict -deriveTypeScript defaultOptions ''OpSlicing -deriveTypeScript defaultOptions ''OpSubsequence -deriveTypeScript defaultOptions ''OpSubset -deriveTypeScript defaultOptions ''OpSubsetEq -deriveTypeScript defaultOptions ''OpSubstring -deriveTypeScript defaultOptions ''OpSucc -deriveTypeScript defaultOptions ''OpSum -deriveTypeScript defaultOptions ''OpSupset -deriveTypeScript defaultOptions ''OpSupsetEq -deriveTypeScript defaultOptions ''OpTable -deriveTypeScript defaultOptions ''OpTildeLeq -deriveTypeScript defaultOptions ''OpTildeLt -deriveTypeScript defaultOptions ''OpTogether -deriveTypeScript defaultOptions ''OpToInt -deriveTypeScript defaultOptions ''OpToMSet -deriveTypeScript defaultOptions ''OpToRelation -deriveTypeScript defaultOptions ''OpToSet -deriveTypeScript defaultOptions ''OpTransform -deriveTypeScript defaultOptions ''OpTrue -deriveTypeScript defaultOptions ''OpTwoBars -deriveTypeScript defaultOptions ''OpUnion -deriveTypeScript defaultOptions ''OpXor -deriveTypeScript defaultOptions ''PartialityAttr -- deriveTypeScript defaultOptions ''PartitionAttr -deriveTypeScript defaultOptions ''Range --- deriveTypeScript defaultOptions ''ReferenceTo -deriveTypeScript defaultOptions ''Region +-- deriveTypeScript defaultOptions ''Range +-- deriveTypeScript defaultOptions ''FunctionAttr -- deriveTypeScript defaultOptions ''RelationAttr --- deriveTypeScript defaultOptions ''SearchOrder -- deriveTypeScript defaultOptions ''SequenceAttr -- deriveTypeScript defaultOptions ''SetAttr -deriveTypeScript defaultOptions ''SizeAttr --- deriveTypeScript defaultOptions ''Statement -deriveTypeScript defaultOptions ''Strategy -deriveTypeScript defaultOptions ''TrailRewrites -deriveTypeScript defaultOptions ''Tree -- base -deriveTypeScript defaultOptions ''Type +-- deriveTypeScript defaultOptions ''TrailRewrites + +-- deriveTypeScript defaultOptions ''ModelInfo +-- deriveTypeScript defaultOptions ''Model + +-- instance TypeScript a => TypeScript (Tree a) where +-- getTypeScriptType :: TypeScript a => Proxy (Tree a) -> String +-- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy (Tree a)) + +-- -- $( mconcat +-- -- <$> traverse +-- -- (deriveTypeScript defaultOptions) +-- -- [''AbstractLiteral +-- -- ,''AbstractPattern +-- -- ,''AttrName +-- -- ,''BinaryRelationAttr +-- -- ,''BinaryRelationAttrs +-- -- ,''Constant +-- -- ,''Decision +-- -- ,''Declaration +-- -- ,''Domain +-- -- ,''Expression +-- -- ,''FindOrGiven +-- -- ,''FunctionAttr +-- -- ,''Generator +-- -- ,''GeneratorOrCondition +-- -- ,''HasRepresentation +-- -- ,''InBubble +-- -- ,''IntTag +-- -- ,''JectivityAttr +-- -- ,''LanguageVersion +-- -- ,''Model +-- -- ,''ModelInfo +-- -- ,''MSetAttr +-- -- ,''Name +-- -- ,''Objective +-- -- ,''OccurAttr +-- -- ,''Op +-- -- ,''OpActive +-- -- ,''OpAllDiff +-- -- ,''OpAllDiffExcept +-- -- ,''OpAnd +-- -- ,''OpApart +-- -- ,''OpAtLeast +-- -- ,''OpAtMost +-- -- ,''OpAttributeAsConstraint +-- -- ,''OpCatchUndef +-- -- ,''OpDefined +-- -- ,''OpDiv +-- -- ,''OpDontCare +-- -- ,''OpDotLeq +-- -- ,''OpDotLt +-- -- ,''OpEq +-- -- ,''OpFactorial +-- -- ,''OpFlatten +-- -- ,''OpFreq +-- -- ,''OpGCC +-- -- ,''OpGeq +-- -- ,''OpGt +-- -- ,''OpHist +-- -- ,''OpIff +-- -- ,''OpImage +-- -- ,''OpImageSet +-- -- ,''OpImply +-- -- ,''OpIn +-- -- ,''OpIndexing +-- -- ,''OpIntersect +-- -- ,''OpInverse +-- -- ,''OpLeq +-- -- ,''OpLexLeq +-- -- ,''OpLexLt +-- -- ,''OpLt +-- -- ,''OpMakeTable +-- -- ,''OpMax +-- -- ,''OpMin +-- -- ,''OpMinus +-- -- ,''OpMod +-- -- ,''OpNegate +-- -- ,''OpNeq +-- -- ,''OpNot +-- -- ,''OpOr +-- -- ,''OpParticipants +-- -- ,''OpParts +-- -- ,''OpParty +-- -- ,''OpPow +-- -- ,''OpPowerSet +-- -- ,''OpPred +-- -- ,''OpPreImage +-- -- ,''OpProduct +-- -- ,''OpRange +-- -- ,''OpRelationProj +-- -- ,''OpRestrict +-- -- ,''OpSlicing +-- -- ,''OpSubsequence +-- -- ,''OpSubset +-- -- ,''OpSubsetEq +-- -- ,''OpSubstring +-- -- ,''OpSucc +-- -- ,''OpSum +-- -- ,''OpSupset +-- -- ,''OpSupsetEq +-- -- ,''OpTable +-- -- ,''OpTildeLeq +-- -- ,''OpTildeLt +-- -- ,''OpTogether +-- -- ,''OpToInt +-- -- ,''OpToMSet +-- -- ,''OpToRelation +-- -- ,''OpToSet +-- -- ,''OpTransform +-- -- ,''OpTrue +-- -- ,''OpTwoBars +-- -- ,''OpUnion +-- -- ,''OpXor +-- -- ,''PartialityAttr +-- -- ,''PartitionAttr +-- -- ,''Range +-- -- ,''ReferenceTo +-- -- ,''Region +-- -- ,''RelationAttr +-- -- ,''SearchOrder +-- -- ,''SequenceAttr +-- -- ,''SetAttr +-- -- ,''SizeAttr +-- -- ,''Statement +-- -- ,''Strategy +-- -- ,''TrailRewrites +-- -- ,''Tree +-- -- ,''Type +-- -- ] +-- -- ) +-- qq :: [TSDeclaration] +-- qq = getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) +-- tsDef :: IO () +-- tsDef = putStrLn $ formatTSDeclarations $ mconcat +-- [ getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) +-- , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) +-- , getTypeScriptDeclarations (Proxy :: Proxy AttrName) +-- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) +-- , getTypeScriptDeclarations (Proxy :: Proxy Constant) +-- , getTypeScriptDeclarations (Proxy :: Proxy Decision) +-- , getTypeScriptDeclarations (Proxy :: Proxy Declaration) +-- , getTypeScriptDeclarations (Proxy :: Proxy (Domain () Expression)) +-- , getTypeScriptDeclarations (Proxy :: Proxy Expression) +-- , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) +-- , getTypeScriptDeclarations (Proxy :: Proxy (FunctionAttr Expression)) +-- , getTypeScriptDeclarations (Proxy :: Proxy Generator) +-- , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) +-- , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) +-- , getTypeScriptDeclarations (Proxy :: Proxy InBubble) +-- , getTypeScriptDeclarations (Proxy :: Proxy IntTag) +-- , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) +-- , getTypeScriptDeclarations (Proxy :: Proxy Model) +-- , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) +-- , getTypeScriptDeclarations (Proxy :: Proxy (MSetAttr Expression)) +-- , getTypeScriptDeclarations (Proxy :: Proxy Name) +-- , getTypeScriptDeclarations (Proxy :: Proxy Objective) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OccurAttr Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (Op Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpActive Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiff Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiffExcept Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpAnd Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpApart Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpAtLeast Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpAtMost Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpAttributeAsConstraint Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpCatchUndef Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpDefined Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpDiv Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpDontCare Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLeq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLt Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpEq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpFactorial Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpFlatten Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpFreq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpGCC Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpGeq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpGt Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpHist Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpIff Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpImage Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpImageSet Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpImply Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpIn Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpIndexing Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpIntersect Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpInverse Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpLeq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLeq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLt Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpLt Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpMax Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpMin Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpMinus Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpMod Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpNegate Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpNeq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpNot Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpOr Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpParticipants Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpParts Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpParty Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpPow Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpPowerSet Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpPred Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpPreImage Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpProduct Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpRange Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpRelationProj Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpRestrict Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSlicing Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsequence Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubset Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsetEq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubstring Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSucc Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSum Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSupset Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpSupsetEq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTable Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLeq Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLt Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTogether Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpToInt Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpToMSet Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpToRelation Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpToSet Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTransform Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTrue Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpTwoBars Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpUnion Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy (OpXor Expression )) +-- , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) +-- , getTypeScriptDeclarations (Proxy :: Proxy (PartitionAttr Type)) +-- , getTypeScriptDeclarations (Proxy :: Proxy (Range Type)) +-- , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) +-- , getTypeScriptDeclarations (Proxy :: Proxy Region) +-- , getTypeScriptDeclarations (Proxy :: Proxy (RelationAttr Type)) +-- , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) +-- , getTypeScriptDeclarations (Proxy :: Proxy (SequenceAttr Type)) +-- , getTypeScriptDeclarations (Proxy :: Proxy (SetAttr Type)) +-- , getTypeScriptDeclarations (Proxy :: Proxy (SizeAttr Type)) +-- , getTypeScriptDeclarations (Proxy :: Proxy Statement) +-- , getTypeScriptDeclarations (Proxy :: Proxy Strategy) +-- , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) +-- , getTypeScriptDeclarations (Proxy :: Proxy Tree) +-- , getTypeScriptDeclarations (Proxy :: Proxy Type) +-- ] tsDef :: IO () -tsDef = putStrLn $ formatTSDeclarations $ mconcat - [ --getTypeScriptDeclarations (Proxy :: Proxy AbstractLiteral) - -- , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) - getTypeScriptDeclarations (Proxy :: Proxy AttrName) - , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) - , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) - -- , getTypeScriptDeclarations (Proxy :: Proxy Constant) - , getTypeScriptDeclarations (Proxy :: Proxy Decision) - -- , getTypeScriptDeclarations (Proxy :: Proxy Declaration) - -- , getTypeScriptDeclarations (Proxy :: Proxy Domain) - -- , getTypeScriptDeclarations (Proxy :: Proxy Expression) - , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) - -- , getTypeScriptDeclarations (Proxy :: Proxy FunctionAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy Generator) - -- , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) - , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) - -- , getTypeScriptDeclarations (Proxy :: Proxy InBubble) - , getTypeScriptDeclarations (Proxy :: Proxy IntTag) - , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) - -- , getTypeScriptDeclarations (Proxy :: Proxy Model) - -- , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) - -- , getTypeScriptDeclarations (Proxy :: Proxy MSetAttr) - , getTypeScriptDeclarations (Proxy :: Proxy Name) - , getTypeScriptDeclarations (Proxy :: Proxy Objective) - -- , getTypeScriptDeclarations (Proxy :: Proxy OccurAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy Op) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpActive) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiff) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpAllDiffExcept) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpAnd) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpApart) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpAtLeast) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpAtMost) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpAttributeAsConstraint) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpCatchUndef) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpDefined) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpDiv) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpDontCare) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLeq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpDotLt) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpEq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpFactorial) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpFlatten) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpFreq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpGCC) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpGeq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpGt) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpHist) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpIff) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpImage) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpImageSet) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpImply) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpIn) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpIndexing) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpIntersect) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpInverse) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpLeq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLeq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpLexLt) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpLt) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpMax) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpMin) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpMinus) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpMod) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpNegate) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpNeq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpNot) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpOr) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpParticipants) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpParts) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpParty) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpPow) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpPowerSet) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpPred) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpPreImage) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpProduct) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpRange) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpRelationProj) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpRestrict) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSlicing) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsequence) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubset) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubsetEq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSubstring) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSucc) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSum) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSupset) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpSupsetEq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTable) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLeq) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTildeLt) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTogether) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpToInt) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpToMSet) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpToRelation) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpToSet) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTransform) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTrue) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpTwoBars) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpUnion) - -- , getTypeScriptDeclarations (Proxy :: Proxy OpXor) - , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy PartitionAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy Range) - -- , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) - , getTypeScriptDeclarations (Proxy :: Proxy Region) - -- , getTypeScriptDeclarations (Proxy :: Proxy RelationAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) - -- , getTypeScriptDeclarations (Proxy :: Proxy SequenceAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy SetAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy SizeAttr) - -- , getTypeScriptDeclarations (Proxy :: Proxy Statement) - , getTypeScriptDeclarations (Proxy :: Proxy Strategy) - , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) - -- , getTypeScriptDeclarations (Proxy :: Proxy Tree) - , getTypeScriptDeclarations (Proxy :: Proxy Type) - ] +tsDef = putStrLn "<>" \ No newline at end of file From 399e85d09ee4dacb9452dd2e3c8adb157093fd2e Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 26 Oct 2022 12:18:15 +0100 Subject: [PATCH 080/378] Removed with decls special syntax --- src/Conjure/Language/AST/ASTParser.hs | 5 ++--- src/Conjure/Language/AST/Reformer.hs | 2 +- src/Conjure/Language/AST/Syntax.hs | 2 +- src/Conjure/Language/Validator.hs | 2 +- src/Conjure/Rules/Vertical/Function/Function1DPartial.hs | 4 ++-- src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs | 4 ++-- src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs | 4 ++-- 7 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 822cdf6028..b714c08199 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -573,10 +573,9 @@ parseDomain = parseSpecialCase :: Parser ExpressionNode parseSpecialCase = do - lt <- need L_SpecialCase - SpecialCase lt <$> choice [parseWithDecls] + SpecialCase <$> choice [parseWithDecls] where - parseWithDecls = + parseWithDecls = try $ do p1 <- need L_OpenCurly exp1 <- parseExpression diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 4e363a6986..f41320b617 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -82,7 +82,7 @@ instance Flattenable ETok ExpressionNode where AbsExpression pen -> flatten pen DomainExpression dex -> flatten dex FunctionalApplicationNode lt ln -> flatten lt ++ flatten ln - SpecialCase lt nd -> flatten lt ++ flatten nd + SpecialCase nd -> flatten nd AttributeAsConstriant l1 exprs -> flatten l1 ++ flatten exprs MissingExpressionNode _ -> [] diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index cbaa3b7d1d..a5efe67bbf 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -208,7 +208,7 @@ data ExpressionNode | FunctionalApplicationNode LToken (ListNode ExpressionNode) | AttributeAsConstriant LToken (ListNode ExpressionNode) | MissingExpressionNode LToken - | SpecialCase LToken SpecialCaseNode + | SpecialCase SpecialCaseNode deriving (Show) instance Null ExpressionNode where diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 0d11aedb06..5529aa85b4 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -597,7 +597,7 @@ validateExpression expr = case expr of return . pure $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs - SpecialCase l1 scn -> checkSymbols [l1] >> validateSpecialCase scn + SpecialCase scn -> validateSpecialCase scn MissingExpressionNode lt -> invalid $ TokenError lt validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> Validator Expression diff --git a/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs b/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs index 7f366e93ab..3c827208c2 100644 --- a/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs +++ b/src/Conjure/Rules/Vertical/Function/Function1DPartial.hs @@ -78,7 +78,7 @@ rule_Image_NotABool = "function-image{Function1DPartial}-not-a-bool" `namedRule` [flags,values] <- downX1 f return ( "Function image, Function1DPartial representation, not-a-bool" - , return [essence| ?#{ &values[&x] + , return [essence| { &values[&x] @ such that &flags[&x] } |] @@ -97,7 +97,7 @@ rule_Image_Bool = "function-image{Function1DPartial}-bool" `namedRule` theRule w TypeBool -> do [flags,values] <- downX1 f tell $ return [essence| &flags[&x] |] - return [essence| ?#{ &values[&x] @ such that &flags[&x] } |] + return [essence| { &values[&x] @ such that &flags[&x] } |] _ -> return ch imageChild ch = return ch topMost <- asks isTopMostZ diff --git a/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs b/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs index d3c652ee8a..dd7ebcc40a 100644 --- a/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs +++ b/src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs @@ -21,7 +21,7 @@ rule_Image_NotABool = "function-image{FunctionNDPartial}-not-a-bool" `namedRule` return ( "Function image, FunctionNDPartial representation, not-a-bool" - , return [essence| ?#{ &valuesIndexed + , return [essence| { &valuesIndexed @ such that &flagsIndexed } |] ) @@ -52,7 +52,7 @@ rule_Image_Bool = "function-image{FunctionNDPartial}-bool" `namedRule` theRule w let flagsCombined = make opAnd $ fromList flags return ( "Function image, FunctionNDPartial representation, bool" - , return [essence| ?#{ &p' @ such that &flagsCombined } |] + , return [essence| { &p' @ such that &flagsCombined } |] ) diff --git a/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs b/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs index 9bd6c066b9..a0425ea492 100644 --- a/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs +++ b/src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs @@ -61,7 +61,7 @@ rule_Image_NotABool = "sequence-image{ExplicitBounded}-not-a-bool" `namedRule` t [sLength,sValues] <- downX1 sequ return ( "Sequence image, ExplicitBounded representation, not-a-bool" - , return [essence| ?#{ &sValues[&x] + , return [essence| { &sValues[&x] @ such that &x <= &sLength } |] @@ -90,7 +90,7 @@ rule_Image_Bool = "sequence-image{ExplicitBounded}-bool" `namedRule` theRule whe let flagsCombined = make opAnd $ fromList flags return ( "Sequence image, ExplicitBounded representation, bool" - , return [essence| ?#{ &p' @ such that &flagsCombined } |] + , return [essence| { &p' @ such that &flagsCombined } |] ) rule_Leq :: Rule From 3bf4abb016df01a2df8fc5ab1d771da5b5cf1561 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 26 Oct 2022 17:04:01 +0100 Subject: [PATCH 081/378] Supporting multi declatations and quoted names --- src/Conjure/Language/AST/ASTParser.hs | 108 +++++++++++--------------- src/Conjure/Language/AST/Helpers.hs | 6 ++ src/Conjure/Language/AST/Reformer.hs | 14 ++-- src/Conjure/Language/AST/Syntax.hs | 28 +++++-- src/Conjure/Language/NewLexer.hs | 12 +++ src/Conjure/Language/Validator.hs | 33 +++++--- 6 files changed, 112 insertions(+), 89 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index b714c08199..0f855b80c0 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -96,18 +96,22 @@ parseDeclaration :: Parser StatementNode parseDeclaration = DeclarationStatement <$> choice [ - LettingStatement <$> parseLetting, - GivenStatement <$> parseGiven, - FindStatement <$> parseFind + declaration LettingStatement L_letting parseLetting, + declaration GivenStatement L_given parseGiven, + declaration FindStatement L_find parseFind ] - + where + declaration :: (Null a) => (LToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b + declaration c t p = do + l <- need t + seq <- commaList p + return $ c l seq parseLetting :: Parser LettingStatementNode parseLetting = do - lLetting <- need L_letting names <- commaList parseIdentifier lBe <- want L_be - let start = LettingStatementNode lLetting names lBe + let start = LettingStatementNode names lBe start <$> choice [ finishDomain , try finishEnum @@ -135,11 +139,10 @@ parseLetting = do parseGiven :: Parser GivenStatementNode parseGiven = do - lGiven <- need L_given names <- commaList parseIdentifier choice - [ finishEnum (GivenEnumNode lGiven names) - , finishDomain (GivenStatementNode lGiven names) + [ finishEnum (GivenEnumNode names) + , finishDomain (GivenStatementNode names) ] where finishEnum start = do @@ -155,11 +158,10 @@ parseGiven = do parseFind :: Parser FindStatementNode parseFind = do - lFind <- need L_find names <- commaList parseIdentifier lColon <- want L_Colon domain <- parseDomain - return $ FindStatementNode lFind names lColon domain + return $ FindStatementNode names lColon domain "Find Statement" parseObjectiveStatement :: Parser ObjectiveStatementNode parseObjectiveStatement = do @@ -209,7 +211,6 @@ parseAtomicExpression = do , AbsExpression <$> parseAbsExpression , QuantificationExpr <$> parseQuantificationStatement , DomainExpression <$> parseDomainExpression - , MissingExpressionNode <$> makeMissing (L_Missing "Expression") ] @@ -364,10 +365,10 @@ parseRelationMember = try $ do members <- parenList $ commaList parseExpression case f of Just lTup -> return $ RelationElemNodeLabeled $ LongTuple lTup members - Nothing -> case members of + Nothing -> case members of ListNode l c r | (isMissing l || isMissing r) && isMissing c -> empty _ -> return $ RelationElemNodeShort $ ShortTuple members - + parsePartitionLiteral :: Parser LiteralNode parsePartitionLiteral = do @@ -462,7 +463,7 @@ parseComprehensionCondition = do -- Current implementation is hacky parseOperator :: Parser ExpressionNode -parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") +parseOperator = try (makeExprParser parseAtomicExpressionAndFixes operatorTable "Expression") parseFunction :: Parser ExpressionNode parseFunction = try $ do @@ -527,7 +528,7 @@ operatorTable = BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op BinaryOp op FNone -> InfixN $ prefixBinary <$> need op BinaryOp op FRight -> InfixR $ prefixBinary <$> need op - UnaryPrefix op -> Prefix $ prefixUnary <$> need op + UnaryPrefix op -> prefixOps op | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) (descr, _) <- operatorsInGroup @@ -535,13 +536,41 @@ operatorTable = | operatorsInGroup <- operatorsGrouped ] +parseAtomicExpressionAndFixes :: Parser ExpressionNode +parseAtomicExpressionAndFixes = try $ do + let + prefixes = do + fs <- some parsePrefixes + return $ foldr1 (.) fs + postfixes = do + fs <- some parsePostfixOp + return $ foldr1 (.) (reverse fs) + withPrefix x = try x <|> do f <- prefixes; i <- x; return $ f i + withPostfix x = do i <- x; guard $ not $ isMissing i ; mf <- optional postfixes; return $ fromMaybe id mf i + withPrefix (withPostfix parseAtomicExpression) "expression" + + +parsePrefixes :: Parser (ExpressionNode -> ExpressionNode) +parsePrefixes = choice [parseUnary L_Minus,parseUnary L_ExclamationMark] + where + parseUnary l = (\e -> OperatorExpressionNode . PrefixOpNode e ) <$> need l + + + prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t prefixUnary :: LToken -> ExpressionNode -> ExpressionNode prefixUnary l = OperatorExpressionNode . PrefixOpNode l -postfixOps :: [Operator Parser ExpressionNode] +prefixOps ::Lexeme -> Operator Parser ExpressionNode +prefixOps l = Prefix $ foldr1 (. ) <$> some (try opBuilder) + where + opBuilder :: Parser (ExpressionNode -> ExpressionNode) + opBuilder = do + t <- need l + return (OperatorExpressionNode . PrefixOpNode t) +postfixOps :: [Operator Parser ExpressionNode] postfixOps = [ Postfix $ foldr1 (.) . reverse <$> some parsePostfixOp ] @@ -772,51 +801,6 @@ exampleFile p = do Just s -> example s return () -demoString :: String -demoString = - intercalate - "\n" - [ "letting letters be new type enum {S,E,N,D,M,O,R,Y}" - , "find f : function (injective) letters --> int(0..9)" - , "such that" - , " 1000 * f(S) + 100 * f(E) + 10 * f(N) + f(D) +" - , " 1000 * f(M) + 100 * f(O) + 10 * f(R) + f(E) =" - , " 10000 * f(M) + 1000 * f(O) + 100 * f(N) + 10 * f(E) + f(Y)" - , "" - , "such that f(S) > 0, f(M) > 0" - ] - -demo2 :: String -demo2 = intercalate "\n"[ - "given n : int" - ,"find perm : sequence (size n) of int(1..n)" - ,"such that $comment" - ," allDiff([perm(k) | k : int(1..n) ])," - ," and([ max(subs) - min(subs) + 1 != |subs| |" - ," i : int(1..n-1), j : int(2..n)," - ," i < j," - ," !(i = 1 /\\ j = n)," - ," letting subs be [perm(k) | k : int(i..j)]]" - ," )" - ] - -demo3 :: String -demo3 = intercalate "\n" [ "$COMMENT" - ,"given n : int" - ,"letting DOMAIN be domain int(1..n)" - ,"given hints : function (DOMAIN, DOMAIN) --> DOMAIN" - ,"given less_than : relation of ((DOMAIN, DOMAIN) * (DOMAIN, DOMAIN))" - ,"find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" - ,"such that" - ," forAll (hint,num) in hints ." - ," board[hint[1], hint[2]] = num," - ," forAll i: DOMAIN ." - ," allDiff(board[i,..])," - ," forAll j: DOMAIN ." - ," allDiff(board[..,j])," - ," forAll (l,g) in less_than ." - ," board[l[1],l[2]] < board[g[1],g[2]]" - ] parsePrint :: String -> IO () parsePrint text = do diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 93b88ac8ea..4d79b2d417 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -70,6 +70,12 @@ want a = do need :: Lexeme -> Parser LToken need a = RealToken <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" +adjacent :: Parser a -> Parser a +adjacent p = do + next <- lookAhead anySingle + guard $ null $ trivia next + p + parseIdentifier :: Parser NameNode parseIdentifier = do x <- want anIdent diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index f41320b617..bd217f7ac0 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -24,13 +24,13 @@ instance Flattenable ETok StatementNode where instance Flattenable ETok DeclarationStatementNode where flatten x = case x of - FindStatement fsn -> flatten fsn - GivenStatement gsn -> flatten gsn - LettingStatement lsn -> flatten lsn + FindStatement f fsn -> flatten f ++ flatten fsn + GivenStatement g gsn -> flatten g ++ flatten gsn + LettingStatement t lsn -> flatten t ++ flatten lsn instance Flattenable ETok LettingStatementNode where - flatten (LettingStatementNode a b c d) = concat[ flatten a, flatten b, flatten c,flatten d] + flatten (LettingStatementNode a b c) = concat[ flatten a, flatten b, flatten c] instance Flattenable ETok LettingAssignmentNode where flatten x = case x of @@ -40,12 +40,12 @@ instance Flattenable ETok LettingAssignmentNode where LettingAnon d e f g h -> concat [flatten d, flatten e, flatten f, flatten g, flatten h] instance Flattenable ETok FindStatementNode where - flatten (FindStatementNode a b c d) = concat [flatten a, flatten b, flatten c, flatten d] + flatten (FindStatementNode a b c) = concat [flatten a, flatten b, flatten c] instance Flattenable ETok GivenStatementNode where flatten x = case x of - GivenStatementNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - GivenEnumNode a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] + GivenStatementNode a b c -> concat [flatten a, flatten b, flatten c] + GivenEnumNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index a5efe67bbf..8e04e30333 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -68,40 +68,45 @@ data ObjectiveStatementNode -- Declaration statements data DeclarationStatementNode - = FindStatement FindStatementNode - | GivenStatement GivenStatementNode - | LettingStatement LettingStatementNode + = FindStatement LToken (Sequence FindStatementNode) + | GivenStatement LToken (Sequence GivenStatementNode) + | LettingStatement LToken (Sequence LettingStatementNode) deriving (Show) data FindStatementNode = FindStatementNode - LToken -- find (Sequence NameNode) -- names LToken -- colon DomainNode -- domain deriving (Show) - +instance Null FindStatementNode where + isMissing (FindStatementNode n l d) = isMissing n && isMissing l && isMissing d data GivenStatementNode = GivenStatementNode - LToken -- given (Sequence NameNode) -- name LToken -- colon DomainNode -- domain | GivenEnumNode - LToken (Sequence NameNode) LToken -- new LToken -- type LToken -- enum deriving (Show) +instance Null GivenStatementNode where + isMissing (GivenStatementNode l t d) = isMissing l && isMissing t && isMissing d + isMissing (GivenEnumNode l a b c) = isMissing l && isMissing a && isMissing b && isMissing c + data LettingStatementNode = LettingStatementNode - LToken (Sequence NameNode) LToken -- LettingAssignmentNode deriving (Show) + + +instance Null LettingStatementNode where + isMissing (LettingStatementNode l t a) = isMissing l && isMissing t && isMissing a data LettingAssignmentNode = LettingExpr ExpressionNode @@ -120,6 +125,13 @@ data LettingAssignmentNode LToken -- lSize ExpressionNode -- expr deriving (Show) +instance Null LettingAssignmentNode where + isMissing x = case x of + LettingExpr en -> isMissing en + LettingDomain lt dn -> isMissing lt && isMissing dn + LettingEnum l1 l2 l3 ln -> all isMissing [l1,l2,l3] && isMissing ln + LettingAnon l1 l2 l3 l4 en -> all isMissing [l1,l2,l3,l4] && isMissing en + -- Branching on diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index e3a2292af3..6190c21a6a 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -127,6 +127,7 @@ aLexemeStrict = pNumber <|> try (choice (map pLexeme lexemes) "Lexeme") <|> try pIdentifier + <|> try pQuotedIdentifier <|> try pMetaVar @@ -149,6 +150,12 @@ pIdentifier = do let ident = T.append firstLetter rest return ( LIdentifier ident, ident) "Identifier" + +pQuotedIdentifier :: Lexer (Lexeme,Text) +pQuotedIdentifier = do + l <- quoted + return (LIdentifier l,l) + pFallback :: Lexer (Lexeme,Text) pFallback = do q <- T.pack <$> someTill anySingle (lookAhead $ try somethingValid) @@ -174,6 +181,11 @@ whiteSpace = do s <- some spaceChar return $ WhiteSpace $ T.pack s +quoted :: Lexer Text +quoted = do + open <- char '\"' + (body,end) <- manyTill_ L.charLiteral $ char '\"' + return $ T.pack $ open:body++[end] lineEnd :: Lexer [Char] lineEnd = T.unpack <$> eol <|> ( eof >> return []) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 5529aa85b4..e5255afaf5 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -211,29 +211,33 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do validateDeclarationStatement :: DeclarationStatementNode -> Validator [Statement] validateDeclarationStatement stmt = do Just stmt' <- case stmt of - FindStatement fsn -> validateFind fsn - GivenStatement gsn -> validateGiven gsn - LettingStatement lsn -> validateLetting lsn + FindStatement l1 fs -> checkSymbols [l1] >> validateStatementSeq validateFind fs + GivenStatement l1 gs -> checkSymbols [l1] >> validateStatementSeq validateGiven gs + LettingStatement l1 ls -> checkSymbols [l1] >> validateStatementSeq validateLetting ls return . pure $ Declaration <$> stmt' + where + validateStatementSeq v l= do + decls <- validateSequence v l + return $ pure $ concat decls validateGiven :: GivenStatementNode -> Validator [Declaration] -validateGiven (GivenStatementNode l1 idents l2 domain) = +validateGiven (GivenStatementNode idents l1 domain) = do - checkSymbols [l1, l2] + checkSymbols [l1] names <- validateNameList idents Just dom <- validateDomain domain return . pure $ [ FindOrGiven Given nm dom|nm <- names ] -validateGiven (GivenEnumNode l1 se l2 l3 l4) = +validateGiven (GivenEnumNode se l1 l2 l3) = do - checkSymbols [l1, l2, l3, l4] + checkSymbols [l1, l2, l3] names <- validateNameList se modify $ addEnumDefns [ n | Name n <-names] return . pure $ [GivenDomainDefnEnum n | n <- names] validateLetting :: LettingStatementNode -> Validator [Declaration] -- Letting [names] be -validateLetting (LettingStatementNode l1 names l2 assign) = do - checkSymbols [l1, l2] +validateLetting (LettingStatementNode names l1 assign) = do + checkSymbols [l1] names' <- validateNameList names validateLettingAssignment names' assign @@ -298,8 +302,8 @@ validateSymbol s = -- [MissingTokenError ] validateFind :: FindStatementNode -> Validator [Declaration] -validateFind (FindStatementNode find names colon domain) = do - checkSymbols [find, colon] +validateFind (FindStatementNode names colon domain) = do + checkSymbols [colon] names' <- validateNameList names domain' <- validateDomain domain return $ map <$> (makeFind <$> domain') <*> pure names' @@ -960,8 +964,13 @@ validateIdentifier :: NameNode -> Validator Text validateIdentifier (NameNode iden) = do Just q <- validateSymbol iden case q of - LIdentifier x -> return $ Just x + LIdentifier x -> checkName x _ -> return Nothing + where + checkName :: Text -> Validator Text + checkName "" = invalid $ StateError "Empty names not allowed" + checkName "\"\"" = invalid $ StateError "Empty names not allowed" + checkName x = return . pure $ x validateName :: NameNode -> Validator Name validateName name = do From d7d14da0c386b149f1a9302bacff158c8b12fd9c Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 26 Oct 2022 17:10:20 +0100 Subject: [PATCH 082/378] allows withdecls in expresssions --- src/Conjure/Language/AST/ASTParser.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 0f855b80c0..7fda966a20 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -187,7 +187,7 @@ pEnding = do --------------------------------------- parseExpression :: Parser ExpressionNode -parseExpression = parseSpecialCase <|> +parseExpression = parseOperator <|> parseAtomicExpression @@ -202,7 +202,9 @@ parseAtomicExpression :: Parser ExpressionNode parseAtomicExpression = do try $ choice - [ Literal <$> parseLiteral + [ + parseSpecialCase + , Literal <$> parseLiteral , parseFunction , parseAttributeAsConstraint , IdentifierNode <$> parseIdentifierStrict From a895e1f85b86e9b2492ba860141d0ccf110939e9 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 27 Oct 2022 10:36:33 +0100 Subject: [PATCH 083/378] fixed incorrect lexing of comments --- src/Conjure/Language/NewLexer.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index 6190c21a6a..eb7a836003 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -192,7 +192,7 @@ lineEnd = T.unpack <$> eol <|> ( eof >> return []) lineComment :: Lexer Trivia lineComment = do _ <- try (chunk "$") - (text,end) <- manyTill_ L.charLiteral lineEnd + (text,end) <- manyTill_ anySingle lineEnd return $ LineComment $ T.pack ('$' : text++end) blockComment :: Lexer Trivia From 109f24bbc1dc64883f3149b54f058e714ac8d8fb Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 28 Oct 2022 14:44:36 +0100 Subject: [PATCH 084/378] fixing test related bugs --- src/Conjure/Language/AST/Helpers.hs | 13 ++++- src/Conjure/Language/AST/Reformer.hs | 5 +- src/Conjure/Language/AST/Syntax.hs | 17 +++++-- src/Conjure/Language/Attributes.hs | 3 +- src/Conjure/Language/Validator.hs | 73 ++++++++++++++++------------ 5 files changed, 71 insertions(+), 40 deletions(-) diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 4d79b2d417..d328301ab4 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -94,7 +94,7 @@ commaList ::(Null a) => Parser a -> Parser (Sequence a) commaList = parseSequence L_Comma commaList1 ::(Null a) => Parser a -> Parser (Sequence a) -commaList1 = parseNESequence L_Comma +commaList1 = parseSequence1 L_Comma squareBracketList :: Parser (Sequence a) -> Parser (ListNode a) squareBracketList = parseList L_OpenBracket L_CloseBracket @@ -136,6 +136,17 @@ parseListStrict startB endB seq = do -- s <- need divider -- SeqElem (Just s) <$> pElem +parseSequence1 :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) +parseSequence1 divider pElem = do + s <- parseSequence divider pElem + case s of + Seq [] -> do + q <- pElem + return $ Seq [SeqElem q Nothing] + Seq _ -> return s + + + parseSequence :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = do missingPlaceholder <- makeMissing $ L_Missing "SequenceElem" diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index bd217f7ac0..6c935d93b5 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -204,7 +204,7 @@ instance Flattenable ETok DomainNode where TupleDomainNode lt ln -> flatten lt ++ flatten ln RecordDomainNode lt ln -> flatten lt ++ flatten ln VariantDomainNode lt ln -> flatten lt ++ flatten ln - MatrixDomainNode a b c d e f -> concat [flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] + MatrixDomainNode a m_ib b c d -> concat [flatten a, flatten m_ib, flatten b, flatten c, flatten d] SetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] MSetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] FunctionDomainNode a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] @@ -213,6 +213,9 @@ instance Flattenable ETok DomainNode where PartitionDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] MissingDomainNode _ -> [] +instance Flattenable ETok IndexedByNode where + flatten (IndexedByNode a b ) = flatten a ++ flatten b + instance (Flattenable ETok a) => Flattenable ETok (Maybe a) where flatten (Just x) = flatten x flatten Nothing = [] diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 8e04e30333..9bf8a31450 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -157,7 +157,7 @@ data DomainNode | TupleDomainNode LToken (ListNode DomainNode) | RecordDomainNode LToken (ListNode NamedDomainNode) | VariantDomainNode LToken (ListNode NamedDomainNode) - | MatrixDomainNode LToken LToken LToken (ListNode DomainNode) LToken DomainNode + | MatrixDomainNode LToken (Maybe IndexedByNode) (ListNode DomainNode) LToken DomainNode | SetDomainNode LToken MAttributes LToken DomainNode | MSetDomainNode LToken MAttributes LToken DomainNode | FunctionDomainNode LToken MAttributes DomainNode LToken DomainNode @@ -170,7 +170,8 @@ instance Null DomainNode where isMissing (MissingDomainNode {}) = True isMissing _ = False - +data IndexedByNode = IndexedByNode LToken LToken + deriving (Show) data RangeNode = SingleRangeNode ExpressionNode | OpenRangeNode DoubleDotNode @@ -386,16 +387,22 @@ data ListNode itemType = ListNode , lClBracket :: LToken } deriving (Show) -instance Null (ListNode a) where +instance (Null a) => Null (ListNode a) where isMissing (ListNode l1 s l2 ) = isMissing l1 && isMissing s && isMissing l2 newtype Sequence itemType = Seq { elems :: [SeqElem itemType] } deriving (Show) -instance Null (Sequence a) where +instance (Null a) => Null (SeqElem a) where + isMissing (SeqElem i Nothing)= isMissing i + isMissing (SeqElem i x) = isMissing x + isMissing (MissingSeqElem{}) = True + +instance (Null a) => Null (Sequence a) where isMissing (Seq []) = True - isMissing _ = False + isMissing (Seq [a]) = isMissing a + isMissing (Seq _) = False -- deriving (Show) -- instance (Show a) => Show (Sequence a) where diff --git a/src/Conjure/Language/Attributes.hs b/src/Conjure/Language/Attributes.hs index 99392dfe83..f8a6189a75 100644 --- a/src/Conjure/Language/Attributes.hs +++ b/src/Conjure/Language/Attributes.hs @@ -72,6 +72,7 @@ binRelAttrs = , (L_antiSymmetric, False) , (L_aSymmetric, False) , (L_transitive, False) + , (L_total,False) , (L_connex, False) , (L_Euclidean, False) , (L_serial, False) @@ -87,7 +88,7 @@ lexemeToBinRel L_symmetric = Just BinRelAttr_Symmetric lexemeToBinRel L_antiSymmetric = Just BinRelAttr_AntiSymmetric lexemeToBinRel L_aSymmetric = Just BinRelAttr_ASymmetric lexemeToBinRel L_transitive = Just BinRelAttr_Transitive --- lexemeToBinRel L_total = Just BinRelAttr_Total +lexemeToBinRel L_total = Just BinRelAttr_Total lexemeToBinRel L_connex = Just BinRelAttr_Connex lexemeToBinRel L_Euclidean = Just BinRelAttr_Euclidean lexemeToBinRel L_serial = Just BinRelAttr_Serial diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index e5255afaf5..8b852820cc 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -19,9 +19,9 @@ import Conjure.Language.Type import Data.Map.Strict (Map) import qualified Data.Map.Strict as M -import qualified Data.Set as S +import qualified Data.Set as S -import Data.Text (pack, unpack) +import Data.Text (pack, unpack, toLower) import Text.Megaparsec (parseMaybe, runParser) import Conjure.Language.Expression.Op @@ -64,12 +64,12 @@ type Validator a = ValidatorT SymbolTable ValidatorError (Maybe a) --Non maybe version used in outward facing applications/ lists type ValidatorS a = ValidatorT SymbolTable ValidatorError a -addEnumDefns :: [Text] -> SymbolTable -> SymbolTable +addEnumDefns :: [Text] -> SymbolTable -> SymbolTable addEnumDefns names (SymbolTable enums) = SymbolTable $ enums ++ map (\m -> (m,"Enum")) names lookupSymbol :: Text -> ValidatorS (Maybe String) lookupSymbol name = do - SymbolTable a <- get + SymbolTable a <- get return $ lookup name a strict :: Validator a -> ValidatorS a @@ -134,11 +134,16 @@ validateProgramTree sts = do return . pure $ concat q +isValidLanguageName :: Text -> Bool +isValidLanguageName t = Data.Text.toLower t `elem` ["essence","essence'"] + validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3] validateLanguageVersion (Just (LangVersionNode l1 n v)) = do + let NameNode nt = n checkSymbols [l1] name <- validateIdentifier n + unless (maybe False isValidLanguageName name) (raiseError $ IllegalToken nt) nums <- validateSequence getNum v return . pure $ LanguageVersion @@ -199,7 +204,7 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do checkSymbols [l1, l2] branchings <- validateList validateBranchingParts sts return . pure $ [SearchOrder branchings] - where + where validateBranchingParts :: ExpressionNode -> Validator SearchOrder validateBranchingParts (IdentifierNode nn) = do n <- validateName nn @@ -218,7 +223,7 @@ validateDeclarationStatement stmt = do where validateStatementSeq v l= do decls <- validateSequence v l - return $ pure $ concat decls + return $ pure $ concat decls validateGiven :: GivenStatementNode -> Validator [Declaration] validateGiven (GivenStatementNode idents l1 domain) = @@ -239,7 +244,7 @@ validateLetting :: LettingStatementNode -> Validator [Declaration] validateLetting (LettingStatementNode names l1 assign) = do checkSymbols [l1] names' <- validateNameList names - validateLettingAssignment names' assign + validateLettingAssignment names' assign validateLettingAssignment :: [Name] -> LettingAssignmentNode -> Validator [Declaration] validateLettingAssignment names (LettingExpr en) = do @@ -329,7 +334,7 @@ validateDomain dm = case dm of TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom VariantDomainNode l1 ndom -> checkSymbols [l1] >> validateVariantDomain ndom - MatrixDomainNode l1 l2 l3 idoms l4 dom -> checkSymbols [l1, l2, l3, l4] >> validateMatrixDomain idoms dom + MatrixDomainNode l1 m_ib idoms l2 dom -> checkSymbols [l1, l2] >> validateIndexedByNode m_ib >> validateMatrixDomain idoms dom SetDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSetDomain attrs dom MSetDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateMSetDomain attrs dom FunctionDomainNode l1 attrs dom1 l2 dom2 -> checkSymbols [l1, l2] >> validateFunctionDomain attrs dom1 dom2 @@ -345,7 +350,7 @@ validateDomain dm = case dm of validateRangedInt Nothing = return . pure $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> DomainValidator validateEnumRange name ranges = do - ranges' <- case ranges of + ranges' <- case ranges of Just r -> pure <$> validateList validateRange r Nothing -> pure Nothing Just name' <- validateIdentifier name @@ -356,7 +361,7 @@ validateDomain dm = case dm of Nothing -> case ranges' of Nothing -> return . pure $ DomainReference (Name name') Nothing Just _ -> do - raiseError (StateError "range not supported on non enum ranges") + raiseError (StateError "range not supported on non enum ranges") return . pure $ DomainReference (Name name') Nothing validateTupleDomain :: ListNode DomainNode -> DomainValidator @@ -425,6 +430,10 @@ validateDomain dm = case dm of dom' <- validateDomain dom return $ DomainPartition <$> repr <*> attrs' <*> dom' +validateIndexedByNode :: Maybe IndexedByNode -> ValidatorS () +validateIndexedByNode Nothing = return () +validateIndexedByNode (Just (IndexedByNode a b)) = checkSymbols [a,b] + todo :: String -> Validator a todo s = invalid $ NotImplemented s @@ -432,7 +441,7 @@ validateSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Exp validateSizeAttributes attrs = do let sizeAttrs = [L_size,L_minSize,L_maxSize] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs - case filtered of + case filtered of [] -> return $ Just SizeAttr_None [(L_size,Just a)] -> return $ Just (SizeAttr_Size a) [(L_minSize, Just a)] -> return $ Just (SizeAttr_MinSize a) @@ -442,9 +451,9 @@ validateSizeAttributes attrs = do validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) validatePartSizeAttributes attrs = do - let sizeAttrs = [L_partSize,L_maxPartSize,L_maxPartSize] + let sizeAttrs = [L_partSize,L_minPartSize,L_maxPartSize] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs - case filtered of + case filtered of [] -> return $ Just SizeAttr_None [(L_partSize,Just a)] -> return $ Just (SizeAttr_Size a) [(L_minPartSize, Just a)] -> return $ Just (SizeAttr_MinSize a) @@ -456,7 +465,7 @@ validateNumPartAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr validateNumPartAttributes attrs = do let sizeAttrs = [L_numParts,L_maxNumParts,L_minNumParts] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs - case filtered of + case filtered of [] -> return $ Just SizeAttr_None [(L_numParts,Just a)] -> return $ Just (SizeAttr_Size a) [(L_minNumParts, Just a)] -> return $ Just (SizeAttr_MinSize a) @@ -469,13 +478,13 @@ validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> Validator Jectivit validateJectivityAttributes attrs = do let sizeAttrs = [L_injective,L_surjective,L_bijective] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs - case filtered of + case filtered of [] -> return $ Just JectivityAttr_None [(L_injective,_)] -> return $ Just JectivityAttr_Injective [(L_surjective, _)] -> return $ Just JectivityAttr_Surjective [(L_bijective, _)] -> return $ Just JectivityAttr_Bijective - [(L_injective, _),(L_surjective, _)] -> do - info "Inj and Sur can be combined to bijective" + [(L_injective, _),(L_surjective, _)] -> do + info "Inj and Sur can be combined to bijective" return $ Just JectivityAttr_Bijective as -> do invalid $ RegionError $ "Incompatible attributes jectivity" ++ show as @@ -485,19 +494,19 @@ validateSetAttributes atts = do attrs <- validateList (validateAttributeNode setValidAttrs) atts size <- validateSizeAttributes attrs return $ SetAttr <$> size - + validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) validateMSetAttributes atts = do attrs <- validateList (validateAttributeNode msetValidAttrs) atts size <- validateSizeAttributes attrs - occurs <- validateOccursAttrs attrs + occurs <- validateOccursAttrs attrs return $ MSetAttr <$> size <*> occurs - where + where validateOccursAttrs attrs = do let sizeAttrs = [L_minOccur,L_maxOccur] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs - case filtered of + case filtered of [] -> return $ Just OccurAttr_None [(L_minOccur,Just a)] -> return $ Just (OccurAttr_MinOccur a) [(L_maxOccur, Just a)] -> return $ Just (OccurAttr_MaxOccur a) @@ -527,12 +536,12 @@ validateRelationAttributes atts = do size <- validateSizeAttributes attrs others <- validateArray validateBinaryRel (filter (\x -> fst x `elem` map fst binRelAttrs) attrs) return $ RelationAttr <$> size <*> pure (BinaryRelationAttrs $ S.fromList others ) - where + where validateBinaryRel :: (Lexeme , Maybe Expression) -> Validator BinaryRelationAttr - validateBinaryRel (l,_) = do - case lexemeToBinRel l of + validateBinaryRel (l,_) = do + case lexemeToBinRel l of Just b -> return . pure $ b - Nothing -> invalid $ StateError $ "Not found (bin rel) " ++ show l + Nothing -> invalid $ StateError $ "Not found (bin rel) " ++ show l validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) validatePartitionAttributes atts = do @@ -540,7 +549,7 @@ validatePartitionAttributes atts = do --guard size attrs and complete as this is default size <- validateNumPartAttributes attrs partSize <- validatePartSizeAttributes attrs - regular <- return . Just $ L_regular `elem` map fst attrs + regular <- return . Just $ L_regular `elem` map fst attrs return $ PartitionAttr <$> size <*> partSize <*> regular validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,Maybe Expression) @@ -653,7 +662,7 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ guard' <- validateQuantificationGuard m_guard body <- validateExpression expr let gens = map <$> over' <*> pure patterns - let qBody = Comprehension <$> body <*> ((++) <$> guard' <*> gens) + let qBody = Comprehension <$> body <*> ((++) <$> gens <*> guard') return $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) where validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] @@ -776,8 +785,8 @@ validateLiteral litNode = case litNode of IntLiteral lt -> validateIntLiteral lt >>= \x -> return $ Constant <$> x BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ Constant <$> x MatrixLiteral mln -> validateMatrixLiteral mln - TupleLiteralNode lt -> Just . mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt - TupleLiteralNodeShort st -> Just . mkAbstractLiteral.AbsLitTuple <$> validateShortTuple st + TupleLiteralNode lt -> Just . mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt + TupleLiteralNodeShort st -> Just . mkAbstractLiteral.AbsLitTuple <$> validateShortTuple st RecordLiteral lt ln -> checkSymbols [lt] >> validateRecordLiteral ln VariantLiteral lt ln -> checkSymbols [lt] >> validateVariantLiteral ln SetLiteral ls -> validateSetLiteral ls @@ -800,7 +809,7 @@ validateRelationLiteral ln = do where validateRelationMember :: RelationElemNode -> Validator [Expression] validateRelationMember x = case x of - RelationElemNodeLabeled lt -> Just <$> validateLongTuple lt + RelationElemNodeLabeled lt -> Just <$> validateLongTuple lt RelationElemNodeShort st -> Just <$> validateShortTuple st @@ -966,7 +975,7 @@ validateIdentifier (NameNode iden) = do case q of LIdentifier x -> checkName x _ -> return Nothing - where + where checkName :: Text -> Validator Text checkName "" = invalid $ StateError "Empty names not allowed" checkName "\"\"" = invalid $ StateError "Empty names not allowed" @@ -1012,7 +1021,7 @@ val s = do let stream = ETokenStream txt $ fromMaybe other lexed -- parseTest parseProgram stream let progStruct = runParser parseProgram "TEST" stream - + case progStruct of Left _ -> putStrLn "error" Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (SymbolTable []) in From 7f9ba67b4f73cb74878921bb3e204e761b165520 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 1 Nov 2022 10:34:15 +0000 Subject: [PATCH 085/378] Add requirement of element to decl name lists --- conjure-cp.cabal | 1 - src/Conjure/Language/AST/ASTParser.hs | 17 ++++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index e67ffbbc42..818678537e 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -10,7 +10,6 @@ Author: Özgür Akgün Maintainer: ozgurakgun@gmail.com Category: Constraint Programming Build-type: Simple -Cabal-version: >= 1.20 Library default-language : Haskell2010 diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 7fda966a20..366731424e 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -79,13 +79,13 @@ parseSuchThat :: Parser StatementNode parseSuchThat = do lSuch <- need L_such lThat <- want L_that - exprs <- commaList parseExpression + exprs <- commaList1 parseExpression return $ SuchThatStatement $ SuchThatStatementNode lSuch lThat exprs parseWhere :: Parser StatementNode parseWhere = do lWhere <- need L_where - exprs <- commaList parseExpression + exprs <- commaList1 parseExpression return $ WhereStatement $ WhereStatementNode lWhere exprs parseObjective :: Parser StatementNode @@ -104,12 +104,12 @@ parseDeclaration = declaration :: (Null a) => (LToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b declaration c t p = do l <- need t - seq <- commaList p + seq <- commaList1 p return $ c l seq parseLetting :: Parser LettingStatementNode parseLetting = do - names <- commaList parseIdentifier + names <- commaList1 parseIdentifier lBe <- want L_be let start = LettingStatementNode names lBe start <$> choice @@ -139,7 +139,7 @@ parseLetting = do parseGiven :: Parser GivenStatementNode parseGiven = do - names <- commaList parseIdentifier + names <- commaList1 parseIdentifier choice [ finishEnum (GivenEnumNode names) , finishDomain (GivenStatementNode names) @@ -158,7 +158,7 @@ parseGiven = do parseFind :: Parser FindStatementNode parseFind = do - names <- commaList parseIdentifier + names <- commaList1 parseIdentifier lColon <- want L_Colon domain <- parseDomain return $ FindStatementNode names lColon domain @@ -653,10 +653,13 @@ parseMatrix = do lMatrix <- need L_matrix lIndexed <- want L_indexed lBy <- want L_by + let indexByNode = case (lIndexed,lBy) of + (MissingToken _,MissingToken _) -> Nothing + _ -> Just (IndexedByNode lIndexed lBy) members <- squareBracketList $ commaList parseDomain lOf <- want L_of domain <- parseDomain - return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain + return $ MatrixDomainNode lMatrix indexByNode members lOf domain parseSet :: Parser DomainNode parseSet = do From 35e5024e42c204de6eee42d0bf3fe8f800f4ee8b Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 5 Nov 2022 11:04:21 +0000 Subject: [PATCH 086/378] Added empty variant support --- src/Conjure/Language/AST/ASTParser.hs | 7 +++++-- src/Conjure/Language/AST/Reformer.hs | 3 ++- src/Conjure/Language/AST/Syntax.hs | 5 +++-- src/Conjure/Language/Validator.hs | 21 +++++++++++++++------ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 366731424e..266c2b63fa 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -729,10 +729,13 @@ parseEnumDomain = do -- Util parseNameDomain :: Parser NamedDomainNode parseNameDomain = do - name <- parseIdentifierStrict + name <- parseIdentifier lColon <- want L_Colon domain <- parseDomain - return $ NameDomainNode name lColon domain + let definedDomain = case (lColon,domain) of + (a,b) | isMissing a && isMissing b -> Nothing + (a,b) -> Just (a,b) + return $ NameDomainNode name definedDomain parseRange :: Parser RangeNode parseRange = ranged <|> singleR diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 6c935d93b5..50373a9da3 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -236,7 +236,8 @@ instance Flattenable ETok RangeNode where -- flatten (DoubleDotNode a b) = flatten a ++ flatten b instance Flattenable ETok NamedDomainNode where - flatten (NameDomainNode a b c) = concat [flatten a, flatten b, flatten c] + flatten (NameDomainNode a Nothing) = flatten a + flatten (NameDomainNode a (Just (b,c))) = concat [flatten a,flatten b,flatten c] instance Flattenable ETok NameNode where flatten (NameNode n) = flatten n diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 9bf8a31450..f545525380 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -195,11 +195,12 @@ instance Null AttributeNode where isMissing (NamedAttributeNode n m_e) = isMissing n && isMissing m_e -- isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e -data NamedDomainNode = NameDomainNode NameNode LToken DomainNode +data NamedDomainNode = NameDomainNode NameNode (Maybe (LToken, DomainNode)) deriving (Show) instance Null NamedDomainNode where - isMissing (NameDomainNode (NameNode a) b c) = isMissing a && isMissing b && isMissing c + isMissing (NameDomainNode (NameNode a) Nothing) = isMissing a + isMissing (NameDomainNode (NameNode a) (Just (b,c))) = isMissing a && isMissing b && isMissing c -- Common Statements newtype NameNode = NameNode LToken diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 8b852820cc..32945bab46 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -367,10 +367,10 @@ validateDomain dm = case dm of validateTupleDomain :: ListNode DomainNode -> DomainValidator validateTupleDomain doms = pure . DomainTuple <$> validateList validateDomain doms validateRecordDomain :: ListNode NamedDomainNode -> DomainValidator - validateRecordDomain namedDoms = pure . DomainRecord <$> validateList validateNamedDomain namedDoms + validateRecordDomain namedDoms = pure . DomainRecord <$> validateList validateNamedDomainInRecord namedDoms validateVariantDomain :: ListNode NamedDomainNode -> DomainValidator validateVariantDomain namedDoms = do - lst <- validateList validateNamedDomain namedDoms + lst <- validateList validateNamedDomainInVariant namedDoms return . pure $ DomainVariant lst validateMatrixDomain :: ListNode DomainNode -> DomainNode -> DomainValidator validateMatrixDomain indexes dom = do @@ -569,11 +569,20 @@ validateAttributeNode vs (NamedAttributeNode t (Just e)) = do Just True -> return $(\x -> (name,Just x)) <$> expr -validateNamedDomain :: NamedDomainNode -> Validator (Name, Domain () Expression) -validateNamedDomain (NameDomainNode name l1 domain) = do - checkSymbols [l1] +validateNamedDomainInVariant :: NamedDomainNode -> Validator (Name, Domain () Expression) +validateNamedDomainInVariant (NameDomainNode name m_dom) = do name' <- validateName name - domain' <- validateDomain domain + domain' <-case m_dom of + Nothing -> return . pure $ DomainInt TagInt [RangeSingle 0] + Just (l,d) -> checkSymbols [l] >> validateDomain d + return $ (,) <$> name' <*> domain' + +validateNamedDomainInRecord :: NamedDomainNode -> Validator (Name, Domain () Expression) +validateNamedDomainInRecord (NameDomainNode name m_dom) = do + name' <- validateName name + domain' <-case m_dom of + Nothing -> invalid $ StateError "Dataless not allowed in record" + Just (l,d) -> checkSymbols [l] >> validateDomain d return $ (,) <$> name' <*> domain' validateRange :: RangeNode -> Validator (Range Expression) From 1ccf385bcdad780b258a68f16b4f10b1c14d9528 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 5 Nov 2022 11:19:50 +0000 Subject: [PATCH 087/378] Support for new binary relations in parser --- src/Conjure/Language/Attributes.hs | 12 ++++++++++++ src/Conjure/Language/Lexemes.hs | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/Conjure/Language/Attributes.hs b/src/Conjure/Language/Attributes.hs index f8a6189a75..d18d9783f2 100644 --- a/src/Conjure/Language/Attributes.hs +++ b/src/Conjure/Language/Attributes.hs @@ -78,6 +78,12 @@ binRelAttrs = , (L_serial, False) , (L_equivalence, False) , (L_partialOrder, False) + , (L_linearOrder, False) + , (L_weakOrder, False) + , (L_preOrder, False) + , (L_strictPartialOrder, False) + , (L_leftTotal, False) + , (L_rightTotal, False) ] lexemeToBinRel :: Lexeme -> Maybe BinaryRelationAttr @@ -94,6 +100,12 @@ lexemeToBinRel L_Euclidean = Just BinRelAttr_Euclidean lexemeToBinRel L_serial = Just BinRelAttr_Serial lexemeToBinRel L_equivalence = Just BinRelAttr_Equivalence lexemeToBinRel L_partialOrder = Just BinRelAttr_PartialOrder +lexemeToBinRel L_linearOrder = Just BinRelAttr_LinearOrder +lexemeToBinRel L_weakOrder = Just BinRelAttr_WeakOrder +lexemeToBinRel L_preOrder = Just BinRelAttr_PreOrder +lexemeToBinRel L_strictPartialOrder = Just BinRelAttr_StrictPartialOrder +lexemeToBinRel L_leftTotal = Just BinRelAttr_LeftTotal +lexemeToBinRel L_rightTotal = Just BinRelAttr_RightTotal lexemeToBinRel _ = Nothing totalityAttrs :: [Attr] diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 0954f4992f..23461dad44 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -100,6 +100,12 @@ data Lexeme | L_serial | L_equivalence | L_partialOrder + | L_linearOrder + | L_weakOrder + | L_preOrder + | L_strictPartialOrder + | L_leftTotal + | L_rightTotal -- type: partition | L_partition | L_regular @@ -349,6 +355,12 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_serial, "serial") , ( L_equivalence, "equivalence") , ( L_partialOrder, "partialOrder") + , ( L_linearOrder , "linearOrder") + , ( L_weakOrder , "weakOrder") + , ( L_preOrder , "preOrder") + , ( L_strictPartialOrder , "strictPartialOrder") + , ( L_leftTotal , "leftTotal") + , ( L_rightTotal , "rightTotal") , ( L_partition, "partition" ) , ( L_regular, "regular" ) , ( L_partSize, "partSize" ) From 7919f7209c34cb88dfa9914f29882912aa7aeb7e Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 8 Nov 2022 12:07:51 +0000 Subject: [PATCH 088/378] Improved error printouts,needs linking in --- conjure-cp.cabal | 1 + src/Conjure/Language/AST/Reformer.hs | 2 +- src/Conjure/Language/NewLexer.hs | 3 + src/Conjure/Language/Parser.hs | 7 +- src/Conjure/Language/Validator.hs | 299 +++++++++++++++------------ src/Conjure/UI/ErrorDisplay.hs | 94 +++++++++ 6 files changed, 273 insertions(+), 133 deletions(-) create mode 100644 src/Conjure/UI/ErrorDisplay.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 818678537e..802d9e1574 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -253,6 +253,7 @@ Library , Conjure.UI.ParameterGenerator , Conjure.UI.NormaliseQuantified , Conjure.UI.TypeScript + , Conjure.UI.ErrorDisplay build-depends : base >= 4.12.0 -- the export list have changed diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 50373a9da3..3e1752516f 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -65,7 +65,7 @@ instance Flattenable ETok ObjectiveStatementNode where instance Flattenable ETok LToken where flatten x = case x of RealToken et -> flatten et - MissingToken _ -> [] + MissingToken et -> flatten et SkippedToken et -> flatten et instance Flattenable ETok ETok where diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index eb7a836003..b7c68a2220 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -78,6 +78,9 @@ tokenStart (ETok{offsets = (_, s, _, _)}) = s tokenSourcePos :: ETok -> SourcePos tokenSourcePos ETok{offsets=(_,_,_,s)} = s +sourcePosAfter :: ETok -> SourcePos +sourcePosAfter ETok {offsets=(_,_,l,SourcePos a b (unPos->c))} = SourcePos a b (mkPos (c + l)) + makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 442d7a45e9..56bd8ce6b3 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -53,18 +53,17 @@ import Text.PrettyPrint (text) type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b) -data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError [V.ValidatorError] +data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError [V.ValidatorDiagnostic] deriving (Show) runPipeline :: Pipeline a b -> Text -> Either PipelineError b runPipeline (parse,val) txt = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult - let x = V.runValidator (val parseResult) (V.SymbolTable []) + let x = V.runValidator (val parseResult) def case x of - (Just m, []) -> Right m + (Just m, ds) | not $ any V.isError ds -> Right m (_, ves) -> Left $ ValidatorError ves - -- Validator (Just res) [] -> Right res -- Validator _ xs -> Left $ ValidatorError xs diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 32945bab46..3b396a8c7e 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -8,7 +8,7 @@ import Conjure.Language.AST.Syntax as S import Conjure.Language.Definition import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.NewLexer (ETok (ETok, capture, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0) +import Conjure.Language.NewLexer (ETok (ETok, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0, tokenSourcePos, totalLength, tokenStart) import Conjure.Language.Attributes import Conjure.Prelude @@ -21,8 +21,9 @@ import Data.Map.Strict (Map) import qualified Data.Map.Strict as M import qualified Data.Set as S -import Data.Text (pack, unpack, toLower) -import Text.Megaparsec (parseMaybe, runParser) +import Data.Text (pack, unpack, toLower, append) +import Text.Megaparsec + ( SourcePos ) import Conjure.Language.Expression.Op ( OpSlicing(..), @@ -36,21 +37,54 @@ import Conjure.Language.Expression.Op OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), ) import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) -import Control.Applicative (empty, Alternative) -import Conjure.Language.Attributes (lexemeToBinRel) - - -data ValidatorError - = TypeError String - | StateError String - | SyntaxError String - | RegionError String -- Add region - | TokenError LToken - | TaggedTokenError String LToken - | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere - | NotImplemented String - deriving (Show) +import Conjure.Language.AST.Reformer (Flattenable (flatten)) + + +data ErrorType + = TokenError LToken + | SyntaxError Text + | SemanticError Text + | CustomError Text + | InternalError --Used to explicitly tag invalid pattern matches + | InternalErrorS Text -- Used for giving detail to bug messages + deriving (Show,Eq,Ord) +data WarningType = UnclassifiedWarning Text deriving (Show,Eq,Ord) +data InfoType = UnclassifiedInfo Text deriving (Show,Eq,Ord) + + +data Diagnostic = Error ErrorType | Warning WarningType | Info InfoType + deriving (Show,Eq,Ord) + +data ValidatorDiagnostic = ValidatorDiagnostic DiagnosticRegion Diagnostic + deriving Show + +isError :: ValidatorDiagnostic -> Bool +isError (ValidatorDiagnostic _ (Error _)) = True +isError _ = False + +-- data ValidatorDiagnostic +-- = TypeError String +-- | StateError String +-- | SyntaxError String +-- | RegionError String -- Add region +-- | TokenError LToken +-- | TaggedTokenError String LToken +-- | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere +-- | NotImplemented String +-- deriving (Show) + + +data ValidatorState = ValidatorState { + symbolTable :: SymbolTable, + currentContext :: DiagnosticRegion +} + deriving Show +instance Default ValidatorState where + def = ValidatorState { + symbolTable=SymbolTable[], + currentContext=GlobalRegion + } data SymbolTable = SymbolTable [(Text,String)] deriving (Show) @@ -59,17 +93,32 @@ newtype ValidatorT r w a = ValidatorT (MaybeT (StateT r (Writer [w])) a) --synonym wrapped in maybe to allow errors to propagate -type Validator a = ValidatorT SymbolTable ValidatorError (Maybe a) +type Validator a = ValidatorT ValidatorState ValidatorDiagnostic (Maybe a) --Non maybe version used in outward facing applications/ lists -type ValidatorS a = ValidatorT SymbolTable ValidatorError a +type ValidatorS a = ValidatorT ValidatorState ValidatorDiagnostic a addEnumDefns :: [Text] -> SymbolTable -> SymbolTable addEnumDefns names (SymbolTable enums) = SymbolTable $ enums ++ map (\m -> (m,"Enum")) names +modifySymbolTable :: (SymbolTable -> SymbolTable) -> ValidatorS () +modifySymbolTable f = modify (\x -> x{symbolTable=f.symbolTable $ x}) + +getSymbolTable :: ValidatorS SymbolTable +getSymbolTable = symbolTable <$> get + +getContext :: ValidatorS DiagnosticRegion +getContext = currentContext <$> get + +setContext :: DiagnosticRegion -> ValidatorS () +setContext r = modify (\p -> p{currentContext = r}) + +setContextFrom :: Flattenable ETok a => a -> ValidatorS () +setContextFrom = setContext.getRegion + lookupSymbol :: Text -> ValidatorS (Maybe String) lookupSymbol name = do - SymbolTable a <- get + SymbolTable a <- getSymbolTable return $ lookup name a strict :: Validator a -> ValidatorS a @@ -80,42 +129,6 @@ deState ((a,_),n) = (a,n) runValidator :: (ValidatorT r w a) -> r -> ((Maybe a),[w]) runValidator (ValidatorT r) d = deState $ runWriter (runStateT (runMaybeT r) d) --- data Validator a = Validator --- { value :: Maybe a --- , errors :: [ValidatorError] --- } --- deriving (Show) - -data Foo = Foo Int Int Int - deriving (Show) - --- instance Functor Validator where --- fmap :: (a -> b) -> Validator a -> Validator b --- fmap fab (Validator m_a ves) = --- Validator --- { value = case m_a of --- Nothing -> Nothing --- (Just a) -> Just $ fab a --- , errors = ves --- } - --- instance Applicative Validator where --- pure :: a -> Validator a --- pure x = Validator (Just x) [] --- (<*>) :: Validator (a -> b) -> Validator a -> Validator b --- (Validator Nothing es) <*> (Validator _ e2s) = Validator Nothing (es ++ e2s) --- (Validator (Just f) es) <*> (Validator a e2s) = Validator val (es ++ e2s) --- where --- val = case a of --- Just a' -> Just $ f a' --- Nothing -> Nothing - --- instance Monad Validator where --- (>>=) :: Validator a -> (a -> Validator b) -> Validator b --- (Validator Nothing ves) >>= _ = --- Validator{value = Nothing, errors = ves} --- (Validator (Just n) ves) >>= f = --- let r = f n in r{errors = ves ++ errors r} validateModelS :: ProgramTree -> ValidatorS Model @@ -143,7 +156,7 @@ validateLanguageVersion (Just (LangVersionNode l1 n v)) = do let NameNode nt = n checkSymbols [l1] name <- validateIdentifier n - unless (maybe False isValidLanguageName name) (raiseError $ IllegalToken nt) + unless (maybe False isValidLanguageName name) (raiseError $ n SyntaxError "Not a valid language name") nums <- validateSequence getNum v return . pure $ LanguageVersion @@ -155,7 +168,7 @@ validateLanguageVersion (Just (LangVersionNode l1 n v)) = do c' <- validateSymbol c case c' of Just (LIntLiteral x) -> return . pure $ fromInteger x - _ -> invalid $ TokenError c + _ -> invalid $ c InternalError validateStatement :: StatementNode -> Validator [Statement] @@ -165,7 +178,7 @@ validateStatement (SuchThatStatement stsn) = validateSuchThatStatement stsn validateStatement (WhereStatement wsn) = validateWhereStatement wsn validateStatement (ObjectiveStatement osn) = validateObjectiveStatement osn validateStatement (HeuristicStatement lt exp) = validateHeuristicStatement lt exp -validateStatement (UnexpectedToken lt) = invalid $ TokenError lt +validateStatement (UnexpectedToken lt) = invalid $ lt CustomError "Unexpected" --TODO address as part of skip token refactor validateHeuristicStatement :: LToken -> ExpressionNode -> Validator [Statement] validateHeuristicStatement lt exp = do @@ -175,7 +188,7 @@ validateHeuristicStatement lt exp = do IdentifierNode nn -> do x <- validateName nn return $ sequence [SearchHeuristic <$> x] - _ -> invalid $ StateError "Only identifiers are allowed as heuristics" + _ -> invalid $ exp SemanticError "Only identifiers are allowed as heuristics" validateWhereStatement :: WhereStatementNode -> Validator [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do @@ -236,7 +249,7 @@ validateGiven (GivenEnumNode se l1 l2 l3) = do checkSymbols [l1, l2, l3] names <- validateNameList se - modify $ addEnumDefns [ n | Name n <-names] + modifySymbolTable $ addEnumDefns [ n | Name n <-names] return . pure $ [GivenDomainDefnEnum n | n <- names] validateLetting :: LettingStatementNode -> Validator [Declaration] @@ -257,7 +270,7 @@ validateLettingAssignment names (LettingDomain lt dn) = do validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do checkSymbols [l1, l2, l3] members <- validateList validateName enames - modify $ addEnumDefns [ n | Name n <-names] + modifySymbolTable $ addEnumDefns [ n | Name n <-names] return . pure $ [LettingDomainDefnEnum n members| n <- names] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] @@ -286,7 +299,7 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do -- verify (Just a) = Validator{value = Just a, errors = []} -- verify Nothing = Validator{value = Nothing, errors = []} -invalid :: ValidatorError -> Validator a +invalid :: ValidatorDiagnostic -> Validator a invalid err = do raiseError err return Nothing @@ -296,13 +309,13 @@ invalid err = do -- rg = case g of -- (Validator x es) -> show (x, es) --- type Checker a = State [ValidatorError] (Maybe a) +-- type Checker a = State [ValidatorDiagnostic] (Maybe a) validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of RealToken et -> return . pure $ lexeme et - _ -> invalid $ TokenError s + _ -> invalid $ ValidatorDiagnostic (getTokenRegion s) $ Error $ TokenError s -- [MissingTokenError ] @@ -341,7 +354,7 @@ validateDomain dm = case dm of SequenceDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSequenceDomain attrs dom RelationDomainNode l1 attrs l2 doms -> checkSymbols [l1, l2] >> validateRelationDomain attrs doms PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validatePartitionDomain attrs dom - MissingDomainNode lt -> invalid $ TokenError lt + MissingDomainNode lt -> invalid $ lt TokenError lt where validateRangedInt :: Maybe (ListNode RangeNode) -> DomainValidator validateRangedInt (Just ranges) = do @@ -357,11 +370,11 @@ validateDomain dm = case dm of a <- lookupSymbol name' case a of Just "Enum" ->return . pure $ DomainEnum (Name name') ranges' Nothing - Just t -> invalid $ StateError $ "Unknown type :" ++ t + Just t -> invalid $ name InternalError -- $ "Unknown type :" ++ t Nothing -> case ranges' of Nothing -> return . pure $ DomainReference (Name name') Nothing Just _ -> do - raiseError (StateError "range not supported on non enum ranges") + raiseError ( name SemanticError "range not supported on non enum ranges") return . pure $ DomainReference (Name name') Nothing validateTupleDomain :: ListNode DomainNode -> DomainValidator @@ -434,8 +447,8 @@ validateIndexedByNode :: Maybe IndexedByNode -> ValidatorS () validateIndexedByNode Nothing = return () validateIndexedByNode (Just (IndexedByNode a b)) = checkSymbols [a,b] -todo :: String -> Validator a -todo s = invalid $ NotImplemented s +todo :: Text -> Validator a +todo s = invalid $ ValidatorDiagnostic GlobalRegion $ Error $ InternalErrorS (append "Not Implemented: " s) validateSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) validateSizeAttributes attrs = do @@ -447,7 +460,7 @@ validateSizeAttributes attrs = do [(L_minSize, Just a)] -> return $ Just (SizeAttr_MinSize a) [(L_maxSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> do invalid $ RegionError $ "Incompatible attributes size:" ++ show as + as -> contextError $ SemanticError $ pack $ "Incompatible attributes size:" ++ show as validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) validatePartSizeAttributes attrs = do @@ -459,7 +472,7 @@ validatePartSizeAttributes attrs = do [(L_minPartSize, Just a)] -> return $ Just (SizeAttr_MinSize a) [(L_maxPartSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> do invalid $ RegionError $ "Incompatible attributes partitionSize :" ++ show as + as -> contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as validateNumPartAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) validateNumPartAttributes attrs = do @@ -471,7 +484,7 @@ validateNumPartAttributes attrs = do [(L_minNumParts, Just a)] -> return $ Just (SizeAttr_MinSize a) [(L_maxNumParts, Just a)] -> return $ Just (SizeAttr_MaxSize a) [(L_minNumParts, Just a),(L_maxNumParts, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> do invalid $ RegionError $ "Incompatible attributes partitionSize :" ++ show as + as -> contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> Validator JectivityAttr @@ -484,13 +497,14 @@ validateJectivityAttributes attrs = do [(L_surjective, _)] -> return $ Just JectivityAttr_Surjective [(L_bijective, _)] -> return $ Just JectivityAttr_Bijective [(L_injective, _),(L_surjective, _)] -> do - info "Inj and Sur can be combined to bijective" + contextInfo $ UnclassifiedInfo "Inj and Sur can be combined to bijective" return $ Just JectivityAttr_Bijective - as -> do invalid $ RegionError $ "Incompatible attributes jectivity" ++ show as + as -> contextError $ SemanticError $ pack $ "Incompatible attributes jectivity" ++ show as validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) validateSetAttributes atts = do + setContextFrom atts attrs <- validateList (validateAttributeNode setValidAttrs) atts size <- validateSizeAttributes attrs return $ SetAttr <$> size @@ -498,6 +512,7 @@ validateSetAttributes atts = do validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) validateMSetAttributes atts = do + setContextFrom atts attrs <- validateList (validateAttributeNode msetValidAttrs) atts size <- validateSizeAttributes attrs occurs <- validateOccursAttrs attrs @@ -511,7 +526,7 @@ validateMSetAttributes atts = do [(L_minOccur,Just a)] -> return $ Just (OccurAttr_MinOccur a) [(L_maxOccur, Just a)] -> return $ Just (OccurAttr_MaxOccur a) [(L_minOccur, Just a),(L_maxOccur, Just b)] -> return $ Just (OccurAttr_MinMaxOccur a b) - as -> invalid $ StateError $ "Bad args to occurs" ++ show as + as -> contextError $ SemanticError $ pack $ "Bad args to occurs" ++ show as validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) @@ -532,6 +547,7 @@ validateSeqAttributes atts = do validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr Expression) validateRelationAttributes atts = do + setContextFrom atts attrs <- validateList (validateAttributeNode relAttrs) atts size <- validateSizeAttributes attrs others <- validateArray validateBinaryRel (filter (\x -> fst x `elem` map fst binRelAttrs) attrs) @@ -541,7 +557,7 @@ validateRelationAttributes atts = do validateBinaryRel (l,_) = do case lexemeToBinRel l of Just b -> return . pure $ b - Nothing -> invalid $ StateError $ "Not found (bin rel) " ++ show l + Nothing ->contextError $ InternalErrorS $ pack $ "Not found (bin rel) " ++ show l validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) validatePartitionAttributes atts = do @@ -556,16 +572,16 @@ validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,M validateAttributeNode vs (NamedAttributeNode t Nothing) = do Just name <- validateSymbol t case M.lookup name vs of - Nothing -> invalid $ TokenError t - Just True -> invalid $ RegionError "Argument required" + Nothing -> invalid $ t CustomError "Not a valid attribute in this context" + Just True -> invalid $ t CustomError "Argument required" Just False -> return . pure $ (name , Nothing) validateAttributeNode vs (NamedAttributeNode t (Just e)) = do expr <- validateExpression e Just name <- validateSymbol t case M.lookup name vs of - Nothing -> invalid $ TaggedTokenError "Not a valid attr " t - Just False -> invalid $ RegionError "name: does not take an argument" + Nothing -> invalid $ t CustomError "Not a valid attribute in this context" + Just False -> invalid $ t SemanticError "attribute %name% does not take an argument" Just True -> return $(\x -> (name,Just x)) <$> expr @@ -574,15 +590,15 @@ validateNamedDomainInVariant (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of Nothing -> return . pure $ DomainInt TagInt [RangeSingle 0] - Just (l,d) -> checkSymbols [l] >> validateDomain d + Just (l,d) -> checkSymbols [l] >> validateDomain d return $ (,) <$> name' <*> domain' validateNamedDomainInRecord :: NamedDomainNode -> Validator (Name, Domain () Expression) validateNamedDomainInRecord (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of - Nothing -> invalid $ StateError "Dataless not allowed in record" - Just (l,d) -> checkSymbols [l] >> validateDomain d + Nothing -> invalid $ name SemanticError "Dataless not allowed in record" + Just (l,d) -> checkSymbols [l] >> validateDomain d return $ (,) <$> name' <*> domain' validateRange :: RangeNode -> Validator (Range Expression) @@ -620,7 +636,7 @@ validateExpression expr = case expr of FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs SpecialCase scn -> validateSpecialCase scn - MissingExpressionNode lt -> invalid $ TokenError lt + MissingExpressionNode lt -> invalid $ lt TokenError lt validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> Validator Expression validateAttributeAsConstraint l1 exprs = do @@ -631,10 +647,10 @@ validateAttributeAsConstraint l1 exprs = do let n = lookup (Name (lexemeText lx)) allSupportedAttributes case (n,es) of (Just 1 , [e,v]) -> return . pure $ aacBuilder e lx (Just v) - (Just 1 , _) -> invalid $ StateError $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es) + (Just 1 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es)) (Just 0 , [e]) -> return . pure $ aacBuilder e lx Nothing - (Just 0 , _) -> invalid $ StateError $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es) - (_,_) -> invalid (IllegalToken l1) + (Just 0 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es)) + (_,_) -> invalid $ l1 InternalErrorS "Bad AAC" where aacBuilder e lx y= Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e (fromString (lexemeFace lx)) y @@ -710,7 +726,7 @@ validateMetaVar tok = do Just lx <- validateSymbol tok case lx of LMetaVar s -> return .pure $ unpack s - _ -> invalid $ IllegalToken tok + _ -> invalid $ tok InternalError validateDomainExpression :: DomainExpressionNode -> Validator Expression validateDomainExpression (DomainExpressionNode l1 dom l2) = do @@ -781,7 +797,7 @@ validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do Just dom' <- validateDomain dom let t = getType dom' case t of - Nothing -> invalid $ StateError $ "Some type bug with:" ++ show dom' + Nothing -> invalid $ dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) Just ty -> return . pure $ (\ex -> Typed ex ty) where getType :: Domain () Expression -> Maybe Type @@ -839,9 +855,9 @@ validateVariantLiteral :: ListNode RecordMemberNode -> Validator Expression validateVariantLiteral ln = do members <- validateList validateRecordMember ln case members of - [] -> invalid $ SyntaxError "Variants must contain exactly one member" + [] -> invalid $ ln SemanticError "Variants must contain exactly one member" [(n,x)]-> return . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n x - _:_ -> invalid $ SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected + _:_ -> invalid $ ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected @@ -936,7 +952,7 @@ enforceConstraint :: Maybe Bool -> String -> ValidatorS () enforceConstraint p msg = do case p of Just True-> return () - _ -> invalid (StateError msg) >> fail "" + _ -> void (contextError (CustomError $ pack msg)) @@ -944,14 +960,9 @@ checkSymbols :: [LToken] -> ValidatorS () checkSymbols = mapM_ validateSymbol --Raise a non structural error (i.e type error) -raiseError :: ValidatorError -> ValidatorS () +raiseError :: ValidatorDiagnostic -> ValidatorS () raiseError e = tell [e] -type ValidatorInfo = String ---todo warn and info -info :: ValidatorInfo -> ValidatorS () -info v = tell [RegionError $ "info : " ++ v] - validateShortTuple :: ShortTuple -> ValidatorS [Expression] @@ -965,7 +976,7 @@ validateIntLiteral t = do l <- validateSymbol t case l of Just (LIntLiteral x) -> return . pure $ ConstantInt TagInt x - _ -> invalid $ IllegalToken t + _ -> invalid $ t InternalError validateBoolLiteral :: LToken -> Validator Constant validateBoolLiteral t = do @@ -973,8 +984,7 @@ validateBoolLiteral t = do case l of L_true -> return . pure $ ConstantBool True L_false -> return . pure $ ConstantBool False - _ -> invalid $ IllegalToken t - + _ -> invalid $ t InternalError validateNameList :: Sequence NameNode -> ValidatorS [Name] validateNameList = validateSequence validateName @@ -986,8 +996,8 @@ validateIdentifier (NameNode iden) = do _ -> return Nothing where checkName :: Text -> Validator Text - checkName "" = invalid $ StateError "Empty names not allowed" - checkName "\"\"" = invalid $ StateError "Empty names not allowed" + checkName "" = invalid $ iden SemanticError "Empty names not allowed" + checkName "\"\"" = invalid $ iden SemanticError "Empty names not allowed" checkName x = return . pure $ x validateName :: NameNode -> Validator Name @@ -1015,33 +1025,66 @@ validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator b validateSequenceElem f (SeqElem i (Just x)) = validateSymbol x >> f i validateSequenceElem f (SeqElem i Nothing) = f i -validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid (TokenError plc) +validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( plc TokenError plc) validateExprList :: ListNode ExpressionNode -> ValidatorS [Expression] validateExprList = validateList validateExpression -val :: String -> IO () -val s = do - let str = s - let other = [ETok (0, 0, 0, sourcePos0) [] L_EOF ""] - let txt = pack str - let lexed = parseMaybe eLex txt - let stream = ETokenStream txt $ fromMaybe other lexed - -- parseTest parseProgram stream - let progStruct = runParser parseProgram "TEST" stream - - case progStruct of - Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (SymbolTable []) in - putStrLn $ show qpr - - -valFile :: String -> IO () -valFile p = do - path <- readFileIfExists p - case path of - Nothing -> putStrLn "NO such file" - Just s -> val s + + +data DiagnosticRegion = DiagnosticRegion { + drSourcePos::SourcePos, + drOffset :: Int, + drLength :: Int +} | GlobalRegion + deriving Show +getTokenRegion :: LToken -> DiagnosticRegion +getTokenRegion a = do + let h =case a of + RealToken et -> et + MissingToken et -> et + SkippedToken et -> et + let start = tokenSourcePos h + let offset = tokenStart h + let tLength =case a of + RealToken _ -> totalLength h + MissingToken _ -> 1 + SkippedToken _ -> totalLength h + DiagnosticRegion start offset tLength + +getRegion :: Flattenable ETok a => a -> DiagnosticRegion +getRegion a = case range of + [] -> GlobalRegion + (h:_) -> do + let start = tokenSourcePos h + let offset = tokenStart h + let tLength = sum (map totalLength range) + DiagnosticRegion start offset tLength + where range :: [ETok] = flatten a + + + +() :: Flattenable ETok a => a -> ErrorType -> ValidatorDiagnostic +t e = ValidatorDiagnostic (getRegion t) $ Error e + +() :: Flattenable ETok a => a -> WarningType -> ValidatorDiagnostic +t e = ValidatorDiagnostic (getRegion t) $ Warning e + +() :: Flattenable ETok a => a -> InfoType -> ValidatorDiagnostic +t e = ValidatorDiagnostic (getRegion t) $ Info e + +() :: Flattenable ETok a => Maybe a -> ErrorType -> ValidatorDiagnostic +Nothing e = ValidatorDiagnostic GlobalRegion $ Error e +Just t e = t e + +contextError :: ErrorType -> Validator a +contextError e = do + q <- getContext + invalid $ ValidatorDiagnostic q $ Error e + +contextInfo :: InfoType -> ValidatorS () +contextInfo e = do + q <- getContext + tell $ [ValidatorDiagnostic q $ Info e] return () --- putStrLn validateFind \ No newline at end of file diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs new file mode 100644 index 0000000000..953d9f4012 --- /dev/null +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -0,0 +1,94 @@ +{-# LANGUAGE InstanceSigs #-} +module Conjure.UI.ErrorDisplay where +import Conjure.Prelude +import Conjure.Language.Validator +import Text.Megaparsec +import Data.Void (Void) +import qualified Data.Set as Set +import Conjure.Language.AST.Syntax +import Conjure.Language.AST.ASTParser +import Conjure.Language.NewLexer +import Conjure.Language.Lexemes +import qualified Data.Text +import qualified Data.Text as T + + + +type Parser t = Parsec DiagnosticForPrint Text t + +data DiagnosticForPrint = DiagnosticForPrint { + dStart :: Int, + dLength :: Int, + dMessage :: Diagnostic +} deriving (Show,Eq,Ord) + +instance ShowErrorComponent DiagnosticForPrint where + errorComponentLen :: DiagnosticForPrint -> Int + errorComponentLen (DiagnosticForPrint {dLength=l}) = l + + showErrorComponent :: DiagnosticForPrint -> String + showErrorComponent DiagnosticForPrint {dMessage=message}= case message of + Error et -> displayError et + Warning wt -> "Warning:" ++ show wt + Info it -> "Info: " ++ show it + +displayError :: ErrorType -> String +displayError x = case x of + TokenError lt -> "Error: " ++ show lt + SyntaxError txt -> "Syntax Error: " ++ T.unpack txt + SemanticError txt -> "Semantic error: " ++ T.unpack txt + CustomError txt -> "Error: " ++ T.unpack txt + InternalError -> "Pattern match failiure" + InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt + +showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Text -> String +showDiagnosticsForConsole errs text + = case runParser (captureErrors errs) "Errors" text of + Left peb -> errorBundlePretty peb + Right _ -> "No printable errors from :" ++ (show . length $ errs) + + +captureErrors :: [ValidatorDiagnostic] -> Parser () +captureErrors = mapM_ captureError + +captureError :: ValidatorDiagnostic -> Parser () +captureError (ValidatorDiagnostic GlobalRegion message) = do + let printError = DiagnosticForPrint 4 4 message + registerFancyFailure (Set.singleton(ErrorCustom printError) ) +captureError (ValidatorDiagnostic area message) = do + setOffset $ drOffset area + let printError = DiagnosticForPrint (drOffset area) (drLength area) message + registerFancyFailure (Set.singleton(ErrorCustom printError) ) + + + +val :: String -> IO () +val s = do + let str = s + let other = [ETok (0, 0, 0, sourcePos0) [] L_EOF ""] + let txt = Data.Text.pack str + let lexed = parseMaybe eLex txt + let stream = ETokenStream txt $ fromMaybe other lexed + -- parseTest parseProgram stream + let progStruct = runParser parseProgram "TEST" stream + + case progStruct of + Left _ -> putStrLn "error" + Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) def in + case qpr of + (model, vds) -> do + print (maybe "" show model) + putStrLn $ showDiagnosticsForConsole vds txt + + + -- putStrLn $ show qpr + + +valFile :: String -> IO () +valFile p = do + path <- readFileIfExists p + case path of + Nothing -> putStrLn "NO such file" + Just s -> val s + return () +-- putStrLn validateFind From d14c5b0fedfe2fb30606d6cd90399367db014db4 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 8 Nov 2022 17:23:42 +0000 Subject: [PATCH 089/378] Improving errors wrt console printing --- src/Conjure/Language/AST/ASTParser.hs | 5 +- src/Conjure/Language/AST/Helpers.hs | 10 +- src/Conjure/Language/AST/Reformer.hs | 161 +++++++++++++------------- src/Conjure/Language/NewLexer.hs | 25 ++-- src/Conjure/Language/Validator.hs | 58 ++++++---- src/Conjure/UI/ErrorDisplay.hs | 8 +- 6 files changed, 142 insertions(+), 125 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 266c2b63fa..d035f6d1be 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -21,6 +21,7 @@ import Control.Monad.Combinators.Expr import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Language.Haskell.TH.PprLib (rparen) import Conjure.Language.Attributes (allAttributLexemes) +import Data.Sequence (Seq) data ParserError = ParserError deriving (Show) @@ -793,7 +794,7 @@ attributesAsLexemes xs = do example :: String -> IO () example s = do let str = s - let other = [ETok (0, 0, 0, SourcePos "" (mkPos 0) (mkPos 0)) [] L_EOF ""] + let other = [ETok ( Offsets 0 0 0 (initialPos "") ) [] L_EOF ""] let txt = pack str let lexed = parseMaybe eLex txt putStrLn "Lexmes" @@ -818,7 +819,7 @@ parsePrint text = do putStrLn "Lexer wasn't reversible" showDiff a b Right ets -> putStrLn "Lexer success" >> do - tree <- parseAndRevalidate (ETokenStream (pack text) ets) parseProgram (\v -> reformList (flatten v :: [ETok]) ) text + tree <- parseAndRevalidate (ETokenStream (pack text) ets) parseProgram (\v -> reformList (flatten v :: Seq ETok) ) text case tree of Left (a,b) -> do putStrLn "Parser wasn't reversible:" diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index d328301ab4..da93445e22 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -48,7 +48,7 @@ makeMissing :: Lexeme -> Parser LToken makeMissing l = do spos <- getSourcePos s <- getOffset - return (MissingToken (ETok (s, s, 0, spos) [] l "")) + return (MissingToken (ETok ( Offsets s s 0 spos) [] l "")) makeUnexpected :: Parser LToken makeUnexpected = SkippedToken <$> anySingle @@ -56,15 +56,15 @@ makeUnexpected = SkippedToken <$> anySingle -- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do - (ETok (s, ts, _, spos) t lex _ ) <- lookAhead anySingle + (ETok o t lex _ ) <- lookAhead anySingle case lex of (LIdentifier _) -> RealToken <$> anySingle - _ -> return $ MissingToken $ ETok (s, ts, 0, spos) t LMissingIdentifier "" + _ -> return $ MissingToken $ ETok o{oTLength=0} t LMissingIdentifier "" want a = do - (ETok (s, ts, _, spos) t lex _) <- lookAhead anySingle + (ETok o t lex _) <- lookAhead anySingle if lex == a then RealToken <$> anySingle - else return $ MissingToken $ ETok (s, ts, 0, spos) t a "" + else return $ MissingToken $ ETok o{oTLength=0} t a "" -- get a symbol from the stream with no fallback need :: Lexeme -> Parser LToken diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 3e1752516f..69dbae8f47 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -3,15 +3,20 @@ module Conjure.Language.AST.Reformer where import Conjure.Language.AST.Syntax import Conjure.Language.NewLexer (ETok (..)) import Conjure.Prelude +import Data.Sequence ((><)) +import qualified Data.Sequence as S + + + class Flattenable v a where - flatten :: Flattenable v a => a -> [v] + flatten :: Flattenable v a => a -> S.Seq v instance Flattenable ETok ProgramTree where - flatten (ProgramTree lv sts end) = flatten lv ++ concatMap flatten sts ++ flatten end + flatten (ProgramTree lv sts end) = mconcat [flatten lv , mconcat $ map flatten sts , flatten end] instance Flattenable ETok LangVersionNode where - flatten (LangVersionNode l1 l2 l3) = flatten l1 ++ flatten l2 ++ flatten l3 + flatten (LangVersionNode l1 l2 l3) = flatten l1 >< flatten l2 >< flatten l3 instance Flattenable ETok StatementNode where flatten x = case x of DeclarationStatement dsn -> flatten dsn @@ -19,48 +24,48 @@ instance Flattenable ETok StatementNode where SuchThatStatement stsn -> flatten stsn WhereStatement wsn -> flatten wsn ObjectiveStatement osn -> flatten osn - HeuristicStatement l1 ex -> flatten l1 ++ flatten ex + HeuristicStatement l1 ex -> flatten l1 >< flatten ex UnexpectedToken tok -> flatten tok instance Flattenable ETok DeclarationStatementNode where flatten x = case x of - FindStatement f fsn -> flatten f ++ flatten fsn - GivenStatement g gsn -> flatten g ++ flatten gsn - LettingStatement t lsn -> flatten t ++ flatten lsn + FindStatement f fsn -> flatten f >< flatten fsn + GivenStatement g gsn -> flatten g >< flatten gsn + LettingStatement t lsn -> flatten t >< flatten lsn instance Flattenable ETok LettingStatementNode where - flatten (LettingStatementNode a b c) = concat[ flatten a, flatten b, flatten c] + flatten (LettingStatementNode a b c) = mconcat[ flatten a, flatten b, flatten c] instance Flattenable ETok LettingAssignmentNode where flatten x = case x of LettingExpr d -> flatten d - LettingDomain d e -> flatten d ++ flatten e - LettingEnum d e f g -> concat [flatten d, flatten e, flatten f, flatten g] - LettingAnon d e f g h -> concat [flatten d, flatten e, flatten f, flatten g, flatten h] + LettingDomain d e -> flatten d >< flatten e + LettingEnum d e f g -> mconcat [flatten d, flatten e, flatten f, flatten g] + LettingAnon d e f g h -> mconcat [flatten d, flatten e, flatten f, flatten g, flatten h] instance Flattenable ETok FindStatementNode where - flatten (FindStatementNode a b c) = concat [flatten a, flatten b, flatten c] + flatten (FindStatementNode a b c) = mconcat [flatten a, flatten b, flatten c] instance Flattenable ETok GivenStatementNode where flatten x = case x of - GivenStatementNode a b c -> concat [flatten a, flatten b, flatten c] - GivenEnumNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + GivenStatementNode a b c -> mconcat [flatten a, flatten b, flatten c] + GivenEnumNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] instance Flattenable ETok BranchingStatementNode where - flatten (BranchingStatementNode lt lt' ln) = concat [flatten lt, flatten lt', flatten ln] + flatten (BranchingStatementNode lt lt' ln) = mconcat [flatten lt, flatten lt', flatten ln] instance Flattenable ETok SuchThatStatementNode where - flatten (SuchThatStatementNode l1 l2 l3) = flatten l1 ++ flatten l2 ++ flatten l3 + flatten (SuchThatStatementNode l1 l2 l3) = flatten l1 >< flatten l2 >< flatten l3 instance Flattenable ETok WhereStatementNode where - flatten (WhereStatementNode l1 l2) = flatten l1 ++ flatten l2 + flatten (WhereStatementNode l1 l2) = flatten l1 >< flatten l2 instance Flattenable ETok ObjectiveStatementNode where flatten x = case x of - ObjectiveMin lt en -> flatten lt ++ flatten en - ObjectiveMax lt en -> flatten lt ++ flatten en + ObjectiveMin lt en -> flatten lt >< flatten en + ObjectiveMax lt en -> flatten lt >< flatten en instance Flattenable ETok LToken where flatten x = case x of @@ -81,37 +86,37 @@ instance Flattenable ETok ExpressionNode where ParenExpression pen ->flatten pen AbsExpression pen -> flatten pen DomainExpression dex -> flatten dex - FunctionalApplicationNode lt ln -> flatten lt ++ flatten ln + FunctionalApplicationNode lt ln -> flatten lt >< flatten ln SpecialCase nd -> flatten nd - AttributeAsConstriant l1 exprs -> flatten l1 ++ flatten exprs - MissingExpressionNode _ -> [] + AttributeAsConstriant l1 exprs -> flatten l1 >< flatten exprs + MissingExpressionNode e -> flatten e instance Flattenable ETok SpecialCaseNode where flatten x = case x of - ExprWithDecls l1 en l2 sns l3 -> concat [flatten l1,flatten en,flatten l2, flatten l2, flatten sns , flatten l3] + ExprWithDecls l1 en l2 sns l3 -> mconcat [flatten l1,flatten en,flatten l2, flatten l2, flatten sns , flatten l3] instance Flattenable ETok DomainExpressionNode where - flatten (DomainExpressionNode a b c) = flatten a ++ flatten b ++ flatten c + flatten (DomainExpressionNode a b c) = flatten a >< flatten b >< flatten c instance Flattenable ETok QuantificationExpressionNode where - flatten (QuantificationExpressionNode a b c d e f) = concat [ + flatten (QuantificationExpressionNode a b c d e f) = mconcat [ flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] instance Flattenable ETok QuantificationOverNode where flatten x = case x of - QuantifiedSubsetOfNode a b -> flatten a ++ flatten b - QuantifiedMemberOfNode a b -> flatten a ++ flatten b + QuantifiedSubsetOfNode a b -> flatten a >< flatten b + QuantifiedMemberOfNode a b -> flatten a >< flatten b QuantifiedDomainNode a -> flatten a instance Flattenable ETok OverDomainNode where - flatten (OverDomainNode a b) = flatten a ++ flatten b + flatten (OverDomainNode a b) = flatten a >< flatten b instance Flattenable ETok QuanticationGuard where - flatten (QuanticationGuard a b ) = flatten a ++ flatten b + flatten (QuanticationGuard a b ) = flatten a >< flatten b instance Flattenable ETok AbstractPatternNode where flatten x = case x of AbstractIdentifier nn -> flatten nn AbstractMetaVar lt -> flatten lt - AbstractPatternTuple a b -> flatten a ++ flatten b + AbstractPatternTuple a b -> flatten a >< flatten b AbstractPatternMatrix ln -> flatten ln AbstractPatternSet ln -> flatten ln instance Flattenable ETok QuantificationPattern where @@ -124,14 +129,14 @@ instance Flattenable ETok LiteralNode where MatrixLiteral mln -> flatten mln TupleLiteralNode lt -> flatten lt TupleLiteralNodeShort st -> flatten st - RecordLiteral lt ln -> flatten lt ++ flatten ln - VariantLiteral lt ln -> flatten lt ++ flatten ln + RecordLiteral lt ln -> flatten lt >< flatten ln + VariantLiteral lt ln -> flatten lt >< flatten ln SetLiteral ln -> flatten ln - MSetLiteral lt ln -> flatten lt ++ flatten ln - FunctionLiteral lt ln -> flatten lt ++ flatten ln - SequenceLiteral lt ln -> flatten lt ++ flatten ln - RelationLiteral lt ln -> flatten lt ++ flatten ln - PartitionLiteral lt ln -> flatten lt ++ flatten ln + MSetLiteral lt ln -> flatten lt >< flatten ln + FunctionLiteral lt ln -> flatten lt >< flatten ln + SequenceLiteral lt ln -> flatten lt >< flatten ln + RelationLiteral lt ln -> flatten lt >< flatten ln + PartitionLiteral lt ln -> flatten lt >< flatten ln instance Flattenable ETok PartitionElemNode where flatten (PartitionElemNode ln) = flatten ln @@ -142,18 +147,18 @@ instance Flattenable ETok RelationElemNode where RelationElemNodeShort st -> flatten st instance Flattenable ETok ArrowPairNode where - flatten (ArrowPairNode a b c) = concat [flatten a, flatten b, flatten c] + flatten (ArrowPairNode a b c) = mconcat [flatten a, flatten b, flatten c] instance Flattenable ETok RecordMemberNode where - flatten (RecordMemberNode nn lt en) = concat [flatten nn, flatten lt, flatten en] + flatten (RecordMemberNode nn lt en) = mconcat [flatten nn, flatten lt, flatten en] instance Flattenable ETok LongTuple where - flatten (LongTuple a b) = flatten a ++ flatten b + flatten (LongTuple a b) = flatten a >< flatten b instance Flattenable ETok ShortTuple where flatten (ShortTuple a) = flatten a instance Flattenable ETok MatrixLiteralNode where - flatten ( MatrixLiteralNode a b c d e) = concat + flatten ( MatrixLiteralNode a b c d e) = mconcat [ flatten a , flatten b , flatten c @@ -162,10 +167,10 @@ instance Flattenable ETok MatrixLiteralNode where ] instance Flattenable ETok ComprehensionNode where - flatten (ComprehensionNode a b) = flatten a ++ flatten b + flatten (ComprehensionNode a b) = flatten a >< flatten b instance Flattenable ETok ComprehensionExpressionNode where flatten (ComprehensionExpressionNode a b c d e) = - concat + mconcat [ flatten a , flatten b , flatten c @@ -176,86 +181,86 @@ instance Flattenable ETok ComprehensionExpressionNode where instance Flattenable ETok ComprehensionBodyNode where flatten x = case x of CompBodyCondition en -> flatten en - CompBodyDomain a b c -> flatten a ++ flatten b ++ flatten c - CompBodyGenExpr a b c -> flatten a ++ flatten b ++ flatten c - CompBodyLettingNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] + CompBodyDomain a b c -> flatten a >< flatten b >< flatten c + CompBodyGenExpr a b c -> flatten a >< flatten b >< flatten c + CompBodyLettingNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] instance Flattenable ETok OperatorExpressionNode where flatten x = case x of - PostfixOpNode en pon -> flatten en ++ flatten pon - PrefixOpNode lt en -> flatten lt ++ flatten en - BinaryOpNode en lt en' -> concat [flatten en, flatten lt, flatten en'] + PostfixOpNode en pon -> flatten en >< flatten pon + PrefixOpNode lt en -> flatten lt >< flatten en + BinaryOpNode en lt en' -> mconcat [flatten en, flatten lt, flatten en'] instance Flattenable ETok PostfixOpNode where flatten x = case x of IndexedNode l -> flatten l OpFactorial lt -> flatten lt ApplicationNode ln -> flatten ln - ExplicitDomain l1 l2 dom l3 -> concat [flatten l1,flatten l2,flatten dom,flatten l3] + ExplicitDomain l1 l2 dom l3 -> mconcat [flatten l1,flatten l2,flatten dom,flatten l3] instance Flattenable ETok DomainNode where flatten x = case x of BoolDomainNode lt -> flatten lt - RangedIntDomainNode lt ln -> flatten lt ++ flatten ln + RangedIntDomainNode lt ln -> flatten lt >< flatten ln MetaVarDomain a -> flatten a - RangedEnumNode nn ln -> flatten nn ++ flatten ln + RangedEnumNode nn ln -> flatten nn >< flatten ln -- EnumDomainNode nn -> flatten nn ShortTupleDomainNode ln -> flatten ln - TupleDomainNode lt ln -> flatten lt ++ flatten ln - RecordDomainNode lt ln -> flatten lt ++ flatten ln - VariantDomainNode lt ln -> flatten lt ++ flatten ln - MatrixDomainNode a m_ib b c d -> concat [flatten a, flatten m_ib, flatten b, flatten c, flatten d] - SetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - MSetDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - FunctionDomainNode a b c d e -> concat [flatten a, flatten b, flatten c, flatten d, flatten e] - SequenceDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - RelationDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - PartitionDomainNode a b c d -> concat [flatten a, flatten b, flatten c, flatten d] - MissingDomainNode _ -> [] + TupleDomainNode lt ln -> flatten lt >< flatten ln + RecordDomainNode lt ln -> flatten lt >< flatten ln + VariantDomainNode lt ln -> flatten lt >< flatten ln + MatrixDomainNode a m_ib b c d -> mconcat [flatten a, flatten m_ib, flatten b, flatten c, flatten d] + SetDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] + MSetDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] + FunctionDomainNode a b c d e -> mconcat [flatten a, flatten b, flatten c, flatten d, flatten e] + SequenceDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] + RelationDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] + PartitionDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] + MissingDomainNode m -> flatten m instance Flattenable ETok IndexedByNode where - flatten (IndexedByNode a b ) = flatten a ++ flatten b + flatten (IndexedByNode a b ) = flatten a >< flatten b instance (Flattenable ETok a) => Flattenable ETok (Maybe a) where flatten (Just x) = flatten x - flatten Nothing = [] + flatten Nothing = S.empty instance Flattenable ETok AttributeNode where flatten x = case x of - NamedAttributeNode nn m_e -> flatten nn ++ flatten m_e - -- NamedExpressionAttribute nn en -> flatten nn ++ flatten en + NamedAttributeNode nn m_e -> flatten nn >< flatten m_e + -- NamedExpressionAttribute nn en -> flatten nn >< flatten en instance Flattenable ETok RangeNode where flatten x = case x of SingleRangeNode en -> flatten en OpenRangeNode ddn -> flatten ddn - RightUnboundedRangeNode en ddn -> flatten en ++ flatten ddn - LeftUnboundedRangeNode ddn en -> flatten ddn ++ flatten en - BoundedRangeNode en ddn en' -> concat [flatten en, flatten ddn, flatten en'] + RightUnboundedRangeNode en ddn -> flatten en >< flatten ddn + LeftUnboundedRangeNode ddn en -> flatten ddn >< flatten en + BoundedRangeNode en ddn en' -> mconcat [flatten en, flatten ddn, flatten en'] -- instance Flattenable ETok DoubleDotNode where --- flatten (DoubleDotNode a b) = flatten a ++ flatten b +-- flatten (DoubleDotNode a b) = flatten a >< flatten b instance Flattenable ETok NamedDomainNode where flatten (NameDomainNode a Nothing) = flatten a - flatten (NameDomainNode a (Just (b,c))) = concat [flatten a,flatten b,flatten c] + flatten (NameDomainNode a (Just (b,c))) = mconcat [flatten a,flatten b,flatten c] instance Flattenable ETok NameNode where flatten (NameNode n) = flatten n instance Flattenable ETok ParenExpressionNode where - flatten (ParenExpressionNode a b c) = flatten a ++ flatten b ++ flatten c + flatten (ParenExpressionNode a b c) = flatten a >< flatten b >< flatten c instance Flattenable ETok b => Flattenable ETok (ListNode b) where - flatten (ListNode l1 seq l2) = concat [flatten l1, flatten seq, flatten l2] + flatten (ListNode l1 seq l2) = mconcat [flatten l1, flatten seq, flatten l2] instance Flattenable ETok b => Flattenable ETok (Sequence b) where - flatten (Seq es) = concatMap flatten es + flatten (Seq es) = mconcat $ map flatten es instance Flattenable ETok b => Flattenable ETok (SeqElem b) where - flatten (SeqElem v s) = flatten v ++ flatten s - flatten (MissingSeqElem v s) = flatten v ++ flatten s + flatten (SeqElem v s) = flatten v >< flatten s + flatten (MissingSeqElem v s) = flatten v >< flatten s instance Flattenable ETok b => Flattenable ETok [b] where - flatten = concatMap flatten + flatten = mconcat . map flatten diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index b7c68a2220..3c38f4e846 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -19,6 +19,7 @@ import Text.Megaparsec.Char import Data.List (splitAt) import qualified Data.List.NonEmpty as NE import qualified Text.Megaparsec.Char.Lexer as L +import Data.Sequence (Seq) sourcePos0 :: SourcePos sourcePos0 = SourcePos "" (mkPos 0) (mkPos 0) @@ -35,7 +36,7 @@ instance Reformable ETok where LineComment txt -> T.unpack txt BlockComment txt -> T.unpack txt -reformList :: Reformable a => [a] -> String +reformList :: Reformable a => Seq a -> String reformList = concatMap reform emojis :: [Char] @@ -53,7 +54,8 @@ isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis -type Offsets = (Int, Int, Int, SourcePos) +data Offsets =Offsets {oStart::Int,oTrueStart :: Int,oTLength::Int,oSourcePos::SourcePos} + deriving (Show, Eq, Ord) type Lexer = Parsec Void T.Text -- type Lexer = Parsec Void T.Text ETokenStream @@ -71,15 +73,18 @@ data ETok = ETok totalLength :: ETok -> Int -totalLength (ETok{offsets = (_, _, l, _)}) = l +totalLength = oTLength . offsets + +trueLength :: ETok -> Int +trueLength (ETok{offsets = (Offsets o d l _)}) = max 0 (l + (o-d)) tokenStart :: ETok -> Int -tokenStart (ETok{offsets = (_, s, _, _)}) = s +tokenStart (ETok{offsets = (Offsets _ s _ _)}) = s tokenSourcePos :: ETok -> SourcePos -tokenSourcePos ETok{offsets=(_,_,_,s)} = s +tokenSourcePos = oSourcePos . offsets sourcePosAfter :: ETok -> SourcePos -sourcePosAfter ETok {offsets=(_,_,l,SourcePos a b (unPos->c))} = SourcePos a b (mkPos (c + l)) +sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok @@ -108,7 +113,7 @@ aToken = do spos <- getSourcePos (tok,cap) <- aLexeme tokenEnd <- getOffset - return $ makeToken (start, wse, tokenEnd - start, spos) whiteSpace tok cap + return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace tok cap pEOF :: Lexer ETok pEOF = do @@ -118,7 +123,7 @@ pEOF = do spos <- getSourcePos eof tokenEnd <- getOffset - return $ makeToken (start, wse, tokenEnd - start, spos) whiteSpace L_EOF "" + return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace L_EOF "" aLexeme :: Lexer (Lexeme,Text) @@ -242,9 +247,7 @@ buildStream xs = case NE.nonEmpty xs of instance VisualStream ETokenStream where showTokens p = concatMap reform - tokensLength p ls = sum $ len <$> ls - where - len ETok{offsets = (_, _, x, _)} = x + tokensLength p ls = sum $ oTLength . offsets <$> ls -- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 3b396a8c7e..716e8b094a 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -8,7 +8,7 @@ import Conjure.Language.AST.Syntax as S import Conjure.Language.Definition import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.NewLexer (ETok (ETok, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0, tokenSourcePos, totalLength, tokenStart) +import Conjure.Language.NewLexer (ETok (ETok, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0, tokenSourcePos, totalLength, tokenStart, trueLength) import Conjure.Language.Attributes import Conjure.Prelude @@ -23,7 +23,7 @@ import qualified Data.Set as S import Data.Text (pack, unpack, toLower, append) import Text.Megaparsec - ( SourcePos ) + ( SourcePos, mkPos ) import Conjure.Language.Expression.Op ( OpSlicing(..), @@ -38,6 +38,9 @@ import Conjure.Language.Expression.Op ) import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Conjure.Language.AST.Reformer (Flattenable (flatten)) +import Text.Megaparsec.Pos (SourcePos(..)) +import Text.Megaparsec (unPos) +import Data.Sequence (Seq (..), viewr, ViewR (..)) data ErrorType @@ -152,7 +155,8 @@ isValidLanguageName t = Data.Text.toLower t `elem` ["essence","essence'"] validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3] -validateLanguageVersion (Just (LangVersionNode l1 n v)) = do +validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do + setContextFrom lv let NameNode nt = n checkSymbols [l1] name <- validateIdentifier n @@ -315,7 +319,7 @@ validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of RealToken et -> return . pure $ lexeme et - _ -> invalid $ ValidatorDiagnostic (getTokenRegion s) $ Error $ TokenError s + _ -> invalid $ ValidatorDiagnostic (getRegion s) $ Error $ TokenError s -- [MissingTokenError ] @@ -1031,37 +1035,43 @@ validateExprList :: ListNode ExpressionNode -> ValidatorS [Expression] validateExprList = validateList validateExpression - +offsetPositionBy :: Int -> SourcePos -> SourcePos +offsetPositionBy amt sp@(SourcePos _ _ (unPos->r)) = sp {sourceColumn=mkPos (amt+r) } data DiagnosticRegion = DiagnosticRegion { drSourcePos::SourcePos, + drEndPos :: SourcePos, drOffset :: Int, drLength :: Int } | GlobalRegion deriving Show -getTokenRegion :: LToken -> DiagnosticRegion -getTokenRegion a = do - let h =case a of - RealToken et -> et - MissingToken et -> et - SkippedToken et -> et - let start = tokenSourcePos h - let offset = tokenStart h - let tLength =case a of - RealToken _ -> totalLength h - MissingToken _ -> 1 - SkippedToken _ -> totalLength h - DiagnosticRegion start offset tLength +-- getTokenRegion :: LToken -> DiagnosticRegion +-- getTokenRegion a = do +-- let h =case a of +-- RealToken et -> et +-- MissingToken et -> et +-- SkippedToken et -> et +-- let start = tokenSourcePos h +-- let offset = tokenStart h +-- let tLength =case a of +-- RealToken _ -> trueLength h +-- MissingToken _ -> 1 +-- SkippedToken _ -> trueLength h +-- DiagnosticRegion start (offsetPositionBy tLength start) offset tLength getRegion :: Flattenable ETok a => a -> DiagnosticRegion getRegion a = case range of - [] -> GlobalRegion - (h:_) -> do + (h :<| rst) -> do + let end =case viewr rst of + EmptyR -> h + _ :> et -> et let start = tokenSourcePos h let offset = tokenStart h - let tLength = sum (map totalLength range) - DiagnosticRegion start offset tLength - where range :: [ETok] = flatten a + let tLength = let some :|> last = range in sum (totalLength <$> some) + trueLength last --TODO Tidy up + let en = tokenSourcePos end + DiagnosticRegion start (offsetPositionBy (trueLength end) en) offset tLength + _ -> GlobalRegion + where range :: Seq ETok = flatten a @@ -1072,7 +1082,7 @@ t e = ValidatorDiagnostic (getRegion t) $ Error e t e = ValidatorDiagnostic (getRegion t) $ Warning e () :: Flattenable ETok a => a -> InfoType -> ValidatorDiagnostic -t e = ValidatorDiagnostic (getRegion t) $ Info e +t e = ValidatorDiagnostic (getRegion t) $ Info e () :: Flattenable ETok a => Maybe a -> ErrorType -> ValidatorDiagnostic Nothing e = ValidatorDiagnostic GlobalRegion $ Error e diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 953d9f4012..250372aab8 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -1,4 +1,3 @@ -{-# LANGUAGE InstanceSigs #-} module Conjure.UI.ErrorDisplay where import Conjure.Prelude import Conjure.Language.Validator @@ -23,10 +22,8 @@ data DiagnosticForPrint = DiagnosticForPrint { } deriving (Show,Eq,Ord) instance ShowErrorComponent DiagnosticForPrint where - errorComponentLen :: DiagnosticForPrint -> Int errorComponentLen (DiagnosticForPrint {dLength=l}) = l - showErrorComponent :: DiagnosticForPrint -> String showErrorComponent DiagnosticForPrint {dMessage=message}= case message of Error et -> displayError et Warning wt -> "Warning:" ++ show wt @@ -53,7 +50,7 @@ captureErrors = mapM_ captureError captureError :: ValidatorDiagnostic -> Parser () captureError (ValidatorDiagnostic GlobalRegion message) = do - let printError = DiagnosticForPrint 4 4 message + let printError = DiagnosticForPrint 0 0 message registerFancyFailure (Set.singleton(ErrorCustom printError) ) captureError (ValidatorDiagnostic area message) = do setOffset $ drOffset area @@ -65,7 +62,7 @@ captureError (ValidatorDiagnostic area message) = do val :: String -> IO () val s = do let str = s - let other = [ETok (0, 0, 0, sourcePos0) [] L_EOF ""] + let other = [] let txt = Data.Text.pack str let lexed = parseMaybe eLex txt let stream = ETokenStream txt $ fromMaybe other lexed @@ -78,6 +75,7 @@ val s = do case qpr of (model, vds) -> do print (maybe "" show model) + putStrLn $ show vds putStrLn $ showDiagnosticsForConsole vds txt From 9973e1c360de3863b84854ba8185f060b9be1c99 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 9 Nov 2022 13:15:06 +0000 Subject: [PATCH 090/378] Added groudwork for skipped tokens mid expression --- src/Conjure/Language/AST/ASTParser.hs | 18 +++++++++--------- src/Conjure/Language/AST/Helpers.hs | 12 ++++++------ src/Conjure/Language/AST/Reformer.hs | 2 +- src/Conjure/Language/AST/Syntax.hs | 5 +++-- src/Conjure/Language/Validator.hs | 5 +++-- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index d035f6d1be..bc04d44803 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -43,7 +43,7 @@ parseLangVersion :: Parser LangVersionNode parseLangVersion = do lLang <- need L_language lLName <- parseIdentifier - nums <- parseSequence L_Dot (RealToken <$> intLiteral) + nums <- parseSequence L_Dot (RealToken [] <$> intLiteral) return $ LangVersionNode lLang lLName nums @@ -169,8 +169,8 @@ parseObjectiveStatement = do s <- eSymbol L_minimising <|> eSymbol L_maximising e <- parseExpression return $ case s of - (ETok {lexeme=L_minimising}) -> ObjectiveMin (RealToken s) e - _ -> ObjectiveMax (RealToken s) e + (ETok {lexeme=L_minimising}) -> ObjectiveMin (RealToken [] s) e + _ -> ObjectiveMax (RealToken [] s) e "Objective Statement" @@ -178,7 +178,7 @@ pEnding :: Parser LToken pEnding = do t <- lookAhead anySingle case t of - ETok {lexeme=L_EOF} -> return $ RealToken t + ETok {lexeme=L_EOF} -> return $ RealToken [] t _ -> empty @@ -293,7 +293,7 @@ parseShortTupleLiteral = try $ do return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) parseIntLiteral :: Parser LiteralNode -parseIntLiteral = IntLiteral . RealToken <$> intLiteral +parseIntLiteral = IntLiteral . RealToken [] <$> intLiteral parseBoolLiteral :: Parser LiteralNode parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) @@ -476,9 +476,9 @@ parseFunction = try $ do guard $ argsHasNoLeadingTrivia args return $ FunctionalApplicationNode name args where - isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals + isOverloaded (RealToken _ ETok{lexeme=lex}) = lex `elem` overloadedFunctionals isOverloaded _ = False - argsHasNoLeadingTrivia (ListNode (RealToken ETok{trivia=[]}) y z) = True + argsHasNoLeadingTrivia (ListNode (RealToken [] ETok{trivia=[]}) y z) = True argsHasNoLeadingTrivia _ = False parseAttributeAsConstraint :: Parser ExpressionNode parseAttributeAsConstraint = do @@ -764,12 +764,12 @@ parseAttributes = try $ do (SeqElem (NamedAttributeNode x _) _) <- members,isNonIdentifier x ] isNonIdentifier :: LToken -> Bool - isNonIdentifier (RealToken ETok{lexeme=(LIdentifier _)}) = False + isNonIdentifier (RealToken _ ETok{lexeme=(LIdentifier _)}) = False isNonIdentifier _ = True parseAttribute :: Parser AttributeNode parseAttribute = do - name <- (choice (map need allAttributLexemes)) <|> RealToken <$> identifier + name <- (choice (map need allAttributLexemes)) <|> RealToken [] <$> identifier expr <- optional parseExpressionStrict return $ NamedAttributeNode name expr diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index da93445e22..7b36b2c31c 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -58,17 +58,17 @@ want :: Lexeme -> Parser LToken want (LIdentifier _) = do (ETok o t lex _ ) <- lookAhead anySingle case lex of - (LIdentifier _) -> RealToken <$> anySingle + (LIdentifier _) -> RealToken [] <$> anySingle _ -> return $ MissingToken $ ETok o{oTLength=0} t LMissingIdentifier "" want a = do (ETok o t lex _) <- lookAhead anySingle if lex == a - then RealToken <$> anySingle + then RealToken [] <$> anySingle else return $ MissingToken $ ETok o{oTLength=0} t a "" -- get a symbol from the stream with no fallback need :: Lexeme -> Parser LToken -need a = RealToken <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" +need a = RealToken [] <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" adjacent :: Parser a -> Parser a adjacent p = do @@ -82,11 +82,11 @@ parseIdentifier = do return $ NameNode x parseMetaVar :: Parser LToken -parseMetaVar = RealToken <$> metaVar +parseMetaVar = RealToken [] <$> metaVar parseIdentifierStrict :: Parser NameNode parseIdentifierStrict = do - NameNode . RealToken <$> identifier + NameNode . RealToken [] <$> identifier -- List helpers @@ -157,7 +157,7 @@ parseSequence divider pElem = do _ -> do Seq rest <- parseSequence divider pElem makeElem rest elem sep missingPlaceholder - + where makeElem rest el sep plc = do let newElem = case (el, isMissing sep) of diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 69dbae8f47..cccbb74601 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -69,7 +69,7 @@ instance Flattenable ETok ObjectiveStatementNode where instance Flattenable ETok LToken where flatten x = case x of - RealToken et -> flatten et + RealToken xs et -> flatten xs >< flatten et MissingToken et -> flatten et SkippedToken et -> flatten et diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index f545525380..3c34bdad48 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -9,7 +9,7 @@ import Conjure.Prelude data LToken - = RealToken ETok + = RealToken [ETok] ETok | MissingToken ETok | SkippedToken ETok deriving (Eq, Ord) @@ -19,7 +19,8 @@ instance Null LToken where isMissing _ = False instance Show LToken where - show (RealToken x) = show x + show (RealToken [] x) = show x + show (RealToken ss x) = "SKIPPED" ++ show ss ++ show x show (MissingToken x) = "MISSING[" ++ show x ++ "]" show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 716e8b094a..1e74df305b 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -318,7 +318,9 @@ invalid err = do validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of - RealToken et -> return . pure $ lexeme et + RealToken ss et -> do + checkSymbols (map SkippedToken ss) + return . pure $ lexeme et _ -> invalid $ ValidatorDiagnostic (getRegion s) $ Error $ TokenError s -- [MissingTokenError ] @@ -346,7 +348,6 @@ validateDomain dm = case dm of BoolDomainNode lt -> pure <$> (validateSymbol lt >> return DomainBool) RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges - -- EnumDomainNode nn -> validateNamedEnumDomain nn ShortTupleDomainNode lst -> validateTupleDomain lst TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom From d7076ea3121544c848147856e17f90ecb1c30a87 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 9 Nov 2022 14:48:13 +0000 Subject: [PATCH 091/378] Tidy up after rebase --- src/Conjure/Language/Domain.hs | 4 ++-- src/Conjure/Language/Parser.hs | 4 ++-- src/Conjure/Prelude.hs | 2 -- src/Conjure/Process/Boost.hs | 2 +- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Conjure/Language/Domain.hs b/src/Conjure/Language/Domain.hs index 77c7ab7af7..8b6c652c52 100644 --- a/src/Conjure/Language/Domain.hs +++ b/src/Conjure/Language/Domain.hs @@ -468,7 +468,7 @@ instance Pretty a => Pretty (SizeAttr a) where pretty (SizeAttr_MinMaxSize x y) = "minSize" <+> pretty x <> ", maxSize" <+> pretty y -getMaxFrom_SizeAttr :: MonadFail m => SizeAttr a -> m a +getMaxFrom_SizeAttr :: MonadFailDoc m => SizeAttr a -> m a getMaxFrom_SizeAttr (SizeAttr_Size n) = return n getMaxFrom_SizeAttr (SizeAttr_MaxSize n) = return n getMaxFrom_SizeAttr (SizeAttr_MinMaxSize _ n) = return n @@ -515,7 +515,7 @@ instance Pretty a => Pretty (OccurAttr a) where pretty (OccurAttr_MinMaxOccur x y) = "minOccur" <+> pretty x <> ", maxOccur" <+> pretty y -getMaxFrom_OccurAttr :: MonadFail m => OccurAttr a -> m a +getMaxFrom_OccurAttr :: MonadFailDoc m => OccurAttr a -> m a getMaxFrom_OccurAttr (OccurAttr_MaxOccur n) = return n getMaxFrom_OccurAttr (OccurAttr_MinMaxOccur _ n) = return n getMaxFrom_OccurAttr _ = failDoc "getMaxFrom_OccurAttr" diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 56bd8ce6b3..6036252fd4 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -100,7 +100,7 @@ parseModel = (parseProgram,V.strict . V.validateModel) parseIO :: MonadFailDoc m => Pipeline i a -> String -> m a parseIO p s = do case runPipeline p $ T.pack s of - Left err -> failDoc $ show errorBundlePretty err + Left err -> failDoc $ text $show err Right x -> return x @@ -999,7 +999,7 @@ parseExpr = (P.parseExpression,V.strict . V.validateExpression) runLexerAndParser :: Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of - Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ errorBundlePretty pe) + Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ show pe) Right a -> Right a -- ls <- runLexer inp -- case runParser p file ls of diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index b7767a7fbb..e0ec2419d9 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -423,8 +423,6 @@ instance MonadFail Gen where instance MonadFailDoc Gen where failDoc = Control.Monad.fail . show -instance MonadFailDoc (ParsecT l m) where - failDoc = Control.Monad.fail . show instance MonadFailDoc m => MonadFailDoc (Pipes.Proxy a b c d m) where failDoc = lift . failDoc diff --git a/src/Conjure/Process/Boost.hs b/src/Conjure/Process/Boost.hs index fcd325dcee..3e04090ade 100644 --- a/src/Conjure/Process/Boost.hs +++ b/src/Conjure/Process/Boost.hs @@ -214,7 +214,7 @@ refersTo (Reference n _) a = n `elem` namesFromAbstractPattern a refersTo _ _ = False -- | Get a single name from an abstract pattern. -nameFromAbstractPattern :: (MonadFail m) => AbstractPattern -> m Name +nameFromAbstractPattern :: (MonadFailDoc m) => AbstractPattern -> m Name nameFromAbstractPattern a = case namesFromAbstractPattern a of [n] -> pure n [] -> failDoc "[nameFromAbstractPattern] no names in abstract pattern" From ef8a3c444ae3ffa756fb1c4274632b103e04e734 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 9 Nov 2022 15:20:01 +0000 Subject: [PATCH 092/378] Print errors properly --- src/Conjure/Language/AST/ASTParser.hs | 5 +++-- src/Conjure/Language/Parser.hs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index bc04d44803..840bd88fd1 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -22,14 +22,15 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Language.Haskell.TH.PprLib (rparen) import Conjure.Language.Attributes (allAttributLexemes) import Data.Sequence (Seq) +import Text.PrettyPrint.HughesPJ (text) -data ParserError = ParserError +data ParserError = ParserError Doc deriving (Show) runASTParser :: Parser a -> ETokenStream -> Either ParserError a runASTParser p str = case runParser p "Parser" str of - Left peb -> Left ParserError + Left peb -> Left $ ParserError . text $ errorBundlePretty peb Right res -> Right res parseProgram :: Parser ProgramTree diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 6036252fd4..00b249718c 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -48,12 +48,13 @@ import Conjure.Language.AST.ASTParser (ParserError, runASTParser, parseProgram) import Data.Void (Void) import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) import Text.PrettyPrint (text) +import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b) -data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError [V.ValidatorDiagnostic] +data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc deriving (Show) runPipeline :: Pipeline a b -> Text -> Either PipelineError b @@ -63,7 +64,7 @@ runPipeline (parse,val) txt = do let x = V.runValidator (val parseResult) def case x of (Just m, ds) | not $ any V.isError ds -> Right m - (_, ves) -> Left $ ValidatorError ves + (_, ves) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) -- Validator (Just res) [] -> Right res -- Validator _ xs -> Left $ ValidatorError xs From 5e78394f10bec63a26fbed0864d295e37ecd1801 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 14 Nov 2022 12:21:08 +0000 Subject: [PATCH 093/378] Added type info to validator --- src/Conjure/Language/Parser.hs | 16 +- src/Conjure/Language/TH.hs | 4 +- src/Conjure/Language/Validator.hs | 461 +++++++++++++++++++----------- src/Conjure/UI/ErrorDisplay.hs | 10 +- src/Conjure/UI/IO.hs | 1 - 5 files changed, 321 insertions(+), 171 deletions(-) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 00b249718c..d697c6f667 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -38,7 +38,7 @@ import Text.Megaparsec ( (), label, token, try, eof, ParsecT,Parsec, runParse -- text import qualified Data.Text as T import Conjure.Language.NewLexer (ETokenStream, LexerError) -import Conjure.Language.Validator (Validator(..)) +import Conjure.Language.Validator (Validator(..), (?=>)) import qualified Conjure.Language.Validator as V import qualified Conjure.Language.AST.ASTParser as P import qualified Conjure.Language.AST.Syntax as S @@ -49,6 +49,7 @@ import Data.Void (Void) import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) import Text.PrettyPrint (text) import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) +import Conjure.Language.Type (Type(..)) type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b) @@ -57,14 +58,14 @@ type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc deriving (Show) -runPipeline :: Pipeline a b -> Text -> Either PipelineError b +runPipeline ::(?typeChecking::Bool) => Pipeline a b -> Text -> Either PipelineError b runPipeline (parse,val) txt = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult - let x = V.runValidator (val parseResult) def + let x = V.runValidator (val parseResult) def{V.typeChecking= ?typeChecking} case x of - (Just m, ds) | not $ any V.isError ds -> Right m - (_, ves) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) + (Just m, ds,_) | not $ any V.isError ds -> Right m + (_, ves,_) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) -- Validator (Just res) [] -> Right res -- Validator _ xs -> Left $ ValidatorError xs @@ -98,7 +99,7 @@ parseModel = (parseProgram,V.strict . V.validateModel) -- } -parseIO :: MonadFailDoc m => Pipeline i a -> String -> m a +parseIO :: (?typeChecking::Bool ,MonadFailDoc m) => Pipeline i a -> String -> m a parseIO p s = do case runPipeline p $ T.pack s of Left err -> failDoc $ text $show err @@ -629,7 +630,7 @@ parseDomainWithRepr = (P.parseDomain,V.strict . V.validateDomainWithRepr) -- metaVarInE = ExpressionMetaVar parseExpr :: Pipeline S.ExpressionNode Expression -parseExpr = (P.parseExpression,V.strict . V.validateExpression) +parseExpr = (P.parseExpression,V.strict . (\x -> V.validateExpression x ?=> TypeAny)) -- let -- mergeOp op = mkBinOp (lexemeText op) @@ -1002,6 +1003,7 @@ runLexerAndParser :: Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ show pe) Right a -> Right a + where ?typeChecking = True -- ls <- runLexer inp -- case runParser p file ls of -- Left (msg, line, col) -> diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index 769b9dea7f..36d32a77ae 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -37,6 +37,7 @@ essenceStmts = QuasiQuoter , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } + where ?typeChecking = False essence :: QuasiQuoter essence = QuasiQuoter @@ -52,6 +53,7 @@ essence = QuasiQuoter , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } + where ?typeChecking = False essenceDomain :: QuasiQuoter essenceDomain = QuasiQuoter @@ -67,7 +69,7 @@ essenceDomain = QuasiQuoter , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } - + where ?typeChecking = False -- locationTH :: Q SourcePos -- locationTH = do -- loc <- location diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 1e74df305b..a519b109fd 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -5,7 +5,8 @@ module Conjure.Language.Validator where import Conjure.Language.AST.ASTParser import Conjure.Language.AST.Syntax as S -import Conjure.Language.Definition +import Conjure.Language.Definition hiding (Typed) +import qualified Conjure.Language.Definition as D (Expression(Typed)) import Conjure.Language.Domain import Conjure.Language.Lexemes import Conjure.Language.NewLexer (ETok (ETok, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0, tokenSourcePos, totalLength, tokenStart, trueLength) @@ -41,8 +42,42 @@ import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Text.Megaparsec.Pos (SourcePos(..)) import Text.Megaparsec (unPos) import Data.Sequence (Seq (..), viewr, ViewR (..)) +import Conjure.Language.Pretty (Pretty(pretty)) +import Control.Monad.Except (runExcept) +import Conjure.Language.TypeOf (TypeOf(typeOf)) +data Typed a = Typed Type a + + +untype :: Typed a -> a +untype (Typed _ a) = a + +untypeAs :: Type -> Maybe (Typed a) -> Validator a +untypeAs _ Nothing = return Nothing +untypeAs r (Just (Typed t a)) = if let ?typeCheckerMode=RelaxedIntegerTags in typeUnify r t + then return $ Just a + else contextError $ CustomError "Type error" + +typeAs :: Type -> Maybe a -> Maybe (Typed a) +typeAs t (Just a) = Just $ Typed t a +typeAs t Nothing = Nothing + +(?=>) :: Validator (Typed a) -> Type -> Validator a +v ?=> t = v >>= untypeAs t + +castAny :: Validator a -> Validator (Typed a) +castAny a = typeAs TypeAny <$> a + +tInt :: Type +tInt = TypeInt TagInt + +typeSplit :: Typed a -> (Type,a) +typeSplit (Typed t v) = (t,v) + +getTypeList :: [Typed a] -> [(Type,a)] +getTypeList = map typeSplit + data ErrorType = TokenError LToken | SyntaxError Text @@ -79,18 +114,22 @@ isError _ = False data ValidatorState = ValidatorState { + typeChecking :: Bool, symbolTable :: SymbolTable, currentContext :: DiagnosticRegion } deriving Show instance Default ValidatorState where def = ValidatorState { - symbolTable=SymbolTable[], + typeChecking = False, + symbolTable=M.empty, currentContext=GlobalRegion } -data SymbolTable = SymbolTable [(Text,String)] - deriving (Show) - +type SymbolTable = (Map Text SymbolTableValue) +type SymbolTableValue = ReferenceTo +-- instance Show SymbolTableValue where +-- show (SType t) = show $ pretty t +-- show (SDomain d) = show $ pretty d newtype ValidatorT r w a = ValidatorT (MaybeT (StateT r (Writer [w])) a) deriving (Monad,Applicative ,Functor,MonadState r ,MonadWriter [w],MonadFail) @@ -101,12 +140,30 @@ type Validator a = ValidatorT ValidatorState ValidatorDiagnostic (Maybe a) --Non maybe version used in outward facing applications/ lists type ValidatorS a = ValidatorT ValidatorState ValidatorDiagnostic a -addEnumDefns :: [Text] -> SymbolTable -> SymbolTable -addEnumDefns names (SymbolTable enums) = SymbolTable $ enums ++ map (\m -> (m,"Enum")) names +-- addEnumDefns :: [Text] -> SymbolTable -> SymbolTable +-- addEnumDefns names (SymbolTable enums) = SymbolTable $ enums ++ map (\m -> (m,"Enum")) names modifySymbolTable :: (SymbolTable -> SymbolTable) -> ValidatorS () modifySymbolTable f = modify (\x -> x{symbolTable=f.symbolTable $ x}) +getSymbol :: Text -> ValidatorS (Maybe SymbolTableValue) +getSymbol n = M.lookup n <$> getSymbolTable + +putSymbol :: (Name , SymbolTableValue) -> ValidatorS Bool +putSymbol (Name name,t) = do + x <- getSymbol name + modifySymbolTable (M.insert name t) + case x of + Nothing -> return False + Just _ -> return True +putSymbol _ = return False -- skip types for meta and machine vars + +makeEnumDomain :: Name -> Maybe [Range Expression] -> Domain () Expression +makeEnumDomain n es = DomainEnum n es Nothing + +makeUnnamedDomain :: Name -> Domain () () +makeUnnamedDomain n = DomainUnnamed n () + getSymbolTable :: ValidatorS SymbolTable getSymbolTable = symbolTable <$> get @@ -119,20 +176,17 @@ setContext r = modify (\p -> p{currentContext = r}) setContextFrom :: Flattenable ETok a => a -> ValidatorS () setContextFrom = setContext.getRegion -lookupSymbol :: Text -> ValidatorS (Maybe String) -lookupSymbol name = do - SymbolTable a <- getSymbolTable - return $ lookup name a - strict :: Validator a -> ValidatorS a strict a = do Just res <- a; return res -deState :: ((a,r),n) -> (a,n) -deState ((a,_),n) = (a,n) +deState :: ((a,r),n) -> (a,n,r) +deState ((a,r),n) = (a,n,r) -runValidator :: (ValidatorT r w a) -> r -> ((Maybe a),[w]) +runValidator :: (ValidatorT r w a) -> r -> ((Maybe a),[w],r) runValidator (ValidatorT r) d = deState $ runWriter (runStateT (runMaybeT r) d) +todoTypeAny :: Maybe a -> Maybe (Typed a) +todoTypeAny = typeAs TypeAny validateModelS :: ProgramTree -> ValidatorS Model validateModelS = strict . validateModel @@ -161,7 +215,7 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do checkSymbols [l1] name <- validateIdentifier n unless (maybe False isValidLanguageName name) (raiseError $ n SyntaxError "Not a valid language name") - nums <- validateSequence getNum v + nums <- validateSequence_ getNum v return . pure $ LanguageVersion (Name $ fromMaybe "Essence" name) @@ -197,29 +251,33 @@ validateHeuristicStatement lt exp = do validateWhereStatement :: WhereStatementNode -> Validator [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do checkSymbols [l1] - ws <- Where <$> validateSequence validateExpression exprs + ws <- Where <$> validateSequence_ (\x -> do + e <- validateExpression x + untypeAs TypeBool e) exprs return . pure $ [ws] validateObjectiveStatement :: ObjectiveStatementNode -> Validator [Statement] validateObjectiveStatement (ObjectiveMin lt en) = do checkSymbols [lt] Just exp <- validateExpression en - return . pure $ [Objective Minimising exp] + return . pure $ [Objective Minimising $ untype exp] validateObjectiveStatement (ObjectiveMax lt en) =do checkSymbols [lt] Just exp <- validateExpression en - return . pure $ [Objective Maximising exp] + return . pure $ [Objective Maximising $ untype exp] validateSuchThatStatement :: SuchThatStatementNode -> Validator [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do checkSymbols [l1, l2] - exprs' <- validateSequence validateExpression exprs - return . pure $ [SuchThat exprs'] + exprs' <- validateSequence_ validateExpression exprs + bools <- mapM (untypeAs TypeBool . pure) exprs' + let bool_exprs = catMaybes bools + return . pure $ [SuchThat bool_exprs] validateBranchingStatement :: BranchingStatementNode -> Validator [Statement] validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do checkSymbols [l1, l2] - branchings <- validateList validateBranchingParts sts + branchings <- validateList_ validateBranchingParts sts return . pure $ [SearchOrder branchings] where validateBranchingParts :: ExpressionNode -> Validator SearchOrder @@ -228,7 +286,7 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do return $ BranchingOn <$> n validateBranchingParts exp = do x <- validateExpression exp - return $ Cut <$> x + return $ Cut . untype <$> x validateDeclarationStatement :: DeclarationStatementNode -> Validator [Statement] validateDeclarationStatement stmt = do @@ -239,7 +297,7 @@ validateDeclarationStatement stmt = do return . pure $ Declaration <$> stmt' where validateStatementSeq v l= do - decls <- validateSequence v l + decls <- validateSequence_ v l return $ pure $ concat decls validateGiven :: GivenStatementNode -> Validator [Declaration] @@ -248,14 +306,23 @@ validateGiven (GivenStatementNode idents l1 domain) = checkSymbols [l1] names <- validateNameList idents Just dom <- validateDomain domain + mapM_ (\x -> putSymbol (x,DeclNoRepr Given x dom NoRegion) ) names return . pure $ [ FindOrGiven Given nm dom|nm <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do checkSymbols [l1, l2, l3] names <- validateNameList se - modifySymbolTable $ addEnumDefns [ n | Name n <-names] + mapM_ (\x -> putSymbol (x,Alias (Domain (DomainEnum x Nothing Nothing))) ) names return . pure $ [GivenDomainDefnEnum n | n <- names] +validateFind :: FindStatementNode -> Validator [Declaration] +validateFind (FindStatementNode names colon domain) = do + checkSymbols [colon] + names' <- validateNameList names + Just dom <- validateDomain domain + mapM_ (\x -> putSymbol (x,DeclNoRepr Find x (dom) NoRegion) ) names' + return . pure $ [ FindOrGiven Given nm dom|nm <- names'] + validateLetting :: LettingStatementNode -> Validator [Declaration] -- Letting [names] be validateLetting (LettingStatementNode names l1 assign) = do @@ -266,19 +333,32 @@ validateLetting (LettingStatementNode names l1 assign) = do validateLettingAssignment :: [Name] -> LettingAssignmentNode -> Validator [Declaration] validateLettingAssignment names (LettingExpr en) = do Just expr <- validateExpression en - return . pure $ [Letting n expr | n <- names] + setContextFrom en + let expr' = untype expr + mapM_ (\x -> putSymbol (x, Alias $ expr' )) names --TODO need to add type info here + return . pure $ [Letting n expr' | n <- names] validateLettingAssignment names (LettingDomain lt dn) = do checkSymbols [lt] Just domain <- validateDomain dn + mapM_ (\x -> putSymbol (x, Alias (Domain domain))) names return . pure $ [Letting n (Domain domain)| n <- names] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do checkSymbols [l1, l2, l3] - members <- validateList validateName enames - modifySymbolTable $ addEnumDefns [ n | Name n <-names] + members <- validateList_ validateName enames + mapM_ + (\n -> do + let nameMap = zip members [1..] + let Name n' = n --TODO fix me + void $ putSymbol (n,Alias (Domain (DomainEnum n Nothing (Just nameMap)))) + mapM_ (\(x,i) -> putSymbol (x,Alias (Constant (ConstantInt (TagEnum n') i))) ) $ nameMap + ) names return . pure $ [LettingDomainDefnEnum n members| n <- names] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] - Just size <- validateExpression szExp + Just size <- do + s <- validateExpression szExp + untypeAs tInt s + mapM_ (\x -> putSymbol (x,Alias (Domain (DomainUnnamed x size))) ) names return . pure $ [LettingDomainDefnUnnamed n size| n <- names] @@ -318,22 +398,15 @@ invalid err = do validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of - RealToken ss et -> do + RealToken ss et -> do checkSymbols (map SkippedToken ss) return . pure $ lexeme et _ -> invalid $ ValidatorDiagnostic (getRegion s) $ Error $ TokenError s -- [MissingTokenError ] -validateFind :: FindStatementNode -> Validator [Declaration] -validateFind (FindStatementNode names colon domain) = do - checkSymbols [colon] - names' <- validateNameList names - domain' <- validateDomain domain - return $ map <$> (makeFind <$> domain') <*> pure names' - where - makeFind :: Domain () Expression -> Name -> Declaration - makeFind dom nm = FindOrGiven Find nm dom + + type DomainValidator = Validator (Domain () Expression) @@ -363,18 +436,18 @@ validateDomain dm = case dm of where validateRangedInt :: Maybe (ListNode RangeNode) -> DomainValidator validateRangedInt (Just ranges) = do - ranges' <- validateList validateRange ranges + ranges' <- validateList_ validateRange ranges return . pure $ DomainInt TagInt ranges' validateRangedInt Nothing = return . pure $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> DomainValidator validateEnumRange name ranges = do ranges' <- case ranges of - Just r -> pure <$> validateList validateRange r + Just r -> pure <$> validateList_ validateRange r Nothing -> pure Nothing Just name' <- validateIdentifier name - a <- lookupSymbol name' + a <- getSymbol name' case a of - Just "Enum" ->return . pure $ DomainEnum (Name name') ranges' Nothing + Just (Alias (Domain (DomainEnum {}))) ->return . pure $ DomainEnum (Name name') ranges' Nothing Just t -> invalid $ name InternalError -- $ "Unknown type :" ++ t Nothing -> case ranges' of Nothing -> return . pure $ DomainReference (Name name') Nothing @@ -383,16 +456,16 @@ validateDomain dm = case dm of return . pure $ DomainReference (Name name') Nothing validateTupleDomain :: ListNode DomainNode -> DomainValidator - validateTupleDomain doms = pure . DomainTuple <$> validateList validateDomain doms + validateTupleDomain doms = pure . DomainTuple <$> validateList_ validateDomain doms validateRecordDomain :: ListNode NamedDomainNode -> DomainValidator - validateRecordDomain namedDoms = pure . DomainRecord <$> validateList validateNamedDomainInRecord namedDoms + validateRecordDomain namedDoms = pure . DomainRecord <$> validateList_ validateNamedDomainInRecord namedDoms validateVariantDomain :: ListNode NamedDomainNode -> DomainValidator validateVariantDomain namedDoms = do - lst <- validateList validateNamedDomainInVariant namedDoms + lst <- validateList_ validateNamedDomainInVariant namedDoms return . pure $ DomainVariant lst validateMatrixDomain :: ListNode DomainNode -> DomainNode -> DomainValidator validateMatrixDomain indexes dom = do - idoms <- validateList validateDomain indexes + idoms <- validateList_ validateDomain indexes dom' <- validateDomain dom return $ foldr DomainMatrix <$> dom' <*> pure idoms validateSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator @@ -437,7 +510,7 @@ validateDomain dm = case dm of attrs' <- case attrs of Just a -> validateRelationAttributes a Nothing -> return $ Just def - doms' <- validateList validateDomain doms + doms' <- validateList_ validateDomain doms return $ DomainRelation <$> repr <*> attrs' <*> pure doms' validatePartitionDomain :: Maybe (ListNode AttributeNode)-> DomainNode -> DomainValidator validatePartitionDomain attrs dom = do @@ -510,7 +583,7 @@ validateJectivityAttributes attrs = do validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) validateSetAttributes atts = do setContextFrom atts - attrs <- validateList (validateAttributeNode setValidAttrs) atts + attrs <- validateList_ (validateAttributeNode setValidAttrs) atts size <- validateSizeAttributes attrs return $ SetAttr <$> size @@ -518,7 +591,7 @@ validateSetAttributes atts = do validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) validateMSetAttributes atts = do setContextFrom atts - attrs <- validateList (validateAttributeNode msetValidAttrs) atts + attrs <- validateList_ (validateAttributeNode msetValidAttrs) atts size <- validateSizeAttributes attrs occurs <- validateOccursAttrs attrs return $ MSetAttr <$> size <*> occurs @@ -536,7 +609,7 @@ validateMSetAttributes atts = do validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) validateFuncAttributes atts = do - attrs <- validateList (validateAttributeNode funAttrs) atts + attrs <- validateList_ (validateAttributeNode funAttrs) atts size <- validateSizeAttributes attrs parts <- return . Just $ if L_total `elem` map fst attrs then PartialityAttr_Total else PartialityAttr_Partial jectivity <- validateJectivityAttributes attrs @@ -544,7 +617,7 @@ validateFuncAttributes atts = do validateSeqAttributes :: ListNode AttributeNode -> Validator (SequenceAttr Expression) validateSeqAttributes atts = do - attrs <- validateList (validateAttributeNode seqAttrs) atts + attrs <- validateList_ (validateAttributeNode seqAttrs) atts size <- validateSizeAttributes attrs jectivity <- validateJectivityAttributes attrs return $ SequenceAttr <$> size <*> jectivity @@ -553,7 +626,7 @@ validateSeqAttributes atts = do validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr Expression) validateRelationAttributes atts = do setContextFrom atts - attrs <- validateList (validateAttributeNode relAttrs) atts + attrs <- validateList_ (validateAttributeNode relAttrs) atts size <- validateSizeAttributes attrs others <- validateArray validateBinaryRel (filter (\x -> fst x `elem` map fst binRelAttrs) attrs) return $ RelationAttr <$> size <*> pure (BinaryRelationAttrs $ S.fromList others ) @@ -566,7 +639,7 @@ validateRelationAttributes atts = do validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) validatePartitionAttributes atts = do - attrs <- validateList (validateAttributeNode partitionAttrs) atts + attrs <- validateList_ (validateAttributeNode partitionAttrs) atts --guard size attrs and complete as this is default size <- validateNumPartAttributes attrs partSize <- validatePartSizeAttributes attrs @@ -582,7 +655,7 @@ validateAttributeNode vs (NamedAttributeNode t Nothing) = do Just False -> return . pure $ (name , Nothing) validateAttributeNode vs (NamedAttributeNode t (Just e)) = do - expr <- validateExpression e + expr <- validateExpression e ?=> tInt Just name <- validateSymbol t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" @@ -608,52 +681,54 @@ validateNamedDomainInRecord (NameDomainNode name m_dom) = do validateRange :: RangeNode -> Validator (Range Expression) validateRange range = case range of - SingleRangeNode en -> do ex <- validateExpression en ; return $ RangeSingle <$> ex + SingleRangeNode en -> do ex <- untypeAs tInt =<< validateExpression en ; return $ RangeSingle <$> ex OpenRangeNode dots -> do checkSymbols [dots] ; return . pure $ RangeOpen - RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ; ex <- validateExpression e1 ; return $ RangeLowerBounded <$>ex - LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; ex <- validateExpression e1 ; return $ RangeUpperBounded <$> ex + RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ; ex <- untypeAs tInt =<< validateExpression e1 ; return $ RangeLowerBounded <$>ex + LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; ex <- untypeAs tInt =<< validateExpression e1 ; return $ RangeUpperBounded <$> ex BoundedRangeNode e1 dots e2 -> do _ <- checkSymbols [dots] - e1' <- validateExpression e1 - e2' <- validateExpression e2 - return $ RangeBounded <$> e1' <*> e2' + e1' <- untypeAs tInt =<< validateExpression e1 + e2' <- untypeAs tInt =<< validateExpression e2 + return $ RangeBounded <$> e1' <*> e2' -validateArrowPair :: ArrowPairNode -> Validator (Expression, Expression) +validateArrowPair :: ArrowPairNode -> Validator (Typed Expression, Typed Expression) validateArrowPair (ArrowPairNode e1 s e2) = do checkSymbols [s] e1' <- validateExpression e1 e2' <- validateExpression e2 return $ (,) <$> e1' <*> e2' -validateExpression :: ExpressionNode -> Validator Expression +validateExpression :: ExpressionNode -> Validator (Typed Expression) validateExpression expr = case expr of Literal ln -> validateLiteral ln IdentifierNode nn -> validateIdentifierExpr nn - MetaVarExpr tok -> do x <- validateMetaVar tok ; return $ ExpressionMetaVar <$> x + MetaVarExpr tok -> do + Just x <- validateMetaVar tok ; + return $ typeAs TypeAny $ pure $ ExpressionMetaVar x QuantificationExpr qen -> validateQuantificationExpression qen OperatorExpressionNode oen -> validateOperatorExpression oen - DomainExpression dex -> validateDomainExpression dex + DomainExpression dex -> castAny $ validateDomainExpression dex ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp AbsExpression (ParenExpressionNode l1 exp l2) -> do checkSymbols [l1,l2] - Just exp' <- validateExpression exp - return . pure $ mkOp TwoBarOp [exp'] + Just exp' <- validateExpression exp ?=> TypeAny + return . typeAs tInt . pure $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs - SpecialCase scn -> validateSpecialCase scn + SpecialCase scn -> castAny $ validateSpecialCase scn MissingExpressionNode lt -> invalid $ lt TokenError lt -validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> Validator Expression +validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> Validator (Typed Expression) validateAttributeAsConstraint l1 exprs = do checkSymbols [l1] - es <- validateList validateExpression exprs + es <- map untype <$> validateList_ validateExpression exprs do Just lx <- validateSymbol l1 let n = lookup (Name (lexemeText lx)) allSupportedAttributes case (n,es) of - (Just 1 , [e,v]) -> return . pure $ aacBuilder e lx (Just v) + (Just 1 , [e,v]) -> return . todoTypeAny . pure $ aacBuilder e lx (Just v) (Just 1 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es)) - (Just 0 , [e]) -> return . pure $ aacBuilder e lx Nothing + (Just 0 , [e]) -> return .todoTypeAny . pure $ aacBuilder e lx Nothing (Just 0 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es)) (_,_) -> invalid $ l1 InternalErrorS "Bad AAC" where @@ -674,7 +749,7 @@ validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do let locals = if null decls then DefinednessConstraints cons else AuxiliaryVars (decls ++ [SuchThat cons]) - return (WithLocals <$> expr <*> pure locals) + return (WithLocals <$> (untype <$> expr) <*> pure locals) translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of @@ -682,33 +757,35 @@ translateQnName qnName = case qnName of L_Exists -> FunctionOp L_fOr _ -> FunctionOp qnName -validateQuantificationExpression :: QuantificationExpressionNode -> Validator Expression +validateQuantificationExpression :: QuantificationExpressionNode -> Validator (Typed Expression) validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = do checkSymbols [dot] name' <- validateSymbol name - patterns <- validateSequence validateAbstractPattern pats + patterns <- validateSequence_ validateAbstractPattern pats over' <- validateQuantificationOver over guard' <- validateQuantificationGuard m_guard - body <- validateExpression expr + body <- validateExpression expr ?=> TypeAny let gens = map <$> over' <*> pure patterns let qBody = Comprehension <$> body <*> ((++) <$> gens <*> guard') - return $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) + return . todoTypeAny $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) where validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] validateQuantificationGuard Nothing = return $ pure [] validateQuantificationGuard (Just (QuanticationGuard l1 exp) ) = do checkSymbols [l1] - Just expr' <- validateExpression exp + setContextFrom exp + Just expr' <- validateExpression exp ?=> TypeBool return . pure $ [Condition expr'] validateQuantificationOver :: QuantificationOverNode -> Validator (AbstractPattern -> GeneratorOrCondition) validateQuantificationOver ( QuantifiedSubsetOfNode lt en ) = do checkSymbols [lt] Just exp <- validateExpression en - return . pure $ (\pat -> Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet exp)) + return . pure $ (\pat -> Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (untype exp))) validateQuantificationOver ( QuantifiedMemberOfNode lt en ) = do checkSymbols [lt] - Just exp <- validateExpression en + Just exp <- validateExpression en ?=> TypeAny + q <- getType exp return . pure $ (\pat -> Generator $ GenInExpr pat exp) validateQuantificationOver ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do checkSymbols [l1] @@ -720,11 +797,11 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ validateAbstractPattern :: AbstractPatternNode -> Validator AbstractPattern validateAbstractPattern (AbstractIdentifier nn) = validateName nn >>= \x -> return $ Single <$> x validateAbstractPattern (AbstractMetaVar lt) = validateMetaVar lt >>= \x -> return $ AbstractPatternMetaVar <$> x -validateAbstractPattern (AbstractPatternMatrix ln) = pure . AbsPatMatrix <$> validateList validateAbstractPattern ln -validateAbstractPattern (AbstractPatternSet ln) = pure . AbsPatSet <$> validateList validateAbstractPattern ln +validateAbstractPattern (AbstractPatternMatrix ln) = pure . AbsPatMatrix <$> validateList_ validateAbstractPattern ln +validateAbstractPattern (AbstractPatternSet ln) = pure . AbsPatSet <$> validateList_ validateAbstractPattern ln validateAbstractPattern (AbstractPatternTuple m_lt ln) = do maybe (pure ()) (\n ->checkSymbols [n]) m_lt - pure . AbsPatTuple <$> validateList validateAbstractPattern ln + pure . AbsPatTuple <$> validateList_ validateAbstractPattern ln validateMetaVar :: LToken -> Validator String validateMetaVar tok = do @@ -739,11 +816,11 @@ validateDomainExpression (DomainExpressionNode l1 dom l2) = do dom' <- validateDomain dom return $ Domain <$> dom' -validateFunctionApplication :: LToken -> ListNode ExpressionNode -> Validator Expression +validateFunctionApplication :: LToken -> ListNode ExpressionNode -> Validator (Typed Expression) validateFunctionApplication name args = do name' <- validateSymbol name - args' <- validateList validateExpression args - return $ do + args' <- map (untype.snd) <$> validateList validateExpression args + return . todoTypeAny $ do n <- name' let a = args' case (n,a) of @@ -751,42 +828,43 @@ validateFunctionApplication name args = do _ -> return $ mkOp (FunctionOp n) a -validateIdentifierExpr :: NameNode -> Validator Expression +validateIdentifierExpr :: NameNode -> Validator (Typed Expression) validateIdentifierExpr name = do - n <- validateIdentifier name - return $ Reference <$> (Name <$> n) <*> pure Nothing + Just n <- validateIdentifier name + ref <- setContextFrom name >> (tryResolveReference $ Name n) + return . todoTypeAny . pure $ Reference (Name n) ref -validateOperatorExpression :: OperatorExpressionNode -> Validator Expression +validateOperatorExpression :: OperatorExpressionNode -> Validator (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do expr <- validateExpression expr Just op <- validateSymbol lt - return $ (\x -> mkOp (PrefixOp op) [x]) <$> (expr) + return . todoTypeAny $ (\(untype->x) -> mkOp (PrefixOp op) [x]) <$> (expr) --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do lExpr <- validateExpression lexp rExpr <- validateExpression rexp op' <- validateSymbol op - return $ mkBinOp <$> ( pack . lexemeFace <$> op') <*> lExpr <*> rExpr + return . todoTypeAny $ mkBinOp <$> ( pack . lexemeFace <$> op') <*> (untype <$> lExpr) <*> (untype <$> rExpr) validateOperatorExpression (PostfixOpNode expr pon) = do expr' <- validateExpression expr postFixOp <- validatePostfixOp pon return $ postFixOp <*> expr' -validatePostfixOp :: PostfixOpNode -> Validator (Expression -> Expression) +validatePostfixOp :: PostfixOpNode -> Validator (Typed Expression -> Typed Expression) validatePostfixOp (OpFactorial lt) = do checkSymbols [lt] - return . pure $ (\x -> mkOp FactorialOp [x]) + return . pure $ (\(untype->x) -> Typed tInt $ mkOp FactorialOp [x]) validatePostfixOp (ApplicationNode args) = do - args' <- validateList validateExpression args + args' <- validateList_ validateExpression args let underscore = Reference "_" Nothing - let ys = [if underscore == x then Nothing else Just x | x <- args'] - return . pure $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys + let ys = [if underscore == v then Nothing else Just v | x@(Typed _ v) <- args'] + return . pure $ \ (Typed t x) -> Typed TypeAny $ Op $ MkOpRelationProj $ OpRelationProj x ys validatePostfixOp (IndexedNode ln) = do - ranges <-validateList validateRange ln + ranges <-validateList_ validateRange ln let indices = map interpretRange ranges return . pure $ \x -> (foldl (\m f -> f m)) x indices where - interpretRange :: Range Expression -> (Expression-> Expression) + interpretRange :: Range Expression -> (Typed Expression-> Typed Expression) interpretRange x = let a = case x of RangeOpen -> Right (Nothing,Nothing) @@ -795,28 +873,33 @@ validatePostfixOp (IndexedNode ln) = do RangeUpperBounded ex -> Right (Nothing,Just ex) RangeBounded exl exr -> Right (Just exl,Just exr) in case a of - Left ex -> \m -> Op $ MkOpIndexing (OpIndexing m ex) - Right (i,j) -> \m -> Op $ MkOpSlicing (OpSlicing m i j) + Left ex -> \(untype->m) -> Typed TypeAny $ Op $ MkOpIndexing (OpIndexing m ex) + Right (i,j) -> \(untype->m) -> Typed TypeAny $ Op $ MkOpSlicing (OpSlicing m i j) validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do checkSymbols [l1,l2,l3] Just dom' <- validateDomain dom let t = getType dom' case t of Nothing -> invalid $ dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) - Just ty -> return . pure $ (\ex -> Typed ex ty) + Just ty -> return . pure $ (\(Typed t ex) -> Typed ty $ D.Typed ex ty) where getType :: Domain () Expression -> Maybe Type getType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d -validateLiteral :: LiteralNode -> Validator Expression +validateLiteral :: LiteralNode -> Validator (Typed Expression) validateLiteral litNode = case litNode of - IntLiteral lt -> validateIntLiteral lt >>= \x -> return $ Constant <$> x - BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ Constant <$> x + IntLiteral lt -> validateIntLiteral lt >>= \x -> return $ typeAs tInt $ Constant <$> x + BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ typeAs TypeBool $ Constant <$> x MatrixLiteral mln -> validateMatrixLiteral mln - TupleLiteralNode lt -> Just . mkAbstractLiteral . AbsLitTuple <$> validateLongTuple lt - TupleLiteralNodeShort st -> Just . mkAbstractLiteral.AbsLitTuple <$> validateShortTuple st + TupleLiteralNode (LongTuple lt xs) -> do + checkSymbols [lt] + validateLiteral (TupleLiteralNodeShort (ShortTuple xs)) + TupleLiteralNodeShort (ShortTuple xs) -> do + es <- validateExprList_ xs + t <- makeTupleLiteral es + return $ pure t RecordLiteral lt ln -> checkSymbols [lt] >> validateRecordLiteral ln VariantLiteral lt ln -> checkSymbols [lt] >> validateVariantLiteral ln SetLiteral ls -> validateSetLiteral ls @@ -826,78 +909,85 @@ validateLiteral litNode = case litNode of RelationLiteral lt ln -> checkSymbols [lt] >> validateRelationLiteral ln PartitionLiteral lt ln -> checkSymbols [lt] >> validatePartitionLiteral ln -validateSequenceLiteral :: ListNode ExpressionNode -> Validator Expression +validateSequenceLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) validateSequenceLiteral x = do - l <- validateExprList x - return . pure $ mkAbstractLiteral $ AbsLitSequence l + l <- map untype <$> validateExprList_ x + let lType = TypeSequence TypeAny + return . (typeAs lType). pure $ mkAbstractLiteral $ AbsLitSequence l -validateRelationLiteral :: ListNode RelationElemNode -> Validator Expression +validateRelationLiteral :: ListNode RelationElemNode -> Validator (Typed Expression) validateRelationLiteral ln = do - members <- validateList validateRelationMember ln - return . pure $ mkAbstractLiteral $ AbsLitRelation members + members <- map (map untype) <$> validateList_ validateRelationMember ln + return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitRelation members where - validateRelationMember :: RelationElemNode -> Validator [Expression] + validateRelationMember :: RelationElemNode -> Validator [Typed Expression] validateRelationMember x = case x of - RelationElemNodeLabeled lt -> Just <$> validateLongTuple lt - RelationElemNodeShort st -> Just <$> validateShortTuple st + RelationElemNodeLabeled (LongTuple lt xs) -> Just <$> (checkSymbols [lt] >> validateExprList_ xs) + RelationElemNodeShort (ShortTuple xs) -> Just <$> validateExprList_ xs -validatePartitionLiteral :: ListNode PartitionElemNode -> Validator Expression +validatePartitionLiteral :: ListNode PartitionElemNode -> Validator (Typed Expression) validatePartitionLiteral ln = do - members <- validateList (\(PartitionElemNode exprs) -> Just <$> validateExprList exprs) ln - return . pure . mkAbstractLiteral $ AbsLitPartition members + members <- map (map untype) <$> validateList_ (\(PartitionElemNode exprs) -> Just <$> validateExprList_ exprs) ln + return . todoTypeAny . pure . mkAbstractLiteral $ AbsLitPartition members -validateRecordLiteral :: ListNode RecordMemberNode -> Validator Expression +validateRecordLiteral :: ListNode RecordMemberNode -> Validator (Typed Expression) validateRecordLiteral ln = do - members <- validateList validateRecordMember ln - return . pure $ mkAbstractLiteral $ AbsLitRecord members + members <- validateList_ validateRecordMember ln + let members' = map (\(x,y) -> (x,untype y)) members + -- let eType = TypeRecord TypeAny + return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitRecord members' -validateVariantLiteral :: ListNode RecordMemberNode -> Validator Expression +validateVariantLiteral :: ListNode RecordMemberNode -> Validator (Typed Expression) validateVariantLiteral ln = do - members <- validateList validateRecordMember ln + members <- validateList_ validateRecordMember ln case members of [] -> invalid $ ln SemanticError "Variants must contain exactly one member" - [(n,x)]-> return . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n x + [(n,x)]-> return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n (untype x) _:_ -> invalid $ ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected -validateRecordMember :: RecordMemberNode -> Validator (Name,Expression) +validateRecordMember :: RecordMemberNode -> Validator (Name,Typed Expression) validateRecordMember (RecordMemberNode name lEq expr) = do checkSymbols [lEq] name' <- validateName name expr' <- validateExpression expr return $ (,) <$> name' <*> expr' -validateFunctionLiteral :: ListNode ArrowPairNode -> Validator Expression +validateFunctionLiteral :: ListNode ArrowPairNode -> Validator (Typed Expression) validateFunctionLiteral ln = do - pairs <- validateList validateArrowPair ln - return . pure $ mkAbstractLiteral $ AbsLitFunction pairs + pairs <- validateList_ validateArrowPair ln + let pairs' = map (\(x,y)->(untype x,untype y)) pairs + return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitFunction pairs' -validateSetLiteral :: ListNode ExpressionNode -> Validator Expression +validateSetLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) validateSetLiteral ls = do - xs <- validateList validateExpression ls - return . pure $ mkAbstractLiteral $ AbsLitSet xs + xs <- validateList_ validateExpression ls + let eType = TypeMSet tInt + return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitSet (map untype xs) -validateMSetLiteral :: ListNode ExpressionNode -> Validator Expression +validateMSetLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) validateMSetLiteral ls = do - xs <- validateList validateExpression ls - return .pure $ mkAbstractLiteral $ AbsLitMSet xs -validateMatrixLiteral :: MatrixLiteralNode -> Validator Expression + xs <- validateList validateExpression ls + let eType = TypeMSet tInt + let result = mkAbstractLiteral . AbsLitMSet . map (untype . snd) $ xs + return .pure $ Typed eType result +validateMatrixLiteral :: MatrixLiteralNode -> Validator (Typed Expression) validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do checkSymbols [l1,l2] elems <- validateSequence validateExpression se dom <- validateOverDomain m_dom let lit = do - let xs = elems + let xs = map (untype . snd) elems case dom of Just (Just d) -> return $ AbsLitMatrix d xs _ -> return $ AbsLitMatrix (mkDomainIntB 1 (fromInt $ genericLength xs)) xs - pure . mkAbstractLiteral <$> lit + pure . typeAs TypeAny $mkAbstractLiteral <$> lit where validateOverDomain :: Maybe OverDomainNode -> Validator (Maybe (Domain () Expression)) validateOverDomain Nothing = pure Nothing @@ -907,14 +997,14 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do checkSymbols [l1,l2] - elems <- Just <$> validateSequence validateExpression se + elems <- Just <$> validateSequence_ validateExpression se gens <- validateComprehension comp enforceConstraint ((\x -> length x == 1 )<$> elems) "List comprehension must contain exactly one expression before |" return $ do ms <- elems gs <- gens case ms of - [x] -> return $ Comprehension x gs + [x] -> return . Typed TypeAny $ Comprehension (untype x) gs _ -> Nothing @@ -922,28 +1012,29 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do validateComprehension :: ComprehensionNode -> Validator [GeneratorOrCondition] validateComprehension (ComprehensionNode l1 body) = do checkSymbols [l1] - pure . concat <$> validateSequence validateComprehensionBody body + pure . concat <$> validateSequence_ validateComprehensionBody body validateComprehensionBody :: ComprehensionBodyNode -> Validator [GeneratorOrCondition] validateComprehensionBody (CompBodyCondition en) = do Just e <- validateExpression en - return . pure $ [Condition e] + assertType e TypeBool "Guards must be bools" + return . pure $ [Condition $ untype e] validateComprehensionBody (CompBodyDomain apn l1 dom) = do checkSymbols [l1] - pats <- validateSequence validateAbstractPattern apn + pats <- validateSequence_ validateAbstractPattern apn Just domain <- validateDomain dom return . pure $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] - pats <- validateSequence validateAbstractPattern apn + pats <- validateSequence_ validateAbstractPattern apn Just exp <- validateExpression en - return . pure $ [Generator (GenInExpr pat exp)| pat <- pats] + return . pure $ [Generator (GenInExpr pat (untype exp))| pat <- pats] validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do checkSymbols [l1,l2] pat <- validateAbstractPattern nn expr <- validateExpression en - let gen = ComprehensionLetting <$> pat <*> expr + let gen = ComprehensionLetting <$> pat <*> (untype <$> expr) return (( : []) <$> gen) @@ -968,14 +1059,13 @@ checkSymbols = mapM_ validateSymbol raiseError :: ValidatorDiagnostic -> ValidatorS () raiseError e = tell [e] +makeTupleLiteral :: [Typed Expression] -> ValidatorS (Typed Expression) +makeTupleLiteral members = do + let memberTypes = unzip $ map typeSplit members + let eType = TypeTuple (fst memberTypes) + return . Typed eType . mkAbstractLiteral . AbsLitTuple $ snd memberTypes -validateShortTuple :: ShortTuple -> ValidatorS [Expression] -validateShortTuple (ShortTuple exs) = validateList validateExpression exs - -validateLongTuple :: LongTuple -> ValidatorS [Expression] -validateLongTuple (LongTuple lt exs) = checkSymbols [lt] >> validateList validateExpression exs - validateIntLiteral :: LToken -> Validator Constant validateIntLiteral t = do l <- validateSymbol t @@ -991,7 +1081,7 @@ validateBoolLiteral t = do L_false -> return . pure $ ConstantBool False _ -> invalid $ t InternalError validateNameList :: Sequence NameNode -> ValidatorS [Name] -validateNameList = validateSequence validateName +validateNameList = validateSequence_ validateName validateIdentifier :: NameNode -> Validator Text validateIdentifier (NameNode iden) = do @@ -1013,27 +1103,45 @@ validateName name = do validateArray :: (a -> Validator b) -> [a] -> ValidatorS [b] validateArray f l = catMaybes <$> mapM f l -validateList :: (a -> Validator b) -> ListNode a -> ValidatorS [b] +validateList :: (a -> Validator b) -> ListNode a -> ValidatorS [(a,b)] validateList validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end validateSequence validator seq +validateList_ :: (a -> Validator b) -> ListNode a -> ValidatorS [b] +validateList_ validator (ListNode st seq end) = do + _ <- validateSymbol st + _ <- validateSymbol end + validateSequence_ validator seq + -- mapPrefixToOp :: Lexeme -> Text -- mapPrefixToOp x = case x of -- L_Minus -> "negate" -- L_ExclamationMark -> "not" -- _ -> pack $ lexemeFace x -validateSequence :: (a -> Validator b) -> Sequence a -> ValidatorS [b] +validateSequence :: (a -> Validator b) -> Sequence a -> ValidatorS [(a,b)] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals - -validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator b -validateSequenceElem f (SeqElem i (Just x)) = validateSymbol x >> f i -validateSequenceElem f (SeqElem i Nothing) = f i +validateSequence_ :: (a -> Validator b) -> Sequence a -> ValidatorS [b] +validateSequence_ f s = do + q <- validateSequence f s + return . map snd $ q + +validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator (a,b) +validateSequenceElem f (SeqElem i s) = do + case s of + Nothing -> pure () + Just lt -> void $ validateSymbol lt + v <- f i + return (case v of + Nothing -> Nothing + Just b -> Just (i,b)) validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( plc TokenError plc) -validateExprList :: ListNode ExpressionNode -> ValidatorS [Expression] +validateExprList :: ListNode ExpressionNode -> ValidatorS [(ExpressionNode,Typed Expression)] validateExprList = validateList validateExpression +validateExprList_ :: ListNode ExpressionNode -> ValidatorS [Typed Expression] +validateExprList_ = validateList_ validateExpression offsetPositionBy :: Int -> SourcePos -> SourcePos @@ -1075,7 +1183,6 @@ getRegion a = case range of where range :: Seq ETok = flatten a - () :: Flattenable ETok a => a -> ErrorType -> ValidatorDiagnostic t e = ValidatorDiagnostic (getRegion t) $ Error e @@ -1099,3 +1206,35 @@ contextInfo e = do q <- getContext tell $ [ValidatorDiagnostic q $ Info e] return () + +getType :: (Pretty a ,TypeOf a) => a -> ValidatorS Type +getType a = do + tc <- gets typeChecking + (if tc then (do + let t = let ?typeCheckerMode = StronglyTyped in typeOf a + case t of + Left err -> do + void $ contextError (CustomError . pack $ "type err in :" ++ show (pretty a) ++ "err:" ++ show err) + return TypeAny + Right t -> return t) else return TypeAny) + +assertType :: (Pretty a,TypeOf a) => Typed a -> Type -> Text -> ValidatorS () +assertType v ref msg = do + let Typed t _ = v + tc <- gets typeChecking + unless (not tc || t == ref) $ void . contextError $ CustomError msg + +tryResolveReference :: Name -> ValidatorS (Maybe ReferenceTo) +tryResolveReference (Name n) = do + c <- getSymbol n + case c of + Nothing -> contextError (CustomError . pack $ "Symbol not found "++ show n) >> return Nothing + Just _ -> return c +tryResolveReference _ = return Nothing + + +-- unifyAbstractPatternOverExpression :: AbstractPatternNode -> Expression -> Validator (Name,Type) +-- unifyAbstractPatternOverExpression pat exp = do +-- t <- typeOf exp + +-- empty diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 250372aab8..e7b32a4e78 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -10,6 +10,7 @@ import Conjure.Language.NewLexer import Conjure.Language.Lexemes import qualified Data.Text import qualified Data.Text as T +import Data.Map.Strict (mapWithKey, assocs) @@ -45,6 +46,12 @@ showDiagnosticsForConsole errs text Right _ -> "No printable errors from :" ++ (show . length $ errs) +printSymbolTable :: SymbolTable -> IO () +printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs tab) + where + printEntry :: (Text ,SymbolTableValue) -> IO () + printEntry (a,b) = putStrLn $ show a ++ ":" ++ show b + captureErrors :: [ValidatorDiagnostic] -> Parser () captureErrors = mapM_ captureError @@ -73,9 +80,10 @@ val s = do Left _ -> putStrLn "error" Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) def in case qpr of - (model, vds) -> do + (model, vds,st) -> do print (maybe "" show model) putStrLn $ show vds + printSymbolTable $ symbolTable st putStrLn $ showDiagnosticsForConsole vds txt diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 0619a5bb39..4f3a55dbde 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -132,7 +132,6 @@ readModel :: (FilePath, Text) -> m Model readModel modelParser preprocess (fp, con) = do - model <- case preprocess of Nothing -> return def Just prep -> From 42c755d9a46b0d6c1afa343dbfbb7eb0c35520cc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 17 Nov 2022 17:38:29 +0000 Subject: [PATCH 094/378] Adding local types to comprehensions etc --- src/Conjure/Language/AST/Reformer.hs | 102 +++--- src/Conjure/Language/Validator.hs | 464 +++++++++++++++++++-------- src/Conjure/UI/ErrorDisplay.hs | 5 +- 3 files changed, 388 insertions(+), 183 deletions(-) diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index cccbb74601..af5cd7884d 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -9,15 +9,15 @@ import qualified Data.Sequence as S -class Flattenable v a where - flatten :: Flattenable v a => a -> S.Seq v +class Flattenable a where + flatten :: Flattenable a => a -> S.Seq ETok -instance Flattenable ETok ProgramTree where +instance Flattenable ProgramTree where flatten (ProgramTree lv sts end) = mconcat [flatten lv , mconcat $ map flatten sts , flatten end] -instance Flattenable ETok LangVersionNode where +instance Flattenable LangVersionNode where flatten (LangVersionNode l1 l2 l3) = flatten l1 >< flatten l2 >< flatten l3 -instance Flattenable ETok StatementNode where +instance Flattenable StatementNode where flatten x = case x of DeclarationStatement dsn -> flatten dsn BranchingStatement bsn -> flatten bsn @@ -27,56 +27,56 @@ instance Flattenable ETok StatementNode where HeuristicStatement l1 ex -> flatten l1 >< flatten ex UnexpectedToken tok -> flatten tok -instance Flattenable ETok DeclarationStatementNode where +instance Flattenable DeclarationStatementNode where flatten x = case x of FindStatement f fsn -> flatten f >< flatten fsn GivenStatement g gsn -> flatten g >< flatten gsn LettingStatement t lsn -> flatten t >< flatten lsn -instance Flattenable ETok LettingStatementNode where +instance Flattenable LettingStatementNode where flatten (LettingStatementNode a b c) = mconcat[ flatten a, flatten b, flatten c] -instance Flattenable ETok LettingAssignmentNode where +instance Flattenable LettingAssignmentNode where flatten x = case x of LettingExpr d -> flatten d LettingDomain d e -> flatten d >< flatten e LettingEnum d e f g -> mconcat [flatten d, flatten e, flatten f, flatten g] LettingAnon d e f g h -> mconcat [flatten d, flatten e, flatten f, flatten g, flatten h] -instance Flattenable ETok FindStatementNode where +instance Flattenable FindStatementNode where flatten (FindStatementNode a b c) = mconcat [flatten a, flatten b, flatten c] -instance Flattenable ETok GivenStatementNode where +instance Flattenable GivenStatementNode where flatten x = case x of GivenStatementNode a b c -> mconcat [flatten a, flatten b, flatten c] GivenEnumNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] -instance Flattenable ETok BranchingStatementNode where +instance Flattenable BranchingStatementNode where flatten (BranchingStatementNode lt lt' ln) = mconcat [flatten lt, flatten lt', flatten ln] -instance Flattenable ETok SuchThatStatementNode where +instance Flattenable SuchThatStatementNode where flatten (SuchThatStatementNode l1 l2 l3) = flatten l1 >< flatten l2 >< flatten l3 -instance Flattenable ETok WhereStatementNode where +instance Flattenable WhereStatementNode where flatten (WhereStatementNode l1 l2) = flatten l1 >< flatten l2 -instance Flattenable ETok ObjectiveStatementNode where +instance Flattenable ObjectiveStatementNode where flatten x = case x of ObjectiveMin lt en -> flatten lt >< flatten en ObjectiveMax lt en -> flatten lt >< flatten en -instance Flattenable ETok LToken where +instance Flattenable LToken where flatten x = case x of RealToken xs et -> flatten xs >< flatten et MissingToken et -> flatten et SkippedToken et -> flatten et -instance Flattenable ETok ETok where +instance Flattenable ETok where flatten = pure -instance Flattenable ETok ExpressionNode where +instance Flattenable ExpressionNode where flatten x = case x of Literal ln -> flatten ln IdentifierNode nn -> flatten nn @@ -91,38 +91,38 @@ instance Flattenable ETok ExpressionNode where AttributeAsConstriant l1 exprs -> flatten l1 >< flatten exprs MissingExpressionNode e -> flatten e -instance Flattenable ETok SpecialCaseNode where +instance Flattenable SpecialCaseNode where flatten x = case x of ExprWithDecls l1 en l2 sns l3 -> mconcat [flatten l1,flatten en,flatten l2, flatten l2, flatten sns , flatten l3] -instance Flattenable ETok DomainExpressionNode where +instance Flattenable DomainExpressionNode where flatten (DomainExpressionNode a b c) = flatten a >< flatten b >< flatten c -instance Flattenable ETok QuantificationExpressionNode where +instance Flattenable QuantificationExpressionNode where flatten (QuantificationExpressionNode a b c d e f) = mconcat [ flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] -instance Flattenable ETok QuantificationOverNode where +instance Flattenable QuantificationOverNode where flatten x = case x of QuantifiedSubsetOfNode a b -> flatten a >< flatten b QuantifiedMemberOfNode a b -> flatten a >< flatten b QuantifiedDomainNode a -> flatten a -instance Flattenable ETok OverDomainNode where +instance Flattenable OverDomainNode where flatten (OverDomainNode a b) = flatten a >< flatten b -instance Flattenable ETok QuanticationGuard where +instance Flattenable QuanticationGuard where flatten (QuanticationGuard a b ) = flatten a >< flatten b -instance Flattenable ETok AbstractPatternNode where +instance Flattenable AbstractPatternNode where flatten x = case x of AbstractIdentifier nn -> flatten nn AbstractMetaVar lt -> flatten lt AbstractPatternTuple a b -> flatten a >< flatten b AbstractPatternMatrix ln -> flatten ln AbstractPatternSet ln -> flatten ln -instance Flattenable ETok QuantificationPattern where +instance Flattenable QuantificationPattern where flatten (QuantificationPattern en) = flatten en -instance Flattenable ETok LiteralNode where +instance Flattenable LiteralNode where flatten x = case x of IntLiteral lt -> flatten lt BoolLiteral lt -> flatten lt @@ -138,26 +138,26 @@ instance Flattenable ETok LiteralNode where RelationLiteral lt ln -> flatten lt >< flatten ln PartitionLiteral lt ln -> flatten lt >< flatten ln -instance Flattenable ETok PartitionElemNode where +instance Flattenable PartitionElemNode where flatten (PartitionElemNode ln) = flatten ln -instance Flattenable ETok RelationElemNode where +instance Flattenable RelationElemNode where flatten x = case x of RelationElemNodeLabeled lt -> flatten lt RelationElemNodeShort st -> flatten st -instance Flattenable ETok ArrowPairNode where +instance Flattenable ArrowPairNode where flatten (ArrowPairNode a b c) = mconcat [flatten a, flatten b, flatten c] -instance Flattenable ETok RecordMemberNode where +instance Flattenable RecordMemberNode where flatten (RecordMemberNode nn lt en) = mconcat [flatten nn, flatten lt, flatten en] -instance Flattenable ETok LongTuple where +instance Flattenable LongTuple where flatten (LongTuple a b) = flatten a >< flatten b -instance Flattenable ETok ShortTuple where +instance Flattenable ShortTuple where flatten (ShortTuple a) = flatten a -instance Flattenable ETok MatrixLiteralNode where +instance Flattenable MatrixLiteralNode where flatten ( MatrixLiteralNode a b c d e) = mconcat [ flatten a , flatten b @@ -166,9 +166,9 @@ instance Flattenable ETok MatrixLiteralNode where , flatten e ] -instance Flattenable ETok ComprehensionNode where +instance Flattenable ComprehensionNode where flatten (ComprehensionNode a b) = flatten a >< flatten b -instance Flattenable ETok ComprehensionExpressionNode where +instance Flattenable ComprehensionExpressionNode where flatten (ComprehensionExpressionNode a b c d e) = mconcat [ flatten a @@ -178,27 +178,27 @@ instance Flattenable ETok ComprehensionExpressionNode where , flatten e ] -instance Flattenable ETok ComprehensionBodyNode where +instance Flattenable ComprehensionBodyNode where flatten x = case x of CompBodyCondition en -> flatten en CompBodyDomain a b c -> flatten a >< flatten b >< flatten c CompBodyGenExpr a b c -> flatten a >< flatten b >< flatten c CompBodyLettingNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] -instance Flattenable ETok OperatorExpressionNode where +instance Flattenable OperatorExpressionNode where flatten x = case x of PostfixOpNode en pon -> flatten en >< flatten pon PrefixOpNode lt en -> flatten lt >< flatten en BinaryOpNode en lt en' -> mconcat [flatten en, flatten lt, flatten en'] -instance Flattenable ETok PostfixOpNode where +instance Flattenable PostfixOpNode where flatten x = case x of IndexedNode l -> flatten l OpFactorial lt -> flatten lt ApplicationNode ln -> flatten ln ExplicitDomain l1 l2 dom l3 -> mconcat [flatten l1,flatten l2,flatten dom,flatten l3] -instance Flattenable ETok DomainNode where +instance Flattenable DomainNode where flatten x = case x of BoolDomainNode lt -> flatten lt RangedIntDomainNode lt ln -> flatten lt >< flatten ln @@ -218,18 +218,18 @@ instance Flattenable ETok DomainNode where PartitionDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] MissingDomainNode m -> flatten m -instance Flattenable ETok IndexedByNode where +instance Flattenable IndexedByNode where flatten (IndexedByNode a b ) = flatten a >< flatten b -instance (Flattenable ETok a) => Flattenable ETok (Maybe a) where +instance (Flattenable a) => Flattenable (Maybe a) where flatten (Just x) = flatten x flatten Nothing = S.empty -instance Flattenable ETok AttributeNode where +instance Flattenable AttributeNode where flatten x = case x of NamedAttributeNode nn m_e -> flatten nn >< flatten m_e -- NamedExpressionAttribute nn en -> flatten nn >< flatten en -instance Flattenable ETok RangeNode where +instance Flattenable RangeNode where flatten x = case x of SingleRangeNode en -> flatten en OpenRangeNode ddn -> flatten ddn @@ -237,29 +237,29 @@ instance Flattenable ETok RangeNode where LeftUnboundedRangeNode ddn en -> flatten ddn >< flatten en BoundedRangeNode en ddn en' -> mconcat [flatten en, flatten ddn, flatten en'] --- instance Flattenable ETok DoubleDotNode where +-- instance Flattenable DoubleDotNode where -- flatten (DoubleDotNode a b) = flatten a >< flatten b -instance Flattenable ETok NamedDomainNode where +instance Flattenable NamedDomainNode where flatten (NameDomainNode a Nothing) = flatten a flatten (NameDomainNode a (Just (b,c))) = mconcat [flatten a,flatten b,flatten c] -instance Flattenable ETok NameNode where +instance Flattenable NameNode where flatten (NameNode n) = flatten n -instance Flattenable ETok ParenExpressionNode where +instance Flattenable ParenExpressionNode where flatten (ParenExpressionNode a b c) = flatten a >< flatten b >< flatten c -instance Flattenable ETok b => Flattenable ETok (ListNode b) where +instance Flattenable b => Flattenable (ListNode b) where flatten (ListNode l1 seq l2) = mconcat [flatten l1, flatten seq, flatten l2] -instance Flattenable ETok b => Flattenable ETok (Sequence b) where +instance Flattenable b => Flattenable (Sequence b) where flatten (Seq es) = mconcat $ map flatten es -instance Flattenable ETok b => Flattenable ETok (SeqElem b) where +instance Flattenable b => Flattenable (SeqElem b) where flatten (SeqElem v s) = flatten v >< flatten s flatten (MissingSeqElem v s) = flatten v >< flatten s -instance Flattenable ETok b => Flattenable ETok [b] where +instance Flattenable b => Flattenable [b] where flatten = mconcat . map flatten diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index a519b109fd..7a2f0d932b 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -1,5 +1,6 @@ {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE UndecidableInstances #-} module Conjure.Language.Validator where @@ -47,12 +48,32 @@ import Control.Monad.Except (runExcept) import Conjure.Language.TypeOf (TypeOf(typeOf)) +class WithRegion a where + getRegion :: (WithRegion a) => a -> DiagnosticRegion + +instance WithRegion (DiagnosticRegion,a) where + getRegion (r,_) = r + +instance WithRegion DiagnosticRegion where + getRegion = id + +instance WithRegion LToken where + getRegion = symbolRegion + +type RegionTagged a = (DiagnosticRegion,a) +unregion :: RegionTagged a -> a +unregion (_,a) =a + data Typed a = Typed Type a +instance TypeOf (Typed a) where + typeOf (Typed t _) = return t untype :: Typed a -> a untype (Typed _ a) = a +typeOf_ :: Typed a -> Type +typeOf_ (Typed t _) = t untypeAs :: Type -> Maybe (Typed a) -> Validator a untypeAs _ Nothing = return Nothing untypeAs r (Just (Typed t a)) = if let ?typeCheckerMode=RelaxedIntegerTags in typeUnify r t @@ -64,7 +85,7 @@ typeAs t (Just a) = Just $ Typed t a typeAs t Nothing = Nothing (?=>) :: Validator (Typed a) -> Type -> Validator a -v ?=> t = v >>= untypeAs t +v ?=> t = v >>= untypeAs t castAny :: Validator a -> Validator (Typed a) castAny a = typeAs TypeAny <$> a @@ -83,6 +104,7 @@ data ErrorType | SyntaxError Text | SemanticError Text | CustomError Text + | TypeError Type Type -- Expected, got | InternalError --Used to explicitly tag invalid pattern matches | InternalErrorS Text -- Used for giving detail to bug messages deriving (Show,Eq,Ord) @@ -111,10 +133,24 @@ isError _ = False -- | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere -- | NotImplemented String -- deriving (Show) +data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion + deriving Show +data RegionInfo = RegionInfo { + rRegion :: DiagnosticRegion, + rType :: Type, + rDeclaration :: DeclarationType +} deriving Show + +mkDeclaration :: DiagnosticRegion -> Typed a -> RegionInfo +mkDeclaration r (Typed t _) = RegionInfo r t Definition + +mkLiteral :: DiagnosticRegion -> Typed a -> RegionInfo +mkLiteral r (Typed t _) = RegionInfo r t LiteralDecl data ValidatorState = ValidatorState { typeChecking :: Bool, + regionInfo :: [RegionInfo], symbolTable :: SymbolTable, currentContext :: DiagnosticRegion } @@ -122,11 +158,12 @@ data ValidatorState = ValidatorState { instance Default ValidatorState where def = ValidatorState { typeChecking = False, + regionInfo=[], symbolTable=M.empty, currentContext=GlobalRegion } type SymbolTable = (Map Text SymbolTableValue) -type SymbolTableValue = ReferenceTo +type SymbolTableValue = (DiagnosticRegion,Bool,Type) -- instance Show SymbolTableValue where -- show (SType t) = show $ pretty t -- show (SDomain d) = show $ pretty d @@ -158,6 +195,11 @@ putSymbol (Name name,t) = do Just _ -> return True putSymbol _ = return False -- skip types for meta and machine vars +addRegion :: RegionInfo -> ValidatorS () +addRegion r = modify (\x->x{regionInfo=r:regionInfo x}) + + + makeEnumDomain :: Name -> Maybe [Range Expression] -> Domain () Expression makeEnumDomain n es = DomainEnum n es Nothing @@ -173,8 +215,8 @@ getContext = currentContext <$> get setContext :: DiagnosticRegion -> ValidatorS () setContext r = modify (\p -> p{currentContext = r}) -setContextFrom :: Flattenable ETok a => a -> ValidatorS () -setContextFrom = setContext.getRegion +setContextFrom :: Flattenable a => a -> ValidatorS () +setContextFrom a = setContext $ symbolRegion a strict :: Validator a -> ValidatorS a strict a = do Just res <- a; return res @@ -214,7 +256,7 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do let NameNode nt = n checkSymbols [l1] name <- validateIdentifier n - unless (maybe False isValidLanguageName name) (raiseError $ n SyntaxError "Not a valid language name") + unless (maybe False isValidLanguageName name) (raiseError $symbolRegion n SyntaxError "Not a valid language name") nums <- validateSequence_ getNum v return . pure $ LanguageVersion @@ -246,7 +288,7 @@ validateHeuristicStatement lt exp = do IdentifierNode nn -> do x <- validateName nn return $ sequence [SearchHeuristic <$> x] - _ -> invalid $ exp SemanticError "Only identifiers are allowed as heuristics" + _ -> invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics" validateWhereStatement :: WhereStatementNode -> Validator [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do @@ -306,22 +348,27 @@ validateGiven (GivenStatementNode idents l1 domain) = checkSymbols [l1] names <- validateNameList idents Just dom <- validateDomain domain - mapM_ (\x -> putSymbol (x,DeclNoRepr Given x dom NoRegion) ) names - return . pure $ [ FindOrGiven Given nm dom|nm <- names ] + let dType = TypeAny + let declarations = map (flip mkDeclaration (Typed TypeAny 1) . fst) names + mapM_ addRegion declarations + mapM_ (\(r,x) -> putSymbol (x,(r,False,dType)) ) names + return . pure $ [ FindOrGiven Given nm dom|(_,nm) <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do checkSymbols [l1, l2, l3] names <- validateNameList se - mapM_ (\x -> putSymbol (x,Alias (Domain (DomainEnum x Nothing Nothing))) ) names - return . pure $ [GivenDomainDefnEnum n | n <- names] + let eType = TypeAny + mapM_ (\(r,x) -> putSymbol (x,(r,True,eType) )) names + return . pure $ [GivenDomainDefnEnum n | (_,n) <- names] validateFind :: FindStatementNode -> Validator [Declaration] validateFind (FindStatementNode names colon domain) = do checkSymbols [colon] names' <- validateNameList names Just dom <- validateDomain domain - mapM_ (\x -> putSymbol (x,DeclNoRepr Find x (dom) NoRegion) ) names' - return . pure $ [ FindOrGiven Given nm dom|nm <- names'] + let dType = TypeAny + mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' + return . pure $ [ FindOrGiven Given nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> Validator [Declaration] -- Letting [names] be @@ -330,36 +377,47 @@ validateLetting (LettingStatementNode names l1 assign) = do names' <- validateNameList names validateLettingAssignment names' assign -validateLettingAssignment :: [Name] -> LettingAssignmentNode -> Validator [Declaration] +validateLettingAssignment :: [RegionTagged Name] -> LettingAssignmentNode -> Validator [Declaration] validateLettingAssignment names (LettingExpr en) = do Just expr <- validateExpression en setContextFrom en - let expr' = untype expr - mapM_ (\x -> putSymbol (x, Alias $ expr' )) names --TODO need to add type info here - return . pure $ [Letting n expr' | n <- names] + let (t,e) = typeSplit expr + let declarations = map (\(r,_)->mkDeclaration r expr) names + mapM_ addRegion declarations + mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names --TODO need to add type info here + return . pure $ [Letting n e | (_,n) <- names] validateLettingAssignment names (LettingDomain lt dn) = do checkSymbols [lt] Just domain <- validateDomain dn - mapM_ (\x -> putSymbol (x, Alias (Domain domain))) names - return . pure $ [Letting n (Domain domain)| n <- names] + let tDomain = TypeAny + let declarations = map (\(r,_)->mkDeclaration r (Typed tDomain ())) names + mapM_ addRegion declarations + mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names + return . pure $ [Letting n (Domain domain)| (_,n) <- names] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do checkSymbols [l1, l2, l3] members <- validateList_ validateName enames mapM_ - (\n -> do - let nameMap = zip members [1..] + (\(r,n) -> do + let nameMap = zip members ([1..] :: [Int]) let Name n' = n --TODO fix me - void $ putSymbol (n,Alias (Domain (DomainEnum n Nothing (Just nameMap)))) - mapM_ (\(x,i) -> putSymbol (x,Alias (Constant (ConstantInt (TagEnum n') i))) ) $ nameMap + let tVal = TypeInt $ TagEnum n' + addRegion $ RegionInfo {rRegion=r, rType=tVal, rDeclaration=Ref r} + void $ putSymbol (n,(r,True,tVal)) + mapM_ ( + \(x,i) -> putSymbol (x,(r,False,tVal)) + ) nameMap ) names - return . pure $ [LettingDomainDefnEnum n members| n <- names] + return . pure $ [LettingDomainDefnEnum n members| (_,n) <- names] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] Just size <- do s <- validateExpression szExp untypeAs tInt s - mapM_ (\x -> putSymbol (x,Alias (Domain (DomainUnnamed x size))) ) names - return . pure $ [LettingDomainDefnUnnamed n size| n <- names] + let declarations = () + let d = TypeAny + mapM_ (\(r,x) -> putSymbol (x,(r,False,d))) names + return . pure $ [LettingDomainDefnUnnamed n size| (_,n) <- names] -- validate :: Validator a -> Validator (Maybe a) @@ -436,7 +494,7 @@ validateDomain dm = case dm of where validateRangedInt :: Maybe (ListNode RangeNode) -> DomainValidator validateRangedInt (Just ranges) = do - ranges' <- validateList_ validateRange ranges + ranges' <- validateList_ validateRange ranges return . pure $ DomainInt TagInt ranges' validateRangedInt Nothing = return . pure $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> DomainValidator @@ -447,12 +505,12 @@ validateDomain dm = case dm of Just name' <- validateIdentifier name a <- getSymbol name' case a of - Just (Alias (Domain (DomainEnum {}))) ->return . pure $ DomainEnum (Name name') ranges' Nothing - Just t -> invalid $ name InternalError -- $ "Unknown type :" ++ t + Just (_,True,_) ->return . pure $ DomainEnum (Name name') ranges' Nothing + Just t -> invalid $ symbolRegion name InternalError -- $ "Unknown type :" ++ t Nothing -> case ranges' of Nothing -> return . pure $ DomainReference (Name name') Nothing Just _ -> do - raiseError ( name SemanticError "range not supported on non enum ranges") + raiseError (symbolRegion name SemanticError "range not supported on non enum ranges") return . pure $ DomainReference (Name name') Nothing validateTupleDomain :: ListNode DomainNode -> DomainValidator @@ -675,7 +733,7 @@ validateNamedDomainInRecord :: NamedDomainNode -> Validator (Name, Domain () Exp validateNamedDomainInRecord (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of - Nothing -> invalid $ name SemanticError "Dataless not allowed in record" + Nothing -> invalid $ symbolRegion name SemanticError "Dataless not allowed in record" Just (l,d) -> checkSymbols [l] >> validateDomain d return $ (,) <$> name' <*> domain' @@ -691,23 +749,23 @@ validateRange range = case range of e2' <- untypeAs tInt =<< validateExpression e2 return $ RangeBounded <$> e1' <*> e2' -validateArrowPair :: ArrowPairNode -> Validator (Typed Expression, Typed Expression) +validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) validateArrowPair (ArrowPairNode e1 s e2) = do checkSymbols [s] e1' <- validateExpression e1 e2' <- validateExpression e2 - return $ (,) <$> e1' <*> e2' + return $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) <$> e1' <*> e2' validateExpression :: ExpressionNode -> Validator (Typed Expression) validateExpression expr = case expr of Literal ln -> validateLiteral ln IdentifierNode nn -> validateIdentifierExpr nn - MetaVarExpr tok -> do + MetaVarExpr tok -> do Just x <- validateMetaVar tok ; return $ typeAs TypeAny $ pure $ ExpressionMetaVar x QuantificationExpr qen -> validateQuantificationExpression qen OperatorExpressionNode oen -> validateOperatorExpression oen - DomainExpression dex -> castAny $ validateDomainExpression dex + DomainExpression dex -> castAny $ validateDomainExpression dex ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp AbsExpression (ParenExpressionNode l1 exp l2) -> do checkSymbols [l1,l2] @@ -762,13 +820,13 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ do checkSymbols [dot] name' <- validateSymbol name - patterns <- validateSequence_ validateAbstractPattern pats - over' <- validateQuantificationOver over - guard' <- validateQuantificationGuard m_guard - body <- validateExpression expr ?=> TypeAny - let gens = map <$> over' <*> pure patterns - let qBody = Comprehension <$> body <*> ((++) <$> gens <*> guard') - return . todoTypeAny $ mkOp <$> (translateQnName <$> name') <*> ((:[]) <$> qBody) + over' <- validateQuantificationOver pats over + -- patterns <- validateSequence_ validateAbstractPattern pats + g' <- validateQuantificationGuard m_guard + let guard' = fromMaybe [] g' + Just body <- validateExpression expr ?=> TypeAny + let qBody = Comprehension body (over'++guard') + return . todoTypeAny $ mkOp <$> (translateQnName <$> name') <*> pure [qBody] where validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] validateQuantificationGuard Nothing = return $ pure [] @@ -777,20 +835,28 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ setContextFrom exp Just expr' <- validateExpression exp ?=> TypeBool return . pure $ [Condition expr'] - validateQuantificationOver :: QuantificationOverNode -> Validator (AbstractPattern -> GeneratorOrCondition) - validateQuantificationOver ( QuantifiedSubsetOfNode lt en ) = do + validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] + validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do checkSymbols [lt] + ps <- sequenceElems pats Just exp <- validateExpression en - return . pure $ (\pat -> Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (untype exp))) - validateQuantificationOver ( QuantifiedMemberOfNode lt en ) = do + let (t,e) = typeSplit exp + apats <- unifyPatterns t ps + return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (untype exp)) | pat <- apats] + validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do checkSymbols [lt] - Just exp <- validateExpression en ?=> TypeAny - q <- getType exp - return . pure $ (\pat -> Generator $ GenInExpr pat exp) - validateQuantificationOver ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do + ps <- sequenceElems pats + Just exp <- validateExpression en + let (t,e) = typeSplit exp + apats <- unifyPatterns t ps + return [Generator $ GenInExpr pat e|pat <- apats] + validateQuantificationOver pats ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do checkSymbols [l1] + ps <- sequenceElems pats Just dom' <- validateDomain dom - return . pure $ (\pat -> Generator $ GenDomainNoRepr pat dom') + let dType = TypeAny + apats <- unifyPatterns dType ps + return [ Generator $ GenDomainNoRepr pat dom'| pat <- apats] @@ -831,8 +897,8 @@ validateFunctionApplication name args = do validateIdentifierExpr :: NameNode -> Validator (Typed Expression) validateIdentifierExpr name = do Just n <- validateIdentifier name - ref <- setContextFrom name >> (tryResolveReference $ Name n) - return . todoTypeAny . pure $ Reference (Name n) ref + t <- resolveReference (symbolRegion name,Name n) + return . typeAs t . pure $ Reference (Name n) Nothing validateOperatorExpression :: OperatorExpressionNode -> Validator (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do @@ -878,13 +944,13 @@ validatePostfixOp (IndexedNode ln) = do validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do checkSymbols [l1,l2,l3] Just dom' <- validateDomain dom - let t = getType dom' + let t = getDType dom' case t of - Nothing -> invalid $ dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) + Nothing -> invalid $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) Just ty -> return . pure $ (\(Typed t ex) -> Typed ty $ D.Typed ex ty) where - getType :: Domain () Expression -> Maybe Type - getType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d + getDType :: Domain () Expression -> Maybe Type + getDType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d @@ -946,9 +1012,9 @@ validateVariantLiteral :: ListNode RecordMemberNode -> Validator (Typed Expressi validateVariantLiteral ln = do members <- validateList_ validateRecordMember ln case members of - [] -> invalid $ ln SemanticError "Variants must contain exactly one member" + [] -> invalid $ symbolRegion ln SemanticError "Variants must contain exactly one member" [(n,x)]-> return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n (untype x) - _:_ -> invalid $ ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected + _:_ -> invalid $ symbolRegion ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected @@ -962,74 +1028,96 @@ validateRecordMember (RecordMemberNode name lEq expr) = do validateFunctionLiteral :: ListNode ArrowPairNode -> Validator (Typed Expression) validateFunctionLiteral ln = do pairs <- validateList_ validateArrowPair ln - let pairs' = map (\(x,y)->(untype x,untype y)) pairs - return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitFunction pairs' + let (pl,pr) = unzip pairs + (lhType,ls) <- typeSplit <$> sameType pl + (rhType,rs) <- typeSplit <$> sameType pr + let fType = TypeFunction lhType rhType + return . typeAs fType . pure $ mkAbstractLiteral $ AbsLitFunction $ zip ls rs validateSetLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) validateSetLiteral ls = do - xs <- validateList_ validateExpression ls - let eType = TypeMSet tInt - return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitSet (map untype xs) + xs <- validateList validateExpression ls + (t,es) <- typeSplit <$> sameType xs + return . typeAs (TypeSet t) . pure $ mkAbstractLiteral $ AbsLitSet es validateMSetLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) validateMSetLiteral ls = do xs <- validateList validateExpression ls - let eType = TypeMSet tInt - let result = mkAbstractLiteral . AbsLitMSet . map (untype . snd) $ xs - return .pure $ Typed eType result + (t,es) <-typeSplit<$> sameType xs + let eType = TypeMSet t + let result = mkAbstractLiteral $ AbsLitMSet es + return . pure $ Typed eType result + + validateMatrixLiteral :: MatrixLiteralNode -> Validator (Typed Expression) +--Matrix proper validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do checkSymbols [l1,l2] elems <- validateSequence validateExpression se - dom <- validateOverDomain m_dom - let lit = do - let xs = map (untype . snd) elems - case dom of - Just (Just d) -> return $ AbsLitMatrix d xs - _ -> return $ AbsLitMatrix (mkDomainIntB 1 (fromInt $ genericLength xs)) xs - pure . typeAs TypeAny $mkAbstractLiteral <$> lit + (t,es) <- typeSplit <$> sameType elems + let defaultDomain :: Domain () Expression = (mkDomainIntB 1 (fromInt $ genericLength elems)) + dom <- fromMaybe defaultDomain <$> validateOverDomain m_dom + let lit = AbsLitMatrix dom es + pure . typeAs (TypeMatrix tInt t) . pure $ mkAbstractLiteral lit where - validateOverDomain :: Maybe OverDomainNode -> Validator (Maybe (Domain () Expression)) - validateOverDomain Nothing = pure Nothing - validateOverDomain (Just (OverDomainNode l3 dom)) = checkSymbols [l3] >> Just<$> validateDomain dom - + validateOverDomain :: Maybe OverDomainNode -> Validator ((Domain () Expression)) + validateOverDomain Nothing = return Nothing + validateOverDomain (Just (OverDomainNode l3 dom)) = checkSymbols [l3] >> validateDomain dom +-- Matrix as comprehension validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do checkSymbols [l1,l2] - elems <- Just <$> validateSequence_ validateExpression se - gens <- validateComprehension comp - enforceConstraint ((\x -> length x == 1 )<$> elems) "List comprehension must contain exactly one expression before |" - return $ do - ms <- elems - gs <- gens - case ms of - [x] -> return . Typed TypeAny $ Comprehension (untype x) gs - _ -> Nothing - + case m_dom of + Nothing -> return () + Just p@(OverDomainNode l3 dom) -> do + checkSymbols [l3] + void $ validateDomain dom + raiseError $ symbolRegion p SemanticError "Index domains are not supported in comprehensions" + scoped $ + do + --check gens and put locals into scope + gens <- validateComprehension comp + --now validate expression(s) + es <- validateSequence validateExpression se + Just r <- case es of + [] -> invalid $ symbolRegion se SemanticError "MissingExpression" + ((_,x):xs) -> flagExtraExpressions xs >> (return . pure $ x) + let bodyType = typeOf_ r + return . pure . Typed (TypeList bodyType) $ Comprehension (untype r) gens + where + flagExtraExpressions :: [RegionTagged a] -> ValidatorS () + flagExtraExpressions [] = pure () + flagExtraExpressions xs = raiseError $ catRegions xs SemanticError "Comprehensension may have only one expression before |" -validateComprehension :: ComprehensionNode -> Validator [GeneratorOrCondition] +validateComprehension :: ComprehensionNode -> ValidatorS [GeneratorOrCondition] validateComprehension (ComprehensionNode l1 body) = do checkSymbols [l1] - pure . concat <$> validateSequence_ validateComprehensionBody body + concat <$> validateSequence_ validateComprehensionBody body validateComprehensionBody :: ComprehensionBodyNode -> Validator [GeneratorOrCondition] +--guard validateComprehensionBody (CompBodyCondition en) = do Just e <- validateExpression en assertType e TypeBool "Guards must be bools" return . pure $ [Condition $ untype e] +--x in dom validateComprehensionBody (CompBodyDomain apn l1 dom) = do checkSymbols [l1] - pats <- validateSequence_ validateAbstractPattern apn Just domain <- validateDomain dom + pats <- validateSequence_ (flip unifyPattern TypeAny . Just) apn return . pure $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] +-- x <- expr validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] - pats <- validateSequence_ validateAbstractPattern apn - Just exp <- validateExpression en - return . pure $ [Generator (GenInExpr pat (untype exp))| pat <- pats] + Just e <- validateExpression en + let (t,exp) = typeSplit e + pats <- validateSequence_ (flip unifyPattern t . Just) (apn) + -- pats <- validateSequence_ validateAbstractPattern apn + return . pure $ [Generator (GenInExpr pat exp)| pat <- pats] +--letting x be validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do checkSymbols [l1,l2] pat <- validateAbstractPattern nn @@ -1080,8 +1168,12 @@ validateBoolLiteral t = do L_true -> return . pure $ ConstantBool True L_false -> return . pure $ ConstantBool False _ -> invalid $ t InternalError -validateNameList :: Sequence NameNode -> ValidatorS [Name] -validateNameList = validateSequence_ validateName + +validateNameList :: Sequence NameNode -> ValidatorS [RegionTagged Name] +validateNameList = validateSequence validateName + +validateNameList_ :: Sequence NameNode -> ValidatorS [Name] +validateNameList_ = validateSequence_ validateName validateIdentifier :: NameNode -> Validator Text validateIdentifier (NameNode iden) = do @@ -1100,16 +1192,30 @@ validateName name = do n <- validateIdentifier name return $ (Name <$> n) +listToSeq :: ListNode a -> ValidatorS (Sequence a) +listToSeq (ListNode l1 s l2) = checkSymbols [l1,l2] >> return s + +--visit a sequence, return a list of elements, nothing if missing +sequenceElems :: (Flattenable a) => Sequence a -> ValidatorS [Maybe a] +sequenceElems (Seq els) = mapM (validateSequenceElem_ validateIdentity) els + +listElems :: Flattenable a => ListNode a -> ValidatorS [Maybe a] +listElems = sequenceElems <=< listToSeq + + +validateIdentity :: a -> Validator a +validateIdentity = return . pure + validateArray :: (a -> Validator b) -> [a] -> ValidatorS [b] validateArray f l = catMaybes <$> mapM f l -validateList :: (a -> Validator b) -> ListNode a -> ValidatorS [(a,b)] +validateList :: (Flattenable a) =>(a -> Validator b) -> ListNode a -> ValidatorS [RegionTagged b] validateList validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end validateSequence validator seq -validateList_ :: (a -> Validator b) -> ListNode a -> ValidatorS [b] +validateList_ :: (Flattenable a) =>(a -> Validator b) -> ListNode a -> ValidatorS [b] validateList_ validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end @@ -1120,25 +1226,34 @@ validateList_ validator (ListNode st seq end) = do -- L_Minus -> "negate" -- L_ExclamationMark -> "not" -- _ -> pack $ lexemeFace x -validateSequence :: (a -> Validator b) -> Sequence a -> ValidatorS [(a,b)] + +validateSequence :: (Flattenable a) =>(a -> Validator b) -> Sequence a -> ValidatorS [RegionTagged b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals -validateSequence_ :: (a -> Validator b) -> Sequence a -> ValidatorS [b] +validateSequence_ :: (Flattenable a) =>(a -> Validator b) -> Sequence a -> ValidatorS [b] validateSequence_ f s = do q <- validateSequence f s return . map snd $ q -validateSequenceElem :: (a -> Validator b) -> SeqElem a -> Validator (a,b) +validateSequenceElem :: (Flattenable a) => (a -> Validator b) -> SeqElem a -> Validator (RegionTagged b) validateSequenceElem f (SeqElem i s) = do - case s of + case s of Nothing -> pure () Just lt -> void $ validateSymbol lt v <- f i return (case v of Nothing -> Nothing - Just b -> Just (i,b)) -validateSequenceElem f (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( plc TokenError plc) + Just b -> Just (symbolRegion i,b)) +validateSequenceElem _ (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( symbolRegion plc TokenError plc) + +validateSequenceElem_ :: (Flattenable a) => (a -> Validator b) -> SeqElem a -> Validator (b) +validateSequenceElem_ f (SeqElem i s) = do + case s of + Nothing -> pure () + Just lt -> void $ validateSymbol lt + f i +validateSequenceElem_ _ (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( symbolRegion plc TokenError plc) -validateExprList :: ListNode ExpressionNode -> ValidatorS [(ExpressionNode,Typed Expression)] +validateExprList :: ListNode ExpressionNode -> ValidatorS [RegionTagged (Typed Expression)] validateExprList = validateList validateExpression validateExprList_ :: ListNode ExpressionNode -> ValidatorS [Typed Expression] validateExprList_ = validateList_ validateExpression @@ -1168,31 +1283,31 @@ data DiagnosticRegion = DiagnosticRegion { -- SkippedToken _ -> trueLength h -- DiagnosticRegion start (offsetPositionBy tLength start) offset tLength -getRegion :: Flattenable ETok a => a -> DiagnosticRegion -getRegion a = case range of - (h :<| rst) -> do - let end =case viewr rst of - EmptyR -> h - _ :> et -> et - let start = tokenSourcePos h - let offset = tokenStart h - let tLength = let some :|> last = range in sum (totalLength <$> some) + trueLength last --TODO Tidy up - let en = tokenSourcePos end - DiagnosticRegion start (offsetPositionBy (trueLength end) en) offset tLength - _ -> GlobalRegion - where range :: Seq ETok = flatten a - - -() :: Flattenable ETok a => a -> ErrorType -> ValidatorDiagnostic +symbolRegion :: Flattenable a => a -> DiagnosticRegion +symbolRegion a = case range of + (h :<| rst) -> do + let end =case viewr rst of + EmptyR -> h + _ :> et -> et + let start = tokenSourcePos h + let offset = tokenStart h + let tLength = let some :|> last = range in sum (totalLength <$> some) + trueLength last --TODO Tidy up + let en = tokenSourcePos end + DiagnosticRegion start (offsetPositionBy (trueLength end) en) offset tLength + _ -> GlobalRegion + where range :: Seq ETok = flatten a + + +() :: WithRegion a => a -> ErrorType -> ValidatorDiagnostic t e = ValidatorDiagnostic (getRegion t) $ Error e -() :: Flattenable ETok a => a -> WarningType -> ValidatorDiagnostic -t e = ValidatorDiagnostic (getRegion t) $ Warning e +(/!\) :: WithRegion a => a -> WarningType -> ValidatorDiagnostic +t /!\ e = ValidatorDiagnostic (getRegion t) $ Warning e -() :: Flattenable ETok a => a -> InfoType -> ValidatorDiagnostic +() :: WithRegion a => a -> InfoType -> ValidatorDiagnostic t e = ValidatorDiagnostic (getRegion t) $ Info e -() :: Flattenable ETok a => Maybe a -> ErrorType -> ValidatorDiagnostic +() :: WithRegion a => Maybe a -> ErrorType -> ValidatorDiagnostic Nothing e = ValidatorDiagnostic GlobalRegion $ Error e Just t e = t e @@ -1218,21 +1333,108 @@ getType a = do return TypeAny Right t -> return t) else return TypeAny) + assertType :: (Pretty a,TypeOf a) => Typed a -> Type -> Text -> ValidatorS () assertType v ref msg = do let Typed t _ = v tc <- gets typeChecking unless (not tc || t == ref) $ void . contextError $ CustomError msg -tryResolveReference :: Name -> ValidatorS (Maybe ReferenceTo) -tryResolveReference (Name n) = do +resolveReference :: RegionTagged Name -> ValidatorS Type +resolveReference (r,Name n) = do c <- getSymbol n case c of - Nothing -> contextError (CustomError . pack $ "Symbol not found "++ show n) >> return Nothing - Just _ -> return c -tryResolveReference _ = return Nothing - - + Nothing -> raiseError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return TypeAny + Just (reg,_,t) -> do + addRegion (RegionInfo {rRegion=r, rType=t, rDeclaration=Ref reg}) + return t +resolveReference _ = return TypeAny + +sameType :: [RegionTagged (Typed a)] -> ValidatorS (Typed [a]) +sameType [] = return $ Typed TypeAny [] +sameType xs@(x:_) = do + let ?typeCheckerMode = RelaxedIntegerTags + let t = mostDefined $ map (typeOf_.snd) xs + let t' = mostDefined [t , typeOf_ $ snd x] --Do this again to set type to first elem if possible + xs' <- mapM (unifyTypes t') xs + return $ Typed t' xs' + +unifyTypes :: Type -> RegionTagged (Typed a) -> ValidatorS a +unifyTypes _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> return a +unifyTypes t (r,Typed t' a) = do + let ?typeCheckerMode = StronglyTyped + if typesUnify [t', t] then pure () else raiseError $ r TypeError t t' + return a + +scoped :: ValidatorS a -> ValidatorS a +scoped m = do + st <- gets symbolTable + res <- m + modifySymbolTable $ const st + return res + +unifyPatterns :: Type -> [Maybe AbstractPatternNode] -> ValidatorS [AbstractPattern] +unifyPatterns t xs = catMaybes <$> mapM (flip unifyPattern t) xs + +unifyPattern :: Maybe AbstractPatternNode -> Type -> Validator AbstractPattern +unifyPattern (Just (AbstractIdentifier nn)) t = do + Just (Name n) <- validateName nn + traceM $ show n ++ ":" ++ show t + --dont put symbol if _ ? + void $ putSymbol (Name n,(symbolRegion nn,False,t)) + addRegion (RegionInfo (symbolRegion nn) t Definition) + return . pure $ Single $ Name n + +unifyPattern (Just(AbstractMetaVar lt)) _ = do + s <- validateMetaVar lt + return $ AbstractPatternMetaVar <$> s + +unifyPattern (Just(AbstractPatternTuple m_lt ln)) t = do + sps <-listToSeq ln + ps <-sequenceElems sps + case m_lt of + Nothing -> void $ return () + Just lt -> checkSymbols [lt] + memberTypes <- getMemberTypes t + let q = zip ps memberTypes + aps <- catMaybes <$> mapM (uncurry unifyPattern) q + return . pure $ AbsPatTuple aps + +unifyPattern (Just(AbstractPatternMatrix ln)) t = do + sps <-listToSeq ln + ps <-sequenceElems sps + memberTypes <- getMemberTypes t + let q = zip ps memberTypes + aps <- catMaybes <$> mapM (uncurry unifyPattern) q + return . pure $ AbsPatMatrix aps + +unifyPattern (Just(AbstractPatternSet ln)) t = do + sps <-listToSeq ln + ps <-sequenceElems sps + memberTypes <- getMemberTypes t + let q = zip ps memberTypes + aps <- catMaybes <$> mapM (uncurry unifyPattern) q + return . pure $ AbsPatSet aps + +unifyPattern Nothing _ = return $ Nothing + + +catRegions :: [RegionTagged a] -> DiagnosticRegion +catRegions [] = GlobalRegion +catRegions xs = DiagnosticRegion { + drSourcePos=drSourcePos .fst $ head xs, + drEndPos=drEndPos .fst $ last xs, + drOffset=drOffset.fst $ head xs, + drLength=sum $ map (drLength.fst) xs + } + + +getMemberTypes :: Type -> ValidatorS [Type] +getMemberTypes t = case t of + TypeAny -> return $ repeat TypeAny +-- TypeUnnamed na -> + TypeTuple tys -> return tys + _ -> return $ repeat TypeAny -- unifyAbstractPatternOverExpression :: AbstractPatternNode -> Expression -> Validator (Name,Type) -- unifyAbstractPatternOverExpression pat exp = do -- t <- typeOf exp diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index e7b32a4e78..4bca1b5ddc 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -11,6 +11,7 @@ import Conjure.Language.Lexemes import qualified Data.Text import qualified Data.Text as T import Data.Map.Strict (mapWithKey, assocs) +import Conjure.Language.Expression.Op.Internal.Common (Pretty(..)) @@ -36,6 +37,7 @@ displayError x = case x of SyntaxError txt -> "Syntax Error: " ++ T.unpack txt SemanticError txt -> "Semantic error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt + TypeError expected got -> "Type error: Expected :" ++ show (pretty expected) ++ " Got:" ++ show (pretty got) InternalError -> "Pattern match failiure" InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt @@ -48,7 +50,7 @@ showDiagnosticsForConsole errs text printSymbolTable :: SymbolTable -> IO () printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs tab) - where + where printEntry :: (Text ,SymbolTableValue) -> IO () printEntry (a,b) = putStrLn $ show a ++ ":" ++ show b @@ -84,6 +86,7 @@ val s = do print (maybe "" show model) putStrLn $ show vds printSymbolTable $ symbolTable st + putStrLn $ show $ regionInfo st putStrLn $ showDiagnosticsForConsole vds txt From fc6ef45b87fefd53005df311aa56ad51cb181110 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 18 Nov 2022 18:42:54 +0000 Subject: [PATCH 095/378] Wip type checking --- src/Conjure/Language/Validator.hs | 747 ++++++++++++++++-------------- src/Conjure/UI/ErrorDisplay.hs | 7 +- 2 files changed, 408 insertions(+), 346 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 7a2f0d932b..41d2f12f7a 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -46,6 +46,7 @@ import Data.Sequence (Seq (..), viewr, ViewR (..)) import Conjure.Language.Pretty (Pretty(pretty)) import Control.Monad.Except (runExcept) import Conjure.Language.TypeOf (TypeOf(typeOf)) +import Control.Applicative class WithRegion a where @@ -74,17 +75,17 @@ untype (Typed _ a) = a typeOf_ :: Typed a -> Type typeOf_ (Typed t _) = t -untypeAs :: Type -> Maybe (Typed a) -> Validator a -untypeAs _ Nothing = return Nothing -untypeAs r (Just (Typed t a)) = if let ?typeCheckerMode=RelaxedIntegerTags in typeUnify r t - then return $ Just a - else contextError $ CustomError "Type error" + +untypeAs ::(Fallback a) => Type -> Typed a -> ValidatorS a +untypeAs r ((Typed t a)) = if let ?typeCheckerMode=RelaxedIntegerTags in typeUnify r t + then return $ a + else contextError (TypeError r t) >> return a typeAs :: Type -> Maybe a -> Maybe (Typed a) typeAs t (Just a) = Just $ Typed t a typeAs t Nothing = Nothing -(?=>) :: Validator (Typed a) -> Type -> Validator a +(?=>) :: ValidatorS (Typed a) -> Type -> ValidatorS a v ?=> t = v >>= untypeAs t castAny :: Validator a -> Validator (Typed a) @@ -263,137 +264,134 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do (Name $ fromMaybe "Essence" name) (if null nums then [1,3] else nums) where - getNum :: LToken -> Validator Int + getNum :: LToken -> ValidatorS Int getNum c = do c' <- validateSymbol c case c' of - Just (LIntLiteral x) -> return . pure $ fromInteger x - _ -> invalid $ c InternalError + Just (LIntLiteral x) -> return $ fromInteger x + _ -> 0 <* invalid $ c InternalError -validateStatement :: StatementNode -> Validator [Statement] +validateStatement :: StatementNode -> ValidatorS [Statement] validateStatement (DeclarationStatement dsn) = validateDeclarationStatement dsn validateStatement (BranchingStatement bsn) = validateBranchingStatement bsn validateStatement (SuchThatStatement stsn) = validateSuchThatStatement stsn validateStatement (WhereStatement wsn) = validateWhereStatement wsn validateStatement (ObjectiveStatement osn) = validateObjectiveStatement osn validateStatement (HeuristicStatement lt exp) = validateHeuristicStatement lt exp -validateStatement (UnexpectedToken lt) = invalid $ lt CustomError "Unexpected" --TODO address as part of skip token refactor +validateStatement (UnexpectedToken lt) = return [] <* (invalid $ lt CustomError "Unexpected") --TODO address as part of skip token refactor -validateHeuristicStatement :: LToken -> ExpressionNode -> Validator [Statement] +validateHeuristicStatement :: LToken -> ExpressionNode -> ValidatorS [Statement] validateHeuristicStatement lt exp = do + let validHeuristics = ["static"] checkSymbols [lt] _ <- validateExpression exp case exp of IdentifierNode nn -> do x <- validateName nn - return $ sequence [SearchHeuristic <$> x] - _ -> invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics" + return $ [SearchHeuristic x] + _ -> return [] <* (invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics") + -validateWhereStatement :: WhereStatementNode -> Validator [Statement] +validateWhereStatement :: WhereStatementNode -> ValidatorS [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do checkSymbols [l1] - ws <- Where <$> validateSequence_ (\x -> do - e <- validateExpression x - untypeAs TypeBool e) exprs - return . pure $ [ws] + ws <- Where <$> validateSequence_ (\x -> validateExpression x ?=> TypeBool) exprs + return [ws] -validateObjectiveStatement :: ObjectiveStatementNode -> Validator [Statement] +validateObjectiveStatement :: ObjectiveStatementNode -> ValidatorS [Statement] validateObjectiveStatement (ObjectiveMin lt en) = do checkSymbols [lt] - Just exp <- validateExpression en - return . pure $ [Objective Minimising $ untype exp] + exp <- validateExpression en + return [Objective Minimising $ untype exp] validateObjectiveStatement (ObjectiveMax lt en) =do checkSymbols [lt] - Just exp <- validateExpression en - return . pure $ [Objective Maximising $ untype exp] + exp <- validateExpression en + return [Objective Maximising $ untype exp] -validateSuchThatStatement :: SuchThatStatementNode -> Validator [Statement] +validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do checkSymbols [l1, l2] - exprs' <- validateSequence_ validateExpression exprs - bools <- mapM (untypeAs TypeBool . pure) exprs' - let bool_exprs = catMaybes bools - return . pure $ [SuchThat bool_exprs] + exprs' <- validateSequence (validateExpression) exprs + bools <- mapM (\(a,b)->do setContextFrom a; untypeAs TypeBool b) exprs' + let bool_exprs = bools + return [SuchThat bool_exprs] -validateBranchingStatement :: BranchingStatementNode -> Validator [Statement] +validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do checkSymbols [l1, l2] branchings <- validateList_ validateBranchingParts sts - return . pure $ [SearchOrder branchings] + return $ [SearchOrder branchings] where - validateBranchingParts :: ExpressionNode -> Validator SearchOrder + validateBranchingParts :: ExpressionNode -> ValidatorS SearchOrder validateBranchingParts (IdentifierNode nn) = do n <- validateName nn - return $ BranchingOn <$> n + return $ BranchingOn n validateBranchingParts exp = do - x <- validateExpression exp - return $ Cut . untype <$> x + x <- validateExpression exp ?=> TypeAny + return $ Cut x -validateDeclarationStatement :: DeclarationStatementNode -> Validator [Statement] +validateDeclarationStatement :: DeclarationStatementNode -> ValidatorS [Statement] validateDeclarationStatement stmt = do - Just stmt' <- case stmt of + stmt' <- case stmt of FindStatement l1 fs -> checkSymbols [l1] >> validateStatementSeq validateFind fs GivenStatement l1 gs -> checkSymbols [l1] >> validateStatementSeq validateGiven gs LettingStatement l1 ls -> checkSymbols [l1] >> validateStatementSeq validateLetting ls - return . pure $ Declaration <$> stmt' + return $ Declaration <$> stmt' where validateStatementSeq v l= do decls <- validateSequence_ v l - return $ pure $ concat decls + return $ concat decls -validateGiven :: GivenStatementNode -> Validator [Declaration] +validateGiven :: GivenStatementNode -> ValidatorS [Declaration] validateGiven (GivenStatementNode idents l1 domain) = do checkSymbols [l1] names <- validateNameList idents - Just dom <- validateDomain domain - let dType = TypeAny + (dType, dom) <- typeSplit <$> validateDomain domain let declarations = map (flip mkDeclaration (Typed TypeAny 1) . fst) names mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x,(r,False,dType)) ) names - return . pure $ [ FindOrGiven Given nm dom|(_,nm) <- names ] + return $ [ FindOrGiven Given nm dom|(_,nm) <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do checkSymbols [l1, l2, l3] names <- validateNameList se - let eType = TypeAny + let eType = TypeAny --TODO fixme mapM_ (\(r,x) -> putSymbol (x,(r,True,eType) )) names - return . pure $ [GivenDomainDefnEnum n | (_,n) <- names] + return $ [GivenDomainDefnEnum n | (_,n) <- names] -validateFind :: FindStatementNode -> Validator [Declaration] +validateFind :: FindStatementNode -> ValidatorS [Declaration] validateFind (FindStatementNode names colon domain) = do checkSymbols [colon] names' <- validateNameList names - Just dom <- validateDomain domain - let dType = TypeAny + (dType, dom) <- typeSplit <$> validateDomain domain mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' - return . pure $ [ FindOrGiven Given nm dom|(_,nm) <- names'] + return $ [ FindOrGiven Given nm dom|(_,nm) <- names'] -validateLetting :: LettingStatementNode -> Validator [Declaration] +validateLetting :: LettingStatementNode -> ValidatorS [Declaration] -- Letting [names] be validateLetting (LettingStatementNode names l1 assign) = do checkSymbols [l1] names' <- validateNameList names validateLettingAssignment names' assign -validateLettingAssignment :: [RegionTagged Name] -> LettingAssignmentNode -> Validator [Declaration] +validateLettingAssignment :: [RegionTagged Name] -> LettingAssignmentNode -> ValidatorS [Declaration] validateLettingAssignment names (LettingExpr en) = do - Just expr <- validateExpression en + expr <- validateExpression en setContextFrom en let (t,e) = typeSplit expr let declarations = map (\(r,_)->mkDeclaration r expr) names mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names --TODO need to add type info here - return . pure $ [Letting n e | (_,n) <- names] + return $ [Letting n e | (_,n) <- names] validateLettingAssignment names (LettingDomain lt dn) = do checkSymbols [lt] - Just domain <- validateDomain dn - let tDomain = TypeAny + (tDomain,domain) <- typeSplit <$> validateDomain dn let declarations = map (\(r,_)->mkDeclaration r (Typed tDomain ())) names mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names - return . pure $ [Letting n (Domain domain)| (_,n) <- names] + return $ [Letting n (Domain domain)| (_,n) <- names] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do checkSymbols [l1, l2, l3] members <- validateList_ validateName enames @@ -408,16 +406,16 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do \(x,i) -> putSymbol (x,(r,False,tVal)) ) nameMap ) names - return . pure $ [LettingDomainDefnEnum n members| (_,n) <- names] + return $ [LettingDomainDefnEnum n members| (_,n) <- names] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] - Just size <- do - s <- validateExpression szExp - untypeAs tInt s - let declarations = () - let d = TypeAny - mapM_ (\(r,x) -> putSymbol (x,(r,False,d))) names - return . pure $ [LettingDomainDefnUnnamed n size| (_,n) <- names] + size <- do + setContextFrom szExp + validateExpression szExp ?=> tInt + let d = TypeUnnamed + --TODO delcs + mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names + return $ [LettingDomainDefnUnnamed n size| (_,n) <- names] -- validate :: Validator a -> Validator (Maybe a) @@ -464,18 +462,18 @@ validateSymbol s = -- [MissingTokenError ] +type TypedDomain = Typed (Domain () Expression) +type DomainValidator = Validator TypedDomain -type DomainValidator = Validator (Domain () Expression) - -validateDomainWithRepr :: DomainNode -> Validator (Domain HasRepresentation Expression) +validateDomainWithRepr :: DomainNode -> ValidatorS (Typed (Domain HasRepresentation Expression)) validateDomainWithRepr dom = do - dom' <- validateDomain dom - return $ changeRepr NoRepresentation <$> dom' + (t,dom') <- typeSplit <$> validateDomain dom + return . (Typed t) $ changeRepr NoRepresentation dom' -validateDomain :: DomainNode -> DomainValidator +validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of - MetaVarDomain lt -> do mv <- validateMetaVar lt ; return $ DomainMetaVar <$> mv + MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv BoolDomainNode lt -> pure <$> (validateSymbol lt >> return DomainBool) RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges @@ -490,94 +488,108 @@ validateDomain dm = case dm of SequenceDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSequenceDomain attrs dom RelationDomainNode l1 attrs l2 doms -> checkSymbols [l1, l2] >> validateRelationDomain attrs doms PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validatePartitionDomain attrs dom - MissingDomainNode lt -> invalid $ lt TokenError lt + MissingDomainNode lt -> do raiseError $ lt TokenError lt; return $ fallback "Missing Domain" where - validateRangedInt :: Maybe (ListNode RangeNode) -> DomainValidator + validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateRangedInt (Just ranges) = do - ranges' <- validateList_ validateRange ranges - return . pure $ DomainInt TagInt ranges' - validateRangedInt Nothing = return . pure $ DomainInt TagInt [] - validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> DomainValidator + ranges' <- validateList_ validateRange ranges + return . Typed tInt $ DomainInt TagInt ranges' + validateRangedInt Nothing = return . Typed tInt $ DomainInt TagInt [] + validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateEnumRange name ranges = do ranges' <- case ranges of Just r -> pure <$> validateList_ validateRange r - Nothing -> pure Nothing + Nothing -> return Nothing Just name' <- validateIdentifier name a <- getSymbol name' case a of - Just (_,True,_) ->return . pure $ DomainEnum (Name name') ranges' Nothing - Just t -> invalid $ symbolRegion name InternalError -- $ "Unknown type :" ++ t - Nothing -> case ranges' of - Nothing -> return . pure $ DomainReference (Name name') Nothing + Just (_,True,t) ->return $ Typed t $ DomainEnum (Name name') ranges' Nothing + Just (_,False,t) -> case ranges' of + Nothing -> return . Typed t $ DomainReference (Name name') Nothing Just _ -> do raiseError (symbolRegion name SemanticError "range not supported on non enum ranges") return . pure $ DomainReference (Name name') Nothing - - validateTupleDomain :: ListNode DomainNode -> DomainValidator - validateTupleDomain doms = pure . DomainTuple <$> validateList_ validateDomain doms - validateRecordDomain :: ListNode NamedDomainNode -> DomainValidator - validateRecordDomain namedDoms = pure . DomainRecord <$> validateList_ validateNamedDomainInRecord namedDoms - validateVariantDomain :: ListNode NamedDomainNode -> DomainValidator + Nothing -> return $ fallback "unknown symbol" + + validateTupleDomain :: ListNode DomainNode -> ValidatorS TypedDomain + validateTupleDomain doms = do + (ts,ds) <- unzip . map typeSplit <$> validateList_ validateDomain doms + return $ Typed (TypeTuple ts) (DomainTuple ds) + validateRecordDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain + validateRecordDomain namedDoms = do + lst <- validateList_ validateNamedDomainInVariant namedDoms + let (ts,ds) = unzip $ map (\(x,typeSplit->(t,d))->((x,t),(x,d))) lst + return $ Typed (TypeVariant ts) (DomainVariant ds) + validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateVariantDomain namedDoms = do lst <- validateList_ validateNamedDomainInVariant namedDoms - return . pure $ DomainVariant lst - validateMatrixDomain :: ListNode DomainNode -> DomainNode -> DomainValidator + let (ts,ds) = unzip $ map (\(x,typeSplit->(t,d))->((x,t),(x,d))) lst + return $ Typed (TypeVariant ts) (DomainVariant ds) + validateMatrixDomain :: ListNode DomainNode -> DomainNode -> ValidatorS TypedDomain validateMatrixDomain indexes dom = do idoms <- validateList_ validateDomain indexes dom' <- validateDomain dom - return $ foldr DomainMatrix <$> dom' <*> pure idoms - validateSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator + return $ foldr acc dom' idoms + where + -- TODO: This could well be backwards + acc :: TypedDomain -> TypedDomain -> TypedDomain + acc (Typed t d) (Typed t' d') = Typed (TypeMatrix t t') (DomainMatrix d d') + + + validateSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> ValidatorS TypedDomain validateSetDomain attrs dom = do - let repr = Just () + let repr = () attrs' <- case attrs of Just a -> validateSetAttributes a - Nothing -> return $ Just def - dom' <- validateDomain dom - return $ DomainSet <$> repr <*> attrs' <*> dom' + Nothing -> return $ def + (t,dom') <- typeSplit <$> validateDomain dom + return . Typed (TypeSet t) $ DomainSet repr attrs' dom' - validateMSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator + validateMSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> ValidatorS TypedDomain validateMSetDomain attrs dom = do - let repr = Just () + let repr = () attrs' <- case attrs of Just a -> validateMSetAttributes a - Nothing -> return $ Just def - dom' <- validateDomain dom - return $ DomainMSet <$> repr <*> attrs' <*> dom' - validateFunctionDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainNode -> DomainValidator + Nothing -> return $ def + (t,dom') <- typeSplit <$> validateDomain dom + return . Typed (TypeMSet t) $ DomainMSet repr attrs' dom' + validateFunctionDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainNode -> ValidatorS TypedDomain validateFunctionDomain attrs dom1 dom2 = do let repr = Just () attrs' <- case attrs of Just a -> validateFuncAttributes a - Nothing -> return $ Just def - dom1' <- validateDomain dom1 - dom2' <- validateDomain dom2 - return $ DomainFunction <$> repr <*> attrs' <*> dom1' <*> dom2' + Nothing -> return $ def + (t1,d1) <- typeSplit <$> validateDomain dom1 + (t2,d2) <- typeSplit <$> validateDomain dom2 + let dType = Typed $ TypeFunction t1 t2 + return . dType $ DomainFunction () attrs' d1 d2 -- attrs <- validateAttributes - validateSequenceDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainValidator + validateSequenceDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> ValidatorS TypedDomain validateSequenceDomain attrs dom = do - let repr = Just () + let repr = () attrs' <- case attrs of Just a -> validateSeqAttributes a - Nothing -> return $ Just def - dom' <- validateDomain dom - return $ DomainSequence <$> repr <*> attrs' <*> dom' - validateRelationDomain ::Maybe (ListNode AttributeNode)-> ListNode DomainNode -> DomainValidator + Nothing -> return $ def + (t,dom') <- typeSplit <$> validateDomain dom + return . Typed (TypeSequence t) $ DomainSequence repr attrs' dom' + validateRelationDomain ::Maybe (ListNode AttributeNode)-> ListNode DomainNode -> ValidatorS TypedDomain validateRelationDomain attrs doms = do - let repr = Just () + let repr = () attrs' <- case attrs of Just a -> validateRelationAttributes a - Nothing -> return $ Just def - doms' <- validateList_ validateDomain doms - return $ DomainRelation <$> repr <*> attrs' <*> pure doms' - validatePartitionDomain :: Maybe (ListNode AttributeNode)-> DomainNode -> DomainValidator + Nothing -> return $ def + + (ts,doms') <- unzip . map typeSplit <$> validateList_ validateDomain doms + return . Typed (TypeRelation ts) $ DomainRelation repr attrs' doms' + validatePartitionDomain :: Maybe (ListNode AttributeNode)-> DomainNode -> ValidatorS TypedDomain validatePartitionDomain attrs dom = do - let repr = Just () + let repr = () attrs' <- case attrs of Just a -> validatePartitionAttributes a - Nothing -> return $ Just def - dom' <- validateDomain dom - return $ DomainPartition <$> repr <*> attrs' <*> dom' + Nothing -> return $ def + (t,dom') <- typeSplit <$> validateDomain dom + return . Typed (TypePartition t) $ DomainPartition repr attrs' dom' validateIndexedByNode :: Maybe IndexedByNode -> ValidatorS () validateIndexedByNode Nothing = return () @@ -586,108 +598,108 @@ validateIndexedByNode (Just (IndexedByNode a b)) = checkSymbols [a,b] todo :: Text -> Validator a todo s = invalid $ ValidatorDiagnostic GlobalRegion $ Error $ InternalErrorS (append "Not Implemented: " s) -validateSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) +validateSizeAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS (SizeAttr Expression) validateSizeAttributes attrs = do let sizeAttrs = [L_size,L_minSize,L_maxSize] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of - [] -> return $ Just SizeAttr_None - [(L_size,Just a)] -> return $ Just (SizeAttr_Size a) - [(L_minSize, Just a)] -> return $ Just (SizeAttr_MinSize a) - [(L_maxSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) - [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> contextError $ SemanticError $ pack $ "Incompatible attributes size:" ++ show as - -validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) + [] -> return $ SizeAttr_None + [(L_size,Just a)] -> return $ (SizeAttr_Size a) + [(L_minSize, Just a)] -> return $ (SizeAttr_MinSize a) + [(L_maxSize, Just a)] -> return $ (SizeAttr_MaxSize a) + [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ (SizeAttr_MinMaxSize a b) + as -> def <* contextError $ SemanticError $ pack $ "Incompatible attributes size:" ++ show as + +validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS (SizeAttr Expression) validatePartSizeAttributes attrs = do let sizeAttrs = [L_partSize,L_minPartSize,L_maxPartSize] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of - [] -> return $ Just SizeAttr_None - [(L_partSize,Just a)] -> return $ Just (SizeAttr_Size a) - [(L_minPartSize, Just a)] -> return $ Just (SizeAttr_MinSize a) - [(L_maxPartSize, Just a)] -> return $ Just (SizeAttr_MaxSize a) - [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as - -validateNumPartAttributes :: [(Lexeme,Maybe Expression)] -> Validator (SizeAttr Expression) + [] -> return $ SizeAttr_None + [(L_partSize,Just a)] -> return $ (SizeAttr_Size a) + [(L_minPartSize, Just a)] -> return $ (SizeAttr_MinSize a) + [(L_maxPartSize, Just a)] -> return $ (SizeAttr_MaxSize a) + [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ (SizeAttr_MinMaxSize a b) + as -> def <* contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as + +validateNumPartAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS (SizeAttr Expression) validateNumPartAttributes attrs = do let sizeAttrs = [L_numParts,L_maxNumParts,L_minNumParts] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of - [] -> return $ Just SizeAttr_None - [(L_numParts,Just a)] -> return $ Just (SizeAttr_Size a) - [(L_minNumParts, Just a)] -> return $ Just (SizeAttr_MinSize a) - [(L_maxNumParts, Just a)] -> return $ Just (SizeAttr_MaxSize a) - [(L_minNumParts, Just a),(L_maxNumParts, Just b)] -> return $ Just (SizeAttr_MinMaxSize a b) - as -> contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as + [] -> return $ SizeAttr_None + [(L_numParts,Just a)] -> return $ (SizeAttr_Size a) + [(L_minNumParts, Just a)] -> return $ (SizeAttr_MinSize a) + [(L_maxNumParts, Just a)] -> return $ (SizeAttr_MaxSize a) + [(L_minNumParts, Just a),(L_maxNumParts, Just b)] -> return $ (SizeAttr_MinMaxSize a b) + as -> def <* contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as -validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> Validator JectivityAttr +validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS JectivityAttr validateJectivityAttributes attrs = do let sizeAttrs = [L_injective,L_surjective,L_bijective] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of - [] -> return $ Just JectivityAttr_None - [(L_injective,_)] -> return $ Just JectivityAttr_Injective - [(L_surjective, _)] -> return $ Just JectivityAttr_Surjective - [(L_bijective, _)] -> return $ Just JectivityAttr_Bijective + [] -> return $ JectivityAttr_None + [(L_injective,_)] -> return $ JectivityAttr_Injective + [(L_surjective, _)] -> return $ JectivityAttr_Surjective + [(L_bijective, _)] -> return $ JectivityAttr_Bijective [(L_injective, _),(L_surjective, _)] -> do contextInfo $ UnclassifiedInfo "Inj and Sur can be combined to bijective" - return $ Just JectivityAttr_Bijective - as -> contextError $ SemanticError $ pack $ "Incompatible attributes jectivity" ++ show as + return $ JectivityAttr_Bijective + as ->def <* contextError $ SemanticError $ pack $ "Incompatible attributes jectivity" ++ show as -validateSetAttributes :: ListNode AttributeNode -> Validator (SetAttr Expression) +validateSetAttributes :: ListNode AttributeNode -> ValidatorS (SetAttr Expression) validateSetAttributes atts = do setContextFrom atts - attrs <- validateList_ (validateAttributeNode setValidAttrs) atts + attrs <- catMaybes <$> validateList_ (validateAttributeNode setValidAttrs) atts size <- validateSizeAttributes attrs - return $ SetAttr <$> size + return $ SetAttr size -validateMSetAttributes :: ListNode AttributeNode -> Validator (MSetAttr Expression) +validateMSetAttributes :: ListNode AttributeNode -> ValidatorS (MSetAttr Expression) validateMSetAttributes atts = do setContextFrom atts - attrs <- validateList_ (validateAttributeNode msetValidAttrs) atts + attrs <- catMaybes <$> validateList_ (validateAttributeNode msetValidAttrs) atts size <- validateSizeAttributes attrs occurs <- validateOccursAttrs attrs - return $ MSetAttr <$> size <*> occurs + return $ MSetAttr size occurs where validateOccursAttrs attrs = do let sizeAttrs = [L_minOccur,L_maxOccur] let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of - [] -> return $ Just OccurAttr_None - [(L_minOccur,Just a)] -> return $ Just (OccurAttr_MinOccur a) - [(L_maxOccur, Just a)] -> return $ Just (OccurAttr_MaxOccur a) - [(L_minOccur, Just a),(L_maxOccur, Just b)] -> return $ Just (OccurAttr_MinMaxOccur a b) - as -> contextError $ SemanticError $ pack $ "Bad args to occurs" ++ show as + [] -> return $ OccurAttr_None + [(L_minOccur,Just a)] -> return $ (OccurAttr_MinOccur a) + [(L_maxOccur, Just a)] -> return $ (OccurAttr_MaxOccur a) + [(L_minOccur, Just a),(L_maxOccur, Just b)] -> return $ (OccurAttr_MinMaxOccur a b) + as -> def <* contextError $ SemanticError $ pack $ "Bad args to occurs" ++ show as -validateFuncAttributes :: ListNode AttributeNode -> Validator (FunctionAttr Expression) +validateFuncAttributes :: ListNode AttributeNode -> ValidatorS (FunctionAttr Expression) validateFuncAttributes atts = do - attrs <- validateList_ (validateAttributeNode funAttrs) atts + attrs <- catMaybes <$> validateList_ (validateAttributeNode funAttrs) atts size <- validateSizeAttributes attrs - parts <- return . Just $ if L_total `elem` map fst attrs then PartialityAttr_Total else PartialityAttr_Partial + parts <- return $ if L_total `elem` map fst attrs then PartialityAttr_Total else PartialityAttr_Partial jectivity <- validateJectivityAttributes attrs - return $ FunctionAttr <$> size <*> parts <*> jectivity + return $ (FunctionAttr size parts jectivity) -validateSeqAttributes :: ListNode AttributeNode -> Validator (SequenceAttr Expression) +validateSeqAttributes :: ListNode AttributeNode -> ValidatorS (SequenceAttr Expression) validateSeqAttributes atts = do - attrs <- validateList_ (validateAttributeNode seqAttrs) atts + attrs <- catMaybes <$> validateList_ (validateAttributeNode seqAttrs) atts size <- validateSizeAttributes attrs jectivity <- validateJectivityAttributes attrs - return $ SequenceAttr <$> size <*> jectivity + return $ SequenceAttr size jectivity -validateRelationAttributes :: ListNode AttributeNode -> Validator (RelationAttr Expression) +validateRelationAttributes :: ListNode AttributeNode -> ValidatorS (RelationAttr Expression) validateRelationAttributes atts = do setContextFrom atts - attrs <- validateList_ (validateAttributeNode relAttrs) atts + attrs <- catMaybes <$> validateList_ (validateAttributeNode relAttrs) atts size <- validateSizeAttributes attrs - others <- validateArray validateBinaryRel (filter (\x -> fst x `elem` map fst binRelAttrs) attrs) - return $ RelationAttr <$> size <*> pure (BinaryRelationAttrs $ S.fromList others ) + others <- catMaybes <$> validateArray validateBinaryRel (filter (\x -> fst x `elem` map fst binRelAttrs) attrs) + return $ RelationAttr size (BinaryRelationAttrs $ S.fromList others ) where validateBinaryRel :: (Lexeme , Maybe Expression) -> Validator BinaryRelationAttr validateBinaryRel (l,_) = do @@ -695,14 +707,14 @@ validateRelationAttributes atts = do Just b -> return . pure $ b Nothing ->contextError $ InternalErrorS $ pack $ "Not found (bin rel) " ++ show l -validatePartitionAttributes :: ListNode AttributeNode -> Validator (PartitionAttr Expression) +validatePartitionAttributes :: ListNode AttributeNode -> ValidatorS (PartitionAttr Expression) validatePartitionAttributes atts = do - attrs <- validateList_ (validateAttributeNode partitionAttrs) atts + attrs <- catMaybes <$> validateList_ (validateAttributeNode partitionAttrs) atts --guard size attrs and complete as this is default size <- validateNumPartAttributes attrs partSize <- validatePartSizeAttributes attrs - regular <- return . Just $ L_regular `elem` map fst attrs - return $ PartitionAttr <$> size <*> partSize <*> regular + regular <- return $ L_regular `elem` map fst attrs + return $ PartitionAttr size partSize regular validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,Maybe Expression) validateAttributeNode vs (NamedAttributeNode t Nothing) = do @@ -713,89 +725,94 @@ validateAttributeNode vs (NamedAttributeNode t Nothing) = do Just False -> return . pure $ (name , Nothing) validateAttributeNode vs (NamedAttributeNode t (Just e)) = do + setContextFrom e expr <- validateExpression e ?=> tInt Just name <- validateSymbol t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" Just False -> invalid $ t SemanticError "attribute %name% does not take an argument" - Just True -> return $(\x -> (name,Just x)) <$> expr + Just True -> return . pure $(\x -> (name,Just x)) expr -validateNamedDomainInVariant :: NamedDomainNode -> Validator (Name, Domain () Expression) +validateNamedDomainInVariant :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInVariant (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of Nothing -> return . pure $ DomainInt TagInt [RangeSingle 0] Just (l,d) -> checkSymbols [l] >> validateDomain d - return $ (,) <$> name' <*> domain' + return $ (name' , domain') -validateNamedDomainInRecord :: NamedDomainNode -> Validator (Name, Domain () Expression) +validateNamedDomainInRecord :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInRecord (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of - Nothing -> invalid $ symbolRegion name SemanticError "Dataless not allowed in record" Just (l,d) -> checkSymbols [l] >> validateDomain d - return $ (,) <$> name' <*> domain' + Nothing -> fallback "Dataless RecordMemeber" <* raiseError $ symbolRegion name SemanticError "Dataless not allowed in record" + return $ (name', domain') -validateRange :: RangeNode -> Validator (Range Expression) +validateRange :: RangeNode -> ValidatorS (Range Expression) validateRange range = case range of - SingleRangeNode en -> do ex <- untypeAs tInt =<< validateExpression en ; return $ RangeSingle <$> ex - OpenRangeNode dots -> do checkSymbols [dots] ; return . pure $ RangeOpen - RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ; ex <- untypeAs tInt =<< validateExpression e1 ; return $ RangeLowerBounded <$>ex - LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; ex <- untypeAs tInt =<< validateExpression e1 ; return $ RangeUpperBounded <$> ex + SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=>tInt; return $ RangeSingle ex + OpenRangeNode dots -> do checkSymbols [dots] ; return $ RangeOpen + RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ;setContextFrom e1; ex <- validateExpression e1 ?=> tInt ; return $ RangeLowerBounded ex + LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; setContextFrom e1; ex <- validateExpression e1 ?=> tInt ; return $ RangeUpperBounded ex BoundedRangeNode e1 dots e2 -> do _ <- checkSymbols [dots] - e1' <- untypeAs tInt =<< validateExpression e1 - e2' <- untypeAs tInt =<< validateExpression e2 - return $ RangeBounded <$> e1' <*> e2' + setContextFrom e1 + e1' <- validateExpression e1 ?=> tInt + setContextFrom e2 + e2' <- validateExpression e2 ?=> tInt + return $ RangeBounded e1' e2' -validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) +validateArrowPair :: ArrowPairNode -> ValidatorS (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) validateArrowPair (ArrowPairNode e1 s e2) = do checkSymbols [s] e1' <- validateExpression e1 e2' <- validateExpression e2 - return $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) <$> e1' <*> e2' + return $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) e1' e2' -validateExpression :: ExpressionNode -> Validator (Typed Expression) +validateExpression :: ExpressionNode -> ValidatorS (Typed Expression) validateExpression expr = case expr of Literal ln -> validateLiteral ln IdentifierNode nn -> validateIdentifierExpr nn MetaVarExpr tok -> do - Just x <- validateMetaVar tok ; - return $ typeAs TypeAny $ pure $ ExpressionMetaVar x + x <- validateMetaVar tok ; + return $ Typed TypeAny $ ExpressionMetaVar x QuantificationExpr qen -> validateQuantificationExpression qen OperatorExpressionNode oen -> validateOperatorExpression oen - DomainExpression dex -> castAny $ validateDomainExpression dex + DomainExpression dex -> validateDomainExpression dex ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp AbsExpression (ParenExpressionNode l1 exp l2) -> do checkSymbols [l1,l2] - Just exp' <- validateExpression exp ?=> TypeAny - return . typeAs tInt . pure $ mkOp TwoBarOp [exp'] + setContextFrom exp + exp' <- validateExpression exp ?=> TypeAny + return . Typed tInt $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs - SpecialCase scn -> castAny $ validateSpecialCase scn - MissingExpressionNode lt -> invalid $ lt TokenError lt + SpecialCase scn -> validateSpecialCase scn + MissingExpressionNode lt -> do raiseError (lt TokenError lt) ; return (fallback "Missing expression") -validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> Validator (Typed Expression) + +validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateAttributeAsConstraint l1 exprs = do checkSymbols [l1] es <- map untype <$> validateList_ validateExpression exprs do Just lx <- validateSymbol l1 let n = lookup (Name (lexemeText lx)) allSupportedAttributes - case (n,es) of - (Just 1 , [e,v]) -> return . todoTypeAny . pure $ aacBuilder e lx (Just v) + r <- case (n,es) of + (Just 1 , [e,v]) -> return . pure . Typed TypeBool $ aacBuilder e lx (Just v) (Just 1 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es)) (Just 0 , [e]) -> return .todoTypeAny . pure $ aacBuilder e lx Nothing (Just 0 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es)) (_,_) -> invalid $ l1 InternalErrorS "Bad AAC" + return $ fromMaybe (fallback "bad AAC") r where aacBuilder e lx y= Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e (fromString (lexemeFace lx)) y -validateSpecialCase :: SpecialCaseNode -> Validator Expression +validateSpecialCase :: SpecialCaseNode -> ValidatorS (Typed Expression) validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do checkSymbols [l1,l2,l3] - expr <- validateExpression ex Just conds <- validateProgramTree sts let decls = [ Declaration (FindOrGiven LocalFind nm dom) @@ -807,7 +824,8 @@ validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do let locals = if null decls then DefinednessConstraints cons else AuxiliaryVars (decls ++ [SuchThat cons]) - return (WithLocals <$> (untype <$> expr) <*> pure locals) + expr <- validateExpression ex ?=> TypeAny --TODO : do this properly + return . Typed TypeAny $ (WithLocals (expr) locals) translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of @@ -815,120 +833,124 @@ translateQnName qnName = case qnName of L_Exists -> FunctionOp L_fOr _ -> FunctionOp qnName -validateQuantificationExpression :: QuantificationExpressionNode -> Validator (Typed Expression) +validateQuantificationExpression :: QuantificationExpressionNode -> ValidatorS (Typed Expression) validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = do checkSymbols [dot] - name' <- validateSymbol name - over' <- validateQuantificationOver pats over - -- patterns <- validateSequence_ validateAbstractPattern pats - g' <- validateQuantificationGuard m_guard - let guard' = fromMaybe [] g' - Just body <- validateExpression expr ?=> TypeAny - let qBody = Comprehension body (over'++guard') - return . todoTypeAny $ mkOp <$> (translateQnName <$> name') <*> pure [qBody] + scoped $ do + name' <- validateSymbol name + over' <- validateQuantificationOver pats over + -- patterns <- validateSequence_ validateAbstractPattern pats + g' <- validateQuantificationGuard m_guard + let guard' = fromMaybe [] g' + setContextFrom expr + body <- validateExpression expr ?=> TypeAny + let qBody = Comprehension body (over'++guard') + let result = Typed TypeAny <$> (mkOp <$> (translateQnName <$> name') <*> pure [qBody]) + return $ fromMaybe (fallback "Quantification error") result where validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] validateQuantificationGuard Nothing = return $ pure [] validateQuantificationGuard (Just (QuanticationGuard l1 exp) ) = do checkSymbols [l1] setContextFrom exp - Just expr' <- validateExpression exp ?=> TypeBool + expr' <- validateExpression exp ?=> TypeBool return . pure $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do checkSymbols [lt] ps <- sequenceElems pats - Just exp <- validateExpression en + exp <- validateExpression en let (t,e) = typeSplit exp apats <- unifyPatterns t ps return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (untype exp)) | pat <- apats] validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do checkSymbols [lt] ps <- sequenceElems pats - Just exp <- validateExpression en + exp <- validateExpression en let (t,e) = typeSplit exp apats <- unifyPatterns t ps return [Generator $ GenInExpr pat e|pat <- apats] validateQuantificationOver pats ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do checkSymbols [l1] ps <- sequenceElems pats - Just dom' <- validateDomain dom - let dType = TypeAny + (dType,dom') <- typeSplit <$> validateDomain dom apats <- unifyPatterns dType ps return [ Generator $ GenDomainNoRepr pat dom'| pat <- apats] -validateAbstractPattern :: AbstractPatternNode -> Validator AbstractPattern -validateAbstractPattern (AbstractIdentifier nn) = validateName nn >>= \x -> return $ Single <$> x -validateAbstractPattern (AbstractMetaVar lt) = validateMetaVar lt >>= \x -> return $ AbstractPatternMetaVar <$> x -validateAbstractPattern (AbstractPatternMatrix ln) = pure . AbsPatMatrix <$> validateList_ validateAbstractPattern ln -validateAbstractPattern (AbstractPatternSet ln) = pure . AbsPatSet <$> validateList_ validateAbstractPattern ln -validateAbstractPattern (AbstractPatternTuple m_lt ln) = do - maybe (pure ()) (\n ->checkSymbols [n]) m_lt - pure . AbsPatTuple <$> validateList_ validateAbstractPattern ln +-- validateAbstractPattern :: AbstractPatternNode -> ValidatorS AbstractPattern +-- validateAbstractPattern (AbstractIdentifier nn) = validateName nn >>= \x -> return $ Single <$> x +-- validateAbstractPattern (AbstractMetaVar lt) = AbstractPatternMetaVar <$> validateMetaVar lt +-- validateAbstractPattern (AbstractPatternMatrix ln) = AbsPatMatrix <$> validateList_ validateAbstractPattern ln +-- validateAbstractPattern (AbstractPatternSet ln) = AbsPatSet <$> validateList_ validateAbstractPattern ln +-- validateAbstractPattern (AbstractPatternTuple m_lt ln) = do +-- maybe (pure ()) (\n ->checkSymbols [n]) m_lt +-- pure . AbsPatTuple <$> validateList_ validateAbstractPattern ln -validateMetaVar :: LToken -> Validator String +validateMetaVar :: LToken -> ValidatorS String validateMetaVar tok = do Just lx <- validateSymbol tok case lx of - LMetaVar s -> return .pure $ unpack s - _ -> invalid $ tok InternalError + LMetaVar s -> return $ unpack s + _ -> error $ "Bad MetaVar" ++ show lx -validateDomainExpression :: DomainExpressionNode -> Validator Expression +validateDomainExpression :: DomainExpressionNode -> ValidatorS (Typed Expression) validateDomainExpression (DomainExpressionNode l1 dom l2) = do checkSymbols [l1,l2] - dom' <- validateDomain dom - return $ Domain <$> dom' + (tdom,dom') <- typeSplit <$> validateDomain dom + return . Typed tdom $ Domain dom' -validateFunctionApplication :: LToken -> ListNode ExpressionNode -> Validator (Typed Expression) +--TODO fix function types inc lookups etc +validateFunctionApplication :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateFunctionApplication name args = do - name' <- validateSymbol name args' <- map (untype.snd) <$> validateList validateExpression args - return . todoTypeAny $ do - n <- name' + Just name' <- validateSymbol name + return . Typed TypeAny $ do + let n = name' let a = args' case (n,a) of - (L_image,[y,z]) -> return $ Op $ MkOpImage $ OpImage y z - _ -> return $ mkOp (FunctionOp n) a + (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z + _ -> mkOp (FunctionOp n) a -validateIdentifierExpr :: NameNode -> Validator (Typed Expression) +validateIdentifierExpr :: NameNode -> ValidatorS (Typed Expression) validateIdentifierExpr name = do Just n <- validateIdentifier name t <- resolveReference (symbolRegion name,Name n) - return . typeAs t . pure $ Reference (Name n) Nothing + return . Typed t $ Reference (Name n) Nothing -validateOperatorExpression :: OperatorExpressionNode -> Validator (Typed Expression) +--TODO Adress the major hole in the type system current +validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do expr <- validateExpression expr Just op <- validateSymbol lt - return . todoTypeAny $ (\(untype->x) -> mkOp (PrefixOp op) [x]) <$> (expr) + return . Typed TypeAny $ (\(untype->x) -> mkOp (PrefixOp op) [x]) (expr) --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do lExpr <- validateExpression lexp rExpr <- validateExpression rexp - op' <- validateSymbol op - return . todoTypeAny $ mkBinOp <$> ( pack . lexemeFace <$> op') <*> (untype <$> lExpr) <*> (untype <$> rExpr) + Just op' <- validateSymbol op + return . Typed TypeAny $ mkBinOp ( pack $ lexemeFace op') (untype lExpr) (untype rExpr) validateOperatorExpression (PostfixOpNode expr pon) = do expr' <- validateExpression expr postFixOp <- validatePostfixOp pon - return $ postFixOp <*> expr' + return $ postFixOp expr' -validatePostfixOp :: PostfixOpNode -> Validator (Typed Expression -> Typed Expression) +validatePostfixOp :: PostfixOpNode -> ValidatorS (Typed Expression -> Typed Expression) validatePostfixOp (OpFactorial lt) = do checkSymbols [lt] - return . pure $ (\(untype->x) -> Typed tInt $ mkOp FactorialOp [x]) + return $ (\(untype->x) -> Typed tInt $ mkOp FactorialOp [x]) validatePostfixOp (ApplicationNode args) = do args' <- validateList_ validateExpression args let underscore = Reference "_" Nothing let ys = [if underscore == v then Nothing else Just v | x@(Typed _ v) <- args'] - return . pure $ \ (Typed t x) -> Typed TypeAny $ Op $ MkOpRelationProj $ OpRelationProj x ys + return $ \ (Typed t x) -> Typed TypeAny $ Op $ MkOpRelationProj $ OpRelationProj x ys validatePostfixOp (IndexedNode ln) = do ranges <-validateList_ validateRange ln let indices = map interpretRange ranges - return . pure $ \x -> (foldl (\m f -> f m)) x indices + return $ \x -> (foldl (\m f -> f m)) x indices where interpretRange :: Range Expression -> (Typed Expression-> Typed Expression) interpretRange x = @@ -941,31 +963,33 @@ validatePostfixOp (IndexedNode ln) = do in case a of Left ex -> \(untype->m) -> Typed TypeAny $ Op $ MkOpIndexing (OpIndexing m ex) Right (i,j) -> \(untype->m) -> Typed TypeAny $ Op $ MkOpSlicing (OpSlicing m i j) + validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do checkSymbols [l1,l2,l3] - Just dom' <- validateDomain dom + (_,dom') <- typeSplit <$> validateDomain dom let t = getDType dom' case t of - Nothing -> invalid $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) - Just ty -> return . pure $ (\(Typed t ex) -> Typed ty $ D.Typed ex ty) + Just ty -> return $ (\(Typed _ ex) -> Typed ty $ D.Typed ex ty) + Nothing -> do + raiseError $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) + return (\(Typed t ex) -> Typed TypeAny $ D.Typed ex t) where getDType :: Domain () Expression -> Maybe Type getDType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d -validateLiteral :: LiteralNode -> Validator (Typed Expression) +validateLiteral :: LiteralNode -> ValidatorS (Typed Expression) validateLiteral litNode = case litNode of - IntLiteral lt -> validateIntLiteral lt >>= \x -> return $ typeAs tInt $ Constant <$> x - BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ typeAs TypeBool $ Constant <$> x + IntLiteral lt -> validateIntLiteral lt >>= \x -> return $ Typed tInt $ Constant x + BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ Typed TypeBool $ Constant x MatrixLiteral mln -> validateMatrixLiteral mln TupleLiteralNode (LongTuple lt xs) -> do checkSymbols [lt] validateLiteral (TupleLiteralNodeShort (ShortTuple xs)) TupleLiteralNodeShort (ShortTuple xs) -> do es <- validateExprList_ xs - t <- makeTupleLiteral es - return $ pure t + makeTupleLiteral es RecordLiteral lt ln -> checkSymbols [lt] >> validateRecordLiteral ln VariantLiteral lt ln -> checkSymbols [lt] >> validateVariantLiteral ln SetLiteral ls -> validateSetLiteral ls @@ -975,94 +999,100 @@ validateLiteral litNode = case litNode of RelationLiteral lt ln -> checkSymbols [lt] >> validateRelationLiteral ln PartitionLiteral lt ln -> checkSymbols [lt] >> validatePartitionLiteral ln -validateSequenceLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) +validateSequenceLiteral :: ListNode ExpressionNode -> ValidatorS (Typed Expression) validateSequenceLiteral x = do - l <- map untype <$> validateExprList_ x - let lType = TypeSequence TypeAny - return . (typeAs lType). pure $ mkAbstractLiteral $ AbsLitSequence l + (t,ss) <- typeSplit <$> ( sameType =<< validateExprList x) + let lType = TypeSequence t + return . Typed lType $ mkAbstractLiteral $ AbsLitSequence ss -validateRelationLiteral :: ListNode RelationElemNode -> Validator (Typed Expression) +validateRelationLiteral :: ListNode RelationElemNode -> ValidatorS (Typed Expression) validateRelationLiteral ln = do - members <- map (map untype) <$> validateList_ validateRelationMember ln - return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitRelation members + ms <- validateList_ validateRelationMember ln + let members = map (map untype) ms + return . Typed TypeAny $ mkAbstractLiteral $ AbsLitRelation members where - validateRelationMember :: RelationElemNode -> Validator [Typed Expression] + validateRelationMember :: RelationElemNode -> ValidatorS [Typed Expression] validateRelationMember x = case x of - RelationElemNodeLabeled (LongTuple lt xs) -> Just <$> (checkSymbols [lt] >> validateExprList_ xs) - RelationElemNodeShort (ShortTuple xs) -> Just <$> validateExprList_ xs + RelationElemNodeLabeled (LongTuple lt xs) -> checkSymbols [lt] >> validateExprList_ xs + RelationElemNodeShort (ShortTuple xs) -> validateExprList_ xs -validatePartitionLiteral :: ListNode PartitionElemNode -> Validator (Typed Expression) +validatePartitionLiteral :: ListNode PartitionElemNode -> ValidatorS (Typed Expression) validatePartitionLiteral ln = do - members <- map (map untype) <$> validateList_ (\(PartitionElemNode exprs) -> Just <$> validateExprList_ exprs) ln - return . todoTypeAny . pure . mkAbstractLiteral $ AbsLitPartition members - - + members <- validateList validatePartitionElem ln + (t,xs) <- typeSplit <$> sameType members + let eType = TypePartition t + return $ Typed eType (mkAbstractLiteral $ AbsLitPartition xs) + where + validatePartitionElem :: PartitionElemNode -> ValidatorS (Typed [Expression]) + validatePartitionElem (PartitionElemNode exprs) = do + xs <- validateExprList exprs + sameType xs -validateRecordLiteral :: ListNode RecordMemberNode -> Validator (Typed Expression) +validateRecordLiteral :: ListNode RecordMemberNode -> ValidatorS (Typed Expression) validateRecordLiteral ln = do members <- validateList_ validateRecordMember ln let members' = map (\(x,y) -> (x,untype y)) members -- let eType = TypeRecord TypeAny - return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitRecord members' + return . Typed TypeAny $ mkAbstractLiteral $ AbsLitRecord members' -validateVariantLiteral :: ListNode RecordMemberNode -> Validator (Typed Expression) +validateVariantLiteral :: ListNode RecordMemberNode -> ValidatorS (Typed Expression) validateVariantLiteral ln = do members <- validateList_ validateRecordMember ln - case members of + res <- case members of [] -> invalid $ symbolRegion ln SemanticError "Variants must contain exactly one member" [(n,x)]-> return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n (untype x) _:_ -> invalid $ symbolRegion ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected + return $ fromMaybe (fallback "bad variant") res - -validateRecordMember :: RecordMemberNode -> Validator (Name,Typed Expression) +validateRecordMember :: RecordMemberNode -> ValidatorS (Name,Typed Expression) validateRecordMember (RecordMemberNode name lEq expr) = do checkSymbols [lEq] name' <- validateName name expr' <- validateExpression expr - return $ (,) <$> name' <*> expr' + return $ ( name' , expr') -validateFunctionLiteral :: ListNode ArrowPairNode -> Validator (Typed Expression) +validateFunctionLiteral :: ListNode ArrowPairNode -> ValidatorS (Typed Expression) validateFunctionLiteral ln = do pairs <- validateList_ validateArrowPair ln let (pl,pr) = unzip pairs (lhType,ls) <- typeSplit <$> sameType pl (rhType,rs) <- typeSplit <$> sameType pr let fType = TypeFunction lhType rhType - return . typeAs fType . pure $ mkAbstractLiteral $ AbsLitFunction $ zip ls rs + return . Typed fType $ mkAbstractLiteral $ AbsLitFunction $ zip ls rs -validateSetLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) +validateSetLiteral :: ListNode ExpressionNode -> ValidatorS (Typed Expression) validateSetLiteral ls = do xs <- validateList validateExpression ls (t,es) <- typeSplit <$> sameType xs - return . typeAs (TypeSet t) . pure $ mkAbstractLiteral $ AbsLitSet es + return . Typed (TypeSet t) $ mkAbstractLiteral $ AbsLitSet es -validateMSetLiteral :: ListNode ExpressionNode -> Validator (Typed Expression) +validateMSetLiteral :: ListNode ExpressionNode -> ValidatorS (Typed Expression) validateMSetLiteral ls = do xs <- validateList validateExpression ls (t,es) <-typeSplit<$> sameType xs let eType = TypeMSet t let result = mkAbstractLiteral $ AbsLitMSet es - return . pure $ Typed eType result + return $ Typed eType result -validateMatrixLiteral :: MatrixLiteralNode -> Validator (Typed Expression) +validateMatrixLiteral :: MatrixLiteralNode -> ValidatorS (Typed Expression) --Matrix proper validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do checkSymbols [l1,l2] elems <- validateSequence validateExpression se (t,es) <- typeSplit <$> sameType elems - let defaultDomain :: Domain () Expression = (mkDomainIntB 1 (fromInt $ genericLength elems)) + let defaultDomain :: TypedDomain = Typed tInt (mkDomainIntB 1 (fromInt $ genericLength elems)) dom <- fromMaybe defaultDomain <$> validateOverDomain m_dom - let lit = AbsLitMatrix dom es - pure . typeAs (TypeMatrix tInt t) . pure $ mkAbstractLiteral lit + let lit = AbsLitMatrix (untype $ dom) es + return $ Typed (TypeMatrix tInt t) $ mkAbstractLiteral lit where - validateOverDomain :: Maybe OverDomainNode -> Validator ((Domain () Expression)) + validateOverDomain :: Maybe OverDomainNode -> Validator (TypedDomain) validateOverDomain Nothing = return Nothing - validateOverDomain (Just (OverDomainNode l3 dom)) = checkSymbols [l3] >> validateDomain dom + validateOverDomain (Just (OverDomainNode l3 dom)) = do checkSymbols [l3]; pure <$> validateDomain dom -- Matrix as comprehension @@ -1084,7 +1114,7 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do [] -> invalid $ symbolRegion se SemanticError "MissingExpression" ((_,x):xs) -> flagExtraExpressions xs >> (return . pure $ x) let bodyType = typeOf_ r - return . pure . Typed (TypeList bodyType) $ Comprehension (untype r) gens + return . Typed (TypeList bodyType) $ Comprehension (untype r) gens where flagExtraExpressions :: [RegionTagged a] -> ValidatorS () flagExtraExpressions [] = pure () @@ -1096,34 +1126,33 @@ validateComprehension (ComprehensionNode l1 body) = do checkSymbols [l1] concat <$> validateSequence_ validateComprehensionBody body -validateComprehensionBody :: ComprehensionBodyNode -> Validator [GeneratorOrCondition] +validateComprehensionBody :: ComprehensionBodyNode -> ValidatorS [GeneratorOrCondition] --guard validateComprehensionBody (CompBodyCondition en) = do - Just e <- validateExpression en + e <- validateExpression en assertType e TypeBool "Guards must be bools" - return . pure $ [Condition $ untype e] + return [Condition $ untype e] --x in dom validateComprehensionBody (CompBodyDomain apn l1 dom) = do checkSymbols [l1] - Just domain <- validateDomain dom - pats <- validateSequence_ (flip unifyPattern TypeAny . Just) apn - return . pure $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] + (td,domain) <- typeSplit <$> validateDomain dom + pats <- validateSequence_ (flip unifyPattern td . Just) apn + return $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] -- x <- expr validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] - Just e <- validateExpression en + e <- validateExpression en let (t,exp) = typeSplit e pats <- validateSequence_ (flip unifyPattern t . Just) (apn) -- pats <- validateSequence_ validateAbstractPattern apn - return . pure $ [Generator (GenInExpr pat exp)| pat <- pats] + return $ [Generator (GenInExpr pat exp)| pat <- pats] --letting x be validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do checkSymbols [l1,l2] - pat <- validateAbstractPattern nn - expr <- validateExpression en - let gen = ComprehensionLetting <$> pat <*> (untype <$> expr) - return (( : []) <$> gen) + (t,expr) <- typeSplit <$> validateExpression en + pat <- unifyPattern (Just nn) t + return [ComprehensionLetting pat expr] mkAbstractLiteral :: AbstractLiteral Expression -> Expression @@ -1154,20 +1183,20 @@ makeTupleLiteral members = do return . Typed eType . mkAbstractLiteral . AbsLitTuple $ snd memberTypes -validateIntLiteral :: LToken -> Validator Constant +validateIntLiteral :: LToken -> ValidatorS Constant validateIntLiteral t = do l <- validateSymbol t case l of - Just (LIntLiteral x) -> return . pure $ ConstantInt TagInt x - _ -> invalid $ t InternalError + Just (LIntLiteral x) -> return $ ConstantInt TagInt x + _ -> error "Bad int literal" -validateBoolLiteral :: LToken -> Validator Constant +validateBoolLiteral :: LToken -> ValidatorS Constant validateBoolLiteral t = do Just l <- validateSymbol t case l of - L_true -> return . pure $ ConstantBool True - L_false -> return . pure $ ConstantBool False - _ -> invalid $ t InternalError + L_true -> return $ ConstantBool True + L_false -> return $ ConstantBool False + _ -> error "Bad bool literal" validateNameList :: Sequence NameNode -> ValidatorS [RegionTagged Name] validateNameList = validateSequence validateName @@ -1187,10 +1216,11 @@ validateIdentifier (NameNode iden) = do checkName "\"\"" = invalid $ iden SemanticError "Empty names not allowed" checkName x = return . pure $ x -validateName :: NameNode -> Validator Name +validateName :: NameNode -> ValidatorS Name validateName name = do n <- validateIdentifier name - return $ (Name <$> n) + + return $ fromMaybe (fallback "bad Identifier") (Name <$> n) listToSeq :: ListNode a -> ValidatorS (Sequence a) listToSeq (ListNode l1 s l2) = checkSymbols [l1,l2] >> return s @@ -1206,16 +1236,16 @@ listElems = sequenceElems <=< listToSeq validateIdentity :: a -> Validator a validateIdentity = return . pure -validateArray :: (a -> Validator b) -> [a] -> ValidatorS [b] -validateArray f l = catMaybes <$> mapM f l +validateArray :: (a -> ValidatorS b) -> [a] -> ValidatorS [b] +validateArray f l = mapM f l -validateList :: (Flattenable a) =>(a -> Validator b) -> ListNode a -> ValidatorS [RegionTagged b] +validateList :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> ListNode a -> ValidatorS [RegionTagged b] validateList validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end validateSequence validator seq -validateList_ :: (Flattenable a) =>(a -> Validator b) -> ListNode a -> ValidatorS [b] +validateList_ :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> ListNode a -> ValidatorS [b] validateList_ validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end @@ -1227,31 +1257,36 @@ validateList_ validator (ListNode st seq end) = do -- L_ExclamationMark -> "not" -- _ -> pack $ lexemeFace x -validateSequence :: (Flattenable a) =>(a -> Validator b) -> Sequence a -> ValidatorS [RegionTagged b] +validateSequence :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> Sequence a -> ValidatorS [RegionTagged b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals -validateSequence_ :: (Flattenable a) =>(a -> Validator b) -> Sequence a -> ValidatorS [b] +validateSequence_ :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> Sequence a -> ValidatorS [b] validateSequence_ f s = do q <- validateSequence f s return . map snd $ q -validateSequenceElem :: (Flattenable a) => (a -> Validator b) -> SeqElem a -> Validator (RegionTagged b) +validateSequenceElem :: (Flattenable a,Fallback b) => (a -> ValidatorS b) -> SeqElem a -> ValidatorS (RegionTagged b) validateSequenceElem f (SeqElem i s) = do case s of Nothing -> pure () Just lt -> void $ validateSymbol lt v <- f i - return (case v of - Nothing -> Nothing - Just b -> Just (symbolRegion i,b)) -validateSequenceElem _ (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( symbolRegion plc TokenError plc) + return (symbolRegion i,v) +validateSequenceElem _ (MissingSeqElem plc sep) = do + checkSymbols [sep] + raiseError $ symbolRegion plc TokenError plc + return $ (symbolRegion plc , fallback "Missing elem") + -validateSequenceElem_ :: (Flattenable a) => (a -> Validator b) -> SeqElem a -> Validator (b) +validateSequenceElem_ :: (Flattenable a,Fallback b) => (a -> ValidatorS b) -> SeqElem a -> ValidatorS (b) validateSequenceElem_ f (SeqElem i s) = do case s of Nothing -> pure () Just lt -> void $ validateSymbol lt f i -validateSequenceElem_ _ (MissingSeqElem plc sep) = checkSymbols [sep] >> invalid ( symbolRegion plc TokenError plc) +validateSequenceElem_ _ (MissingSeqElem plc sep) = do + checkSymbols [sep] + raiseError $ symbolRegion plc TokenError plc + return $ fallback "Missing Elem" validateExprList :: ListNode ExpressionNode -> ValidatorS [RegionTagged (Typed Expression)] validateExprList = validateList validateExpression @@ -1353,7 +1388,7 @@ resolveReference _ = return TypeAny sameType :: [RegionTagged (Typed a)] -> ValidatorS (Typed [a]) sameType [] = return $ Typed TypeAny [] sameType xs@(x:_) = do - let ?typeCheckerMode = RelaxedIntegerTags + let ?typeCheckerMode = StronglyTyped let t = mostDefined $ map (typeOf_.snd) xs let t' = mostDefined [t , typeOf_ $ snd x] --Do this again to set type to first elem if possible xs' <- mapM (unifyTypes t') xs @@ -1374,20 +1409,20 @@ scoped m = do return res unifyPatterns :: Type -> [Maybe AbstractPatternNode] -> ValidatorS [AbstractPattern] -unifyPatterns t xs = catMaybes <$> mapM (flip unifyPattern t) xs +unifyPatterns t xs = mapM (flip unifyPattern t) xs -unifyPattern :: Maybe AbstractPatternNode -> Type -> Validator AbstractPattern +unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do - Just (Name n) <- validateName nn + (Name n) <- validateName nn traceM $ show n ++ ":" ++ show t --dont put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,t)) addRegion (RegionInfo (symbolRegion nn) t Definition) - return . pure $ Single $ Name n + return $ Single $ Name n unifyPattern (Just(AbstractMetaVar lt)) _ = do s <- validateMetaVar lt - return $ AbstractPatternMetaVar <$> s + return $ AbstractPatternMetaVar s unifyPattern (Just(AbstractPatternTuple m_lt ln)) t = do sps <-listToSeq ln @@ -1397,26 +1432,26 @@ unifyPattern (Just(AbstractPatternTuple m_lt ln)) t = do Just lt -> checkSymbols [lt] memberTypes <- getMemberTypes t let q = zip ps memberTypes - aps <- catMaybes <$> mapM (uncurry unifyPattern) q - return . pure $ AbsPatTuple aps + aps <- mapM (uncurry unifyPattern) q + return $ AbsPatTuple aps unifyPattern (Just(AbstractPatternMatrix ln)) t = do sps <-listToSeq ln ps <-sequenceElems sps memberTypes <- getMemberTypes t let q = zip ps memberTypes - aps <- catMaybes <$> mapM (uncurry unifyPattern) q - return . pure $ AbsPatMatrix aps + aps <- mapM (uncurry unifyPattern) q + return $ AbsPatMatrix aps unifyPattern (Just(AbstractPatternSet ln)) t = do sps <-listToSeq ln ps <-sequenceElems sps memberTypes <- getMemberTypes t let q = zip ps memberTypes - aps <- catMaybes <$> mapM (uncurry unifyPattern) q - return . pure $ AbsPatSet aps + aps <-mapM (uncurry unifyPattern) q + return $ AbsPatSet aps -unifyPattern Nothing _ = return $ Nothing +unifyPattern Nothing _ = return . Single $ fallback "No Pattern" catRegions :: [RegionTagged a] -> DiagnosticRegion @@ -1440,3 +1475,31 @@ getMemberTypes t = case t of -- t <- typeOf exp -- empty + +data DomainTyped a = DomainTyped DomainType a + +data DomainSize = Unkown | Infinite | Sized Int +data DomainType + = DomainTypeBool + | DomainTypeInt DomainSize + | DomainTypeTuple [DomainType] + + +class Fallback a where + fallback :: Text -> a + +instance Fallback (Domain () Expression) where + fallback reason = DomainAny reason TypeAny + +instance Fallback Expression where + fallback reason = Reference (Name reason) Nothing + +instance (Fallback a) => Fallback (Typed a) where + fallback = Typed TypeAny . fallback + +instance Fallback (Maybe a) where + fallback = const Nothing +instance Fallback Name where + fallback = Name + + \ No newline at end of file diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 4bca1b5ddc..ad66f83f60 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -37,7 +37,7 @@ displayError x = case x of SyntaxError txt -> "Syntax Error: " ++ T.unpack txt SemanticError txt -> "Semantic error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt - TypeError expected got -> "Type error: Expected :" ++ show (pretty expected) ++ " Got:" ++ show (pretty got) + TypeError expected got -> "Type error: Expected: " ++ show (pretty expected) ++ " Got: " ++ show (pretty got) InternalError -> "Pattern match failiure" InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt @@ -52,7 +52,7 @@ printSymbolTable :: SymbolTable -> IO () printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs tab) where printEntry :: (Text ,SymbolTableValue) -> IO () - printEntry (a,b) = putStrLn $ show a ++ ":" ++ show b + printEntry (a,(r,c,t)) = putStrLn $ show a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" captureErrors :: [ValidatorDiagnostic] -> Parser () captureErrors = mapM_ captureError @@ -86,10 +86,9 @@ val s = do print (maybe "" show model) putStrLn $ show vds printSymbolTable $ symbolTable st - putStrLn $ show $ regionInfo st + -- putStrLn $ show $ (regionInfo st) putStrLn $ showDiagnosticsForConsole vds txt - -- putStrLn $ show qpr From 95a76c3eee6b26b4181120c95a39d690a4e7d039 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 20 Nov 2022 15:20:44 +0000 Subject: [PATCH 096/378] Expanded type checking --- src/Conjure/Language/Parser.hs | 10 ++-- src/Conjure/Language/Validator.hs | 78 ++++++++++++++++++------------- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index d697c6f667..afe3684e41 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -8,7 +8,7 @@ module Conjure.Language.Parser , parseExpr , parseDomain , parseDomainWithRepr - , Pipeline + , Pipeline ) where -- conjure @@ -63,7 +63,7 @@ runPipeline (parse,val) txt = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult let x = V.runValidator (val parseResult) def{V.typeChecking= ?typeChecking} - case x of + case x of (Just m, ds,_) | not $ any V.isError ds -> Right m (_, ves,_) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) -- Validator (Just res) [] -> Right res @@ -234,11 +234,11 @@ parseTopLevels = (P.parseTopLevels,V.strict . V.validateProgramTree) -- return (RangeSingle x) parseDomain :: Pipeline DomainNode (Domain () Expression) -parseDomain = (P.parseDomain,V.strict . V.validateDomain) +parseDomain = (P.parseDomain,fmap V.untype . V.validateDomain) parseDomainWithRepr :: Pipeline DomainNode (Domain HasRepresentation Expression) -parseDomainWithRepr = (P.parseDomain,V.strict . V.validateDomainWithRepr) +parseDomainWithRepr = (P.parseDomain, fmap V.untype . V.validateDomainWithRepr) -- -- TODO: uncomment the following to parse (union, intersect and minus) for domains -- -- let -- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] @@ -630,7 +630,7 @@ parseDomainWithRepr = (P.parseDomain,V.strict . V.validateDomainWithRepr) -- metaVarInE = ExpressionMetaVar parseExpr :: Pipeline S.ExpressionNode Expression -parseExpr = (P.parseExpression,V.strict . (\x -> V.validateExpression x ?=> TypeAny)) +parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> TypeAny) -- let -- mergeOp op = mkBinOp (lexemeText op) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 41d2f12f7a..177114be3d 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -76,9 +76,9 @@ untype (Typed _ a) = a typeOf_ :: Typed a -> Type typeOf_ (Typed t _) = t -untypeAs ::(Fallback a) => Type -> Typed a -> ValidatorS a +untypeAs :: Type -> Typed a -> ValidatorS a untypeAs r ((Typed t a)) = if let ?typeCheckerMode=RelaxedIntegerTags in typeUnify r t - then return $ a + then return a else contextError (TypeError r t) >> return a typeAs :: Type -> Maybe a -> Maybe (Typed a) @@ -258,18 +258,18 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do checkSymbols [l1] name <- validateIdentifier n unless (maybe False isValidLanguageName name) (raiseError $symbolRegion n SyntaxError "Not a valid language name") - nums <- validateSequence_ getNum v + nums <- catMaybes <$> validateSequence_ getNum v return . pure $ LanguageVersion (Name $ fromMaybe "Essence" name) (if null nums then [1,3] else nums) where - getNum :: LToken -> ValidatorS Int + getNum :: LToken -> Validator Int getNum c = do c' <- validateSymbol c case c' of - Just (LIntLiteral x) -> return $ fromInteger x - _ -> 0 <* invalid $ c InternalError + Just (LIntLiteral x) -> return . pure $ fromInteger x + _ -> invalid $ c InternalError validateStatement :: StatementNode -> ValidatorS [Statement] @@ -313,14 +313,14 @@ validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do checkSymbols [l1, l2] exprs' <- validateSequence (validateExpression) exprs - bools <- mapM (\(a,b)->do setContextFrom a; untypeAs TypeBool b) exprs' + bools <- mapM (\(a,b)->do setContext a; untypeAs TypeBool b) exprs' let bool_exprs = bools return [SuchThat bool_exprs] validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do checkSymbols [l1, l2] - branchings <- validateList_ validateBranchingParts sts + branchings <-catMaybes <$> validateList_ (f2n validateBranchingParts) sts return $ [SearchOrder branchings] where validateBranchingParts :: ExpressionNode -> ValidatorS SearchOrder @@ -474,7 +474,7 @@ validateDomainWithRepr dom = do validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv - BoolDomainNode lt -> pure <$> (validateSymbol lt >> return DomainBool) + BoolDomainNode lt -> (validateSymbol lt >> (return . Typed TypeBool) DomainBool) RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges ShortTupleDomainNode lst -> validateTupleDomain lst @@ -492,13 +492,13 @@ validateDomain dm = case dm of where validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateRangedInt (Just ranges) = do - ranges' <- validateList_ validateRange ranges + ranges' <- catMaybes <$> validateList_ (f2n validateRange) ranges return . Typed tInt $ DomainInt TagInt ranges' validateRangedInt Nothing = return . Typed tInt $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateEnumRange name ranges = do ranges' <- case ranges of - Just r -> pure <$> validateList_ validateRange r + Just r -> pure <$> catMaybes <$> validateList_ (f2n validateRange) r Nothing -> return Nothing Just name' <- validateIdentifier name a <- getSymbol name' @@ -508,7 +508,7 @@ validateDomain dm = case dm of Nothing -> return . Typed t $ DomainReference (Name name') Nothing Just _ -> do raiseError (symbolRegion name SemanticError "range not supported on non enum ranges") - return . pure $ DomainReference (Name name') Nothing + return . Typed t $ DomainReference (Name name') Nothing Nothing -> return $ fallback "unknown symbol" validateTupleDomain :: ListNode DomainNode -> ValidatorS TypedDomain @@ -517,12 +517,12 @@ validateDomain dm = case dm of return $ Typed (TypeTuple ts) (DomainTuple ds) validateRecordDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateRecordDomain namedDoms = do - lst <- validateList_ validateNamedDomainInVariant namedDoms + lst <- catMaybes <$> validateList_ (f2n validateNamedDomainInVariant) namedDoms let (ts,ds) = unzip $ map (\(x,typeSplit->(t,d))->((x,t),(x,d))) lst return $ Typed (TypeVariant ts) (DomainVariant ds) validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateVariantDomain namedDoms = do - lst <- validateList_ validateNamedDomainInVariant namedDoms + lst <- catMaybes <$> validateList_ (f2n validateNamedDomainInVariant) namedDoms let (ts,ds) = unzip $ map (\(x,typeSplit->(t,d))->((x,t),(x,d))) lst return $ Typed (TypeVariant ts) (DomainVariant ds) validateMatrixDomain :: ListNode DomainNode -> DomainNode -> ValidatorS TypedDomain @@ -608,7 +608,7 @@ validateSizeAttributes attrs = do [(L_minSize, Just a)] -> return $ (SizeAttr_MinSize a) [(L_maxSize, Just a)] -> return $ (SizeAttr_MaxSize a) [(L_minSize, Just a),(L_maxSize, Just b)] -> return $ (SizeAttr_MinMaxSize a b) - as -> def <* contextError $ SemanticError $ pack $ "Incompatible attributes size:" ++ show as + as -> return . def <* contextError $ SemanticError $ pack $ "Incompatible attributes size:" ++ show as validatePartSizeAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS (SizeAttr Expression) validatePartSizeAttributes attrs = do @@ -620,7 +620,7 @@ validatePartSizeAttributes attrs = do [(L_minPartSize, Just a)] -> return $ (SizeAttr_MinSize a) [(L_maxPartSize, Just a)] -> return $ (SizeAttr_MaxSize a) [(L_minPartSize, Just a),(L_maxPartSize, Just b)] -> return $ (SizeAttr_MinMaxSize a b) - as -> def <* contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as + as -> return . def <* contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as validateNumPartAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS (SizeAttr Expression) validateNumPartAttributes attrs = do @@ -632,7 +632,7 @@ validateNumPartAttributes attrs = do [(L_minNumParts, Just a)] -> return $ (SizeAttr_MinSize a) [(L_maxNumParts, Just a)] -> return $ (SizeAttr_MaxSize a) [(L_minNumParts, Just a),(L_maxNumParts, Just b)] -> return $ (SizeAttr_MinMaxSize a b) - as -> def <* contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as + as -> return . def <* contextError $ SemanticError $ pack $ "Incompatible attributes partitionSize :" ++ show as validateJectivityAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS JectivityAttr @@ -647,7 +647,9 @@ validateJectivityAttributes attrs = do [(L_injective, _),(L_surjective, _)] -> do contextInfo $ UnclassifiedInfo "Inj and Sur can be combined to bijective" return $ JectivityAttr_Bijective - as ->def <* contextError $ SemanticError $ pack $ "Incompatible attributes jectivity" ++ show as + as ->do + void . contextError $ SemanticError $ pack $ "Incompatible attributes jectivity" ++ show as + return def validateSetAttributes :: ListNode AttributeNode -> ValidatorS (SetAttr Expression) @@ -674,7 +676,7 @@ validateMSetAttributes atts = do [(L_minOccur,Just a)] -> return $ (OccurAttr_MinOccur a) [(L_maxOccur, Just a)] -> return $ (OccurAttr_MaxOccur a) [(L_minOccur, Just a),(L_maxOccur, Just b)] -> return $ (OccurAttr_MinMaxOccur a b) - as -> def <* contextError $ SemanticError $ pack $ "Bad args to occurs" ++ show as + as ->do void . contextError $ SemanticError $ pack $ "Bad args to occurs" ++ show as;return def validateFuncAttributes :: ListNode AttributeNode -> ValidatorS (FunctionAttr Expression) @@ -738,16 +740,18 @@ validateNamedDomainInVariant :: NamedDomainNode -> ValidatorS (Name, TypedDomain validateNamedDomainInVariant (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of - Nothing -> return . pure $ DomainInt TagInt [RangeSingle 0] - Just (l,d) -> checkSymbols [l] >> validateDomain d - return $ (name' , domain') + Nothing -> do return . Typed tInt $ DomainInt TagInt [RangeSingle 0] + Just (l,d) -> do checkSymbols [l]; validateDomain d + return $ (name' , domain') validateNamedDomainInRecord :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInRecord (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of Just (l,d) -> checkSymbols [l] >> validateDomain d - Nothing -> fallback "Dataless RecordMemeber" <* raiseError $ symbolRegion name SemanticError "Dataless not allowed in record" + Nothing -> do + raiseError $ symbolRegion name SemanticError "Dataless not allowed in record" + (return (fallback "Dataless RecordMemeber")) return $ (name', domain') validateRange :: RangeNode -> ValidatorS (Range Expression) @@ -764,12 +768,12 @@ validateRange range = case range of e2' <- validateExpression e2 ?=> tInt return $ RangeBounded e1' e2' -validateArrowPair :: ArrowPairNode -> ValidatorS (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) +validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) validateArrowPair (ArrowPairNode e1 s e2) = do checkSymbols [s] e1' <- validateExpression e1 e2' <- validateExpression e2 - return $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) e1' e2' + return .pure $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) e1' e2' validateExpression :: ExpressionNode -> ValidatorS (Typed Expression) validateExpression expr = case expr of @@ -948,7 +952,7 @@ validatePostfixOp (ApplicationNode args) = do let ys = [if underscore == v then Nothing else Just v | x@(Typed _ v) <- args'] return $ \ (Typed t x) -> Typed TypeAny $ Op $ MkOpRelationProj $ OpRelationProj x ys validatePostfixOp (IndexedNode ln) = do - ranges <-validateList_ validateRange ln + ranges <-catMaybes <$> validateList_ (f2n validateRange) ln let indices = map interpretRange ranges return $ \x -> (foldl (\m f -> f m)) x indices where @@ -1033,14 +1037,14 @@ validatePartitionLiteral ln = do validateRecordLiteral :: ListNode RecordMemberNode -> ValidatorS (Typed Expression) validateRecordLiteral ln = do - members <- validateList_ validateRecordMember ln + members <- catMaybes <$> validateList_ validateRecordMember ln let members' = map (\(x,y) -> (x,untype y)) members -- let eType = TypeRecord TypeAny return . Typed TypeAny $ mkAbstractLiteral $ AbsLitRecord members' validateVariantLiteral :: ListNode RecordMemberNode -> ValidatorS (Typed Expression) validateVariantLiteral ln = do - members <- validateList_ validateRecordMember ln + members <- catMaybes <$> validateList_ validateRecordMember ln res <- case members of [] -> invalid $ symbolRegion ln SemanticError "Variants must contain exactly one member" [(n,x)]-> return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n (untype x) @@ -1048,16 +1052,16 @@ validateVariantLiteral ln = do return $ fromMaybe (fallback "bad variant") res -validateRecordMember :: RecordMemberNode -> ValidatorS (Name,Typed Expression) +validateRecordMember :: RecordMemberNode -> Validator (Name,Typed Expression) validateRecordMember (RecordMemberNode name lEq expr) = do checkSymbols [lEq] name' <- validateName name expr' <- validateExpression expr - return $ ( name' , expr') + return . pure $ ( name' , expr') validateFunctionLiteral :: ListNode ArrowPairNode -> ValidatorS (Typed Expression) validateFunctionLiteral ln = do - pairs <- validateList_ validateArrowPair ln + pairs <- catMaybes <$> validateList_ validateArrowPair ln let (pl,pr) = unzip pairs (lhType,ls) <- typeSplit <$> sameType pl (rhType,rs) <- typeSplit <$> sameType pr @@ -1484,6 +1488,10 @@ data DomainType | DomainTypeInt DomainSize | DomainTypeTuple [DomainType] +f2n :: (a -> ValidatorS b) -> a ->Validator b +f2n f a = do + q <- f a + return $ Just q class Fallback a where fallback :: Text -> a @@ -1502,4 +1510,10 @@ instance Fallback (Maybe a) where instance Fallback Name where fallback = Name - \ No newline at end of file + +instance Fallback [a] where + fallback :: Text -> [a] + fallback = const [] + +instance Fallback AbstractPattern where + fallback = Single . fallback \ No newline at end of file From b732080e5aa9a95efa4b9469bd6fc9bca3c2c0c2 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 21 Nov 2022 17:48:40 +0000 Subject: [PATCH 097/378] More work on type check --- conjure-cp.cabal | 1 + src/Conjure/Language/Expression/OpTypes.hs | 66 +++++++ src/Conjure/Language/Validator.hs | 219 ++++++++++++++------- src/Conjure/UI/ErrorDisplay.hs | 19 +- 4 files changed, 235 insertions(+), 70 deletions(-) create mode 100644 src/Conjure/Language/Expression/OpTypes.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 802d9e1574..d1eacbb26f 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -49,6 +49,7 @@ Library , Conjure.Language.Expression.Internal.Generated , Conjure.Language.Expression.DomainSizeOf + , Conjure.Language.Expression.OpTypes , Conjure.Language.Expression.Op , Conjure.Language.Expression.Op.Internal.Common diff --git a/src/Conjure/Language/Expression/OpTypes.hs b/src/Conjure/Language/Expression/OpTypes.hs new file mode 100644 index 0000000000..2dd861c570 --- /dev/null +++ b/src/Conjure/Language/Expression/OpTypes.hs @@ -0,0 +1,66 @@ +module Conjure.Language.Expression.OpTypes where +import Conjure.Language.Lexemes (Lexeme) +import Conjure.Language.Expression.Op.Internal.Common (Type (..)) +import Conjure.Prelude +import Conjure.Language.Expression.Op.Internal.Common (Lexeme(..), IntTag (TagInt), mostDefined) + +type TypeMapping2 = Type -> Type -> Type + +constantTyped2 :: Type -> TypeMapping2 +constantTyped2 = const . const + +rightArgDep :: (Type -> Type) -> TypeMapping2 +rightArgDep f _ = f + +leftArgDep :: (Type-> Type) -> TypeMapping2 +leftArgDep f a _ = f a + +binOpType :: Lexeme -> TypeMapping2 +binOpType L_Plus = const id +binOpType L_Minus = const id +binOpType L_Times = const id +binOpType L_Div = constInt +binOpType L_Mod = constInt +binOpType L_Pow = constInt +binOpType L_Eq = constBool +binOpType L_Neq = constBool +binOpType L_Lt = constBool +binOpType L_Leq = constBool +binOpType L_Gt = constBool +binOpType L_Geq = constBool +binOpType L_in = constBool +binOpType L_And = constBool +binOpType L_Or = constBool +binOpType L_Imply = constBool +binOpType L_Iff = constBool -- b b b +binOpType L_subset = constBool -- set mset func rel +binOpType L_subsetEq = constBool -- ^^^ +binOpType L_supset = constBool -- ^^^^ +binOpType L_supsetEq = constBool -- ^^ +binOpType L_subsequence = constBool -- seq - seq -bool +binOpType L_substring = constBool -- seq - seq -bool +binOpType L_intersect = const id +binOpType L_union = const id +binOpType L_LexLt = constBool +binOpType L_LexLeq = constBool +binOpType L_LexGt = constBool +binOpType L_LexGeq = constBool +binOpType L_DotLt = constBool -- same same bool +binOpType L_DotLeq = constBool +binOpType L_DotGt = constBool +binOpType L_DotGeq = constBool +binOpType L_TildeLt = constBool +binOpType L_TildeLeq = constBool +binOpType L_TildeGt = constBool +binOpType L_TildeGeq = constBool +binOpType _ = constantTyped2 TypeAny + +constInt :: TypeMapping2 +constInt = constantTyped2 (TypeInt TagInt) + +constBool :: TypeMapping2 +constBool = constantTyped2 TypeBool + +same :: (Type -> Type) +same = id + diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 177114be3d..fd7aa3598f 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -47,6 +47,7 @@ import Conjure.Language.Pretty (Pretty(pretty)) import Control.Monad.Except (runExcept) import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Applicative +import Conjure.Language.Expression.OpTypes (binOpType) class WithRegion a where @@ -66,6 +67,9 @@ unregion :: RegionTagged a -> a unregion (_,a) =a data Typed a = Typed Type a + deriving Show +instance Functor Typed where + fmap f (Typed ty' a) = Typed ty' (f a) instance TypeOf (Typed a) where typeOf (Typed t _) = return t @@ -77,7 +81,7 @@ typeOf_ :: Typed a -> Type typeOf_ (Typed t _) = t untypeAs :: Type -> Typed a -> ValidatorS a -untypeAs r ((Typed t a)) = if let ?typeCheckerMode=RelaxedIntegerTags in typeUnify r t +untypeAs r ((Typed t a)) = if let ?typeCheckerMode=StronglyTyped in typeUnify r t then return a else contextError (TypeError r t) >> return a @@ -158,7 +162,7 @@ data ValidatorState = ValidatorState { deriving Show instance Default ValidatorState where def = ValidatorState { - typeChecking = False, + typeChecking = True, regionInfo=[], symbolTable=M.empty, currentContext=GlobalRegion @@ -367,7 +371,7 @@ validateFind (FindStatementNode names colon domain) = do names' <- validateNameList names (dType, dom) <- typeSplit <$> validateDomain domain mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' - return $ [ FindOrGiven Given nm dom|(_,nm) <- names'] + return $ [ FindOrGiven Find nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> ValidatorS [Declaration] -- Letting [names] be @@ -412,7 +416,7 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do size <- do setContextFrom szExp validateExpression szExp ?=> tInt - let d = TypeUnnamed + let d = TypeUnnamed --TODO delcs mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names return $ [LettingDomainDefnUnnamed n size| (_,n) <- names] @@ -492,21 +496,23 @@ validateDomain dm = case dm of where validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateRangedInt (Just ranges) = do - ranges' <- catMaybes <$> validateList_ (f2n validateRange) ranges + ranges' <- catMaybes <$> validateList_ (f2n (validateRange tInt)) ranges return . Typed tInt $ DomainInt TagInt ranges' validateRangedInt Nothing = return . Typed tInt $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateEnumRange name ranges = do - ranges' <- case ranges of - Just r -> pure <$> catMaybes <$> validateList_ (f2n validateRange) r - Nothing -> return Nothing Just name' <- validateIdentifier name a <- getSymbol name' case a of - Just (_,True,t) ->return $ Typed t $ DomainEnum (Name name') ranges' Nothing - Just (_,False,t) -> case ranges' of + Just (_,True,t) -> do + rs <-case ranges of + Just rs -> pure . catMaybes <$> validateList_ (f2n $ validateRange t) rs + Nothing -> return Nothing + return $ Typed t $ DomainEnum (Name name') rs Nothing + Just (_,False,t) -> case ranges of Nothing -> return . Typed t $ DomainReference (Name name') Nothing - Just _ -> do + Just rs -> do + void $ validateList_ (f2n (validateRange TypeAny)) rs raiseError (symbolRegion name SemanticError "range not supported on non enum ranges") return . Typed t $ DomainReference (Name name') Nothing Nothing -> return $ fallback "unknown symbol" @@ -530,12 +536,12 @@ validateDomain dm = case dm of idoms <- validateList_ validateDomain indexes dom' <- validateDomain dom return $ foldr acc dom' idoms - where + where -- TODO: This could well be backwards - acc :: TypedDomain -> TypedDomain -> TypedDomain + acc :: TypedDomain -> TypedDomain -> TypedDomain acc (Typed t d) (Typed t' d') = Typed (TypeMatrix t t') (DomainMatrix d d') - + validateSetDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> ValidatorS TypedDomain validateSetDomain attrs dom = do let repr = () @@ -579,7 +585,7 @@ validateDomain dm = case dm of attrs' <- case attrs of Just a -> validateRelationAttributes a Nothing -> return $ def - + (ts,doms') <- unzip . map typeSplit <$> validateList_ validateDomain doms return . Typed (TypeRelation ts) $ DomainRelation repr attrs' doms' validatePartitionDomain :: Maybe (ListNode AttributeNode)-> DomainNode -> ValidatorS TypedDomain @@ -647,7 +653,7 @@ validateJectivityAttributes attrs = do [(L_injective, _),(L_surjective, _)] -> do contextInfo $ UnclassifiedInfo "Inj and Sur can be combined to bijective" return $ JectivityAttr_Bijective - as ->do + as ->do void . contextError $ SemanticError $ pack $ "Incompatible attributes jectivity" ++ show as return def @@ -749,23 +755,23 @@ validateNamedDomainInRecord (NameDomainNode name m_dom) = do name' <- validateName name domain' <-case m_dom of Just (l,d) -> checkSymbols [l] >> validateDomain d - Nothing -> do + Nothing -> do raiseError $ symbolRegion name SemanticError "Dataless not allowed in record" (return (fallback "Dataless RecordMemeber")) return $ (name', domain') -validateRange :: RangeNode -> ValidatorS (Range Expression) -validateRange range = case range of - SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=>tInt; return $ RangeSingle ex - OpenRangeNode dots -> do checkSymbols [dots] ; return $ RangeOpen - RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ;setContextFrom e1; ex <- validateExpression e1 ?=> tInt ; return $ RangeLowerBounded ex - LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; setContextFrom e1; ex <- validateExpression e1 ?=> tInt ; return $ RangeUpperBounded ex +validateRange ::Type -> RangeNode -> ValidatorS ((Range Expression)) +validateRange t range = case range of + SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=> t; return $ RangeSingle ex + OpenRangeNode dots -> do checkSymbols [dots] ; return RangeOpen + RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ;setContextFrom e1; ex <- validateExpression e1 ?=> t ; return $ RangeLowerBounded ex + LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; setContextFrom e1; ex <- validateExpression e1 ?=> t ; return $ RangeUpperBounded ex BoundedRangeNode e1 dots e2 -> do _ <- checkSymbols [dots] setContextFrom e1 - e1' <- validateExpression e1 ?=> tInt + e1' <- validateExpression e1 ?=> t setContextFrom e2 - e2' <- validateExpression e2 ?=> tInt + e2' <- validateExpression e2 ?=> t return $ RangeBounded e1' e2' validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) @@ -884,15 +890,6 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ --- validateAbstractPattern :: AbstractPatternNode -> ValidatorS AbstractPattern --- validateAbstractPattern (AbstractIdentifier nn) = validateName nn >>= \x -> return $ Single <$> x --- validateAbstractPattern (AbstractMetaVar lt) = AbstractPatternMetaVar <$> validateMetaVar lt --- validateAbstractPattern (AbstractPatternMatrix ln) = AbsPatMatrix <$> validateList_ validateAbstractPattern ln --- validateAbstractPattern (AbstractPatternSet ln) = AbsPatSet <$> validateList_ validateAbstractPattern ln --- validateAbstractPattern (AbstractPatternTuple m_lt ln) = do --- maybe (pure ()) (\n ->checkSymbols [n]) m_lt --- pure . AbsPatTuple <$> validateList_ validateAbstractPattern ln - validateMetaVar :: LToken -> ValidatorS String validateMetaVar tok = do Just lx <- validateSymbol tok @@ -933,55 +930,128 @@ validateOperatorExpression (PrefixOpNode lt expr) = do return . Typed TypeAny $ (\(untype->x) -> mkOp (PrefixOp op) [x]) (expr) --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do - lExpr <- validateExpression lexp - rExpr <- validateExpression rexp + (lType,lExpr) <- typeSplit <$> validateExpression lexp + (rType,rExpr) <- typeSplit <$> validateExpression rexp Just op' <- validateSymbol op - return . Typed TypeAny $ mkBinOp ( pack $ lexemeFace op') (untype lExpr) (untype rExpr) + let resultValidator = binOpType op' + let resultType = resultValidator lType rType + return . Typed resultType $ mkBinOp ( pack $ lexemeFace op') (lExpr) (rExpr) validateOperatorExpression (PostfixOpNode expr pon) = do - expr' <- validateExpression expr postFixOp <- validatePostfixOp pon - return $ postFixOp expr' + postFixOp expr -validatePostfixOp :: PostfixOpNode -> ValidatorS (Typed Expression -> Typed Expression) +validatePostfixOp :: PostfixOpNode -> ValidatorS (ExpressionNode -> ValidatorS (Typed Expression)) validatePostfixOp (OpFactorial lt) = do checkSymbols [lt] - return $ (\(untype->x) -> Typed tInt $ mkOp FactorialOp [x]) + return $ \exp -> do + v <- validateExpression exp ?=> tInt + return $ Typed tInt $ mkOp FactorialOp [v] validatePostfixOp (ApplicationNode args) = do - args' <- validateList_ validateExpression args - let underscore = Reference "_" Nothing - let ys = [if underscore == v then Nothing else Just v | x@(Typed _ v) <- args'] - return $ \ (Typed t x) -> Typed TypeAny $ Op $ MkOpRelationProj $ OpRelationProj x ys + return $ \exp -> do + (t,e) <- typeSplit <$> validateExpression exp + args' <- validateList validateExpression args + let underscore = Reference "_" Nothing + let ys = [if underscore == v then Nothing else Just x| x@(_,Typed _ v) <- args'] + iType <- case t of + TypeRelation ts -> checkProjectionArgs ts ys + _ -> do + raiseTypeError $ symbolRegion exp TypeError (TypeRelation []) t + let ts = map (maybe TypeAny (typeOf_ . snd)) ys + return $ TypeRelation $ ts + let op = Op $ MkOpRelationProj $ OpRelationProj e (map (untype . snd <$>) ys) + let resType = if any null ys then iType else TypeBool + return . Typed resType $ op + where + checkProjectionArgs :: [Type] -> [Maybe (RegionTagged (Typed Expression))] -> ValidatorS Type + checkProjectionArgs ref bind= do + unless (length ref == length bind) $ + raiseError $ symbolRegion args SemanticError "Member size mismatch for relation" + let pairs = zip ref bind + let (free,bound) = partition (null.snd) pairs + mapM_ (\(t,x)-> case x of + Nothing -> pure () + Just v -> void $ unifyTypes t v + ) bound + let freeTypes = map fst free + return $ if null freeTypes then TypeBool else TypeRelation freeTypes + validatePostfixOp (IndexedNode ln) = do - ranges <-catMaybes <$> validateList_ (f2n validateRange) ln - let indices = map interpretRange ranges - return $ \x -> (foldl (\m f -> f m)) x indices - where - interpretRange :: Range Expression -> (Typed Expression-> Typed Expression) - interpretRange x = - let a = case x of - RangeOpen -> Right (Nothing,Nothing) - RangeSingle ex -> Left ex - RangeLowerBounded ex -> Right (Just ex,Nothing) - RangeUpperBounded ex -> Right (Nothing,Just ex) - RangeBounded exl exr -> Right (Just exl,Just exr) - in case a of - Left ex -> \(untype->m) -> Typed TypeAny $ Op $ MkOpIndexing (OpIndexing m ex) - Right (i,j) -> \(untype->m) -> Typed TypeAny $ Op $ MkOpSlicing (OpSlicing m i j) + res <- catMaybes <$> listElems ln + return $ \exp -> do + setContextFrom exp + e <- validateExpression exp + foldM validateIndexingOrSlicing e res + validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do checkSymbols [l1,l2,l3] (_,dom') <- typeSplit <$> validateDomain dom - let t = getDType dom' - case t of - Just ty -> return $ (\(Typed _ ex) -> Typed ty $ D.Typed ex ty) - Nothing -> do - raiseError $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom')) - return (\(Typed t ex) -> Typed TypeAny $ D.Typed ex t) + t <- case getDType dom' of + Just t -> return t + Nothing -> return TypeAny <* (raiseError $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom'))) + return $ \exp -> do + e <- validateExpression exp ?=> t + return . Typed t $ D.Typed e t where getDType :: Domain () Expression -> Maybe Type getDType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d +validateIndexingOrSlicing :: Typed Expression -> RangeNode -> ValidatorS (Typed Expression) +validateIndexingOrSlicing (Typed t exp) (SingleRangeNode r) = do + setContextFrom r + iType <- getIndexingType t + i <- validateExpression r ?=> iType + setContextFrom r + vType <- getIndexedType t (Typed iType i) + return . Typed vType $ Op $ MkOpIndexing (OpIndexing exp i) + +validateIndexingOrSlicing exp range = do + let (mType,m) = typeSplit exp + setContextFrom range + sType <- getSlicingType mType + r' <- validateRange sType range + let (i,j) =case r' of + RangeOpen -> (Nothing,Nothing) + RangeLowerBounded ex -> (Just ex,Nothing) + RangeUpperBounded ex -> (Nothing,Just ex) + RangeBounded exl exr -> (Just exl,Just exr) + RangeSingle ex -> (Just ex,Just ex) -- This never gets hit in a well formed program + return $ Typed mType $ Op $ MkOpSlicing (OpSlicing m i j) + +getSlicingType :: Type -> ValidatorS Type +getSlicingType (TypeMatrix i _) = return i +getSlicingType (TypeSequence _) = return tInt +getSlicingType t = do + contextTypeError (CustomError . pack $ "Type " ++ (show $ pretty t) ++ " does not support slicing") + return TypeAny + +getIndexingType :: Type -> ValidatorS Type +getIndexingType (TypeMatrix i _) = return i +getIndexingType (TypeSequence _) = return tInt +getIndexingType (TypeList _) = return tInt +getIndexingType (TypeTuple _) = return tInt +getIndexingType t@(TypeRecord _) = return t +getIndexingType t@(TypeVariant _) = return t +getIndexingType t = do + contextTypeError (CustomError . pack $ "Type " ++ (show $ pretty t) ++ " does not support indexing") + return TypeAny + +getIndexedType :: Type -> (Typed Expression) -> ValidatorS Type +getIndexedType (TypeMatrix _ ms) _ = return ms +getIndexedType (TypeSequence t) _ = return t +getIndexedType (TypeTuple ts) ex = do + case intOut "Index" (untype ex) of + Left _ -> do + (void . contextTypeError $ CustomError $ "Non constant value indexing tuple") + return TypeAny + Right v | v <= 0 || v > toInteger ( length ts) -> do + (contextTypeError $ CustomError . pack $ "Tuple index "++ show v ++ "out of bounds" ) + return TypeAny + Right v -> return $ ts `at` (fromInteger v -1) +getIndexedType t@(TypeRecord vs) (Typed _ e) = return TypeAny --TODO implement +getIndexedType t@(TypeVariant _) _ = return TypeAny --TODO implement +getIndexedType _ _ = return TypeAny validateLiteral :: LiteralNode -> ValidatorS (Typed Expression) validateLiteral litNode = case litNode of @@ -1134,6 +1204,7 @@ validateComprehensionBody :: ComprehensionBodyNode -> ValidatorS [GeneratorOrCon --guard validateComprehensionBody (CompBodyCondition en) = do e <- validateExpression en + setContextFrom en assertType e TypeBool "Guards must be bools" return [Condition $ untype e] --x in dom @@ -1180,6 +1251,10 @@ checkSymbols = mapM_ validateSymbol raiseError :: ValidatorDiagnostic -> ValidatorS () raiseError e = tell [e] +raiseTypeError :: ValidatorDiagnostic -> ValidatorS () +raiseTypeError e = do + tc <- gets typeChecking + unless (not tc) $ raiseError e makeTupleLiteral :: [Typed Expression] -> ValidatorS (Typed Expression) makeTupleLiteral members = do let memberTypes = unzip $ map typeSplit members @@ -1355,6 +1430,12 @@ contextError e = do q <- getContext invalid $ ValidatorDiagnostic q $ Error e +contextTypeError :: ErrorType -> ValidatorS () +contextTypeError e = do + q <- getContext + tc <- gets typeChecking + unless (not tc) $ raiseError $ ValidatorDiagnostic q $ Error e + contextInfo :: InfoType -> ValidatorS () contextInfo e = do q <- getContext @@ -1418,7 +1499,7 @@ unifyPatterns t xs = mapM (flip unifyPattern t) xs unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do (Name n) <- validateName nn - traceM $ show n ++ ":" ++ show t + -- traceM $ show n ++ ":" ++ show t --dont put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,t)) addRegion (RegionInfo (symbolRegion nn) t Definition) @@ -1489,8 +1570,8 @@ data DomainType | DomainTypeTuple [DomainType] f2n :: (a -> ValidatorS b) -> a ->Validator b -f2n f a = do - q <- f a +f2n f a = do + q <- f a return $ Just q class Fallback a where diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index ad66f83f60..207e713fd1 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -57,6 +57,23 @@ printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs t captureErrors :: [ValidatorDiagnostic] -> Parser () captureErrors = mapM_ captureError +collapseSkipped :: [ValidatorDiagnostic] -> [ValidatorDiagnostic] +collapseSkipped [] = [] +collapseSkipped [x] = [x] +collapseSkipped ((ValidatorDiagnostic regx ex) :(ValidatorDiagnostic regy ey):rs) + | isSkipped ex && isSkipped ey && sameLine (drSourcePos regx) (drSourcePos regy) + = ValidatorDiagnostic (catDr regx regy) (Error $ CustomError "Unexpected characters") : rs + where + isSkipped (Error (TokenError (SkippedToken _))) = True + isSkipped _ = False + sameLine :: SourcePos -> SourcePos -> Bool + sameLine (SourcePos _ l1 _) (SourcePos _ l2 _) = l1 == l2 + catDr :: DiagnosticRegion -> DiagnosticRegion -> DiagnosticRegion + catDr (DiagnosticRegion sp _ o l1) (DiagnosticRegion _ en _ l2) = DiagnosticRegion sp en o (l1+l2) + catDr GlobalRegion _ = GlobalRegion +collapseSkipped (x:xs) = x : collapseSkipped xs + + captureError :: ValidatorDiagnostic -> Parser () captureError (ValidatorDiagnostic GlobalRegion message) = do let printError = DiagnosticForPrint 0 0 message @@ -80,7 +97,7 @@ val s = do case progStruct of Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) def in + Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) def{typeChecking=True} in case qpr of (model, vds,st) -> do print (maybe "" show model) From 10601ad801e822423db463c6ecdac6e3e3cb1ad3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 23 Nov 2022 19:09:46 +0000 Subject: [PATCH 098/378] Nearly implemented typecheck on functionals --- src/Conjure/Language/Expression/Op.hs | 2 +- src/Conjure/Language/Expression/OpTypes.hs | 82 ++++ src/Conjure/Language/Validator.hs | 507 ++++++++++++++++++++- src/Conjure/UI/ErrorDisplay.hs | 10 +- 4 files changed, 579 insertions(+), 22 deletions(-) diff --git a/src/Conjure/Language/Expression/Op.hs b/src/Conjure/Language/Expression/Op.hs index a58d0101ec..24a3eafccd 100644 --- a/src/Conjure/Language/Expression/Op.hs +++ b/src/Conjure/Language/Expression/Op.hs @@ -154,4 +154,4 @@ arg :: [a] -> Int -> Doc -> a arg xs n op = case atMay xs n of Nothing -> bug ("Missing argument" <+> pretty (n+1) <+> "for operator" <+> op) - Just v -> v + Just v -> v \ No newline at end of file diff --git a/src/Conjure/Language/Expression/OpTypes.hs b/src/Conjure/Language/Expression/OpTypes.hs index 2dd861c570..3909327a98 100644 --- a/src/Conjure/Language/Expression/OpTypes.hs +++ b/src/Conjure/Language/Expression/OpTypes.hs @@ -64,3 +64,85 @@ constBool = constantTyped2 TypeBool same :: (Type -> Type) same = id +-- mkOp :: (Op x :< x, ReferenceContainer x, ExpressionLike x) => OpType -> [x] -> x +-- mkOp op xs = case op of +-- PrefixOp lex -> case lex of +-- L_ExclamationMark -> inject $ MkOpNot $ OpNot (arg xs 0 "not") +-- L_Minus -> inject $ MkOpNegate $ OpNegate (arg xs 0 "negate") +-- _ -> bug $ "Unexpected Prefix operator :" <+> pretty (show lex) +-- FactorialOp -> inject $ MkOpFactorial $ OpFactorial (arg xs 0 "factorial") +-- TwoBarOp -> inject $ MkOpTwoBars $ OpTwoBars (arg xs 0 "twoBars") +-- FunctionOp lex -> case lex of +-- L_fAnd -> inject $ MkOpAnd $ OpAnd (arg xs 0 "and") +-- L_fOr -> inject $ MkOpOr $ OpOr (arg xs 0 "or") +-- L_fXor -> inject $ MkOpXor $ OpXor (arg xs 0 "xor") +-- L_Sum -> inject $ MkOpSum $ OpSum (arg xs 0 "sum") +-- L_Product -> inject $ MkOpProduct $ OpProduct (arg xs 0 "product") +-- -- _ -> opImage (fromName (Name op)) xs +-- L_true -> inject $ MkOpTrue $ OpTrue (arg xs 0 "true") +-- L_toInt -> inject $ MkOpToInt $ OpToInt (arg xs 0 "toInt") +-- L_makeTable -> inject $ MkOpMakeTable $ OpMakeTable (arg xs 0 "makeTable") +-- L_table -> inject $ MkOpTable $ OpTable (arg xs 0 "table") (arg xs 1 "table") +-- L_gcc -> inject $ MkOpGCC $ OpGCC (arg xs 0 "gcc") (arg xs 1 "gcc") (arg xs 2 "gcc") +-- L_atleast -> inject $ MkOpAtLeast $ OpAtLeast (arg xs 0 "atleast") (arg xs 1 "atleast") (arg xs 2 "atleast") +-- L_atmost -> inject $ MkOpAtMost $ OpAtMost (arg xs 0 "atmost" ) (arg xs 1 "atmost" ) (arg xs 2 "atmost" ) +-- L_defined -> inject $ MkOpDefined $ OpDefined (arg xs 0 "defined") +-- L_range -> inject $ MkOpRange $ OpRange (arg xs 0 "range") +-- L_restrict -> inject $ MkOpRestrict $ OpRestrict (arg xs 0 "restrict") (arg xs 1 "restrict") +-- L_allDiff -> inject $ MkOpAllDiff $ OpAllDiff (arg xs 0 "allDiff") +-- L_alldifferent_except -> inject $ MkOpAllDiffExcept $ OpAllDiffExcept +-- (arg xs 0 "allDiffExcept") +-- (arg xs 1 "allDiffExcept") +-- L_catchUndef -> inject $ MkOpCatchUndef $ OpCatchUndef (arg xs 0 "catchUndef") +-- (arg xs 1 "catchUndef") +-- L_dontCare -> inject $ MkOpDontCare $ OpDontCare (arg xs 0 "dontCare") +-- L_toSet -> inject $ MkOpToSet $ OpToSet False (arg xs 0 "toSet") +-- L_toMSet -> inject $ MkOpToMSet $ OpToMSet (arg xs 0 "toMSet") +-- L_toRelation -> inject $ MkOpToRelation $ OpToRelation (arg xs 0 "toRelation") +-- L_max -> inject $ MkOpMax $ OpMax (arg xs 0 "max") +-- L_min -> inject $ MkOpMin $ OpMin (arg xs 0 "min") +-- L_image -> inject $ MkOpImage $ OpImage (arg xs 0 "image") +-- (arg xs 1 "image") +-- L_transform -> inject $ MkOpTransform $ OpTransform (arg xs 0 "transform") +-- (arg xs 1 "transform") + +-- L_imageSet -> inject $ MkOpImageSet $ OpImageSet (arg xs 0 "imageSet") +-- (arg xs 1 "imageSet") +-- L_preImage -> inject $ MkOpPreImage $ OpPreImage (arg xs 0 "preImage") +-- (arg xs 1 "preImage") +-- L_inverse -> inject $ MkOpInverse $ OpInverse (arg xs 0 "inverse") +-- (arg xs 1 "inverse") +-- L_freq -> inject $ MkOpFreq $ OpFreq (arg xs 0 "freq") +-- (arg xs 1 "freq") +-- L_hist -> inject $ MkOpHist $ OpHist (arg xs 0 "hist") +-- L_parts -> inject $ MkOpParts $ OpParts (arg xs 0 "parts") +-- L_together -> inject $ MkOpTogether $ OpTogether (arg xs 0 "together") +-- (arg xs 1 "together") +-- L_apart -> inject $ MkOpApart $ OpApart (arg xs 0 "apart") +-- (arg xs 1 "apart") +-- L_party -> inject $ MkOpParty $ OpParty (arg xs 0 "party") +-- (arg xs 1 "party") +-- L_participants -> inject $ MkOpParticipants $ OpParticipants (arg xs 0 "participants") +-- L_active -> inject $ MkOpActive $ OpActive (arg xs 0 "active") +-- (arg xs 1 "active" |> nameOut |> fromMaybe (bug "active")) +-- L_pred -> inject $ MkOpPred $ OpPred (arg xs 0 "pred") +-- L_succ -> inject $ MkOpSucc $ OpSucc (arg xs 0 "succ") +-- L_factorial -> inject $ MkOpFactorial $ OpFactorial (arg xs 0 "factorial") +-- L_powerSet -> inject $ MkOpPowerSet $ OpPowerSet (arg xs 0 "powerSet") +-- L_concatenate -> inject $ MkOpFlatten $ OpFlatten (Just 1) +-- (arg xs 0 "concatenate") +-- L_flatten -> +-- case xs of +-- [m] -> inject $ MkOpFlatten $ OpFlatten Nothing m +-- [n,m] -> +-- let n' = fromInteger $ fromMaybe (bug "The 1st argument of flatten has to be a constant integer.") (intOut "flatten" n) +-- in inject $ MkOpFlatten $ OpFlatten (Just n') m +-- _ -> bug "flatten takes 1 or 2 arguments." +-- _ -> bug ("Unknown lexeme for function type operator:" <+> pretty (show lex)) + + +-- arg :: [a] -> Int -> Doc -> a +-- arg xs n op = +-- case atMay xs n of +-- Nothing -> bug ("Missing argument" <+> pretty (n+1) <+> "for operator" <+> op) +-- Just v -> v diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index fd7aa3598f..06bd74b2fc 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -36,7 +36,7 @@ import Conjure.Language.Expression.Op mkBinOp, Op(MkOpRelationProj, MkOpSlicing, MkOpIndexing), OpRelationProj(OpRelationProj), - OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), + OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), OpAnd (OpAnd), ) import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Conjure.Language.AST.Reformer (Flattenable (flatten)) @@ -48,6 +48,8 @@ import Control.Monad.Except (runExcept) import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Applicative import Conjure.Language.Expression.OpTypes (binOpType) +import Control.Exception (evaluate) + class WithRegion a where @@ -83,7 +85,7 @@ typeOf_ (Typed t _) = t untypeAs :: Type -> Typed a -> ValidatorS a untypeAs r ((Typed t a)) = if let ?typeCheckerMode=StronglyTyped in typeUnify r t then return a - else contextError (TypeError r t) >> return a + else contextTypeError (TypeError r t) >> return a typeAs :: Type -> Maybe a -> Maybe (Typed a) typeAs t (Just a) = Just $ Typed t a @@ -109,7 +111,11 @@ data ErrorType | SyntaxError Text | SemanticError Text | CustomError Text + | SkippedTokens + | MissingArgsError Int Int + | UnexpectedArg | TypeError Type Type -- Expected, got + | ComplexTypeError Text Type -- Expected, got | InternalError --Used to explicitly tag invalid pattern matches | InternalErrorS Text -- Used for giving detail to bug messages deriving (Show,Eq,Ord) @@ -283,7 +289,7 @@ validateStatement (SuchThatStatement stsn) = validateSuchThatStatement stsn validateStatement (WhereStatement wsn) = validateWhereStatement wsn validateStatement (ObjectiveStatement osn) = validateObjectiveStatement osn validateStatement (HeuristicStatement lt exp) = validateHeuristicStatement lt exp -validateStatement (UnexpectedToken lt) = return [] <* (invalid $ lt CustomError "Unexpected") --TODO address as part of skip token refactor +validateStatement (UnexpectedToken lt) = return [] <* (invalid $ lt TokenError lt) --TODO address as part of skip token refactor validateHeuristicStatement :: LToken -> ExpressionNode -> ValidatorS [Statement] validateHeuristicStatement lt exp = do @@ -873,7 +879,7 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ exp <- validateExpression en let (t,e) = typeSplit exp apats <- unifyPatterns t ps - return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (untype exp)) | pat <- apats] + return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (e)) | pat <- apats] validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do checkSymbols [lt] ps <- sequenceElems pats @@ -906,14 +912,15 @@ validateDomainExpression (DomainExpressionNode l1 dom l2) = do --TODO fix function types inc lookups etc validateFunctionApplication :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateFunctionApplication name args = do - args' <- map (untype.snd) <$> validateList validateExpression args + args' <- validateList validateExpression args Just name' <- validateSymbol name - return . Typed TypeAny $ do - let n = name' - let a = args' - case (n,a) of - (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z - _ -> mkOp (FunctionOp n) a + validateFuncOp name' args' + -- return . Typed TypeAny $ do + -- let n = name' + -- let a = args' + -- case (n,a) of + -- (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z + -- _ -> mkOp (FunctionOp n) a validateIdentifierExpr :: NameNode -> ValidatorS (Typed Expression) @@ -1033,7 +1040,7 @@ getIndexingType (TypeList _) = return tInt getIndexingType (TypeTuple _) = return tInt getIndexingType t@(TypeRecord _) = return t getIndexingType t@(TypeVariant _) = return t -getIndexingType t = do +getIndexingType t = do contextTypeError (CustomError . pack $ "Type " ++ (show $ pretty t) ++ " does not support indexing") return TypeAny @@ -1042,10 +1049,10 @@ getIndexedType (TypeMatrix _ ms) _ = return ms getIndexedType (TypeSequence t) _ = return t getIndexedType (TypeTuple ts) ex = do case intOut "Index" (untype ex) of - Left _ -> do + Left _ -> do (void . contextTypeError $ CustomError $ "Non constant value indexing tuple") - return TypeAny - Right v | v <= 0 || v > toInteger ( length ts) -> do + return TypeAny + Right v | v <= 0 || v > toInteger ( length ts) -> do (contextTypeError $ CustomError . pack $ "Tuple index "++ show v ++ "out of bounds" ) return TypeAny Right v -> return $ ts `at` (fromInteger v -1) @@ -1252,7 +1259,7 @@ raiseError :: ValidatorDiagnostic -> ValidatorS () raiseError e = tell [e] raiseTypeError :: ValidatorDiagnostic -> ValidatorS () -raiseTypeError e = do +raiseTypeError e = do tc <- gets typeChecking unless (not tc) $ raiseError e makeTupleLiteral :: [Typed Expression] -> ValidatorS (Typed Expression) @@ -1479,13 +1486,27 @@ sameType xs@(x:_) = do xs' <- mapM (unifyTypes t') xs return $ Typed t' xs' +typesUnifyS :: [Type] -> Bool +typesUnifyS = let ?typeCheckerMode=StronglyTyped in typesUnify + +mostDefinedS :: [Type] -> Type +mostDefinedS = let ?typeCheckerMode=StronglyTyped in mostDefined + unifyTypes :: Type -> RegionTagged (Typed a) -> ValidatorS a unifyTypes _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> return a unifyTypes t (r,Typed t' a) = do let ?typeCheckerMode = StronglyTyped - if typesUnify [t', t] then pure () else raiseError $ r TypeError t t' + if typesUnify [t', t] then pure () else raiseTypeError $ r TypeError t t' return a +unifyTypesFailing :: Type -> RegionTagged (Typed a) -> Validator a +unifyTypesFailing _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> (return $ Just a) +unifyTypesFailing t (r,Typed t' a) = do + tc <- gets typeChecking + let ?typeCheckerMode = StronglyTyped + if not tc || typesUnify [t', t] then return $ Just a else invalid (r TypeError t t') + + scoped :: ValidatorS a -> ValidatorS a scoped m = do st <- gets symbolTable @@ -1597,4 +1618,454 @@ instance Fallback [a] where fallback = const [] instance Fallback AbstractPattern where - fallback = Single . fallback \ No newline at end of file + fallback = Single . fallback + +type FuncOpDec = (Int) + + +funcOpBuilder :: Lexeme -> [Arg] -> ValidatorS (Typed Expression) +funcOpBuilder l = (functionOps l) (mkOp $ FunctionOp l) +-- functionOps l@L_fAnd = (validateArgList [isLogicalContainer],const TypeBool) +functionOps :: Lexeme -> ([Expression] -> Expression) -> [Arg] -> ValidatorS (Typed Expression) +functionOps l = case l of + L_fAnd -> unFunc isLogicalContainer (pure . const TypeBool) + L_fOr -> unFunc isLogicalContainer (pure . const TypeBool) + L_fXor -> unFunc isLogicalContainer (pure . const TypeBool) + L_Sum -> unFunc sumArgs (pure . const tInt) + L_Product -> unFunc sumArgs (pure . const tInt) + L_true -> unFunc anyType (pure . const TypeBool) + L_toInt -> unFunc (only TypeBool) (pure . const tInt) + L_makeTable -> unFunc (only TypeBool) (pure . const TypeBool) + L_table -> biFunc tableArgs (const2 TypeBool) + L_gcc -> triFunc (each3 listInt) (const3 TypeBool) + L_atleast -> triFunc (each3 listInt) (const3 TypeBool) + L_atmost -> triFunc (each3 listInt) (const3 TypeBool) + L_defined -> unFunc funcSeq funcDomain + L_range -> unFunc funcSeq funcRange + L_restrict -> biFunc (const.const todo) (const2 TypeAny) --TODO + L_allDiff -> unFunc listOrMatrix (const $ pure TypeBool) + L_alldifferent_except -> biFunc (indep (enumerable) listOrMatrix) (const2 TypeBool) + L_catchUndef -> biFunc unifies (\a b -> pure $ mostDefinedS $ map typeOf_ $ catMaybes [a,b]) + L_dontCare -> unFunc anyType (const $ pure TypeBool) + L_toSet -> unFunc toSetArgs typeToSet + L_toMSet -> unFunc toMSetArgs typeToMSet + L_toRelation -> unFunc func typeToRelation + L_max -> unFunc minMaxArgs (fmap typeOf_) --TODO + L_min -> unFunc minMaxArgs (fmap typeOf_) --TODO + L_image -> biFunc imageArgs (\a -> const $ TypeSet <$> funcRange a) + L_transform -> biFunc transformArgs (const (typeOf_ <$>)) + L_imageSet -> biFunc imSetArgs (\a -> const $ TypeSet <$> funcDomain a) + L_preImage -> biFunc preImageArgs (\a -> const $ TypeSet <$> funcDomain a) + L_inverse -> biFunc inverseArgs (const2 TypeBool) + L_freq -> biFunc freqArgs (const2 tInt) + L_hist -> unFunc histArgs histType + L_parts -> unFunc part partsType + L_together -> biFunc setPartArgs (const2 TypeBool) + L_apart -> biFunc setPartArgs (const2 TypeBool) + L_party -> biFunc partyArgs partyType + L_participants -> unFunc part partInner + L_active -> biFunc activeArgs (const2 TypeBool) + L_pred -> unFunc enumerable enumerableType + L_succ -> unFunc enumerable enumerableType + L_factorial -> unFunc (only tInt) (const $ pure tInt) + L_powerSet -> unFunc set powerSetType + L_concatenate -> unFunc concatArgs concatType + L_flatten -> \ b a -> case a of + [] -> (unFunc (unaryFlattenArgs) (flattenType Nothing)) b a + [_] -> (unFunc (unaryFlattenArgs) (flattenType Nothing)) b a + xs -> (biFunc (binaryFlattenArgs) (\(getNum->a) -> flattenType a)) (b) a + _ -> error "Unknown" + where + todo = return $ pure () + valid = return $ pure () + const2 = const.const . pure + const3 = const.const.const . pure + getNum :: Maybe (Typed Expression) -> Maybe Int + getNum (Just(Typed _ x)) = case intOut "" x of + Nothing -> Nothing + Just n -> pure $ fromInteger n + getNum _ = Nothing + each3 f a b c= f a >> f b >> f c + anyType = const . return $ Just () + indep :: (Arg -> Validator ()) -> (Arg -> Validator ()) -> (Arg -> Arg -> Validator ()) + indep f1 f2 a b = do + v1 <- f1 a + v2 <- f2 b + if null $ catMaybes $ [v1,v2] then return $ pure () else return Nothing + binaryFlattenArgs :: Arg -> Arg -> Validator () + binaryFlattenArgs (r1,d) b = do + off <- case intOut "" (untype d) of + Just (fromInteger->a) | a > 0 -> return $ Just a + _ -> invalid $ r1 CustomError "1st arg must be a constant positive int" + let ref = map (const TypeList) [1..fromMaybe 1 (off)] + let ref' = foldr id TypeAny ref + r <- unifyTypesFailing ref' b + return $ if null off || null r then Nothing else Just () + unaryFlattenArgs :: Arg -> Validator () + unaryFlattenArgs (r,typeOf_->(TypeMatrix _ _)) = valid + unaryFlattenArgs (r,typeOf_->(TypeList _)) = valid + unaryFlattenArgs (r,typeOf_->TypeAny) = valid + unaryFlattenArgs (r,typeOf_->t) = invalid $ r ComplexTypeError "List or Matrix " t + + concatType :: Maybe (Typed Expression) -> Maybe Type + concatType (fmap typeOf_->Just(TypeMatrix _ (TypeList t))) = Just $ TypeList t + concatType (fmap typeOf_->Just(TypeMatrix _ (TypeMatrix _ t))) = Just $ TypeList t + concatType (fmap typeOf_->Just(TypeList (TypeList t))) = Just $ TypeList t + concatType (fmap typeOf_->Just(TypeList (TypeMatrix _ t))) = Just $ TypeList t + concatType _ = Just $ TypeList TypeAny + concatArgs :: Arg -> Validator () + concatArgs = const todo + tableArgs :: Arg -> Arg -> Validator () + tableArgs = const . const todo + toMSetArgs :: Arg -> Validator () + toMSetArgs (r,typeOf_-> a) = case a of + TypeAny -> return $ pure () + TypeList _ -> return $ pure () + TypeMatrix {} -> return $ pure () + TypeMSet {} -> return $ pure () + TypeSet {} -> return $ pure () + TypeFunction {} -> return $ pure () + TypeRelation {} -> return $ pure () + _ -> invalid $ r ComplexTypeError "Matrix ,list,function,relation,mset,set " a + toSetArgs :: Arg -> Validator () + toSetArgs (r,typeOf_-> a) = case a of + TypeAny -> return $ pure () + TypeList _ -> return $ pure () + TypeMatrix {} -> return $ pure () + TypeMSet {} -> return $ pure () + TypeFunction {} -> return $ pure () + TypeRelation {} -> return $ pure () + _ -> invalid $ r ComplexTypeError "Matrix ,list,function,relation,mset " a + listOrMatrix :: Arg -> Validator () + listOrMatrix (r,typeOf_-> a) = case a of + TypeAny -> return $ pure () + TypeList _ -> return $ pure () + TypeMatrix {} -> return $ pure () + _ -> invalid $ r ComplexTypeError "Matrix or list" a + freqArgs :: Arg -> Arg -> Validator () + freqArgs (r1,a) (r2,b) = do + let tb = typeOf_ b + let (rt,ti) = case typeOf_ a of + TypeMatrix idx ms -> (TypeMatrix idx md,md) where md = mostDefinedS [tb,ms] + TypeMSet ms -> (TypeMSet md,md) where md = mostDefinedS [tb,ms] + _ -> (TypeMatrix tInt tb,tb) + a' <- unifyTypesFailing rt (r1,a) + b' <- unifyTypesFailing ti (r2,b) + return $ if null a' || null b' then Nothing else Just () + + unifies :: Arg -> Arg -> Validator () + unifies a b = do + let md = mostDefinedS $ map (typeOf_.unregion) [a,b] + a' <- unifyTypesFailing md a + b' <- unifyTypesFailing md b + return $ if null a' || null b' then Nothing else Just () + func :: Arg -> Validator Type + func (_,Typed (TypeSet t) _) = return $ pure t + func (_,Typed TypeAny _) = return $ pure TypeAny + func (r,Typed t _) = invalid $ r TypeError (TypeFunction TypeAny TypeAny) t + set :: Arg -> Validator Type + set (_,Typed (TypeSet t) _) = return $ pure t + set (_,Typed TypeAny _) = return $ pure TypeAny + set (r,Typed t _) = invalid $ r TypeError (TypeSet TypeAny) t + + powerSetType (Just (Typed (TypeSet i) _)) = Just $ TypeSet (TypeSet i) + powerSetType _ = Nothing + + only t (r,typeOf_->t')= if t'==TypeAny || t == t' then return $ Just t else invalid $ r TypeError t t' + + listInt (r,typeOf_->t') = case t' of + TypeAny -> return $ Just t' + TypeList TypeInt{} -> return $ Just t' + TypeMatrix ty TypeInt{} -> return $ Just t' + _ -> invalid $ r ComplexTypeError "Matrix or list of int or enum" t' + partInner :: Maybe (Typed Expression) -> Maybe Type + partInner (fmap typeOf_->Just (TypePartition a)) = Just $ TypeSet a + partInner _ = Just $ TypeSet TypeAny + + imSetArgs :: Arg -> Arg -> Validator () + imSetArgs (r1,a) (r2,b) = do + let t = case (typeOf_ a,typeOf_ b) of + (TypeFunction i _,tb) -> mostDefinedS [i,tb] + (TypeSequence _,_) -> tInt + (_,tb ) -> tb + a' <- unifyTypesFailing (TypeFunction t TypeAny) (r1,a) + b' <- unifyTypesFailing t (r2,b) + return $ if null a' || null b' then Nothing else Just () + preImageArgs :: Arg -> Arg -> Validator () + preImageArgs (r1,a) (r2,b) = do + let t = case (typeOf_ a,typeOf_ b) of + (TypeFunction _ i,tb) -> mostDefinedS [i,tb] + (TypeSequence i,_) -> i + (_,tb ) -> tb + a' <- unifyTypesFailing (TypeFunction TypeAny t) (r1,a) + b' <- unifyTypesFailing t (r2,b) + return $ if null a' || null b' then Nothing else Just () + + partyArgs :: Arg -> Arg -> Validator () + partyArgs (r1,a) (r2,b) = do + let t = case (typeOf_ a,typeOf_ b) of + (TypePartition ta,tb) -> mostDefinedS [ta,tb] + (_,tb ) -> tb + a' <- unifyTypesFailing (TypePartition t) (r1,a) + b' <- unifyTypesFailing (t) (r2,b) + return $ if null a' || null b' then Nothing else Just () + + inverseArgs :: Arg -> Arg -> Validator () + inverseArgs (r1,a) (r2,b) = do + let (fi,fo) = case (typeOf_ a,typeOf_ b) of + (TypeFunction fi fo,TypeFunction gi go) -> (mostDefinedS [fi,go],mostDefinedS [fo,gi]) + (TypeFunction fi fo,_ ) -> (fi,fo) + (_,TypeFunction gi go) -> (gi,go) + _ -> (TypeAny,TypeAny) + a' <- unifyTypesFailing (TypeFunction fi fo) (r1,a) + b' <- unifyTypesFailing (TypeFunction fo fi) (r2,b) + return $ if null a' || null b' then Nothing else Just () + setPartArgs :: Arg -> Arg -> Validator () + setPartArgs (r1,a) (r2,b) = do + let t = case (typeOf_ a,typeOf_ b) of + (TypeSet st,TypePartition pt) -> mostDefinedS [st,pt] + (TypeSet st,_) -> st + (_,TypePartition ts) -> ts + _ -> TypeAny + a' <- unifyTypesFailing (TypeSet t) (r1,a) + b' <- unifyTypesFailing (TypePartition t) (r2,b) + return $ if null a' || null b' then Nothing else Just () + + partyType :: Maybe (Typed Expression) ->Maybe (Typed Expression) -> Maybe Type + partyType a b = do + let at = case typeOf_ <$> a of + Just (TypePartition t) -> t + _ -> TypeAny + let bt = maybe TypeAny typeOf_ b + return $ TypeSet $ mostDefinedS [at,bt] + partsType :: Maybe (Typed Expression) -> Maybe Type + partsType (fmap typeOf_->Just (TypePartition a)) = Just $ TypeSet $ TypeSet a + partsType (fmap typeOf_->Just TypeAny) = Just $ TypeSet $ TypeSet TypeAny + partsType _ = Nothing + minMaxArgs :: Arg -> Validator () + minMaxArgs a = return $ pure () + + transformArgs :: Arg -> Arg -> Validator () + transformArgs a b = do + return $ pure () + activeArgs :: Arg -> Arg -> Validator () + activeArgs (r,(typeOf_->t)) b = do + return $ pure () + --TODO fill in properly + -- first is Variant + -- second is name in variant + typeToSet :: Maybe (Typed Expression) -> Maybe Type + typeToSet (Just (typeOf_->t)) = TypeSet <$> tMembers t + typeToSet _ = Nothing + typeToMSet :: Maybe (Typed Expression) -> Maybe Type + typeToMSet (Just (typeOf_->t)) = TypeMSet <$> tMembers t + typeToMSet _ = Nothing + typeToRelation :: Maybe (Typed Expression) -> Maybe Type + typeToRelation (Just(typeOf_->(TypeFunction i j))) = Just $ TypeRelation [i,j] + typeToRelation (Just(typeOf_->TypeAny)) = Just $ TypeRelation [TypeAny,TypeAny] + typeToRelation _ = Nothing + tMembers t = case t of + TypeAny -> Just TypeAny + TypeList ty -> Just ty + TypeMatrix _ i -> Just i + TypeSet ty -> Just ty + TypeMSet ty -> Just ty + TypeFunction i j -> Just $ TypeTuple [i,j] + TypeRelation tys -> Just $ TypeTuple tys + _ -> Nothing + + imageArgs :: Arg -> Arg -> Validator () + imageArgs (r1,typeOf_->t1) r2 = do + Just from <- case t1 of + TypeAny -> return $ Just TypeAny + TypeFunction a _ -> return $Just a + TypeSequence _ -> return $Just tInt + _ -> (return Nothing) <* (raiseTypeError $ (r1 ComplexTypeError "Function or Sequence" t1)) + _ <- unifyTypes from r2 + return $ pure () + + sumArgs :: Arg -> Validator () + sumArgs (r,typeOf_->t') = do + t <- case t' of + TypeAny -> return TypeAny + TypeList t -> return t + TypeMatrix _ t -> return t + TypeSet t -> return t + TypeMSet t -> return t + _ -> do + (raiseTypeError $ r ComplexTypeError "Matrix or Set" t') + fail "" + case t of + TypeAny -> return $ pure () + TypeInt TagInt -> return $ pure () + _ -> return Nothing <* raiseTypeError (r ComplexTypeError "Integer elements" t) + funcSeq :: Arg -> Validator () + funcSeq (r,typeOf_->t') = case t' of + TypeAny -> return $ pure () + TypeSequence _ -> return $ pure () + TypeFunction _ _ -> return $ pure () + _ -> invalid $ r ComplexTypeError "Function or Sequence" t' + funcDomain :: Maybe (Typed a) -> Maybe Type + funcDomain (Just (typeOf_->(TypeFunction a _))) = Just a + funcDomain (Just (typeOf_->(TypeSequence _))) = Just tInt + funcDomain _ = Nothing + funcRange :: Maybe (Typed a) -> Maybe Type + funcRange (Just (typeOf_->(TypeFunction _ b))) = Just b + funcRange (Just (typeOf_->((TypeSequence b)))) = Just b + funcRange _ = Nothing + part :: Arg -> Validator () + part (r,typeOf_->t) = case t of + TypeAny -> valid + TypePartition _ -> return $ pure () + _ -> invalid $ r TypeError (TypePartition TypeAny) t + + histArgs :: Arg -> Validator () + histArgs (r,typeOf_->a) = case a of + TypeMSet _ -> return $ pure () + TypeList _ -> return $ pure () + TypeMatrix _ _ -> return $ pure () + TypeAny -> return $ pure () + _ -> invalid $ r ComplexTypeError "Matrix, List or MSet" a + histType :: Maybe (Typed Expression) -> Maybe Type + histType (Just (Typed (TypeMSet a) _ )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] + histType (Just (Typed (TypeMatrix _ a) _ )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] + histType (Just (Typed (TypeList a) _ )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] + histType _ = Just $ TypeMatrix tInt $ TypeTuple [TypeAny,tInt] + enumerable :: Arg -> Validator () + enumerable (r,typeOf_->t) = case t of + TypeAny -> return $ pure () + TypeInt TagUnnamed{} -> invalid $ r CustomError "Anonymous enums are not explictly enumerable" + TypeInt _ -> return $ pure () + TypeEnum{} -> return $ pure () + TypeBool -> return $ pure () + _ -> invalid $ r ComplexTypeError "int enum or bool" t + enumerableType :: Maybe (Typed Expression) -> Maybe Type + enumerableType (Just (Typed t@(TypeInt TagInt) _)) = Just t + enumerableType (Just (Typed t@(TypeInt (TagEnum _)) _)) = Just t + enumerableType (Just (Typed t@(TypeEnum{}) _)) = Just t + enumerableType _ = Nothing + + +flattenType :: Maybe Int -> Maybe (Typed Expression) -> Maybe Type +flattenType (Just n) (Just (Typed a _ )) | n < 0 = Just a +flattenType (Just n) (Just (Typed (TypeList m) e )) = flattenType (Just (n-1)) (Just (Typed m e)) +flattenType (Just n) (Just (Typed (TypeMatrix _ m) e )) = flattenType (Just (n-1)) (Just (Typed m e)) + +flattenType Nothing (Just (Typed (TypeMatrix _ m) e )) = flattenType Nothing (Just (Typed m e)) +flattenType Nothing (Just (Typed (TypeList m) e )) = flattenType Nothing (Just (Typed m e)) +flattenType Nothing (Just (Typed TypeAny _)) = Just $ TypeList TypeAny +flattenType _ _ = Just $ TypeList TypeAny + +validateFuncOp :: Lexeme -> [RegionTagged (Typed Expression)] -> ValidatorS (Typed Expression) +validateFuncOp l args = do + let b = funcOpBuilder l + b args + -- case argCheck of + -- Nothing -> return $ Typed (r []) $ fallback "arg fail" + -- Just tys -> return $ Typed (r tys)(b $ map untype tys) + +isOfType :: Type -> RegionTagged (Typed Expression) -> ValidatorS Bool +isOfType t (r,v) = setContext r >> return v ?=> t >> (return $ typesUnifyS [t,typeOf_ v]) + +isLogicalContainer :: RegionTagged (Typed Expression) -> Validator () +isLogicalContainer (r,Typed t e) = do + case t of + TypeAny -> return $ pure () + TypeList TypeAny -> return $ pure () + TypeList TypeBool -> return $ pure () + TypeMatrix _ TypeAny -> return $ pure () + TypeMatrix _ TypeBool -> return $ pure () + TypeSet TypeAny -> return $ pure () + TypeMSet TypeBool -> return $ pure () + _ -> invalid $ r ComplexTypeError "Collection of boolean" t + + +-- validateArgList :: [RegionTagged (Typed Expression) -> ValidatorS Bool] -> [RegionTagged (Typed Expression)] -> Validator [Typed Expression] +-- validateArgList ps args | length args < length ps = do invalid $ args MissingArgsError (length ps) +-- validateArgList ps args = do +-- let ps' = ps ++ repeat argOverflow +-- xs <- zipWithM id ps' args +-- return (if and xs then Just $ map unregion args else Nothing) + +-- argOverflow :: RegionTagged a -> ValidatorS Bool +-- argOverflow (region,_) = do +-- setContext region +-- void . contextError $ CustomError "Extra Args" +-- return False + +type Arg = RegionTagged (Typed Expression) +unFunc :: (Arg -> Validator a) --Arg validator + -> (Maybe (Typed Expression) -> Maybe Type) --typeEvaluator + -> ([Expression]->Expression) --mkOp or similar + -> [Arg] -> ValidatorS (Typed Expression) +unFunc argVal t f args = do + (v,ts) <- case args of + [] -> do tooFewArgs 1 0 >> return (Nothing,Nothing) + [x] -> do + r<- argVal x + tc <- gets typeChecking + let result = case r of + Nothing | tc -> Nothing + _ -> Just $ map (untype . unregion) [x] + return (result,(Just $ unregion x)) + (x:rs) -> do + tooManyArgs rs + r <- argVal x + let result =case r of + Nothing -> Nothing + Just _ -> Just $ map (untype . unregion) [x] + return (result,(Just $ unregion x)) + let res = maybe (fallback "argFail") f v + return $ Typed (fromMaybe TypeAny $ t ts) res +biFunc :: (Arg -> Arg -> Validator a) -> (Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) +biFunc argVal t f args = do + (v,ts) <- case args of + [] -> do tooFewArgs 2 0 >> return (Nothing,(Nothing,Nothing)) + [x] -> do tooFewArgs 2 1 >> return (Nothing,(Just $ unregion x,Nothing)) + [x,y] -> do + r <- argVal x y + tc <- gets typeChecking + let result = case r of + Nothing | tc -> Nothing + _ -> Just $ map (untype . unregion) [x,y] + return (result,(Just (unregion x) , Just (unregion y))) + (x:y:rs) -> do + tooManyArgs rs + r <- argVal x y + let result =case r of + Nothing -> Nothing + Just _ -> Just $ map (untype . unregion) [x,y] + return (result,(Just (unregion x) , Just (unregion y))) + let res = maybe (fallback "argFail") f v + return $ Typed (fromMaybe TypeAny $ uncurry t ts) res + +triFunc :: (Arg -> Arg -> Arg -> Validator a) -> (Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) +triFunc argVal t f args = do + (v,ts) <- case args of + [] -> do tooFewArgs 3 0 >> return (Nothing,(Nothing,Nothing,Nothing)) + [x] -> do tooFewArgs 3 1 >> return (Nothing,(Just $ unregion x,Nothing,Nothing)) + [x,y] -> do tooFewArgs 3 2 >> return (Nothing,(Just $ unregion x,Just $ unregion y,Nothing)) + [x,y,z] -> do + r <- argVal x y z + tc <- gets typeChecking + let result = case r of + Nothing | tc -> Nothing + _ -> Just $ map (untype . unregion) [x,y,z] + return (result,(Just (unregion x) , Just (unregion y), Just (unregion z))) + (x:y:z:rs) -> do + tooManyArgs rs + r <- argVal x y z + let result =case r of + Nothing -> Nothing + Just _ -> Just $ map (untype . unregion) [x,y,z] + return (result,(Just (unregion x) , Just (unregion y), Just (unregion z))) + let res = maybe (fallback "argFail") f v + return $ Typed (fromMaybe TypeAny $ uncurry3 t ts) res + where uncurry3 f (a,b,c) = f a b c --TODO export from prelude +tooFewArgs :: Int -> Int -> ValidatorS () +tooFewArgs n i = do + void . contextError $ MissingArgsError n i + +tooManyArgs :: [RegionTagged a] -> ValidatorS () +tooManyArgs = mapM_ (\x ->do raiseError $ x UnexpectedArg) + diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 207e713fd1..e73fb21cd4 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -38,6 +38,10 @@ displayError x = case x of SemanticError txt -> "Semantic error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt TypeError expected got -> "Type error: Expected: " ++ show (pretty expected) ++ " Got: " ++ show (pretty got) + ComplexTypeError msg ty -> "Type error: Expected:" ++ show msg ++ " got " ++ (show $ pretty ty) + SkippedTokens -> "Skipped tokens" + UnexpectedArg -> "Unexpected argument" + MissingArgsError expected got -> "Insufficient args, expected " ++ (show expected) ++ " got " ++ (show got) InternalError -> "Pattern match failiure" InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt @@ -55,14 +59,14 @@ printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs t printEntry (a,(r,c,t)) = putStrLn $ show a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" captureErrors :: [ValidatorDiagnostic] -> Parser () -captureErrors = mapM_ captureError +captureErrors = (mapM_ captureError) . collapseSkipped collapseSkipped :: [ValidatorDiagnostic] -> [ValidatorDiagnostic] collapseSkipped [] = [] collapseSkipped [x] = [x] collapseSkipped ((ValidatorDiagnostic regx ex) :(ValidatorDiagnostic regy ey):rs) | isSkipped ex && isSkipped ey && sameLine (drSourcePos regx) (drSourcePos regy) - = ValidatorDiagnostic (catDr regx regy) (Error $ CustomError "Unexpected characters") : rs + = collapseSkipped $ ValidatorDiagnostic (catDr regx regy) (Error $ SkippedTokens ) : rs where isSkipped (Error (TokenError (SkippedToken _))) = True isSkipped _ = False @@ -70,7 +74,7 @@ collapseSkipped ((ValidatorDiagnostic regx ex) :(ValidatorDiagnostic regy ey):rs sameLine (SourcePos _ l1 _) (SourcePos _ l2 _) = l1 == l2 catDr :: DiagnosticRegion -> DiagnosticRegion -> DiagnosticRegion catDr (DiagnosticRegion sp _ o l1) (DiagnosticRegion _ en _ l2) = DiagnosticRegion sp en o (l1+l2) - catDr GlobalRegion _ = GlobalRegion + catDr _ _ = GlobalRegion collapseSkipped (x:xs) = x : collapseSkipped xs From dfe1d480effeb3abd4c6df67ccf90ce557bfc21a Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 24 Nov 2022 15:25:20 +0000 Subject: [PATCH 099/378] More work on type checking, fixed functions --- src/Conjure/Language/Validator.hs | 153 +++++++++++++++++++++--------- 1 file changed, 107 insertions(+), 46 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 06bd74b2fc..bf793655d6 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -49,6 +49,11 @@ import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Applicative import Conjure.Language.Expression.OpTypes (binOpType) import Control.Exception (evaluate) +import Conjure.Language.AdHoc ((:<)(project)) +import Control.Monad (mapAndUnzipM) +import Conjure.Bug (bug) +import Text.PrettyPrint (text) + @@ -367,8 +372,8 @@ validateGiven (GivenEnumNode se l1 l2 l3) = do checkSymbols [l1, l2, l3] names <- validateNameList se - let eType = TypeAny --TODO fixme - mapM_ (\(r,x) -> putSymbol (x,(r,True,eType) )) names + let eType = TypeEnum + mapM_ (\(r,x) -> putSymbol (x,(r,True,eType x) )) names return $ [GivenDomainDefnEnum n | (_,n) <- names] validateFind :: FindStatementNode -> ValidatorS [Declaration] @@ -393,7 +398,7 @@ validateLettingAssignment names (LettingExpr en) = do let (t,e) = typeSplit expr let declarations = map (\(r,_)->mkDeclaration r expr) names mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names --TODO need to add type info here + mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names return $ [Letting n e | (_,n) <- names] validateLettingAssignment names (LettingDomain lt dn) = do checkSymbols [lt] @@ -529,14 +534,22 @@ validateDomain dm = case dm of return $ Typed (TypeTuple ts) (DomainTuple ds) validateRecordDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateRecordDomain namedDoms = do - lst <- catMaybes <$> validateList_ (f2n validateNamedDomainInVariant) namedDoms - let (ts,ds) = unzip $ map (\(x,typeSplit->(t,d))->((x,t),(x,d))) lst - return $ Typed (TypeVariant ts) (DomainVariant ds) + lst <- validateList (f2n validateNamedDomainInVariant) namedDoms + let lst' = mapMaybe (\(r,m)->(\x->(r,x))<$>m) lst + let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' + --push members + let t = TypeRecord ts + mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t))) ds + return $ Typed t (DomainVariant (unregion <$> ds)) validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateVariantDomain namedDoms = do - lst <- catMaybes <$> validateList_ (f2n validateNamedDomainInVariant) namedDoms - let (ts,ds) = unzip $ map (\(x,typeSplit->(t,d))->((x,t),(x,d))) lst - return $ Typed (TypeVariant ts) (DomainVariant ds) + lst <- validateList (f2n validateNamedDomainInVariant) namedDoms + let lst' = mapMaybe (\(r,m)->(\x->(r,x))<$>m) lst + let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' + --push members + let t = TypeVariant ts + mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t))) ds + return $ Typed t (DomainVariant (unregion <$> ds)) validateMatrixDomain :: ListNode DomainNode -> DomainNode -> ValidatorS TypedDomain validateMatrixDomain indexes dom = do idoms <- validateList_ validateDomain indexes @@ -553,7 +566,7 @@ validateDomain dm = case dm of let repr = () attrs' <- case attrs of Just a -> validateSetAttributes a - Nothing -> return $ def + Nothing -> return def (t,dom') <- typeSplit <$> validateDomain dom return . Typed (TypeSet t) $ DomainSet repr attrs' dom' @@ -840,8 +853,8 @@ validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do let locals = if null decls then DefinednessConstraints cons else AuxiliaryVars (decls ++ [SuchThat cons]) - expr <- validateExpression ex ?=> TypeAny --TODO : do this properly - return . Typed TypeAny $ (WithLocals (expr) locals) + (t,expr) <- typeSplit <$> validateExpression ex + return . Typed t $ WithLocals (expr) locals translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of @@ -914,6 +927,7 @@ validateFunctionApplication :: LToken -> ListNode ExpressionNode -> ValidatorS ( validateFunctionApplication name args = do args' <- validateList validateExpression args Just name' <- validateSymbol name + setContextFrom args validateFuncOp name' args' -- return . Typed TypeAny $ do -- let n = name' @@ -955,19 +969,23 @@ validatePostfixOp (OpFactorial lt) = do return $ Typed tInt $ mkOp FactorialOp [v] validatePostfixOp (ApplicationNode args) = do return $ \exp -> do + let reg = symbolRegion exp (t,e) <- typeSplit <$> validateExpression exp args' <- validateList validateExpression args - let underscore = Reference "_" Nothing - let ys = [if underscore == v then Nothing else Just x| x@(_,Typed _ v) <- args'] - iType <- case t of - TypeRelation ts -> checkProjectionArgs ts ys + case t of + TypeFunction a b -> validateFuncOp L_image ((reg,Typed t e):args') _ -> do - raiseTypeError $ symbolRegion exp TypeError (TypeRelation []) t - let ts = map (maybe TypeAny (typeOf_ . snd)) ys - return $ TypeRelation $ ts - let op = Op $ MkOpRelationProj $ OpRelationProj e (map (untype . snd <$>) ys) - let resType = if any null ys then iType else TypeBool - return . Typed resType $ op + let underscore = Reference "_" Nothing + let ys = [if underscore == v then Nothing else Just x| x@(_,Typed _ v) <- args'] + iType <- case t of + TypeRelation ts -> checkProjectionArgs ts ys + _ -> do + raiseTypeError $ symbolRegion exp ComplexTypeError "Relation or function" t + let ts = map (maybe TypeAny (typeOf_ . snd)) ys + return $ TypeRelation $ ts + let op = Op $ MkOpRelationProj $ OpRelationProj e (map (untype . snd <$>) ys) + let resType = if any null ys then iType else TypeBool + return . Typed resType $ op where checkProjectionArgs :: [Type] -> [Maybe (RegionTagged (Typed Expression))] -> ValidatorS Type checkProjectionArgs ref bind= do @@ -1114,27 +1132,31 @@ validatePartitionLiteral ln = do validateRecordLiteral :: ListNode RecordMemberNode -> ValidatorS (Typed Expression) validateRecordLiteral ln = do - members <- catMaybes <$> validateList_ validateRecordMember ln - let members' = map (\(x,y) -> (x,untype y)) members - -- let eType = TypeRecord TypeAny - return . Typed TypeAny $ mkAbstractLiteral $ AbsLitRecord members' - + members <- catMaybes <$> listElems ln + case members of + [] -> return $ Typed (TypeRecord []) (mk [])--REVIEW: should empty records be allowed? + xs -> do + (ns,unzip . map typeSplit->(ts,es)) <- mapAndUnzipM validateRecordMember xs + let t =TypeRecord $ zip ns ts + return $ Typed t $ mk (zip ns es) + where + mk = mkAbstractLiteral . AbsLitRecord validateVariantLiteral :: ListNode RecordMemberNode -> ValidatorS (Typed Expression) validateVariantLiteral ln = do - members <- catMaybes <$> validateList_ validateRecordMember ln + members <- catMaybes <$> validateList_ (f2n validateRecordMember) ln res <- case members of [] -> invalid $ symbolRegion ln SemanticError "Variants must contain exactly one member" - [(n,x)]-> return . todoTypeAny . pure $ mkAbstractLiteral $ AbsLitVariant Nothing n (untype x) + [(n,Typed t v)]-> return . pure . Typed (TypeVariant [(n,t)]) $ mkAbstractLiteral $ AbsLitVariant Nothing n v _:_ -> invalid $ symbolRegion ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected return $ fromMaybe (fallback "bad variant") res -validateRecordMember :: RecordMemberNode -> Validator (Name,Typed Expression) +validateRecordMember :: RecordMemberNode -> ValidatorS (Name,Typed Expression) validateRecordMember (RecordMemberNode name lEq expr) = do checkSymbols [lEq] name' <- validateName name expr' <- validateExpression expr - return . pure $ ( name' , expr') + return ( name' , expr') validateFunctionLiteral :: ListNode ArrowPairNode -> ValidatorS (Typed Expression) validateFunctionLiteral ln = do @@ -1490,7 +1512,11 @@ typesUnifyS :: [Type] -> Bool typesUnifyS = let ?typeCheckerMode=StronglyTyped in typesUnify mostDefinedS :: [Type] -> Type -mostDefinedS = let ?typeCheckerMode=StronglyTyped in mostDefined +mostDefinedS [] = TypeAny +mostDefinedS [x] = x +mostDefinedS (x:xs) = let ?typeCheckerMode=StronglyTyped in case mostDefined (xs++[x]) of + TypeAny -> x + t -> t unifyTypes :: Type -> RegionTagged (Typed a) -> ValidatorS a unifyTypes _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> return a @@ -1642,7 +1668,7 @@ functionOps l = case l of L_atmost -> triFunc (each3 listInt) (const3 TypeBool) L_defined -> unFunc funcSeq funcDomain L_range -> unFunc funcSeq funcRange - L_restrict -> biFunc (const.const todo) (const2 TypeAny) --TODO + L_restrict -> biFunc (restrictArgs) (restrictTypes) L_allDiff -> unFunc listOrMatrix (const $ pure TypeBool) L_alldifferent_except -> biFunc (indep (enumerable) listOrMatrix) (const2 TypeBool) L_catchUndef -> biFunc unifies (\a b -> pure $ mostDefinedS $ map typeOf_ $ catMaybes [a,b]) @@ -1650,8 +1676,8 @@ functionOps l = case l of L_toSet -> unFunc toSetArgs typeToSet L_toMSet -> unFunc toMSetArgs typeToMSet L_toRelation -> unFunc func typeToRelation - L_max -> unFunc minMaxArgs (fmap typeOf_) --TODO - L_min -> unFunc minMaxArgs (fmap typeOf_) --TODO + L_max -> unFunc minMaxArgs minMaxType + L_min -> unFunc minMaxArgs minMaxType L_image -> biFunc imageArgs (\a -> const $ TypeSet <$> funcRange a) L_transform -> biFunc transformArgs (const (typeOf_ <$>)) L_imageSet -> biFunc imSetArgs (\a -> const $ TypeSet <$> funcDomain a) @@ -1673,8 +1699,8 @@ functionOps l = case l of L_flatten -> \ b a -> case a of [] -> (unFunc (unaryFlattenArgs) (flattenType Nothing)) b a [_] -> (unFunc (unaryFlattenArgs) (flattenType Nothing)) b a - xs -> (biFunc (binaryFlattenArgs) (\(getNum->a) -> flattenType a)) (b) a - _ -> error "Unknown" + _ -> (biFunc (binaryFlattenArgs) (\(getNum->a) -> flattenType a)) (b) a + _ -> bug $ text $ "Unkown functional operator " ++ show l where todo = return $ pure () valid = return $ pure () @@ -1687,6 +1713,8 @@ functionOps l = case l of getNum _ = Nothing each3 f a b c= f a >> f b >> f c anyType = const . return $ Just () + + indep :: (Arg -> Validator ()) -> (Arg -> Validator ()) -> (Arg -> Arg -> Validator ()) indep f1 f2 a b = do v1 <- f1 a @@ -1702,10 +1730,10 @@ functionOps l = case l of r <- unifyTypesFailing ref' b return $ if null off || null r then Nothing else Just () unaryFlattenArgs :: Arg -> Validator () - unaryFlattenArgs (r,typeOf_->(TypeMatrix _ _)) = valid + unaryFlattenArgs (r,typeOf_->(TypeMatrix _ _)) = valid unaryFlattenArgs (r,typeOf_->(TypeList _)) = valid unaryFlattenArgs (r,typeOf_->TypeAny) = valid - unaryFlattenArgs (r,typeOf_->t) = invalid $ r ComplexTypeError "List or Matrix " t + unaryFlattenArgs (r,typeOf_->t) = invalid $ r ComplexTypeError "List or Matrix " t concatType :: Maybe (Typed Expression) -> Maybe Type concatType (fmap typeOf_->Just(TypeMatrix _ (TypeList t))) = Just $ TypeList t @@ -1782,6 +1810,10 @@ functionOps l = case l of partInner (fmap typeOf_->Just (TypePartition a)) = Just $ TypeSet a partInner _ = Just $ TypeSet TypeAny + restrictArgs :: Arg -> Arg -> Validator () + restrictArgs (r1,t1) (r2,t2) = valid --TODO + restrictTypes :: Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type + restrictTypes t1 t2 = Nothing --TODO imSetArgs :: Arg -> Arg -> Validator () imSetArgs (r1,a) (r2,b) = do let t = case (typeOf_ a,typeOf_ b) of @@ -1843,17 +1875,46 @@ functionOps l = case l of partsType (fmap typeOf_->Just TypeAny) = Just $ TypeSet $ TypeSet TypeAny partsType _ = Nothing minMaxArgs :: Arg -> Validator () - minMaxArgs a = return $ pure () + minMaxArgs (r,(Typed t e)) | Just (dom :: Domain () Expression) <- project e = + case t of + TypeInt TagInt -> valid + TypeInt (TagEnum _) -> valid + TypeEnum {} -> valid + TypeAny -> valid + _ -> invalid $ r ComplexTypeError "Domain of int-like or matrix of int-like" t + minMaxArgs (r,Typed t _) = do + inner <- case t of + TypeList tyInner -> return tyInner + TypeMatrix _ tyInner -> return tyInner + TypeSet tyInner -> return tyInner + TypeMSet tyInner -> return tyInner + TypeAny -> return TypeAny + _ -> return TypeAny <* invalid (r ComplexTypeError "Domain of int-like or matrix of int-like" t) + case inner of + TypeInt TagInt -> valid + TypeInt (TagEnum _) -> valid + TypeEnum {} -> valid + TypeAny -> valid + _ -> invalid $ r ComplexTypeError "Domain of int-like or matrix of int-like" t + + minMaxType :: Maybe (Typed Expression) -> Maybe Type + minMaxType (Just (Typed t@(TypeInt _) _)) = Just t + minMaxType (Just (Typed t@(TypeEnum {}) _)) = Just t + minMaxType (Just (Typed (TypeMatrix _ a) v)) = minMaxType (Just (Typed a v)) + minMaxType (Just (Typed (TypeList a) v)) = minMaxType (Just (Typed a v)) + minMaxType (Just (Typed (TypeSet a) v)) = minMaxType (Just (Typed a v)) + minMaxType (Just (Typed (TypeMSet a) v)) = minMaxType (Just (Typed a v)) + minMaxType _ = Just TypeAny transformArgs :: Arg -> Arg -> Validator () transformArgs a b = do return $ pure () activeArgs :: Arg -> Arg -> Validator () - activeArgs (r,(typeOf_->t)) b = do - return $ pure () - --TODO fill in properly - -- first is Variant - -- second is name in variant + activeArgs (r,(typeOf_->t@(TypeVariant vs))) b = do + void <$> unifyTypesFailing t b --todo this could be better + activeArgs (r,(typeOf_->TypeAny)) b =valid + activeArgs (r,(typeOf_->t)) b = invalid $ r ComplexTypeError "Variant " t + typeToSet :: Maybe (Typed Expression) -> Maybe Type typeToSet (Just (typeOf_->t)) = TypeSet <$> tMembers t typeToSet _ = Nothing @@ -2061,7 +2122,7 @@ triFunc argVal t f args = do return (result,(Just (unregion x) , Just (unregion y), Just (unregion z))) let res = maybe (fallback "argFail") f v return $ Typed (fromMaybe TypeAny $ uncurry3 t ts) res - where uncurry3 f (a,b,c) = f a b c --TODO export from prelude + where uncurry3 f (a,b,c) = f a b c --todo export from prelude tooFewArgs :: Int -> Int -> ValidatorS () tooFewArgs n i = do void . contextError $ MissingArgsError n i From fbc84d3e628892cdc46d0ad7c76afe3bc26280b3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 24 Nov 2022 16:07:15 +0000 Subject: [PATCH 100/378] Supporting list in int domain --- src/Conjure/Language/Validator.hs | 44 ++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index bf793655d6..8e297d489d 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -506,6 +506,20 @@ validateDomain dm = case dm of MissingDomainNode lt -> do raiseError $ lt TokenError lt; return $ fallback "Missing Domain" where validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain + validateRangedInt (Just ln@(ListNode _ (Seq [SeqElem a _]) _)) = do + d <- case a of + SingleRangeNode en -> do + (t,e) <- typeSplit <$> validateExpression en + case t of + TypeInt TagInt -> return $ DomainInt TagInt [RangeSingle e] + TypeMatrix _ tInt -> return $ DomainIntE e + TypeList tInt -> return $ DomainIntE e + TypeSet tInt -> return $ DomainIntE e + _ -> return (DomainIntE e) <* raiseTypeError (symbolRegion en ComplexTypeError "Set/List of int or Int" t) + _ -> do + r <- validateRange tInt a + return $ DomainInt TagInt [r] + return $ Typed tInt d validateRangedInt (Just ranges) = do ranges' <- catMaybes <$> validateList_ (f2n (validateRange tInt)) ranges return . Typed tInt $ DomainInt TagInt ranges' @@ -972,7 +986,7 @@ validatePostfixOp (ApplicationNode args) = do let reg = symbolRegion exp (t,e) <- typeSplit <$> validateExpression exp args' <- validateList validateExpression args - case t of + case t of TypeFunction a b -> validateFuncOp L_image ((reg,Typed t e):args') _ -> do let underscore = Reference "_" Nothing @@ -1248,8 +1262,26 @@ validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] e <- validateExpression en let (t,exp) = typeSplit e - pats <- validateSequence_ (flip unifyPattern t . Just) (apn) - -- pats <- validateSequence_ validateAbstractPattern apn + t' <- case t of + TypeAny -> return $ pure $ TypeAny + TypeTuple tys -> return $ pure $ t + TypeMatrix i ty -> return $ pure $ ty + TypeList ty -> return $ pure $ ty + TypeSet ty -> return $ pure $ ty + TypeMSet ty -> return $ pure $ ty + TypeSequence ty -> return $ pure $ ty + _ -> invalid $ symbolRegion en SemanticError "Cannot be projected" + let pt = fromMaybe TypeAny (t') + -- TypeBool -> _ --na + -- TypeInt it -> _ --na + -- TypeEnum na -> _ --na + -- TypeUnnamed na -> _ --na + -- TypeRecord x0 -> _ --na + -- TypeVariant x0 -> _ -- na + -- TypeFunction ty ty' -> _ -- na + -- TypeRelation tys -> _ --na + -- TypePartition ty -> _ --na + pats <- validateSequence_ (flip unifyPattern pt . Just) (apn) return $ [Generator (GenInExpr pat exp)| pat <- pats] --letting x be validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do @@ -1514,9 +1546,9 @@ typesUnifyS = let ?typeCheckerMode=StronglyTyped in typesUnify mostDefinedS :: [Type] -> Type mostDefinedS [] = TypeAny mostDefinedS [x] = x -mostDefinedS (x:xs) = let ?typeCheckerMode=StronglyTyped in case mostDefined (xs++[x]) of +mostDefinedS (x:xs) = let ?typeCheckerMode=StronglyTyped in case mostDefined (xs++[x]) of TypeAny -> x - t -> t + t -> t unifyTypes :: Type -> RegionTagged (Typed a) -> ValidatorS a unifyTypes _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> return a @@ -1547,7 +1579,7 @@ unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do (Name n) <- validateName nn -- traceM $ show n ++ ":" ++ show t - --dont put symbol if _ ? + --REVIEW don't put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,t)) addRegion (RegionInfo (symbolRegion nn) t Definition) return $ Single $ Name n From 2ac3f6d4774156f6938f72f05f501e4ad9be8399 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 25 Nov 2022 15:52:51 +0000 Subject: [PATCH 101/378] Fixing type checker and test bugs --- .../Language/Expression/Op/Internal/Common.hs | 4 +- src/Conjure/Language/Parser.hs | 21 +- src/Conjure/Language/ParserC.hs | 700 +----------------- src/Conjure/Language/TH.hs | 17 +- src/Conjure/Language/Validator.hs | 268 ++++--- src/Conjure/UI/ErrorDisplay.hs | 2 +- src/test/Conjure/ModelAllSolveAll.hs | 14 +- .../expressions/operators/operators.essence | 6 +- 8 files changed, 217 insertions(+), 815 deletions(-) diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index b52477db7c..9fc454d951 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -244,7 +244,8 @@ operators = overloadedFunctionals :: [Lexeme] overloadedFunctionals = [ - L_Sum + L_Sum, + L_fXor ] functionals :: [Lexeme] @@ -309,6 +310,7 @@ quantifiers :: [Lexeme] quantifiers = [ L_ForAll, L_Exists, + L_Product, L_Sum ] diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index afe3684e41..39f4f10903 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -52,17 +52,17 @@ import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) -type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b) +type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b,Bool) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc deriving (Show) -runPipeline ::(?typeChecking::Bool) => Pipeline a b -> Text -> Either PipelineError b -runPipeline (parse,val) txt = do +runPipeline :: Pipeline a b -> Text -> Either PipelineError b +runPipeline (parse,val,tc) txt = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult - let x = V.runValidator (val parseResult) def{V.typeChecking= ?typeChecking} + let x = V.runValidator (val parseResult) def{V.typeChecking= tc} case x of (Just m, ds,_) | not $ any V.isError ds -> Right m (_, ves,_) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) @@ -71,7 +71,7 @@ runPipeline (parse,val) txt = do parseModel :: Pipeline ProgramTree Model -parseModel = (parseProgram,V.strict . V.validateModel) +parseModel = (parseProgram,V.strict . V.validateModel,True) -- inCompleteFile $ do -- let -- pLanguage :: Parser LanguageVersion @@ -99,7 +99,7 @@ parseModel = (parseProgram,V.strict . V.validateModel) -- } -parseIO :: (?typeChecking::Bool ,MonadFailDoc m) => Pipeline i a -> String -> m a +parseIO :: (MonadFailDoc m) => Pipeline i a -> String -> m a parseIO p s = do case runPipeline p $ T.pack s of Left err -> failDoc $ text $show err @@ -121,7 +121,7 @@ parseIO p s = do -- -------------------------------------------------------------------------------- parseTopLevels :: Pipeline [S.StatementNode] [Statement] -parseTopLevels = (P.parseTopLevels,V.strict . V.validateProgramTree) +parseTopLevels = (P.parseTopLevels,V.strict . V.validateProgramTree,False) -- let one = satisfyL $ \case -- L_find -> Just $ do -- decls <- flip sepEndBy1 comma $ do @@ -234,11 +234,11 @@ parseTopLevels = (P.parseTopLevels,V.strict . V.validateProgramTree) -- return (RangeSingle x) parseDomain :: Pipeline DomainNode (Domain () Expression) -parseDomain = (P.parseDomain,fmap V.untype . V.validateDomain) +parseDomain = (P.parseDomain,fmap V.untype . V.validateDomain,True) parseDomainWithRepr :: Pipeline DomainNode (Domain HasRepresentation Expression) -parseDomainWithRepr = (P.parseDomain, fmap V.untype . V.validateDomainWithRepr) +parseDomainWithRepr = (P.parseDomain, fmap V.untype . V.validateDomainWithRepr,True) -- -- TODO: uncomment the following to parse (union, intersect and minus) for domains -- -- let -- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] @@ -630,7 +630,7 @@ parseDomainWithRepr = (P.parseDomain, fmap V.untype . V.validateDomainWithRepr) -- metaVarInE = ExpressionMetaVar parseExpr :: Pipeline S.ExpressionNode Expression -parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> TypeAny) +parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAny,True) -- let -- mergeOp op = mkBinOp (lexemeText op) @@ -1003,7 +1003,6 @@ runLexerAndParser :: Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ show pe) Right a -> Right a - where ?typeChecking = True -- ls <- runLexer inp -- case runParser p file ls of -- Left (msg, line, col) -> diff --git a/src/Conjure/Language/ParserC.hs b/src/Conjure/Language/ParserC.hs index 2fb00bcd37..1fc361d608 100644 --- a/src/Conjure/Language/ParserC.hs +++ b/src/Conjure/Language/ParserC.hs @@ -1,704 +1,20 @@ {-# LANGUAGE RecordWildCards #-} -module Conjure.Language.ParserC ( module X ) where +module Conjure.Language.ParserC ( + parseModel ) where -- conjure import Conjure.Prelude import Conjure.Language.Definition -import Conjure.Language.Domain -import Conjure.Language.Type -import Conjure.Language.TypeOf -import Conjure.Language.Pretty -import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace ) -import Conjure.Language.Parser as X --- megaparsec -import Text.Megaparsec ( (), label, token, try, eof ) -import Text.Megaparsec.Error -import Text.Megaparsec.Pos ( SourcePos(..) ) -import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) --- import Text.Megaparsec.ShowToken ( showToken ) +import qualified Conjure.Language.Validator as V +import Conjure.Language.AST.Syntax (ProgramTree) +import Conjure.Language.Parser (Pipeline) +import Conjure.Language.AST.ASTParser (parseProgram) --- text -import qualified Data.Text as T --- containers -import qualified Data.Set as S ( null, fromList, toList ) - - --- parseModel :: Parser Model --- parseModel = do --- let m = dummyModel --- return m --- inCompleteFile $ do --- let --- pLanguage :: Parser LanguageVersion --- pLanguage = do --- lexeme L_language --- pos1 <- getPosition --- l <- identifierText --- -- ESSENCE' is accepted, just for convenience --- unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do --- setPosition pos1 --- failDoc $ "language name has to be Essence, but given:" <+> pretty l --- pos2 <- getPosition --- is <- sepBy1 integer dot --- unless (is >= [1]) $ do --- setPosition pos2 --- failDoc $ "language version expected to be at least 1.0, but given:" <+> --- pretty (intercalate "." (map show is)) --- return (LanguageVersion (Name l) (map fromInteger is)) --- l <- optional pLanguage --- xs <- many parseTopLevels --- return Model --- { mLanguage = fromMaybe def l --- , mStatements = concat xs --- , mInfo = def --- } - - --- -------------------------------------------------------------------------------- --- -- Actual parsers -------------------------------------------------------------- --- -------------------------------------------------------------------------------- - --- parseTopLevels :: Parser [Statement] --- parseTopLevels = do --- let one = do --- lexeme L_letting --- i <- parseName --- lexeme L_be --- msum --- [ do --- lexeme L_new --- lexeme L_type --- msum --- [ do --- lexeme L_of --- lexeme $ LIdentifier "size" --- j <- parseExpr --- return $ Declaration (LettingDomainDefnUnnamed i j) --- , do --- lexeme L_enum --- ys <- braces (commaSeparated parseName) <|> return [] --- modify (\ st -> st { enumDomains = [i] ++ enumDomains st } ) --- return $ Declaration (LettingDomainDefnEnum i ys) --- ] --- , do --- lexeme L_domain --- j <- parseDomain --- return $ Declaration (Letting i (Domain j)) --- , do --- j <- parseExpr --- return $ Declaration (Letting i j) --- ] --- "letting statement" --- some one - --- parseRange :: Parser a -> Parser (Range a) --- parseRange p = msum [try pRange, pSingle] "range" --- where --- pRange = do --- fr <- optional p --- dotdot --- to <- optional p --- return $ case (fr,to) of --- (Nothing, Nothing) -> RangeOpen --- (Just x , Nothing) -> RangeLowerBounded x --- (Nothing, Just y ) -> RangeUpperBounded y --- (Just x , Just y ) -> RangeBounded x y --- pSingle = do --- x <- p --- return (RangeSingle x) - --- parseDomain :: Parser (Domain () Expression) --- parseDomain = (forgetRepr <$> parseDomainWithRepr) "domain" - --- parseDomainWithRepr :: Parser (Domain HasRepresentation Expression) --- parseDomainWithRepr = pDomainAtom - --- where - --- pDomainAtom = msum --- [ pBool, try pIntFromExpr, pInt, try pEnum, try pReference --- , pMatrix, try pTupleWithout, pTupleWith --- , pRecord, pVariant --- , pSet --- , pMSet --- , try pFunction', pFunction --- , pSequence --- , pRelation --- , pPartition --- , DomainMetaVar <$> parseMetaVariable, parens parseDomainWithRepr --- ] - --- pBool = do --- lexeme L_bool --- -- parse and discard, compatibility with SR --- _ <- optional $ parens $ commaSeparated0 $ parseRange parseExpr --- return DomainBool - --- pIntFromExpr = do --- lexeme L_int --- x <- parens parseExpr --- case (let ?typeCheckerMode = StronglyTyped in typeOf x) of --- Just (TypeInt TagInt) -> return $ DomainInt TagInt [RangeSingle x] --- _ -> return $ DomainIntE x - --- pInt = do --- lexeme L_int --- mxs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr --- let xs = fromMaybe [] mxs --- return $ DomainInt TagInt xs - --- pReference = do --- r <- identifierText --- return $ DomainReference (Name r) Nothing - --- pEnum = do --- r <- identifierText --- xs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr --- st <- get --- guard (Name r `elem` enumDomains st) --- return $ DomainEnum (Name r) xs Nothing - --- pMatrix = do --- lexeme L_matrix --- lexeme L_indexed --- lexeme L_by --- xs <- brackets (commaSeparated parseDomain) --- lexeme L_of --- y <- parseDomainWithRepr --- return $ foldr DomainMatrix y xs - --- pTupleWith = do --- lexeme L_tuple --- xs <- parens $ commaSeparated0 parseDomainWithRepr --- return $ DomainTuple xs - --- pTupleWithout = do --- xs <- parens $ countSepAtLeast 2 parseDomainWithRepr comma --- return $ DomainTuple xs - --- pRecord = do --- lexeme L_record --- let one = do n <- parseName --- lexeme L_Colon --- d <- parseDomainWithRepr --- return (n,d) --- xs <- braces $ commaSeparated0 one --- return $ DomainRecord xs - --- pVariant = do --- lexeme L_variant --- let one = do n <- parseName --- lexeme L_Colon --- d <- parseDomainWithRepr --- return (n,d) --- xs <- braces $ commaSeparated0 one --- return $ DomainVariant xs - --- pSet = do --- lexeme L_set --- x <- parseSetAttr --- y <- lexeme L_of >> parseDomainWithRepr --- return $ DomainSet NoRepresentation x y - --- pMSet = do --- lexeme L_mset --- x <- parseMSetAttr --- y <- lexeme L_of >> parseDomainWithRepr --- return $ DomainMSet NoRepresentation x y - --- pFunction' = do --- lexeme L_function --- (y,z) <- arrowedPair parseDomainWithRepr --- return $ DomainFunction NoRepresentation def y z - --- pFunction = do --- lexeme L_function --- x <- parseFunctionAttr --- (y,z) <- arrowedPair parseDomainWithRepr --- return $ DomainFunction NoRepresentation x y z - --- pSequence = do --- lexeme L_sequence --- x <- parseSequenceAttr --- y <- lexeme L_of >> parseDomainWithRepr --- return $ DomainSequence NoRepresentation x y - --- pRelation = do --- lexeme L_relation --- pos <- getPosition --- x <- parseRelationAttr --- lexeme L_of --- ys <- parens (parseDomainWithRepr `sepBy` lexeme L_Times) --- let RelationAttr _ (BinaryRelationAttrs binAttrs) = x --- when (length ys /= 2 && not (S.null binAttrs)) $ do --- setPosition pos --- failDoc $ "Only binary relations can have these attributes:" <+> --- prettyList id "," (S.toList binAttrs) --- return $ DomainRelation NoRepresentation x ys - --- pPartition = do --- lexeme L_partition --- x <- parsePartitionAttr --- lexeme L_from --- y <- parseDomainWithRepr --- return $ DomainPartition NoRepresentation x y - --- parseAttributes :: Parser (DomainAttributes Expression) --- parseAttributes = do --- xs <- parens (commaSeparated0 parseAttribute) <|> return [] --- return $ DomainAttributes xs --- where --- parseAttribute = msum [parseDontCare, try parseNameValue, parseDAName] --- parseNameValue = DANameValue <$> (Name <$> identifierText) <*> parseExpr --- parseDAName = DAName <$> (Name <$> identifierText) --- parseDontCare = do dotdot ; return DADotDot - --- parseSetAttr :: Parser (SetAttr Expression) --- parseSetAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "set" attrs --- ["size", "minSize", "maxSize"] --- SetAttr <$> case filterSizey attrs of --- [] -> return SizeAttr_None --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - --- parseMSetAttr :: Parser (MSetAttr Expression) --- parseMSetAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "mset" attrs --- [ "size", "minSize", "maxSize" --- , "minOccur", "maxOccur" --- ] --- size <- case filterSizey attrs of --- [] -> return SizeAttr_None --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of --- [] -> return OccurAttr_None --- [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) --- [DANameValue "maxOccur" a] -> return (OccurAttr_MaxOccur a) --- [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- return (MSetAttr size occur) - --- parseFunctionAttr :: Parser (FunctionAttr Expression) --- parseFunctionAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "function" attrs --- [ "size", "minSize", "maxSize" --- , "injective", "surjective", "bijective" --- , "total" --- ] --- size <- case filterSizey attrs of --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- [] -> return SizeAttr_None --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- let partiality = if DAName "total" `elem` attrs --- then PartialityAttr_Total --- else PartialityAttr_Partial --- jectivity <- case filterJectivity attrs of --- [] -> return JectivityAttr_None --- [DAName "bijective" ] -> return JectivityAttr_Bijective --- [DAName "injective" ] -> return JectivityAttr_Injective --- [DAName "surjective"] -> return JectivityAttr_Surjective --- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- return (FunctionAttr size partiality jectivity) - --- parseSequenceAttr :: Parser (SequenceAttr Expression) --- parseSequenceAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "sequence" attrs --- [ "size", "minSize", "maxSize" --- , "injective", "surjective", "bijective" --- ] --- size <- case filterSizey attrs of --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- [] -> return SizeAttr_None --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- jectivity <- case filterJectivity attrs of --- [] -> return JectivityAttr_None --- [DAName "bijective" ] -> return JectivityAttr_Bijective --- [DAName "injective" ] -> return JectivityAttr_Injective --- [DAName "surjective"] -> return JectivityAttr_Surjective --- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- return (SequenceAttr size jectivity) - --- parseRelationAttr :: Parser (RelationAttr Expression) --- parseRelationAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "relation" attrs (map (Name . stringToText) (["size", "minSize", "maxSize"] ++ binRelNames)) --- size <- case filterSizey attrs of --- [] -> return SizeAttr_None --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- let readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) --- readBinRel' a = do --- setPosition pos --- failDoc $ "Not a binary relation attribute:" <+> pretty a --- binRels <- mapM readBinRel' (filterBinRel attrs) --- return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) - --- parsePartitionAttr :: Parser (PartitionAttr Expression) --- parsePartitionAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "partition" attrs --- [ "size", "minSize", "maxSize" --- , "regular" --- , "numParts", "minNumParts", "maxNumParts" --- , "partSize", "minPartSize", "maxPartSize" --- ] --- unless (null $ filterAttrName ["complete"] attrs) $ do --- setPosition pos --- failDoc $ vcat [ "Partitions do not support the 'complete' attribute." --- , "They are complete by default." --- ] --- unless (null $ filterSizey attrs) $ do --- setPosition pos --- failDoc $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) --- , "This is because partitions are complete by default." --- ] --- partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of --- [] -> return SizeAttr_None --- [DANameValue "numParts" a] -> return (SizeAttr_Size a) --- [DANameValue "minNumParts" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxNumParts" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of --- [] -> return SizeAttr_None --- [DANameValue "partSize" a] -> return (SizeAttr_Size a) --- [DANameValue "minPartSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxPartSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- let isRegular = DAName "regular" `elem` attrs --- return PartitionAttr {..} - - --- checkExtraAttributes :: SourcePos -> Doc -> [DomainAttribute a] -> [Name] -> Parser () --- checkExtraAttributes pos ty attrs supported = do --- let extras = mapMaybe f attrs --- unless (null extras) $ do --- setPosition pos --- failDoc $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras --- , "Only these are supported:" <+> prettyList id "," supported --- ] --- where --- f (DANameValue nm _) | nm `notElem` supported = Just nm --- f (DAName nm ) | nm `notElem` supported = Just nm --- f _ = Nothing - --- filterAttrName :: Ord a => [Name] -> [DomainAttribute a] -> [DomainAttribute a] --- filterAttrName keep = sort . filter f --- where --- f (DANameValue nm _) | nm `elem` keep = True --- f (DAName nm ) | nm `elem` keep = True --- f _ = False - --- filterSizey :: Ord a => [DomainAttribute a] -> [DomainAttribute a] --- filterSizey = filterAttrName ["size", "minSize", "maxSize"] - --- filterJectivity :: Ord a => [DomainAttribute a] -> [DomainAttribute a] --- filterJectivity = filterAttrName ["injective", "surjective", "bijective"] - --- filterBinRel :: Ord a => [DomainAttribute a] -> [DomainAttribute a] --- filterBinRel = filterAttrName (map (Name . stringToText) binRelNames) - --- parseMetaVariable :: Parser String --- parseMetaVariable = do --- let isMeta LMetaVar{} = True --- isMeta _ = False --- LMetaVar iden <- satisfyT isMeta --- return (T.unpack iden) - --- parseExpr :: Parser Expression --- -- parseExpr | trace "parseExpr" True = parseAtomicExpr "expression" --- parseExpr = parseAtomicExpr "expression" - --- parseAtomicExpr :: Parser Expression --- -- parseAtomicExpr | trace "parseAtomicExpr" True = parseAtomicExprNoPrePost "expression" --- parseAtomicExpr = parseAtomicExprNoPrePost "expression" - --- parseAtomicExprNoPrePost :: Parser Expression --- -- parseAtomicExprNoPrePost | trace "parseAtomicExprNoPrePost" True = msum [try parseLiteral, parseTyped] --- parseAtomicExprNoPrePost = msum [try parseLiteral, parseReference, parseTyped] - --- parseTyped :: Parser Expression --- -- parseTyped | trace "parseTyped" True = parens $ do --- parseTyped = parens $ do --- x <- parseExpr --- lexeme L_Colon --- d <- betweenTicks parseDomain --- ty <- let ?typeCheckerMode = StronglyTyped in typeOfDomain d --- return (Typed x ty) - --- parseName :: Parser Name --- parseName = Name <$> identifierText - --- parseReference :: Parser Expression --- parseReference = Reference <$> parseName <*> pure Nothing - --- parseLiteral :: Parser Expression --- parseLiteral = label "value" (do p <- pCore ; p) - --- where - --- -- convert x to a constant if possible --- -- might save us from evaluating it again and again later --- mkAbstractLiteral x = --- case e2c (AbstractLiteral x) of --- Nothing -> AbstractLiteral x --- Just c -> Constant c - --- pCore :: Parser (Parser Expression) --- pCore = satisfyL $ \case --- L_false -> Just $ return $ Constant $ ConstantBool False --- L_true -> Just $ return $ Constant $ ConstantBool True --- LIntLiteral i -> Just $ return $ Constant $ ConstantInt TagInt (fromInteger i) --- L_OpenBracket -> Just pMatrix --- L_tuple -> Just pTupleWith --- L_OpenParen -> Just pTupleWithout --- L_record -> Just pRecord --- L_variant -> Just pVariant --- L_OpenCurly -> Just pSet --- L_mset -> Just pMSet --- L_function -> Just pFunction --- L_sequence -> Just pSequence --- L_relation -> Just pRelation --- L_partition -> Just pPartition --- L_Minus -> Just $ do --- p <- pCore --- res <- p --- return (negate res) --- _ -> Nothing - --- pMatrix = mkAbstractLiteral <$> do --- -- lexeme L_OpenBracket --- xs <- commaSeparated0 parseExpr --- msum --- [ do --- let r = mkDomainIntB 1 (fromInt (genericLength xs)) --- lexeme L_CloseBracket --- return (AbsLitMatrix r xs) --- , do --- lexeme L_SemiColon --- r <- parseDomain --- lexeme L_CloseBracket --- return (AbsLitMatrix r xs) --- ] - --- pTupleWith = mkAbstractLiteral <$> do --- -- lexeme L_tuple --- xs <- parens $ commaSeparated0 parseExpr --- return (AbsLitTuple xs) - --- pTupleWithout = mkAbstractLiteral <$> do --- -- xs <- parens $ countSepAtLeast 2 parseExpr comma --- xs <- countSepAtLeast 2 parseExpr comma --- lexeme L_CloseParen --- return (AbsLitTuple xs) - --- pRecord = mkAbstractLiteral <$> do --- -- lexeme L_record --- let one = do n <- parseName --- lexeme L_Eq --- x <- parseExpr --- return (n,x) --- xs <- braces $ commaSeparated0 one --- return $ AbsLitRecord xs - --- pVariant = mkAbstractLiteral <$> do --- -- lexeme L_variant --- let one = do n <- parseName --- lexeme L_Eq --- x <- parseExpr --- return (n,x) --- (n,x) <- braces one --- return $ AbsLitVariant Nothing n x - --- pSet = mkAbstractLiteral <$> do --- -- xs <- braces (commaSeparated0 parseExpr) --- xs <- commaSeparated0 parseExpr --- lexeme L_CloseCurly --- return (AbsLitSet xs) - --- pMSet = mkAbstractLiteral <$> do --- -- lexeme L_mset --- xs <- parens (commaSeparated0 parseExpr) --- return (AbsLitMSet xs) - --- pFunction = mkAbstractLiteral <$> do --- -- lexeme L_function --- xs <- parens (commaSeparated0 inner) --- return (AbsLitFunction xs) --- where --- inner = arrowedPair parseExpr - --- pSequence = mkAbstractLiteral <$> do --- -- lexeme L_sequence --- xs <- parens (commaSeparated0 parseExpr) --- return (AbsLitSequence xs) - --- pRelation = mkAbstractLiteral <$> do --- -- lexeme L_relation --- xs <- parens (commaSeparated0 (pTupleWith <|> pTupleWithout)) --- xsFiltered <- forM xs $ \case --- Constant (ConstantAbstract (AbsLitTuple is)) -> return (map Constant is) --- AbstractLiteral (AbsLitTuple is) -> return is --- x -> failDoc ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) --- return (AbsLitRelation xsFiltered) - --- pPartition = mkAbstractLiteral <$> do --- -- lexeme L_partition --- xs <- parens (commaSeparated0 inner) --- return (AbsLitPartition xs) --- where --- inner = braces (commaSeparated0 parseExpr) - - --- identifierText :: Parser T.Text --- identifierText = do --- LIdentifier i <- satisfyT isIdentifier --- return i --- where isIdentifier LIdentifier {} = True --- isIdentifier _ = False - --- satisfyT :: (Lexeme -> Bool) -> Parser Lexeme --- satisfyT predicate = token nextPos testTok --- where --- testTok :: LexemePos -> Either [Message] Lexeme --- testTok (LexemePos tok _ _) = --- -- trace ("satisfyT: " ++ show pos ++ "\t" ++ show tok) $ --- if predicate tok --- then Right tok --- else Left [Unexpected (showToken tok)] - --- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos --- nextPos _ _ (LexemePos _ _ pos) = pos - --- satisfyL :: forall a . (Lexeme -> Maybe a) -> Parser a --- satisfyL predicate = token nextPos testTok --- where --- testTok :: LexemePos -> Either [Message] a --- testTok (LexemePos tok _ _) = --- -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ --- case predicate tok of --- Nothing -> Left [Unexpected (showToken tok)] --- Just res -> Right res - --- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos --- nextPos _ _ (LexemePos _ _ pos) = pos - --- integer :: Parser Integer --- integer = do --- LIntLiteral i <- satisfyT isInt --- return i --- where isInt LIntLiteral {} = True --- isInt _ = False - --- -- parse a comma separated list of things. can be 0 things. --- commaSeparated0 :: Parser a -> Parser [a] --- commaSeparated0 p = sepEndBy p comma - --- -- parse a comma separated list of things. has to be at least 1 thing. --- commaSeparated :: Parser a -> Parser [a] --- commaSeparated p = sepEndBy1 p comma - --- comma :: Parser () --- comma = lexeme L_Comma "comma" - --- dot :: Parser () --- dot = lexeme L_Dot "dot" - --- dotdot :: Parser () --- dotdot = (dot >> dot) ".." - - --- -- parses a specified number of elements separated by the given separator --- countSep :: Int -> Parser a -> Parser sep -> Parser [a] --- countSep 1 p _ = (:[]) <$> p --- countSep i p separator | i > 1 = (:) <$> (p <* separator) <*> countSep (i-1) p separator --- countSep _ _ _ = return [] - --- -- parses at least a given number of elements separated by the given separator --- countSepAtLeast :: Int -> Parser a -> Parser sep -> Parser [a] --- countSepAtLeast i p separator = (++) <$> countSep i p separator <*> many (separator *> p) - --- betweenTicks :: Parser a -> Parser a --- betweenTicks = between (lexeme L_BackTick) (lexeme L_BackTick) - --- parens :: Parser a -> Parser a --- parens = between (lexeme L_OpenParen) (lexeme L_CloseParen) - --- braces :: Parser a -> Parser a --- braces = between (lexeme L_OpenCurly) (lexeme L_CloseCurly) - --- brackets :: Parser a -> Parser a --- brackets = between (lexeme L_OpenBracket) (lexeme L_CloseBracket) - --- lexeme :: Lexeme -> Parser () --- -- lexeme l = trace ("lexeme: " ++ show l) (void (satisfyT (l==)) show (lexemeFace l)) --- lexeme l = void (satisfyT (l==)) show (lexemeFace l) - --- arrowedPair :: Parser a -> Parser (a,a) --- arrowedPair p = do --- i <- p --- lexeme L_LongArrow --- j <- p --- return (i,j) - --- inCompleteFile :: Parser a -> Parser a --- inCompleteFile parser = do --- result <- parser --- eof --- return result +parseModel :: Pipeline ProgramTree Model +parseModel = (parseProgram,V.strict . V.validateModel,False) \ No newline at end of file diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index 36d32a77ae..c0a925a842 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -22,54 +22,53 @@ import Language.Haskell.TH.Quote ( QuasiQuoter(..), dataToExpQ, dataToPatQ ) -- syb import Data.Generics.Aliases ( extQ ) +noTC :: (a, b, c) -> (a, b, Bool) +noTC (a,b,_) = (a,b,False) essenceStmts :: QuasiQuoter essenceStmts = QuasiQuoter { quoteExp = \ str -> do -- l <- locationTH - e <- parseIO parseTopLevels str + e <- parseIO (noTC parseTopLevels) str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do -- l <- locationTH - e <- parseIO parseTopLevels str + e <- parseIO (noTC parseTopLevels) str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } - where ?typeChecking = False essence :: QuasiQuoter essence = QuasiQuoter { quoteExp = \ str -> do -- l <- locationTH - e <- do parseIO parseExpr str + e <- do parseIO (noTC parseExpr) str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do -- l <- locationTH - e <- do parseIO parseExpr str + e <- do parseIO (noTC parseExpr) str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } - where ?typeChecking = False essenceDomain :: QuasiQuoter essenceDomain = QuasiQuoter { quoteExp = \ str -> do -- l <- locationTH - e <- parseIO parseDomain str + e <- parseIO (noTC parseDomain) str let e' = dataToExpQ (const Nothing `extQ` expE `extQ` expD `extQ` expAP `extQ` expName) e appE [| $(varE (mkName "fixTHParsing")) |] e' , quotePat = \ str -> do -- l <- locationTH - e <- do parseIO parseDomain str + e <- do parseIO (noTC parseDomain) str dataToPatQ (const Nothing `extQ` patE `extQ` patD `extQ` patAP `extQ` patName) e , quoteType = bug "quoteType" , quoteDec = bug "quoteDec" } - where ?typeChecking = False -- locationTH :: Q SourcePos -- locationTH = do -- loc <- location diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 8e297d489d..2c281b4a4e 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -22,7 +22,7 @@ import Conjure.Language.Type import Data.Map.Strict (Map) import qualified Data.Map.Strict as M import qualified Data.Set as S - +import qualified Data.Text as T import Data.Text (pack, unpack, toLower, append) import Text.Megaparsec ( SourcePos, mkPos ) @@ -92,12 +92,17 @@ untypeAs r ((Typed t a)) = if let ?typeCheckerMode=StronglyTyped in typeUnify r then return a else contextTypeError (TypeError r t) >> return a + +type TypeCheck a = Typed a -> ValidatorS () +exactly :: Type -> TypeCheck a +exactly t r = void $ untypeAs t r + typeAs :: Type -> Maybe a -> Maybe (Typed a) typeAs t (Just a) = Just $ Typed t a typeAs t Nothing = Nothing -(?=>) :: ValidatorS (Typed a) -> Type -> ValidatorS a -v ?=> t = v >>= untypeAs t +(?=>) :: ValidatorS (Typed a) -> TypeCheck a -> ValidatorS a +v ?=> t = v >>= (\a -> t a >> return (untype a)) castAny :: Validator a -> Validator (Typed a) castAny a = typeAs TypeAny <$> a @@ -114,6 +119,7 @@ getTypeList = map typeSplit data ErrorType = TokenError LToken | SyntaxError Text + | WithReplacements ErrorType [Text] | SemanticError Text | CustomError Text | SkippedTokens @@ -263,7 +269,7 @@ validateProgramTree sts = do isValidLanguageName :: Text -> Bool -isValidLanguageName t = Data.Text.toLower t `elem` ["essence","essence'"] +isValidLanguageName t = T.toLower t `elem` ["essence","essence'"] validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3] @@ -298,20 +304,29 @@ validateStatement (UnexpectedToken lt) = return [] <* (invalid $ lt TokenErr validateHeuristicStatement :: LToken -> ExpressionNode -> ValidatorS [Statement] validateHeuristicStatement lt exp = do - let validHeuristics = ["static"] + let validHeuristics = ["static", "sdf", "conflict", "srf", "ldf", "wdeg", "domoverwdeg"] checkSymbols [lt] - _ <- validateExpression exp - case exp of - IdentifierNode nn -> do - x <- validateName nn - return $ [SearchHeuristic x] - _ -> return [] <* (invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics") - + h <- case exp of + IdentifierNode nn@(NameNode (RealToken _ (ETok{lexeme=(LIdentifier nm)}))) -> do + if nm `elem` validHeuristics then + return $ pure [SearchHeuristic (Name nm)] + else + invalid $ symbolRegion nn (SemanticError $ T.concat ["Invalid heuristic " , nm , " Expected one of: ", (pack $ show validHeuristics )]) + _ -> (invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics") + return $ fromMaybe [] h + + +tCondition :: TypeCheck a +tCondition (Typed TypeAny _) = pure () +tCondition (Typed TypeBool _) = pure () +tCondition (Typed (TypeMatrix _ TypeBool) _) = pure () +tCondition (Typed (TypeList TypeBool) _) = pure () +tCondition t = contextTypeError $ ComplexTypeError "Bool or [Bool]" $ typeOf_ t validateWhereStatement :: WhereStatementNode -> ValidatorS [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do checkSymbols [l1] - ws <- Where <$> validateSequence_ (\x -> validateExpression x ?=> TypeBool) exprs + ws <- Where <$> validateSequence_ (\x -> do setContextFrom x; validateExpression x ?=> tCondition) exprs return [ws] validateObjectiveStatement :: ObjectiveStatementNode -> ValidatorS [Statement] @@ -327,8 +342,8 @@ validateObjectiveStatement (ObjectiveMax lt en) =do validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do checkSymbols [l1, l2] - exprs' <- validateSequence (validateExpression) exprs - bools <- mapM (\(a,b)->do setContext a; untypeAs TypeBool b) exprs' + exprs' <- validateSequence validateExpression exprs + bools <- mapM (\(a,b)->do setContext a; return b ?=> tCondition) exprs' let bool_exprs = bools return [SuchThat bool_exprs] @@ -343,7 +358,7 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do n <- validateName nn return $ BranchingOn n validateBranchingParts exp = do - x <- validateExpression exp ?=> TypeAny + x <- validateExpression exp ?=> exactly TypeAny return $ Cut x validateDeclarationStatement :: DeclarationStatementNode -> ValidatorS [Statement] @@ -426,7 +441,7 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] size <- do setContextFrom szExp - validateExpression szExp ?=> tInt + validateExpression szExp ?=> exactly tInt let d = TypeUnnamed --TODO delcs mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names @@ -554,7 +569,7 @@ validateDomain dm = case dm of --push members let t = TypeRecord ts mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t))) ds - return $ Typed t (DomainVariant (unregion <$> ds)) + return $ Typed t (DomainRecord (unregion <$> ds)) validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateVariantDomain namedDoms = do lst <- validateList (f2n validateNamedDomainInVariant) namedDoms @@ -767,7 +782,7 @@ validateAttributeNode vs (NamedAttributeNode t Nothing) = do validateAttributeNode vs (NamedAttributeNode t (Just e)) = do setContextFrom e - expr <- validateExpression e ?=> tInt + expr <- validateExpression e ?=> exactly tInt Just name <- validateSymbol t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" @@ -795,16 +810,16 @@ validateNamedDomainInRecord (NameDomainNode name m_dom) = do validateRange ::Type -> RangeNode -> ValidatorS ((Range Expression)) validateRange t range = case range of - SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=> t; return $ RangeSingle ex + SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=> exactly t; return $ RangeSingle ex OpenRangeNode dots -> do checkSymbols [dots] ; return RangeOpen - RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ;setContextFrom e1; ex <- validateExpression e1 ?=> t ; return $ RangeLowerBounded ex - LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; setContextFrom e1; ex <- validateExpression e1 ?=> t ; return $ RangeUpperBounded ex + RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ;setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeLowerBounded ex + LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeUpperBounded ex BoundedRangeNode e1 dots e2 -> do _ <- checkSymbols [dots] setContextFrom e1 - e1' <- validateExpression e1 ?=> t + e1' <- validateExpression e1 ?=> exactly t setContextFrom e2 - e2' <- validateExpression e2 ?=> t + e2' <- validateExpression e2 ?=> exactly t return $ RangeBounded e1' e2' validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) @@ -828,7 +843,7 @@ validateExpression expr = case expr of AbsExpression (ParenExpressionNode l1 exp l2) -> do checkSymbols [l1,l2] setContextFrom exp - exp' <- validateExpression exp ?=> TypeAny + exp' <- validateExpression exp ?=> exactly TypeAny return . Typed tInt $ mkOp TwoBarOp [exp'] FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs @@ -874,6 +889,8 @@ translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of L_ForAll -> FunctionOp L_fAnd L_Exists -> FunctionOp L_fOr + L_Sum -> FunctionOp L_Sum + L_Product -> FunctionOp L_Product _ -> FunctionOp qnName validateQuantificationExpression :: QuantificationExpressionNode -> ValidatorS (Typed Expression) @@ -885,20 +902,25 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ over' <- validateQuantificationOver pats over -- patterns <- validateSequence_ validateAbstractPattern pats g' <- validateQuantificationGuard m_guard - let guard' = fromMaybe [] g' setContextFrom expr - body <- validateExpression expr ?=> TypeAny - let qBody = Comprehension body (over'++guard') - let result = Typed TypeAny <$> (mkOp <$> (translateQnName <$> name') <*> pure [qBody]) + let (iType,rType) = case name' of + Just L_ForAll -> (tCondition,TypeBool) + Just L_Exists ->(tCondition,TypeBool) + Just L_Sum -> (exactly tInt,tInt) + Just L_Product -> (exactly tInt,tInt) + _ -> bug $ text ("Unkown quantifier " ++ show name') + body <- validateExpression expr ?=> iType + let qBody = Comprehension body (over'++g') + let result = Typed rType <$> (mkOp <$> (translateQnName <$> name') <*> pure [qBody]) return $ fromMaybe (fallback "Quantification error") result where - validateQuantificationGuard :: Maybe QuanticationGuard -> Validator [GeneratorOrCondition] - validateQuantificationGuard Nothing = return $ pure [] + validateQuantificationGuard :: Maybe QuanticationGuard -> ValidatorS [GeneratorOrCondition] + validateQuantificationGuard Nothing = return [] validateQuantificationGuard (Just (QuanticationGuard l1 exp) ) = do checkSymbols [l1] setContextFrom exp - expr' <- validateExpression exp ?=> TypeBool - return . pure $ [Condition expr'] + expr' <- validateExpression exp ?=> exactly TypeBool + return $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do checkSymbols [lt] @@ -907,13 +929,16 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ let (t,e) = typeSplit exp apats <- unifyPatterns t ps return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (e)) | pat <- apats] + -- x in exp validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do checkSymbols [lt] ps <- sequenceElems pats exp <- validateExpression en let (t,e) = typeSplit exp - apats <- unifyPatterns t ps + pt <- projectionType (symbolRegion en) t + apats <- unifyPatterns pt ps return [Generator $ GenInExpr pat e|pat <- apats] + -- x : domain validateQuantificationOver pats ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do checkSymbols [l1] ps <- sequenceElems pats @@ -960,9 +985,14 @@ validateIdentifierExpr name = do --TODO Adress the major hole in the type system current validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do - expr <- validateExpression expr Just op <- validateSymbol lt - return . Typed TypeAny $ (\(untype->x) -> mkOp (PrefixOp op) [x]) (expr) + setContextFrom expr + let (refT) = case op of + L_Minus -> tInt + L_ExclamationMark -> TypeBool + _ -> bug . text $ "Unknown prefix op " ++ show op + expr' <- validateExpression expr ?=> exactly refT + return . Typed refT $ mkOp (PrefixOp op) [expr'] --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do (lType,lExpr) <- typeSplit <$> validateExpression lexp @@ -978,8 +1008,9 @@ validateOperatorExpression (PostfixOpNode expr pon) = do validatePostfixOp :: PostfixOpNode -> ValidatorS (ExpressionNode -> ValidatorS (Typed Expression)) validatePostfixOp (OpFactorial lt) = do checkSymbols [lt] + setContextFrom lt return $ \exp -> do - v <- validateExpression exp ?=> tInt + v <- validateExpression exp ?=> exactly tInt return $ Typed tInt $ mkOp FactorialOp [v] validatePostfixOp (ApplicationNode args) = do return $ \exp -> do @@ -987,7 +1018,8 @@ validatePostfixOp (ApplicationNode args) = do (t,e) <- typeSplit <$> validateExpression exp args' <- validateList validateExpression args case t of - TypeFunction a b -> validateFuncOp L_image ((reg,Typed t e):args') + TypeFunction _ _ -> validateFuncOp L_image ((reg,Typed t e):args') + TypeSequence _ -> validateFuncOp L_image ((reg,Typed t e):args') _ -> do let underscore = Reference "_" Nothing let ys = [if underscore == v then Nothing else Just x| x@(_,Typed _ v) <- args'] @@ -1029,7 +1061,7 @@ validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do Just t -> return t Nothing -> return TypeAny <* (raiseError $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom'))) return $ \exp -> do - e <- validateExpression exp ?=> t + e <- validateExpression exp ?=> exactly t return . Typed t $ D.Typed e t where getDType :: Domain () Expression -> Maybe Type @@ -1039,11 +1071,17 @@ validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do validateIndexingOrSlicing :: Typed Expression -> RangeNode -> ValidatorS (Typed Expression) validateIndexingOrSlicing (Typed t exp) (SingleRangeNode r) = do setContextFrom r - iType <- getIndexingType t - i <- validateExpression r ?=> iType - setContextFrom r - vType <- getIndexedType t (Typed iType i) - return . Typed vType $ Op $ MkOpIndexing (OpIndexing exp i) + -- i <- validateExpression r ?=> exactly iType + (vType,e) <- case t of + TypeRecord ts -> validateRecordMemberIndex (ts) r + TypeVariant ts-> validateRecordMemberIndex (ts) r + t -> do + t' <- getIndexingType t + e <- (validateExpression r) ?=> (exactly t') + setContextFrom r + vType <- getIndexedType t (Typed t' e) + return (vType,e) + return . Typed vType $ Op $ MkOpIndexing (OpIndexing exp e) validateIndexingOrSlicing exp range = do let (mType,m) = typeSplit exp @@ -1058,7 +1096,40 @@ validateIndexingOrSlicing exp range = do RangeSingle ex -> (Just ex,Just ex) -- This never gets hit in a well formed program return $ Typed mType $ Op $ MkOpSlicing (OpSlicing m i j) +validateRecordMemberIndex :: [(Name,Type)] -> ExpressionNode -> ValidatorS (Type,Expression) +validateRecordMemberIndex ns (IdentifierNode nn) = do + n <- validateName nn + let t = lookup n ns + ty <- case t of + Just ty -> return ty + Nothing -> do + raiseError $ symbolRegion nn WithReplacements + (SemanticError "Expected member of record/variant ") + [x | (Name x,_) <- ns] + return TypeAny + return $ (ty,Reference n Nothing) +validateRecordMemberIndex ns (MissingExpressionNode nn) = do + raiseError $ symbolRegion nn + WithReplacements + (SemanticError "Expected member of record/variant ") + [x | (Name x,_) <- ns] + return (TypeAny,fallback "bad Index") +validateRecordMemberIndex ns en = do + g <- validateExpression en + let msg = T.concat + [ + "Expected one of ", + T.intercalate "," [x | (Name x,_) <- ns], + " " + ] + raiseTypeError $ symbolRegion en ComplexTypeError msg (typeOf_ g) + return (TypeAny,untype g) + + + + getSlicingType :: Type -> ValidatorS Type +getSlicingType TypeAny = return $ TypeAny getSlicingType (TypeMatrix i _) = return i getSlicingType (TypeSequence _) = return tInt getSlicingType t = do @@ -1066,12 +1137,11 @@ getSlicingType t = do return TypeAny getIndexingType :: Type -> ValidatorS Type +getIndexingType TypeAny = return $ TypeAny getIndexingType (TypeMatrix i _) = return i getIndexingType (TypeSequence _) = return tInt getIndexingType (TypeList _) = return tInt getIndexingType (TypeTuple _) = return tInt -getIndexingType t@(TypeRecord _) = return t -getIndexingType t@(TypeVariant _) = return t getIndexingType t = do contextTypeError (CustomError . pack $ "Type " ++ (show $ pretty t) ++ " does not support indexing") return TypeAny @@ -1085,7 +1155,7 @@ getIndexedType (TypeTuple ts) ex = do (void . contextTypeError $ CustomError $ "Non constant value indexing tuple") return TypeAny Right v | v <= 0 || v > toInteger ( length ts) -> do - (contextTypeError $ CustomError . pack $ "Tuple index "++ show v ++ "out of bounds" ) + (contextTypeError $ CustomError . pack $ "Tuple index "++ show v ++ " out of bounds" ) return TypeAny Right v -> return $ ts `at` (fromInteger v -1) getIndexedType t@(TypeRecord vs) (Typed _ e) = return TypeAny --TODO implement @@ -1262,26 +1332,8 @@ validateComprehensionBody (CompBodyGenExpr apn lt en) = do checkSymbols [lt] e <- validateExpression en let (t,exp) = typeSplit e - t' <- case t of - TypeAny -> return $ pure $ TypeAny - TypeTuple tys -> return $ pure $ t - TypeMatrix i ty -> return $ pure $ ty - TypeList ty -> return $ pure $ ty - TypeSet ty -> return $ pure $ ty - TypeMSet ty -> return $ pure $ ty - TypeSequence ty -> return $ pure $ ty - _ -> invalid $ symbolRegion en SemanticError "Cannot be projected" - let pt = fromMaybe TypeAny (t') - -- TypeBool -> _ --na - -- TypeInt it -> _ --na - -- TypeEnum na -> _ --na - -- TypeUnnamed na -> _ --na - -- TypeRecord x0 -> _ --na - -- TypeVariant x0 -> _ -- na - -- TypeFunction ty ty' -> _ -- na - -- TypeRelation tys -> _ --na - -- TypePartition ty -> _ --na - pats <- validateSequence_ (flip unifyPattern pt . Just) (apn) + t' <- projectionType (symbolRegion en) t + pats <- validateSequence_ (flip unifyPattern t' . Just) (apn) return $ [Generator (GenInExpr pat exp)| pat <- pats] --letting x be validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do @@ -1291,6 +1343,19 @@ validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do return [ComprehensionLetting pat expr] +projectionType :: DiagnosticRegion -> Type -> ValidatorS Type +projectionType r t = case t of + TypeAny -> return TypeAny + TypeTuple tys -> return t + TypeMatrix i ty -> return ty + TypeList ty -> return ty + TypeSet ty -> return ty + TypeMSet ty -> return ty + TypeSequence ty -> return ty + TypeRelation ts -> return $ TypeTuple ts + TypeFunction fr to -> return $ TypeTuple [fr,to] + _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny + mkAbstractLiteral :: AbstractLiteral Expression -> Expression mkAbstractLiteral x = case e2c (AbstractLiteral x) of Nothing -> AbstractLiteral x @@ -1359,7 +1424,6 @@ validateIdentifier (NameNode iden) = do validateName :: NameNode -> ValidatorS Name validateName name = do n <- validateIdentifier name - return $ fromMaybe (fallback "bad Identifier") (Name <$> n) listToSeq :: ListNode a -> ValidatorS (Sequence a) @@ -1495,7 +1559,7 @@ contextTypeError :: ErrorType -> ValidatorS () contextTypeError e = do q <- getContext tc <- gets typeChecking - unless (not tc) $ raiseError $ ValidatorDiagnostic q $ Error e + when tc $ raiseError $ ValidatorDiagnostic q $ Error e contextInfo :: InfoType -> ValidatorS () contextInfo e = do @@ -1525,7 +1589,7 @@ resolveReference :: RegionTagged Name -> ValidatorS Type resolveReference (r,Name n) = do c <- getSymbol n case c of - Nothing -> raiseError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return TypeAny + Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return TypeAny Just (reg,_,t) -> do addRegion (RegionInfo {rRegion=r, rType=t, rDeclaration=Ref reg}) return t @@ -1573,7 +1637,7 @@ scoped m = do return res unifyPatterns :: Type -> [Maybe AbstractPatternNode] -> ValidatorS [AbstractPattern] -unifyPatterns t xs = mapM (flip unifyPattern t) xs +unifyPatterns t = mapM (flip unifyPattern t) unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do @@ -1700,9 +1764,9 @@ functionOps l = case l of L_atmost -> triFunc (each3 listInt) (const3 TypeBool) L_defined -> unFunc funcSeq funcDomain L_range -> unFunc funcSeq funcRange - L_restrict -> biFunc (restrictArgs) (restrictTypes) + L_restrict -> biFunc restrictArgs restrictTypes L_allDiff -> unFunc listOrMatrix (const $ pure TypeBool) - L_alldifferent_except -> biFunc (indep (enumerable) listOrMatrix) (const2 TypeBool) + L_alldifferent_except -> biFunc (indep listOrMatrix enumerable) (const2 TypeBool) L_catchUndef -> biFunc unifies (\a b -> pure $ mostDefinedS $ map typeOf_ $ catMaybes [a,b]) L_dontCare -> unFunc anyType (const $ pure TypeBool) L_toSet -> unFunc toSetArgs typeToSet @@ -1710,9 +1774,9 @@ functionOps l = case l of L_toRelation -> unFunc func typeToRelation L_max -> unFunc minMaxArgs minMaxType L_min -> unFunc minMaxArgs minMaxType - L_image -> biFunc imageArgs (\a -> const $ TypeSet <$> funcRange a) + L_image -> biFunc imageArgs (const . funcRange) L_transform -> biFunc transformArgs (const (typeOf_ <$>)) - L_imageSet -> biFunc imSetArgs (\a -> const $ TypeSet <$> funcDomain a) + L_imageSet -> biFunc imSetArgs (\a -> const $ TypeSet <$> funcRange a) L_preImage -> biFunc preImageArgs (\a -> const $ TypeSet <$> funcDomain a) L_inverse -> biFunc inverseArgs (const2 TypeBool) L_freq -> biFunc freqArgs (const2 tInt) @@ -1734,7 +1798,6 @@ functionOps l = case l of _ -> (biFunc (binaryFlattenArgs) (\(getNum->a) -> flattenType a)) (b) a _ -> bug $ text $ "Unkown functional operator " ++ show l where - todo = return $ pure () valid = return $ pure () const2 = const.const . pure const3 = const.const.const . pure @@ -1774,9 +1837,28 @@ functionOps l = case l of concatType (fmap typeOf_->Just(TypeList (TypeMatrix _ t))) = Just $ TypeList t concatType _ = Just $ TypeList TypeAny concatArgs :: Arg -> Validator () - concatArgs = const todo + concatArgs = binaryFlattenArgs (GlobalRegion,Typed tInt $ Constant $ ConstantInt TagInt 1) tableArgs :: Arg -> Arg -> Validator () - tableArgs = const . const todo + tableArgs (r1,typeOf_->t1) (r2,typeOf_->t2) = do + a <- case t1 of + t | isValidInner t -> valid + _ -> invalid $ r1 ComplexTypeError "Matrix of Int/Enum" t1 + b <- case t2 of + TypeAny -> valid + TypeList t | isValidInner t-> valid + TypeMatrix _ t | isValidInner t-> valid + _ -> invalid $ r2 ComplexTypeError "Matrix of Matrix of Int/Enum" t2 + + return $ if null a || null b then Nothing else Just () + where + isValidInner t = case t of + TypeAny -> True + TypeList TypeInt{} -> True + TypeList TypeAny-> True + TypeMatrix _ TypeInt{} -> True + TypeMatrix _ TypeAny -> True + _ -> False + toMSetArgs :: Arg -> Validator () toMSetArgs (r,typeOf_-> a) = case a of TypeAny -> return $ pure () @@ -1819,9 +1901,9 @@ functionOps l = case l of a' <- unifyTypesFailing md a b' <- unifyTypesFailing md b return $ if null a' || null b' then Nothing else Just () - func :: Arg -> Validator Type - func (_,Typed (TypeSet t) _) = return $ pure t - func (_,Typed TypeAny _) = return $ pure TypeAny + func :: Arg -> Validator () + func (_,Typed (TypeFunction _ _) _) = valid + func (_,Typed TypeAny _) = valid func (r,Typed t _) = invalid $ r TypeError (TypeFunction TypeAny TypeAny) t set :: Arg -> Validator Type set (_,Typed (TypeSet t) _) = return $ pure t @@ -1829,9 +1911,9 @@ functionOps l = case l of set (r,Typed t _) = invalid $ r TypeError (TypeSet TypeAny) t powerSetType (Just (Typed (TypeSet i) _)) = Just $ TypeSet (TypeSet i) - powerSetType _ = Nothing + powerSetType _ = Just $ TypeSet $ TypeSet TypeAny - only t (r,typeOf_->t')= if t'==TypeAny || t == t' then return $ Just t else invalid $ r TypeError t t' + only t (r,typeOf_->t')= do setContext r; if t'==TypeAny || t == t' then return $ Just t else invalid $ r TypeError t t' listInt (r,typeOf_->t') = case t' of TypeAny -> return $ Just t' @@ -1868,10 +1950,10 @@ functionOps l = case l of partyArgs :: Arg -> Arg -> Validator () partyArgs (r1,a) (r2,b) = do let t = case (typeOf_ a,typeOf_ b) of - (TypePartition ta,tb) -> mostDefinedS [ta,tb] - (_,tb ) -> tb - a' <- unifyTypesFailing (TypePartition t) (r1,a) - b' <- unifyTypesFailing (t) (r2,b) + (ta,TypePartition tb) -> mostDefinedS [ta,tb] + (ta,_ ) -> ta + a' <- unifyTypesFailing (t) (r1,a) + b' <- unifyTypesFailing (TypePartition t) (r2,b) return $ if null a' || null b' then Nothing else Just () inverseArgs :: Arg -> Arg -> Validator () @@ -2001,11 +2083,11 @@ functionOps l = case l of funcDomain :: Maybe (Typed a) -> Maybe Type funcDomain (Just (typeOf_->(TypeFunction a _))) = Just a funcDomain (Just (typeOf_->(TypeSequence _))) = Just tInt - funcDomain _ = Nothing + funcDomain _ = Just TypeAny funcRange :: Maybe (Typed a) -> Maybe Type funcRange (Just (typeOf_->(TypeFunction _ b))) = Just b funcRange (Just (typeOf_->((TypeSequence b)))) = Just b - funcRange _ = Nothing + funcRange _ = Just TypeAny part :: Arg -> Validator () part (r,typeOf_->t) = case t of TypeAny -> valid @@ -2058,7 +2140,7 @@ validateFuncOp l args = do -- Just tys -> return $ Typed (r tys)(b $ map untype tys) isOfType :: Type -> RegionTagged (Typed Expression) -> ValidatorS Bool -isOfType t (r,v) = setContext r >> return v ?=> t >> (return $ typesUnifyS [t,typeOf_ v]) +isOfType t (r,v) = setContext r >> return v ?=> exactly t >> (return $ typesUnifyS [t,typeOf_ v]) isLogicalContainer :: RegionTagged (Typed Expression) -> Validator () isLogicalContainer (r,Typed t e) = do @@ -2108,7 +2190,7 @@ unFunc argVal t f args = do Nothing -> Nothing Just _ -> Just $ map (untype . unregion) [x] return (result,(Just $ unregion x)) - let res = maybe (fallback "argFail") f v + let res = maybe (fallback "Arg Fail Unfunc") f v return $ Typed (fromMaybe TypeAny $ t ts) res biFunc :: (Arg -> Arg -> Validator a) -> (Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) biFunc argVal t f args = do @@ -2129,7 +2211,7 @@ biFunc argVal t f args = do Nothing -> Nothing Just _ -> Just $ map (untype . unregion) [x,y] return (result,(Just (unregion x) , Just (unregion y))) - let res = maybe (fallback "argFail") f v + let res = maybe (fallback "Arg Fail BiFunct") f v return $ Typed (fromMaybe TypeAny $ uncurry t ts) res triFunc :: (Arg -> Arg -> Arg -> Validator a) -> (Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) @@ -2152,7 +2234,7 @@ triFunc argVal t f args = do Nothing -> Nothing Just _ -> Just $ map (untype . unregion) [x,y,z] return (result,(Just (unregion x) , Just (unregion y), Just (unregion z))) - let res = maybe (fallback "argFail") f v + let res = maybe (fallback "Arg Fail Tri") f v return $ Typed (fromMaybe TypeAny $ uncurry3 t ts) res where uncurry3 f (a,b,c) = f a b c --todo export from prelude tooFewArgs :: Int -> Int -> ValidatorS () diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index e73fb21cd4..1e54dc61f9 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -44,7 +44,7 @@ displayError x = case x of MissingArgsError expected got -> "Insufficient args, expected " ++ (show expected) ++ " got " ++ (show got) InternalError -> "Pattern match failiure" InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt - + WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Text -> String showDiagnosticsForConsole errs text = case runParser (captureErrors errs) "Errors" text of diff --git a/src/test/Conjure/ModelAllSolveAll.hs b/src/test/Conjure/ModelAllSolveAll.hs index 7f1316970b..46aa129682 100644 --- a/src/test/Conjure/ModelAllSolveAll.hs +++ b/src/test/Conjure/ModelAllSolveAll.hs @@ -227,7 +227,7 @@ savileRowNoParam step srOptions TestDirFiles{..} modelPath = do <$> getDirectoryContents outputsDir forM_ (take nbEprimeSolutions allNats) $ \ i -> do let eprimeSolutionPath = outBase ++ ".eprime-solution." ++ padLeft 6 '0' (show i) - eprimeSolution <- readModelFromFile (outputsDir eprimeSolutionPath) + eprimeSolution <- readParamOrSolutionFromFile (outputsDir eprimeSolutionPath) res <- runUserErrorT $ ignoreLogs $ runNameGen () $ translateSolution eprimeModel def eprimeSolution case res of @@ -252,7 +252,7 @@ savileRowWithParams step srOptions TestDirFiles{..} modelPath paramPath = do fileShouldExist (outputsDir modelPath) fileShouldExist (tBaseDir paramPath) eprimeModel <- readModelInfoFromFile (outputsDir modelPath) - param <- readModelFromFile (tBaseDir paramPath) + param <- readParamOrSolutionFromFile (tBaseDir paramPath) eprimeParam <- ignoreLogs $ runNameGen () $ translateParameter False eprimeModel param let outBase = dropExtension modelPath ++ "-" ++ dropExtension paramPath writeFile (outputsDir outBase ++ ".eprime-param") (renderNormal eprimeParam) @@ -276,7 +276,7 @@ savileRowWithParams step srOptions TestDirFiles{..} modelPath paramPath = do <$> getDirectoryContents outputsDir forM_ (take nbEprimeSolutions allNats) $ \ i -> do let eprimeSolutionPath = outBase ++ ".eprime-solution." ++ padLeft 6 '0' (show i) - eprimeSolution <- readModelFromFile (outputsDir eprimeSolutionPath) + eprimeSolution <- readParamOrSolutionFromFile (outputsDir eprimeSolutionPath) res <- runUserErrorT $ ignoreLogs $ runNameGen () $ translateSolution eprimeModel param eprimeSolution case res of @@ -301,7 +301,7 @@ validateSolutionNoParam step TestDirFiles{..} solutionPaths = do forM_ solutionPaths $ \ solutionPath -> do step (unwords ["Validating solution:", solutionPath]) fileShouldExist (outputsDir solutionPath) - solution <- readModelFromFile (outputsDir solutionPath) + solution <- readParamOrSolutionFromFile (outputsDir solutionPath) result <- runUserErrorT $ ignoreLogs $ runNameGen () $ do [essence2, param2, solution2] <- resolveNamesMulti [essence, def, solution] validateSolution essence2 param2 solution2 @@ -319,11 +319,11 @@ validateSolutionWithParams step TestDirFiles{..} paramSolutionPaths = do essence <- readModelFromFile essenceFile forM_ paramSolutionPaths $ \ (paramPath, solutionPaths) -> do fileShouldExist (tBaseDir paramPath) - param <- readModelFromFile (tBaseDir paramPath) + param <- readParamOrSolutionFromFile (tBaseDir paramPath) forM_ solutionPaths $ \ solutionPath -> do step (unwords ["Validating solution:", paramPath, solutionPath]) fileShouldExist (outputsDir solutionPath) - solution <- readModelFromFile (outputsDir solutionPath) + solution <- readParamOrSolutionFromFile (outputsDir solutionPath) result <- runUserErrorT $ ignoreLogs $ runNameGen () $ do [essence2, param2, solution2] <- resolveNamesMulti [essence, param, solution] validateSolution essence2 param2 solution2 @@ -444,7 +444,7 @@ noDuplicateSolutions step TestDirFiles{..} = do models <- sort . filter (".eprime" `isSuffixOf`) <$> getDirectoryContents outputsDir params <- sort . filter (".eprime-param" `isSuffixOf`) <$> getDirectoryContents outputsDir solutions <- filter (".solution" `isSuffixOf`) <$> getDirectoryContents outputsDir - solutionContents <- forM solutions $ \ s -> do m <- readModelFromFile (outputsDir s) + solutionContents <- forM solutions $ \ s -> do m <- readParamOrSolutionFromFile (outputsDir s) return (s, m) let grouped :: [ ( Maybe String -- the parameter diff --git a/tests/parse_print/syntax_test/expressions/operators/operators.essence b/tests/parse_print/syntax_test/expressions/operators/operators.essence index 8b47bd72fd..6b157dcf86 100644 --- a/tests/parse_print/syntax_test/expressions/operators/operators.essence +++ b/tests/parse_print/syntax_test/expressions/operators/operators.essence @@ -7,9 +7,13 @@ letting _paren be (1) letting _aac be minSize({1,2,3,4},2) letting _postFixFactorial be 4! letting _doublePostFixFactorial be 2!! +letting a be [1,2,3,4,5] letting _indexing be a[1] +letting b be [[[1]],[[1]],[[1]]] letting _multiIndex be b[1][2][3] +letting f be function (1-->function (1-->2)) letting _functionUser be f(1) letting _functionUserMulti be f(1)(2) +letting x be 1 letting _functionFactorial be factorial(x) -letting _functionInbuilt be allDiff(x) \ No newline at end of file +letting _functionInbuilt be allDiff([1,2,3]) \ No newline at end of file From 8422ea14c15d1c938b2a79c611346f58624f4e13 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 28 Nov 2022 11:33:26 +0000 Subject: [PATCH 102/378] Parsing work inc fuzzing test for parser --- conjure-cp.cabal | 1 + src/Conjure/Language/AST/ASTParser.hs | 29 +- src/Conjure/Language/AST/Helpers.hs | 20 +- src/Conjure/Language/AST/Reformer.hs | 2 +- src/Conjure/Language/AST/Syntax.hs | 4 +- .../Language/Expression/Op/Internal/Common.hs | 2 +- src/Conjure/Language/NewLexer.hs | 21 +- src/test/Conjure/ParserFuzz.hs | 53 + src/test/TestsMain.hs | 3 + tests/allfiles.txt | 17008 ++++++++++++++++ tests/genAllFiles.sh | 2 + 11 files changed, 17115 insertions(+), 30 deletions(-) create mode 100644 src/test/Conjure/ParserFuzz.hs create mode 100644 tests/allfiles.txt create mode 100644 tests/genAllFiles.sh diff --git a/conjure-cp.cabal b/conjure-cp.cabal index d1eacbb26f..3f79c91581 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -411,6 +411,7 @@ Test-Suite conjure-testing , Conjure.ModelAllSolveAll , Conjure.TypeCheckAll , Conjure.ParsePrint + , Conjure.ParserFuzz , Conjure.Custom main-is : TestsMain.hs build-depends : conjure-cp diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 840bd88fd1..351c4dcefb 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -103,7 +103,7 @@ parseDeclaration = declaration FindStatement L_find parseFind ] where - declaration :: (Null a) => (LToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b + declaration :: (Null a,Show a) => (LToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b declaration c t p = do l <- need t seq <- commaList1 p @@ -472,9 +472,10 @@ parseOperator = try (makeExprParser parseAtomicExpressionAndFixes operatorTable parseFunction :: Parser ExpressionNode parseFunction = try $ do name <- choice $ map need functionals - let parenP = if isOverloaded name then parenListStrict else parenList + let ol = isOverloaded name + let parenP = if ol then parenListStrict else parenList args <- parenP $ commaList parseExpression - guard $ argsHasNoLeadingTrivia args + guard $ not ol || argsHasNoLeadingTrivia args return $ FunctionalApplicationNode name args where isOverloaded (RealToken _ ETok{lexeme=lex}) = lex `elem` overloadedFunctionals @@ -795,13 +796,23 @@ attributesAsLexemes xs = do example :: String -> IO () example s = do let str = s - let other = [ETok ( Offsets 0 0 0 (initialPos "") ) [] L_EOF ""] let txt = pack str - let lexed = parseMaybe eLex txt - putStrLn "Lexmes" - putStrLn $ show lexed - let stream = ETokenStream txt $ fromMaybe other lexed - parseTest parseProgram stream + let lexed = runParser eLex "lexer" txt + case lexed of + Left peb -> putStrLn "Lexer error:" >> (putStrLn $ errorBundlePretty peb) + Right ets -> do + putStrLn "Lexmes" + putStrLn $ show ets + putStrLn $ "reformed" + putStrLn $ concatMap reform ets + let stream = ETokenStream txt ets + case runParser parseProgram "" stream of + Left peb -> putStrLn "Parser error: " >> (putStrLn $ errorBundlePretty peb) + Right pt -> do + putStrLn $show pt + putStrLn $ "Reforming" + putStrLn $ show $ flatten pt + putStrLn $ reformList $ flatten pt exampleFile :: String -> IO () exampleFile p = do diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 7b36b2c31c..a9ecf33b1d 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -90,10 +90,10 @@ parseIdentifierStrict = do -- List helpers -commaList ::(Null a) => Parser a -> Parser (Sequence a) +commaList ::(Null a,Show a) => Parser a -> Parser (Sequence a) commaList = parseSequence L_Comma -commaList1 ::(Null a) => Parser a -> Parser (Sequence a) +commaList1 ::(Null a, Show a) => Parser a -> Parser (Sequence a) commaList1 = parseSequence1 L_Comma squareBracketList :: Parser (Sequence a) -> Parser (ListNode a) @@ -136,19 +136,19 @@ parseListStrict startB endB seq = do -- s <- need divider -- SeqElem (Just s) <$> pElem -parseSequence1 :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) +parseSequence1 :: (Null a,Show a) => Lexeme -> Parser a -> Parser (Sequence a) parseSequence1 divider pElem = do s <- parseSequence divider pElem case s of - Seq [] -> do + Seq [] -> try $ do q <- pElem return $ Seq [SeqElem q Nothing] Seq _ -> return s -parseSequence :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) -parseSequence divider pElem = do +parseSequence :: (Null a,Show a) => Lexeme -> Parser a -> Parser (Sequence a) +parseSequence divider pElem = try $ do missingPlaceholder <- makeMissing $ L_Missing "SequenceElem" elem <- optional pElem sep <- want divider @@ -161,10 +161,10 @@ parseSequence divider pElem = do where makeElem rest el sep plc = do let newElem = case (el, isMissing sep) of - (Just a, True) -> [SeqElem a $ if null rest then Nothing else Just sep ] + (Just a, True) ->[SeqElem a $ if null rest then Nothing else Just sep ] (a,False) | isMissing a -> [MissingSeqElem plc sep] (Just a,_) -> [SeqElem a $ Just sep] - _ -> [] + _ -> [] return $ Seq $ newElem++rest @@ -172,8 +172,8 @@ parseSequence divider pElem = do -parseNESequence :: (Null a) => Lexeme -> Parser a -> Parser (Sequence a) -parseNESequence divider pElem = do +parseNESequence :: (Null a,Show a) => Lexeme -> Parser a -> Parser (Sequence a) +parseNESequence divider pElem =try $ do lst <- try $ parseSequence divider pElem case lst of Seq {elems=[]} -> empty diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index af5cd7884d..d738ad71d2 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -93,7 +93,7 @@ instance Flattenable ExpressionNode where instance Flattenable SpecialCaseNode where flatten x = case x of - ExprWithDecls l1 en l2 sns l3 -> mconcat [flatten l1,flatten en,flatten l2, flatten l2, flatten sns , flatten l3] + ExprWithDecls l1 en l2 sns l3 -> mconcat [flatten l1,flatten en,flatten l2, flatten sns , flatten l3] instance Flattenable DomainExpressionNode where flatten (DomainExpressionNode a b c) = flatten a >< flatten b >< flatten c diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 3c34bdad48..0cceb04f19 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -398,8 +398,8 @@ newtype Sequence itemType = Seq instance (Null a) => Null (SeqElem a) where isMissing (SeqElem i Nothing)= isMissing i - isMissing (SeqElem i x) = isMissing x - isMissing (MissingSeqElem{}) = True + isMissing (SeqElem i x) = isMissing i && isMissing x + isMissing (MissingSeqElem _ c) = isMissing c instance (Null a) => Null (Sequence a) where isMissing (Seq []) = True diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index 9fc454d951..7aadbe5b74 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -245,7 +245,7 @@ operators = overloadedFunctionals :: [Lexeme] overloadedFunctionals = [ L_Sum, - L_fXor + L_Product ] functionals :: [Lexeme] diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index 3c38f4e846..bed6b351cc 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -20,6 +20,8 @@ import Data.List (splitAt) import qualified Data.List.NonEmpty as NE import qualified Text.Megaparsec.Char.Lexer as L import Data.Sequence (Seq) +import qualified Text.Megaparsec as L +import Prelude (read) sourcePos0 :: SourcePos sourcePos0 = SourcePos "" (mkPos 0) (mkPos 0) @@ -28,6 +30,7 @@ class Reformable a where reform :: a -> String instance Reformable ETok where + reform e | oTLength (offsets e) == 0 = "" reform (ETok{capture=cap,trivia=triv}) = concatMap showTrivia triv ++ T.unpack cap where showTrivia :: Trivia -> String @@ -89,12 +92,12 @@ sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = Sourc makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok -data LexerError = LexerError +data LexerError = LexerError String deriving (Show) runLexer :: Text -> Either LexerError ETokenStream runLexer txt = case runParser eLex "Lexer" txt of - Left peb -> Left LexerError + Left peb -> Left $ LexerError $ errorBundlePretty peb Right ets -> Right $ ETokenStream txt ets @@ -141,8 +144,9 @@ aLexemeStrict = pNumber :: Lexer (Lexeme,Text) pNumber = do - v <- L.decimal - return (LIntLiteral v,T.pack $ show v) + v <- takeWhile1P Nothing (`elem` ['1','2','3','4','5','6','7','8','9','0']) + let n = read $ T.unpack v + return (LIntLiteral n,v) "Numeric Literal" pMetaVar :: Lexer (Lexeme,Text) @@ -192,8 +196,9 @@ whiteSpace = do quoted :: Lexer Text quoted = do open <- char '\"' - (body,end) <- manyTill_ L.charLiteral $ char '\"' + (body,end) <- manyTill_ anySingle $ char '\"' return $ T.pack $ open:body++[end] + lineEnd :: Lexer [Char] lineEnd = T.unpack <$> eol <|> ( eof >> return []) @@ -206,8 +211,10 @@ lineComment = do blockComment :: Lexer Trivia blockComment = do _ <- try (chunk "/*") - text <- manyTill L.charLiteral (chunk "*/") - return $ BlockComment $ T.pack text + text <- manyTill L.anySingle (lookAhead (void(chunk "*/") <|>eof)) + cl <- optional $ chunk "*/" + let cl' = fromMaybe "" cl + return $ BlockComment $ T.concat ["/*",T.pack text ,cl' ] instance Show ETok where show (ETok _ _ q _) = show q diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs new file mode 100644 index 0000000000..84b49bf5e3 --- /dev/null +++ b/src/test/Conjure/ParserFuzz.hs @@ -0,0 +1,53 @@ +{-# LANGUAGE RecordWildCards #-} + +module Conjure.ParserFuzz (tests) where + +-- conjure + +import Conjure.Prelude + +-- base + +-- tasty +import Test.Tasty (TestTree, testGroup) +import Test.Tasty.HUnit (assertFailure, testCaseSteps, assertEqual) + +import Conjure.Language.Parser (runLexerAndParser) +import Conjure.Language.AST.ASTParser (runASTParser, parseProgram) +import Conjure.Language.NewLexer (runLexer, Reformable (reform), reformList) +import Data.Text as T (pack) +import Data.ByteString.Char8(hPutStrLn, pack) +import Conjure.Language.AST.Reformer (Flattenable(flatten)) +import Data.Algorithm.Diff (getDiff, getGroupedDiff) +import Data.Algorithm.DiffOutput (ppDiff) +import Data.ByteString (hPutStrLn) +import GHC.IO.Handle.FD (stderr) + + +tests :: IO TestTree +tests = do + let baseDir = "tests" + allFiles <- readFileIfExists "tests/allfiles.txt" + let allFileList = lines $ fromMaybe "" allFiles + let testCases = map testFile allFileList + return (testGroup "parse_fuzz" testCases) + +testFile :: FilePath -> TestTree +testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \step -> do + Just fd <- readFileIfExists fp + step "Lexing" + case runLexer $ T.pack fd of + Left le -> assertFailure $ "Lexer failed in:" ++ fp + Right ets -> do + step "parsing" + case runASTParser parseProgram ets of + Left pe -> assertFailure $ "Parser failed in:" ++ fp + Right pt -> do + step "RoundTripping" + let roundTrip = reformList $ flatten pt + unless (roundTrip == fd) $do + let diff = getGroupedDiff (lines roundTrip) (lines fd) + Data.ByteString.Char8.hPutStrLn stderr $ Data.ByteString.Char8.pack $ "===DIFF: " ++ fd + Data.ByteString.Char8.hPutStrLn stderr $ Data.ByteString.Char8.pack $ ppDiff diff + Data.ByteString.Char8.hPutStrLn stderr "===------------" + assertFailure $ "Failed to rebuild :" ++ fp \ No newline at end of file diff --git a/src/test/TestsMain.hs b/src/test/TestsMain.hs index c39269862c..af291ffd53 100644 --- a/src/test/TestsMain.hs +++ b/src/test/TestsMain.hs @@ -8,6 +8,7 @@ import qualified Conjure.RepresentationsTest ( tests ) import qualified Conjure.ModelAllSolveAll ( tests, TestTimeLimit(..) ) import qualified Conjure.TypeCheckAll ( tests ) import qualified Conjure.ParsePrint ( tests ) +import qualified Conjure.ParserFuzz ( tests ) import qualified Conjure.Custom ( tests ) -- tasty @@ -24,6 +25,7 @@ main = do modelAllSolveAllTests <- Conjure.ModelAllSolveAll.tests typeCheckAllTests <- Conjure.TypeCheckAll.tests parsePrintTests <- Conjure.ParsePrint.tests + parseFuzzTests <- Conjure.ParserFuzz.tests customTests <- Conjure.Custom.tests let ingredients = antXMLRunner : includingOptions [Option (Proxy :: Proxy Conjure.ModelAllSolveAll.TestTimeLimit)] @@ -32,6 +34,7 @@ main = do testGroup "conjure" [ Conjure.Language.DomainSizeTest.tests , Conjure.RepresentationsTest.tests + , parseFuzzTests , parsePrintTests , modelAllSolveAllTests testTimeLimit , typeCheckAllTests diff --git a/tests/allfiles.txt b/tests/allfiles.txt new file mode 100644 index 0000000000..59dba9467e --- /dev/null +++ b/tests/allfiles.txt @@ -0,0 +1,17008 @@ +.github/workflows/docker-publish.yml +.gitignore +.tm_properties +.vimrc +CHANGELOG.md +CONTRIBUTORS.md +LICENSE +Makefile +README.md +azure-pipelines.yml +conjure-cp.cabal +docs/.tm_properties +docs/BNFLexer.py +docs/EssenceLexer.py +docs/Makefile +docs/authors.sh +docs/cli.rst +docs/conf.py +docs/conjure-help.html +docs/conjure-help.txt +docs/contact.rst +docs/essence.rst +docs/features.rst +docs/index.rst +docs/installation.rst +docs/introduction.rst +docs/make.bat +docs/refs.bib +docs/requirements.txt +docs/tutorials.rst +docs/tutorials/BIBD.rst +docs/tutorials/Groups.rst +docs/tutorials/LabelledConnectedGraphs.rst +docs/tutorials/NumberPuzzle.rst +docs/tutorials/NurseRostering.rst +docs/tutorials/futoshiki/Futoshiki.rst +docs/tutorials/futoshiki/example.png +docs/tutorials/futoshiki/futoshiki.essence +docs/tutorials/futoshiki/futoshiki.essence-param +docs/tutorials/knapsack.rst +docs/tutorials/knapsack_generator/KnapGen.rst +docs/tutorials/knapsack_generator/generator.essence +docs/tutorials/knapsack_generator/items.param +docs/tutorials/knapsack_generator/knapsack.essence +docs/tutorials/simple_perm/simple_perm.param +docs/tutorials/simple_perm/simple_perm.rst +docs/tutorials/simple_perm/simple_perm_checker.essence +docs/tutorials/simple_perm/simple_perm_checker_false.essence-param +docs/tutorials/simple_perm/simple_perm_checker_true.essence-param +docs/tutorials/simple_perm/simple_perm_generator.essence +docs/tutorials/simple_perm/simple_perm_generator.essence-param +docs/welcome.rst +docs/zreferences.rst +etc/build/clean.sh +etc/build/copy-conjure-branch.sh +etc/build/docker/Dockerfile +etc/build/docker/README.md +etc/build/docker/sudoku.essence +etc/build/docker/sudoku.param +etc/build/download.sh +etc/build/freeze-deps.sh +etc/build/gen_Expression.hs +etc/build/gen_Operator.hs +etc/build/ghc_urls.txt +etc/build/install-bc_minisat_all.sh +etc/build/install-boolector.sh +etc/build/install-cadical.sh +etc/build/install-chuffed.sh +etc/build/install-gecode.sh +etc/build/install-glasgow-subgraph-solver.sh +etc/build/install-glucose.sh +etc/build/install-gnu-parallel.sh +etc/build/install-kissat.sh +etc/build/install-lingeling.sh +etc/build/install-minion.sh +etc/build/install-nbc_minisat_all.sh +etc/build/install-open-wbo.sh +etc/build/install-oscar-cbls.sh +etc/build/install-savilerow.sh +etc/build/install-stack.sh +etc/build/install-yices.sh +etc/build/install-z3.sh +etc/build/install.sh +etc/build/record-coverage.sh +etc/build/silent-wrapper.sh +etc/build/test-parallel.sh +etc/build/version.sh +etc/conjure.figlet +etc/dev/gen.mset.attributes.hs +etc/dev/gen.set.attributes.hs +etc/dev/ghc-optimisation-flags/info.txt +etc/dev/ghc-optimisation-flags/options.hs +etc/dev/live_build +etc/dev/live_compile +etc/dev/live_diff +etc/dev/live_hgstatus +etc/dev/live_uptests +etc/dev/profile.sh +etc/dev/watch-helpers/actionOnSingleFile +etc/dev/watch-helpers/ghcOnSingleFile +etc/dev/watch-helpers/hlintOnSingleFile +etc/dev/watch-helpers/unescapelines.rb +etc/dev/watch-helpers/upTestOnSingleFile +etc/discussion/Essence Operators.txt +etc/discussion/EssenceAttributes.hs +etc/discussion/TODOs +etc/discussion/bindings.txt +etc/discussion/diffs.txt +etc/discussion/notes.txt +etc/empty.param +etc/figlets/do.sh +etc/figlets/index-footer.html +etc/figlets/index-header.html +etc/figlets/one.sh +etc/hs-deps/stack-8.4.yaml +etc/hs-deps/stack-8.6.yaml +etc/hs-deps/stack-9.0.yaml +etc/htags +etc/htags-vi +etc/mkparam +etc/other/copy_tests.sh +etc/other/identical_params.rb +etc/other/save_choices.sh +etc/rules/refns/horizontal/DotLeq-bools.rule +etc/rules/refns/horizontal/DotLeq-ints.rule +etc/rules/refns/horizontal/DotLt-bools.rule +etc/rules/refns/horizontal/DotLt-ints.rule +etc/rules/refns/horizontal/bubbly-quantification.rule +etc/rules/refns/horizontal/dontcare/abstract.rule +etc/rules/refns/horizontal/dontcare/matrix.rule +etc/rules/refns/horizontal/flip-lexgeq.rule +etc/rules/refns/horizontal/flip-lexgt.rule +etc/rules/refns/horizontal/function-apply-eq-1.rule +etc/rules/refns/horizontal/function-apply-eq-2.rule +etc/rules/refns/horizontal/function-card.rule +etc/rules/refns/horizontal/function-defined-quantified.rule +etc/rules/refns/horizontal/function-eq.rule +etc/rules/refns/horizontal/function-intersect-toSet.rule +etc/rules/refns/horizontal/function-inverse.rule +etc/rules/refns/horizontal/function-preImage-quantified.rule +etc/rules/refns/horizontal/function-range-quantified.rule +etc/rules/refns/horizontal/function/toRelation-apply.rule +etc/rules/refns/horizontal/functions-setlike/card.rule +etc/rules/refns/horizontal/functions-setlike/in.rule +etc/rules/refns/horizontal/functions-setlike/subset-both.rule +etc/rules/refns/horizontal/functions-setlike/subset-first.rule +etc/rules/refns/horizontal/functions-setlike/subset-second.rule +etc/rules/refns/horizontal/functions-setlike/subsetEq-both.rule +etc/rules/refns/horizontal/functions-setlike/subsetEq-first.rule +etc/rules/refns/horizontal/functions-setlike/subsetEq-second.rule +etc/rules/refns/horizontal/functions-setlike/supset-both.rule +etc/rules/refns/horizontal/functions-setlike/supset-first.rule +etc/rules/refns/horizontal/functions-setlike/supset-second.rule +etc/rules/refns/horizontal/functions-setlike/supsetEq-both.rule +etc/rules/refns/horizontal/functions-setlike/supsetEq-first.rule +etc/rules/refns/horizontal/functions-setlike/supsetEq-second.rule +etc/rules/refns/horizontal/functions-setlike/toSet.rule +etc/rules/refns/horizontal/matrix/DotLeq.rule +etc/rules/refns/horizontal/matrix/DotLt.rule +etc/rules/refns/horizontal/matrix/allDiff.rule +etc/rules/refns/horizontal/matrix/freq.rule +etc/rules/refns/horizontal/matrix/hist.rule +etc/rules/refns/horizontal/mset/card.rule +etc/rules/refns/horizontal/mset/eq-to-subsets.rule +etc/rules/refns/horizontal/mset/freq-to-sum.rule +etc/rules/refns/horizontal/mset/in.rule +etc/rules/refns/horizontal/mset/intersect-exists.rule +etc/rules/refns/horizontal/mset/intersect-forAll.rule +etc/rules/refns/horizontal/mset/intersect-sum.rule +etc/rules/refns/horizontal/mset/subset-to-subsetEq.rule +etc/rules/refns/horizontal/mset/subseteq-to-quantified.rule +etc/rules/refns/horizontal/mset/supset-to-subset.rule +etc/rules/refns/horizontal/mset/supseteq-to-subseteq.rule +etc/rules/refns/horizontal/mset/toset-exists.rule +etc/rules/refns/horizontal/mset/toset-forAll.rule +etc/rules/refns/horizontal/mset/toset-quantified-intersect.rule +etc/rules/refns/horizontal/mset/toset-quantified.rule +etc/rules/refns/horizontal/mset/union-exists.rule +etc/rules/refns/horizontal/mset/union-forAll.rule +etc/rules/refns/horizontal/mset/union-sum.rule +etc/rules/refns/horizontal/neq-to-eq.rule +etc/rules/refns/horizontal/partition-eq.rule +etc/rules/refns/horizontal/relations-setlike/card.rule +etc/rules/refns/horizontal/relations-setlike/eq.rule +etc/rules/refns/horizontal/relations-setlike/in.rule +etc/rules/refns/horizontal/relations-setlike/neq.rule +etc/rules/refns/horizontal/relations-setlike/quantified.rule +etc/rules/refns/horizontal/relations-setlike/subset-both.rule +etc/rules/refns/horizontal/relations-setlike/subset-first.rule +etc/rules/refns/horizontal/relations-setlike/subset-second.rule +etc/rules/refns/horizontal/relations-setlike/subsetEq-both.rule +etc/rules/refns/horizontal/relations-setlike/subsetEq-first.rule +etc/rules/refns/horizontal/relations-setlike/subsetEq-second.rule +etc/rules/refns/horizontal/relations-setlike/supset-both.rule +etc/rules/refns/horizontal/relations-setlike/supset-first.rule +etc/rules/refns/horizontal/relations-setlike/supset-second.rule +etc/rules/refns/horizontal/relations-setlike/supsetEq-both.rule +etc/rules/refns/horizontal/relations-setlike/supsetEq-first.rule +etc/rules/refns/horizontal/relations-setlike/supsetEq-second.rule +etc/rules/refns/horizontal/set/card-fixed-size.rule +etc/rules/refns/horizontal/set/card.rule +etc/rules/refns/horizontal/set/eq-better.rule +etc/rules/refns/horizontal/set/eq-to-subsets.rule +etc/rules/refns/horizontal/set/freq-to-in.rule +etc/rules/refns/horizontal/set/in-to-quantified.rule +etc/rules/refns/horizontal/set/intersect-quantifier.rule +etc/rules/refns/horizontal/set/max-union.rule +etc/rules/refns/horizontal/set/max.rule +etc/rules/refns/horizontal/set/min-union.rule +etc/rules/refns/horizontal/set/min.rule +etc/rules/refns/horizontal/set/minus-quantifier.rule +etc/rules/refns/horizontal/set/quantification-subset.rule +etc/rules/refns/horizontal/set/quantification-subsetEq.rule +etc/rules/refns/horizontal/set/subset-to-subsetEq.rule +etc/rules/refns/horizontal/set/subset-to-subsetEq2.rule +etc/rules/refns/horizontal/set/subseteq-to-quantified.rule +etc/rules/refns/horizontal/set/supset-to-subset.rule +etc/rules/refns/horizontal/set/supseteq-to-subseteq.rule +etc/rules/refns/horizontal/set/toMSet-to-quantified.rule +etc/rules/refns/horizontal/set/union-exists.rule +etc/rules/refns/horizontal/set/union-forAll.rule +etc/rules/refns/horizontal/set/union-sum.rule +etc/rules/refns/horizontal/toInt-eq-0.rule +etc/rules/refns/horizontal/toInt-eq-1.rule +etc/rules/refns/horizontal/toInt-geq-1.rule +etc/rules/refns/vertical/Function~1D/DotLeq.rule +etc/rules/refns/vertical/Function~1D/DotLt.rule +etc/rules/refns/vertical/Function~1D/image.rule +etc/rules/refns/vertical/Function~1D/toMSet-quantified.rule +etc/rules/refns/vertical/Function~1D/toSet-exists.rule +etc/rules/refns/vertical/Function~1D/toSet-forAll.rule +etc/rules/refns/vertical/Function~1D/toSet-sum.rule +etc/rules/refns/vertical/Function~1DPartial/DotLeq.rule +etc/rules/refns/vertical/Function~1DPartial/DotLt.rule +etc/rules/refns/vertical/Function~1DPartial/defined.rule +etc/rules/refns/vertical/Function~1DPartial/image.rule +etc/rules/refns/vertical/Function~1DPartial/toMSet-quantified.rule +etc/rules/refns/vertical/Function~1DPartial/toSet-quantified.rule +etc/rules/refns/vertical/Function~AsReln/DotLeq.rule +etc/rules/refns/vertical/Function~AsReln/DotLt.rule +etc/rules/refns/vertical/Function~AsReln/image-bool.rule +etc/rules/refns/vertical/Function~AsReln/image-function0.rule +etc/rules/refns/vertical/Function~AsReln/image-function1.rule +etc/rules/refns/vertical/Function~AsReln/image-function2.rule +etc/rules/refns/vertical/Function~AsReln/image-int.rule +etc/rules/refns/vertical/Function~AsReln/image-mset.rule +etc/rules/refns/vertical/Function~AsReln/image-set.rule +etc/rules/refns/vertical/Function~AsReln/image-tuple.rule +etc/rules/refns/vertical/Function~AsReln/quantified.rule +etc/rules/refns/vertical/Function~AsReln/toMSet-quantified.rule +etc/rules/refns/vertical/Function~IntPair2D/DotLeq.rule +etc/rules/refns/vertical/Function~IntPair2D/DotLt.rule +etc/rules/refns/vertical/Function~IntPair2D/image.rule +etc/rules/refns/vertical/Function~IntPair2D/toMSet-quantified.rule +etc/rules/refns/vertical/Function~IntPair2D/toSet-quantified.rule +etc/rules/refns/vertical/Function~IntPair2DPartial/DotLeq.rule +etc/rules/refns/vertical/Function~IntPair2DPartial/DotLt.rule +etc/rules/refns/vertical/Function~IntPair2DPartial/image.rule +etc/rules/refns/vertical/Function~IntPair2DPartial/toMSet-quantified.rule +etc/rules/refns/vertical/Function~IntPair2DPartial/toSet-quantified.rule +etc/rules/refns/vertical/MSet~Explicit/DotLeq.rule +etc/rules/refns/vertical/MSet~Explicit/DotLt.rule +etc/rules/refns/vertical/MSet~Explicit/quantified.rule +etc/rules/refns/vertical/MSet~ExplicitVarSize/DotLeq.rule +etc/rules/refns/vertical/MSet~ExplicitVarSize/DotLt.rule +etc/rules/refns/vertical/MSet~ExplicitVarSize/exists.rule +etc/rules/refns/vertical/MSet~ExplicitVarSize/forAll.rule +etc/rules/refns/vertical/MSet~ExplicitVarSize/sum.rule +etc/rules/refns/vertical/MSet~Occurrence/DotLeq.rule +etc/rules/refns/vertical/MSet~Occurrence/DotLt.rule +etc/rules/refns/vertical/MSet~Occurrence/exists.rule +etc/rules/refns/vertical/MSet~Occurrence/forAll.rule +etc/rules/refns/vertical/MSet~Occurrence/sum.rule +etc/rules/refns/vertical/Partition~SetOfSets/DotLeq.rule +etc/rules/refns/vertical/Partition~SetOfSets/DotLt.rule +etc/rules/refns/vertical/Partition~SetOfSets/quantification-over-part.rule +etc/rules/refns/vertical/Partition~SetOfSets/quantification-over-part2.rule +etc/rules/refns/vertical/Relation~AsSet/DotLeq.rule +etc/rules/refns/vertical/Relation~AsSet/DotLt.rule +etc/rules/refns/vertical/Relation~AsSet/relation-RelationAsSet-toMSet.rule +etc/rules/refns/vertical/Relation~AsSet/relation-RelationAsSet-toSet.rule +etc/rules/refns/vertical/Relation~IntMatrix2/DotLeq.rule +etc/rules/refns/vertical/Relation~IntMatrix2/DotLt.rule +etc/rules/refns/vertical/Relation~IntMatrix2/apply.rule +etc/rules/refns/vertical/Relation~IntMatrix2/leftProject.rule +etc/rules/refns/vertical/Relation~IntMatrix2/rightProject.rule +etc/rules/refns/vertical/Relation~IntMatrix2/toSet.rule +etc/rules/refns/vertical/Relation~IntMatrix3/DotLeq.rule +etc/rules/refns/vertical/Relation~IntMatrix3/DotLt.rule +etc/rules/refns/vertical/Relation~IntMatrix3/apply.rule +etc/rules/refns/vertical/Relation~IntMatrix3/project_1_1.rule +etc/rules/refns/vertical/Relation~IntMatrix3/project_1_2.rule +etc/rules/refns/vertical/Relation~IntMatrix3/project_1_3.rule +etc/rules/refns/vertical/Relation~IntMatrix3/project_2_12.rule +etc/rules/refns/vertical/Relation~IntMatrix3/project_2_13.rule +etc/rules/refns/vertical/Relation~IntMatrix3/project_2_23.rule +etc/rules/refns/vertical/Relation~IntMatrix3/toSet.rule +etc/rules/refns/vertical/Set~Explicit/DotLeq.rule +etc/rules/refns/vertical/Set~Explicit/DotLt.rule +etc/rules/refns/vertical/Set~Explicit/eq.rule +etc/rules/refns/vertical/Set~Explicit/neq.rule +etc/rules/refns/vertical/Set~Explicit/quantified-subsetEq-2.rule +etc/rules/refns/vertical/Set~Explicit/quantified-subsetEq-3.rule +etc/rules/refns/vertical/Set~Explicit/quantified-subsetEq-4.rule +etc/rules/refns/vertical/Set~Explicit/quantified.rule +etc/rules/refns/vertical/Set~Explicit/quantified2lt.rule +etc/rules/refns/vertical/Set~Explicit/quantified2neq.rule +etc/rules/refns/vertical/Set~ExplicitVarSize/DotLeq.rule +etc/rules/refns/vertical/Set~ExplicitVarSize/DotLt.rule +etc/rules/refns/vertical/Set~ExplicitVarSize/quantified.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithDefault/DotLeq.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithDefault/DotLt.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithDefault/quantified.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/DotLeq.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/DotLt.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/card.rule +etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/quantified.rule +etc/rules/refns/vertical/Set~Gent/DotLeq.rule +etc/rules/refns/vertical/Set~Gent/DotLt.rule +etc/rules/refns/vertical/Set~Gent/in.rule +etc/rules/refns/vertical/Set~Gent/quantified.rule +etc/rules/refns/vertical/Set~Occurrence/DotLeq.rule +etc/rules/refns/vertical/Set~Occurrence/DotLt.rule +etc/rules/refns/vertical/Set~Occurrence/in.rule +etc/rules/refns/vertical/Set~Occurrence/quantified.rule +etc/rules/refns/vertical/channelling/SetExplicitVarSize-SetExplicitVarSizeWithMarker.rule +etc/rules/refns/vertical/channelling/SetExplicitVarSizeWithMarker-SetExplicitVarSize.rule +etc/rules/reprs/Function~1D.repr +etc/rules/reprs/Function~1DPartial.repr +etc/rules/reprs/Function~AsReln.repr +etc/rules/reprs/Function~AsReln_withMaxSize.repr +etc/rules/reprs/Function~AsReln_withMinSize.repr +etc/rules/reprs/Function~AsReln_withSize.repr +etc/rules/reprs/Function~IntPair2D.repr +etc/rules/reprs/Function~IntPair2DPartial.repr +etc/rules/reprs/MSet~Explicit.repr +etc/rules/reprs/MSet~ExplicitVarSize.repr +etc/rules/reprs/MSet~Occurrence.repr +etc/rules/reprs/Partition~SetOfSets-0.repr +etc/rules/reprs/Partition~SetOfSets-1.repr +etc/rules/reprs/Partition~SetOfSets-2.repr +etc/rules/reprs/Partition~SetOfSets-3.repr +etc/rules/reprs/Relation~IntMatrix2.repr +etc/rules/reprs/Relation~IntMatrix3.repr +etc/rules/reprs/Set~Explicit.repr +etc/rules/reprs/Set~ExplicitVarSize.repr +etc/rules/reprs/Set~ExplicitVarSizeWithDefault.repr +etc/rules/reprs/Set~ExplicitVarSizeWithMarker.repr +etc/rules/reprs/Set~Gent.repr +etc/rules/reprs/Set~Occurrence.repr +etc/savilerow/lib/trove.jar +etc/savilerow/savilerow +etc/savilerow/savilerow.bat +etc/savilerow/savilerow.jar +etc/syntax/textmate/Essence.tmbundle/Preferences/line-comment.tmPreferences +etc/syntax/textmate/Essence.tmbundle/Syntaxes/Essence.tmLanguage +etc/syntax/textmate/Essence.tmbundle/info.plist +etc/syntax/vim/essence/ftdetect/essence.vim +etc/syntax/vim/essence/ftplugin/essence.vim +etc/syntax/vim/essence/snippets/essence.snippets +etc/syntax/vim/essence/syntax/essence.vim +etc/syntax/vim/essence/syntax/keywords +experiments/dontcare/Function-Partial/01/01.essence +experiments/dontcare/Function-Partial/02/02.essence +experiments/dontcare/Function-Partial/03/03.essence +experiments/dontcare/MSet-VarSize/01-optimisation/01.essence +experiments/dontcare/MSet-VarSize/01-satisfaction/01.essence +experiments/dontcare/MSet-VarSize/02-optimisation/02.essence +experiments/dontcare/MSet-VarSize/02-satisfaction/02.essence +experiments/dontcare/MSet-VarSize/03-optimisation/03.essence +experiments/dontcare/MSet-VarSize/03-satisfaction/03.essence +experiments/dontcare/MSet-VarSize/04-optimisation/04.essence +experiments/dontcare/MSet-VarSize/04-satisfaction/04.essence +experiments/dontcare/MSet-VarSize/05-optimisation/05.essence +experiments/dontcare/MSet-VarSize/05-satisfaction/05.essence +experiments/dontcare/MSet-VarSize/06-optimisation/06.essence +experiments/dontcare/MSet-VarSize/06-satisfaction/06.essence +experiments/dontcare/Nested-Types/01/01.essence +experiments/dontcare/Nested-Types/02/02.essence +experiments/dontcare/Partition-VarSize/01/01.essence +experiments/dontcare/Relation-VarSize/01/01.essence +experiments/dontcare/Relation-VarSize/02/02.essence +experiments/dontcare/Set-VarSize/01-optimisation/01.essence +experiments/dontcare/Set-VarSize/01-satisfaction/01.essence +experiments/dontcare/Set-VarSize/02-optimisation/02.essence +experiments/dontcare/Set-VarSize/02-satisfaction/02.essence +experiments/dontcare/Set-VarSize/03-optimisation/03.essence +experiments/dontcare/Set-VarSize/03-satisfaction/03.essence +experiments/dontcare/Set-VarSize/04-optimisation/04.essence +experiments/dontcare/Set-VarSize/04-satisfaction/04.essence +experiments/dontcare/Set-VarSize/05-optimisation/05.essence +experiments/dontcare/Set-VarSize/05-satisfaction/05.essence +experiments/dontcare/Set-VarSize/06-optimisation/06.essence +experiments/dontcare/Set-VarSize/06-satisfaction/06.essence +experiments/dontcare/all-combinations/create_essences.hs +experiments/dontcare/allsols/01-relation/01.essence +experiments/dontcare/allsols/01-relation/expected.txt +experiments/dontcare/allsols/02-relation-partition/02.essence +experiments/dontcare/allsols/02-relation-partition/expected.txt +experiments/dontcare/allsols/README +experiments/dontcare/dominating-queens/04.param +experiments/dontcare/dominating-queens/05.param +experiments/dontcare/dominating-queens/06.param +experiments/dontcare/dominating-queens/07.param +experiments/dontcare/dominating-queens/08.param +experiments/dontcare/dominating-queens/09.param +experiments/dontcare/dominating-queens/10.param +experiments/dontcare/dominating-queens/11.param +experiments/dontcare/dominating-queens/12.param +experiments/dontcare/dominating-queens/13.param +experiments/dontcare/dominating-queens/14.param +experiments/dontcare/dominating-queens/15.param +experiments/dontcare/dominating-queens/dominating-queens.essence +experiments/dontcare/dominating-queens/mkParams.sh +experiments/dontcare/numbers/MinionNodes.txt +experiments/dontcare/numbers/MinionSolveTime.txt +experiments/dontcare/numbers/MinionTimeOut.txt +experiments/dontcare/numbers/SavileRowTotalTime.txt +experiments/dontcare/numbers/forTable_minionNodes.txt +experiments/dontcare/numbers/forTable_minionSolutions.txt +experiments/dontcare/numbers/forTable_minionTimedOut.txt +experiments/dontcare/recompute.sh +experiments/dontcare/remote/build_db.hs +experiments/dontcare/remote/build_db.sh +experiments/dontcare/remote/recomputation/commands.sh +experiments/dontcare/remote/recomputation/noted.txt +experiments/scaling/mset-fixed/00int.essence +experiments/scaling/mset-fixed/01set.essence +experiments/scaling/mset-fixed/02set.essence +experiments/scaling/mset-fixed/03set.essence +experiments/scaling/mset-fixed/04set.essence +experiments/scaling/mset-fixed/05set.essence +experiments/scaling/mset-fixed/06set.essence +experiments/scaling/mset-fixed/07set.essence +experiments/scaling/mset-fixed/08set.essence +experiments/scaling/mset-fixed/09set.essence +experiments/scaling/mset-fixed/10set.essence +experiments/scaling/mset-maxOccur/00int.essence +experiments/scaling/mset-maxOccur/01set.essence +experiments/scaling/mset-maxOccur/02set.essence +experiments/scaling/mset-maxOccur/03set.essence +experiments/scaling/mset-maxOccur/04set.essence +experiments/scaling/mset-maxOccur/05set.essence +experiments/scaling/mset-maxOccur/06set.essence +experiments/scaling/mset-maxOccur/07set.essence +experiments/scaling/mset-maxOccur/08set.essence +experiments/scaling/mset-maxOccur/09set.essence +experiments/scaling/mset-maxOccur/10set.essence +experiments/scaling/mset-maxSize/00int.essence +experiments/scaling/mset-maxSize/01set.essence +experiments/scaling/mset-maxSize/02set.essence +experiments/scaling/mset-maxSize/03set.essence +experiments/scaling/mset-maxSize/04set.essence +experiments/scaling/mset-maxSize/05set.essence +experiments/scaling/mset-maxSize/06set.essence +experiments/scaling/mset-maxSize/07set.essence +experiments/scaling/mset-maxSize/08set.essence +experiments/scaling/mset-maxSize/09set.essence +experiments/scaling/mset-maxSize/10set.essence +experiments/scaling/numberOfCons/gen.hs +experiments/scaling/numberOfCons/run.sh +experiments/scaling/run.sh +experiments/scaling/set-fixed/00int.essence +experiments/scaling/set-fixed/01set.essence +experiments/scaling/set-fixed/02set.essence +experiments/scaling/set-fixed/03set.essence +experiments/scaling/set-fixed/04set.essence +experiments/scaling/set-fixed/05set.essence +experiments/scaling/set-fixed/06set.essence +experiments/scaling/set-fixed/07set.essence +experiments/scaling/set-fixed/08set.essence +experiments/scaling/set-fixed/09set.essence +experiments/scaling/set-fixed/10set.essence +experiments/scaling/set-maxSize/00int.essence +experiments/scaling/set-maxSize/01set.essence +experiments/scaling/set-maxSize/02set.essence +experiments/scaling/set-maxSize/03set.essence +experiments/scaling/set-maxSize/04set.essence +experiments/scaling/set-maxSize/05set.essence +experiments/scaling/set-maxSize/06set.essence +experiments/scaling/set-maxSize/07set.essence +experiments/scaling/set-maxSize/08set.essence +experiments/scaling/set-maxSize/09set.essence +experiments/scaling/set-maxSize/10set.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-complete/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-complete/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-numParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-numParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-partSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-partSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-regular/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-regular/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/3.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/3.essence +experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-complete/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-complete/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-numParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-numParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-partSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-partSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-regular/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/partition-regular/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/3.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/3.essence +experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-mset/set-mset/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-mset/set-mset/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-complete/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-complete/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-numParts/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-numParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-partSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-partSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-regular/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-regular/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/3.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/1.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/2.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/3.essence +experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/function-total/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/function-total/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-maxOccur/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-maxOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-complete/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-complete/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-minNumParts/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-minNumParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-minPartSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-minPartSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-numParts/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-numParts/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-partSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-partSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/partition-regular/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/partition-regular/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/3.essence +experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/3.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-size/1.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-size/1.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-size/2.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-size/2.essence.expected +experiments/type-strengthening/attribute-acquisition/not-nested/set-size/3.essence +experiments/type-strengthening/attribute-acquisition/not-nested/set-size/3.essence.expected +experiments/type-strengthening/recompute.sh +experiments/type-strengthening/type-change/mset-to-set/1.essence +experiments/type-strengthening/type-change/mset-to-set/1.essence.expected +experiments/type-strengthening/type-change/mset-to-set/2.essence +experiments/type-strengthening/type-change/mset-to-set/2.essence.expected +experiments/type-strengthening/type-change/mset-to-set/3.essence +experiments/type-strengthening/type-change/mset-to-set/3.essence.expected +experiments/type-strengthening/type-change/relation-to-function/because-assigned-1.essence +experiments/type-strengthening/type-change/relation-to-function/because-assigned-1.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1-andMaxSize.essence +experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1-andMaxSize.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1.essence +experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-functional-on2.essence +experiments/type-strengthening/type-change/relation-to-function/partial-functional-on2.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-1.essence +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-1.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-12.essence +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-12.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-13.essence +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-13.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-2.essence +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-2.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-23.essence +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-23.essence.expected +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-3.essence +experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-3.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-functional-on1.essence +experiments/type-strengthening/type-change/relation-to-function/total-functional-on1.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-functional-on2.essence +experiments/type-strengthening/type-change/relation-to-function/total-functional-on2.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-1.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-1.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-12.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-12.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13-andStuff.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13-andStuff.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-2.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-2.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-23.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-23.essence.expected +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-3.essence +experiments/type-strengthening/type-change/relation-to-function/total-relation-123-3.essence.expected +src/Conjure/Bug.hs +src/Conjure/Compute/DomainOf.hs +src/Conjure/Compute/DomainUnion.hs +src/Conjure/Language.hs +src/Conjure/Language/AST/ASTParser.hs +src/Conjure/Language/AST/Expression.hs +src/Conjure/Language/AST/Helpers.hs +src/Conjure/Language/AST/Reformer.hs +src/Conjure/Language/AST/Syntax.hs +src/Conjure/Language/AbstractLiteral.hs +src/Conjure/Language/AdHoc.hs +src/Conjure/Language/Arbitrary.hs +src/Conjure/Language/Attributes.hs +src/Conjure/Language/CategoryOf.hs +src/Conjure/Language/Constant.hs +src/Conjure/Language/Definition.hs +src/Conjure/Language/Domain.hs +src/Conjure/Language/Domain/AddAttributes.hs +src/Conjure/Language/DomainSizeOf.hs +src/Conjure/Language/EvaluateOp.hs +src/Conjure/Language/Expression.hs +src/Conjure/Language/Expression/DomainSizeOf.hs +src/Conjure/Language/Expression/Op.hs +src/Conjure/Language/Expression/Op/Active.hs +src/Conjure/Language/Expression/Op/AllDiff.hs +src/Conjure/Language/Expression/Op/AllDiffExcept.hs +src/Conjure/Language/Expression/Op/And.hs +src/Conjure/Language/Expression/Op/Apart.hs +src/Conjure/Language/Expression/Op/AtLeast.hs +src/Conjure/Language/Expression/Op/AtMost.hs +src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs +src/Conjure/Language/Expression/Op/CatchUndef.hs +src/Conjure/Language/Expression/Op/Defined.hs +src/Conjure/Language/Expression/Op/Div.hs +src/Conjure/Language/Expression/Op/DontCare.hs +src/Conjure/Language/Expression/Op/DotLeq.hs +src/Conjure/Language/Expression/Op/DotLt.hs +src/Conjure/Language/Expression/Op/Eq.hs +src/Conjure/Language/Expression/Op/Factorial.hs +src/Conjure/Language/Expression/Op/Flatten.hs +src/Conjure/Language/Expression/Op/Freq.hs +src/Conjure/Language/Expression/Op/GCC.hs +src/Conjure/Language/Expression/Op/Geq.hs +src/Conjure/Language/Expression/Op/Gt.hs +src/Conjure/Language/Expression/Op/Hist.hs +src/Conjure/Language/Expression/Op/Iff.hs +src/Conjure/Language/Expression/Op/Image.hs +src/Conjure/Language/Expression/Op/ImageSet.hs +src/Conjure/Language/Expression/Op/Imply.hs +src/Conjure/Language/Expression/Op/In.hs +src/Conjure/Language/Expression/Op/Indexing.hs +src/Conjure/Language/Expression/Op/Internal/Common.hs +src/Conjure/Language/Expression/Op/Intersect.hs +src/Conjure/Language/Expression/Op/Inverse.hs +src/Conjure/Language/Expression/Op/Leq.hs +src/Conjure/Language/Expression/Op/LexLeq.hs +src/Conjure/Language/Expression/Op/LexLt.hs +src/Conjure/Language/Expression/Op/Lt.hs +src/Conjure/Language/Expression/Op/MakeTable.hs +src/Conjure/Language/Expression/Op/Max.hs +src/Conjure/Language/Expression/Op/Min.hs +src/Conjure/Language/Expression/Op/Minus.hs +src/Conjure/Language/Expression/Op/Mod.hs +src/Conjure/Language/Expression/Op/Negate.hs +src/Conjure/Language/Expression/Op/Neq.hs +src/Conjure/Language/Expression/Op/Not.hs +src/Conjure/Language/Expression/Op/Or.hs +src/Conjure/Language/Expression/Op/Participants.hs +src/Conjure/Language/Expression/Op/Parts.hs +src/Conjure/Language/Expression/Op/Party.hs +src/Conjure/Language/Expression/Op/Pow.hs +src/Conjure/Language/Expression/Op/PowerSet.hs +src/Conjure/Language/Expression/Op/PreImage.hs +src/Conjure/Language/Expression/Op/Pred.hs +src/Conjure/Language/Expression/Op/Product.hs +src/Conjure/Language/Expression/Op/Range.hs +src/Conjure/Language/Expression/Op/RelationProj.hs +src/Conjure/Language/Expression/Op/Restrict.hs +src/Conjure/Language/Expression/Op/Slicing.hs +src/Conjure/Language/Expression/Op/Subsequence.hs +src/Conjure/Language/Expression/Op/Subset.hs +src/Conjure/Language/Expression/Op/SubsetEq.hs +src/Conjure/Language/Expression/Op/Substring.hs +src/Conjure/Language/Expression/Op/Succ.hs +src/Conjure/Language/Expression/Op/Sum.hs +src/Conjure/Language/Expression/Op/Supset.hs +src/Conjure/Language/Expression/Op/SupsetEq.hs +src/Conjure/Language/Expression/Op/Table.hs +src/Conjure/Language/Expression/Op/TildeLeq.hs +src/Conjure/Language/Expression/Op/TildeLt.hs +src/Conjure/Language/Expression/Op/ToInt.hs +src/Conjure/Language/Expression/Op/ToMSet.hs +src/Conjure/Language/Expression/Op/ToRelation.hs +src/Conjure/Language/Expression/Op/ToSet.hs +src/Conjure/Language/Expression/Op/Together.hs +src/Conjure/Language/Expression/Op/Transform.hs +src/Conjure/Language/Expression/Op/True.hs +src/Conjure/Language/Expression/Op/TwoBars.hs +src/Conjure/Language/Expression/Op/Union.hs +src/Conjure/Language/Expression/Op/Xor.hs +src/Conjure/Language/Expression/OpTypes.hs +src/Conjure/Language/Instantiate.hs +src/Conjure/Language/Instantiate.hs-boot +src/Conjure/Language/Lenses.hs +src/Conjure/Language/Lexemes.hs +src/Conjure/Language/Lexer.hs +src/Conjure/Language/ModelDiff.hs +src/Conjure/Language/ModelStats.hs +src/Conjure/Language/Name.hs +src/Conjure/Language/NameGen.hs +src/Conjure/Language/NameResolution.hs +src/Conjure/Language/NewLexer.hs +src/Conjure/Language/Parser.hs +src/Conjure/Language/ParserC.hs +src/Conjure/Language/Pretty.hs +src/Conjure/Language/RepresentationOf.hs +src/Conjure/Language/TH.hs +src/Conjure/Language/Type.hs +src/Conjure/Language/TypeOf.hs +src/Conjure/Language/Validator.hs +src/Conjure/Language/ZeroVal.hs +src/Conjure/Prelude.hs +src/Conjure/Process/AttributeAsConstraints.hs +src/Conjure/Process/Boost.hs +src/Conjure/Process/DealWithCuts.hs +src/Conjure/Process/Enumerate.hs +src/Conjure/Process/Enumerate.hs-boot +src/Conjure/Process/Enums.hs +src/Conjure/Process/FiniteGivens.hs +src/Conjure/Process/InferAttributes.hs +src/Conjure/Process/LettingsForComplexInDoms.hs +src/Conjure/Process/Sanity.hs +src/Conjure/Process/Unnameds.hs +src/Conjure/Process/ValidateConstantForDomain.hs +src/Conjure/Process/ValidateConstantForDomain.hs-boot +src/Conjure/Representations.hs +src/Conjure/Representations/Combined.hs +src/Conjure/Representations/Common.hs +src/Conjure/Representations/Function/Function1D.hs +src/Conjure/Representations/Function/Function1DPartial.hs +src/Conjure/Representations/Function/FunctionAsRelation.hs +src/Conjure/Representations/Function/FunctionND.hs +src/Conjure/Representations/Function/FunctionNDPartial.hs +src/Conjure/Representations/Function/FunctionNDPartialDummy.hs +src/Conjure/Representations/Internal.hs +src/Conjure/Representations/MSet/ExplicitWithFlags.hs +src/Conjure/Representations/MSet/ExplicitWithRepetition.hs +src/Conjure/Representations/MSet/Occurrence.hs +src/Conjure/Representations/Matrix.hs +src/Conjure/Representations/Partition/Occurrence.hs +src/Conjure/Representations/Partition/PartitionAsSet.hs +src/Conjure/Representations/Primitive.hs +src/Conjure/Representations/Record.hs +src/Conjure/Representations/Relation/RelationAsMatrix.hs +src/Conjure/Representations/Relation/RelationAsSet.hs +src/Conjure/Representations/Sequence/ExplicitBounded.hs +src/Conjure/Representations/Set/Explicit.hs +src/Conjure/Representations/Set/ExplicitVarSizeWithDummy.hs +src/Conjure/Representations/Set/ExplicitVarSizeWithFlags.hs +src/Conjure/Representations/Set/ExplicitVarSizeWithMarker.hs +src/Conjure/Representations/Set/Occurrence.hs +src/Conjure/Representations/Tuple.hs +src/Conjure/Representations/Variant.hs +src/Conjure/Rules/BubbleUp.hs +src/Conjure/Rules/Definition.hs +src/Conjure/Rules/DontCare.hs +src/Conjure/Rules/Horizontal/Function.hs +src/Conjure/Rules/Horizontal/MSet.hs +src/Conjure/Rules/Horizontal/Partition.hs +src/Conjure/Rules/Horizontal/Relation.hs +src/Conjure/Rules/Horizontal/Sequence.hs +src/Conjure/Rules/Horizontal/Set.hs +src/Conjure/Rules/Import.hs +src/Conjure/Rules/TildeOrdering.hs +src/Conjure/Rules/Transform.hs +src/Conjure/Rules/Vertical/Function/Function1D.hs +src/Conjure/Rules/Vertical/Function/Function1DPartial.hs +src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs +src/Conjure/Rules/Vertical/Function/FunctionND.hs +src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs +src/Conjure/Rules/Vertical/Function/FunctionNDPartialDummy.hs +src/Conjure/Rules/Vertical/MSet/ExplicitWithFlags.hs +src/Conjure/Rules/Vertical/MSet/ExplicitWithRepetition.hs +src/Conjure/Rules/Vertical/MSet/Occurrence.hs +src/Conjure/Rules/Vertical/Matrix.hs +src/Conjure/Rules/Vertical/Partition/Occurrence.hs +src/Conjure/Rules/Vertical/Partition/PartitionAsSet.hs +src/Conjure/Rules/Vertical/Record.hs +src/Conjure/Rules/Vertical/Relation/RelationAsMatrix.hs +src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs +src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs +src/Conjure/Rules/Vertical/Set/Explicit.hs +src/Conjure/Rules/Vertical/Set/ExplicitVarSizeWithDummy.hs +src/Conjure/Rules/Vertical/Set/ExplicitVarSizeWithFlags.hs +src/Conjure/Rules/Vertical/Set/ExplicitVarSizeWithMarker.hs +src/Conjure/Rules/Vertical/Set/Occurrence.hs +src/Conjure/Rules/Vertical/Tuple.hs +src/Conjure/Rules/Vertical/Variant.hs +src/Conjure/UI.hs +src/Conjure/UI/ErrorDisplay.hs +src/Conjure/UI/IO.hs +src/Conjure/UI/MainHelper.hs +src/Conjure/UI/MainHelper.hs-boot +src/Conjure/UI/Model.hs +src/Conjure/UI/NormaliseQuantified.hs +src/Conjure/UI/ParameterGenerator.hs +src/Conjure/UI/Split.hs +src/Conjure/UI/TranslateParameter.hs +src/Conjure/UI/TranslateSolution.hs +src/Conjure/UI/TypeCheck.hs +src/Conjure/UI/TypeScript.hs +src/Conjure/UI/ValidateSolution.hs +src/Conjure/UI/VarSymBreaking.hs +src/Conjure/UserError.hs +src/exec/Main.hs +src/test/Conjure/Custom.hs +src/test/Conjure/Language/DomainSizeTest.hs +src/test/Conjure/ModelAllSolveAll.hs +src/test/Conjure/ParsePrint.hs +src/test/Conjure/RepresentationsTest.hs +src/test/Conjure/TypeCheckAll.hs +src/test/TestsMain.hs +tests/README.md +tests/acceptAllOutputs.sh +tests/allsolvers/run.sh +tests/allsolvers/test.essence +tests/allsolvers/testo.essence +tests/custom/README.md +tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/product.essence +tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/run.sh +tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected +tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stdout.expected +tests/custom/STARIS_2022/basic/bool-xor/run.sh +tests/custom/STARIS_2022/basic/bool-xor/stdout.expected +tests/custom/STARIS_2022/basic/bool-xor/xor.essence +tests/custom/STARIS_2022/basic/bool-xor/xor.solution +tests/custom/STARIS_2022/basic/decision-where-error/decision-where.essence +tests/custom/STARIS_2022/basic/decision-where-error/run.sh +tests/custom/STARIS_2022/basic/decision-where-error/stderr.expected +tests/custom/STARIS_2022/basic/decision-where-error/stdout.expected +tests/custom/STARIS_2022/basic/enum-directions/directions.essence +tests/custom/STARIS_2022/basic/enum-directions/directions.solution +tests/custom/STARIS_2022/basic/enum-directions/run.sh +tests/custom/STARIS_2022/basic/enum-directions/stdout.expected +tests/custom/STARIS_2022/basic/enum-operators/pred-basic/pred-basic.essence +tests/custom/STARIS_2022/basic/enum-operators/pred-basic/pred-basic.solution +tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh +tests/custom/STARIS_2022/basic/enum-operators/pred-basic/stdout.expected +tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh +tests/custom/STARIS_2022/basic/enum-operators/succ-basic/stdout.expected +tests/custom/STARIS_2022/basic/enum-operators/succ-basic/succ-basic.essence +tests/custom/STARIS_2022/basic/enum-operators/succ-basic/succ-basic.solution +tests/custom/STARIS_2022/basic/enum-spaces-error/enum-spaces.essence +tests/custom/STARIS_2022/basic/enum-spaces-error/run.sh +tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected +tests/custom/STARIS_2022/basic/enum-spaces-error/stdout.expected +tests/custom/STARIS_2022/basic/factor/factor.essence +tests/custom/STARIS_2022/basic/factor/factor.solution +tests/custom/STARIS_2022/basic/factor/run.sh +tests/custom/STARIS_2022/basic/factor/stdout.expected +tests/custom/STARIS_2022/basic/greatest-common-factor/gcf-inputs.solution +tests/custom/STARIS_2022/basic/greatest-common-factor/gcf.essence +tests/custom/STARIS_2022/basic/greatest-common-factor/inputs.param +tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh +tests/custom/STARIS_2022/basic/greatest-common-factor/stdout.expected +tests/custom/STARIS_2022/basic/letting-arithmetic/letting.essence +tests/custom/STARIS_2022/basic/letting-arithmetic/letting.solution +tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh +tests/custom/STARIS_2022/basic/letting-arithmetic/stdout.expected +tests/custom/STARIS_2022/basic/list-operations/exists/exists.essence +tests/custom/STARIS_2022/basic/list-operations/exists/exists.solution +tests/custom/STARIS_2022/basic/list-operations/exists/run.sh +tests/custom/STARIS_2022/basic/list-operations/exists/stdout.expected +tests/custom/STARIS_2022/basic/list-operations/forAll/forAll.essence +tests/custom/STARIS_2022/basic/list-operations/forAll/forAll.solution +tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh +tests/custom/STARIS_2022/basic/list-operations/forAll/stdout.expected +tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh +tests/custom/STARIS_2022/basic/list-operations/sum-basic/stdout.expected +tests/custom/STARIS_2022/basic/list-operations/sum-basic/sum.essence +tests/custom/STARIS_2022/basic/list-operations/sum-basic/sum.solution +tests/custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh +tests/custom/STARIS_2022/basic/list-operations/sum-matrix/stdout.expected +tests/custom/STARIS_2022/basic/list-operations/sum-matrix/sum-matrix.essence +tests/custom/STARIS_2022/basic/list-operations/sum-matrix/sum-matrix.solution +tests/custom/STARIS_2022/basic/matrices/allDiff-basic/allDiff.essence +tests/custom/STARIS_2022/basic/matrices/allDiff-basic/allDiff.solution +tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh +tests/custom/STARIS_2022/basic/matrices/allDiff-basic/stdout.expected +tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/allDiff-type-error.essence +tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh +tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected +tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stdout.expected +tests/custom/STARIS_2022/basic/matrices/alldifferent_except/alldifferent_except.essence +tests/custom/STARIS_2022/basic/matrices/alldifferent_except/alldifferent_except.solution +tests/custom/STARIS_2022/basic/matrices/alldifferent_except/run.sh +tests/custom/STARIS_2022/basic/matrices/alldifferent_except/stdout.expected +tests/custom/STARIS_2022/basic/matrices/flatten/flatten.essence +tests/custom/STARIS_2022/basic/matrices/flatten/flatten.solution +tests/custom/STARIS_2022/basic/matrices/flatten/run.sh +tests/custom/STARIS_2022/basic/matrices/flatten/stdout.expected +tests/custom/STARIS_2022/basic/matrices/matrix-basic/matrix-basic.essence +tests/custom/STARIS_2022/basic/matrices/matrix-basic/matrix-basic.solution +tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh +tests/custom/STARIS_2022/basic/matrices/matrix-basic/stdout.expected +tests/custom/STARIS_2022/basic/matrices/matrix-bool/matrix-bool.essence +tests/custom/STARIS_2022/basic/matrices/matrix-bool/matrix-bool.solution +tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh +tests/custom/STARIS_2022/basic/matrices/matrix-bool/stdout.expected +tests/custom/STARIS_2022/basic/matrices/matrix-flatten/matrix-flatten.essence +tests/custom/STARIS_2022/basic/matrices/matrix-flatten/matrix-flatten.solution +tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh +tests/custom/STARIS_2022/basic/matrices/matrix-flatten/stdout.expected +tests/custom/STARIS_2022/basic/matrices/matrix-forAll/matrix-forAll.essence +tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh +tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected +tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stdout.expected +tests/custom/STARIS_2022/basic/matrices/matrix-index-error/matrix-index-error.essence +tests/custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh +tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected +tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stdout.expected +tests/custom/STARIS_2022/basic/maximising/max.essence +tests/custom/STARIS_2022/basic/maximising/max.solution +tests/custom/STARIS_2022/basic/maximising/run.sh +tests/custom/STARIS_2022/basic/maximising/stdout.expected +tests/custom/STARIS_2022/basic/modulus/mod01-000001.solution +tests/custom/STARIS_2022/basic/modulus/mod01-000002.solution +tests/custom/STARIS_2022/basic/modulus/mod01-000003.solution +tests/custom/STARIS_2022/basic/modulus/mod01-000004.solution +tests/custom/STARIS_2022/basic/modulus/mod01-000005.solution +tests/custom/STARIS_2022/basic/modulus/mod01.essence +tests/custom/STARIS_2022/basic/modulus/run.sh +tests/custom/STARIS_2022/basic/modulus/stdout.expected +tests/custom/STARIS_2022/basic/multiple-objective-error/multiple-objective.essence +tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh +tests/custom/STARIS_2022/basic/multiple-objective-error/stderr.expected +tests/custom/STARIS_2022/basic/multiple-objective-error/stdout.expected +tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/hist-type-error.essence +tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/run.sh +tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected +tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stdout.expected +tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.essence +tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.solution +tests/custom/STARIS_2022/basic/multiset-operators/hist/run.sh +tests/custom/STARIS_2022/basic/multiset-operators/hist/stdout.expected +tests/custom/STARIS_2022/basic/multiset-operators/max/max.essence +tests/custom/STARIS_2022/basic/multiset-operators/max/max.solution +tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh +tests/custom/STARIS_2022/basic/multiset-operators/max/stdout.expected +tests/custom/STARIS_2022/basic/multiset-operators/min/min.essence +tests/custom/STARIS_2022/basic/multiset-operators/min/min.solution +tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh +tests/custom/STARIS_2022/basic/multiset-operators/min/stdout.expected +tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/multiset-basic.essence +tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/multiset-basic.solution +tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/run.sh +tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/stdout.expected +tests/custom/STARIS_2022/basic/parameter-error/input.param +tests/custom/STARIS_2022/basic/parameter-error/parameter-error.essence +tests/custom/STARIS_2022/basic/parameter-error/run.sh +tests/custom/STARIS_2022/basic/parameter-error/stderr.expected +tests/custom/STARIS_2022/basic/parameter-error/stdout.expected +tests/custom/STARIS_2022/basic/parameter-simple/parameter.param +tests/custom/STARIS_2022/basic/parameter-simple/run.sh +tests/custom/STARIS_2022/basic/parameter-simple/simple-parameter.solution +tests/custom/STARIS_2022/basic/parameter-simple/simple.essence +tests/custom/STARIS_2022/basic/parameter-simple/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-01/apart.essence +tests/custom/STARIS_2022/basic/partitions/partition-01/apart.solution +tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-01/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-02/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-02/union.essence +tests/custom/STARIS_2022/basic/partitions/partition-02/union.solution +tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-03/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-03/union-nosolution.essence +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/set-apart.essence +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/set-participant.essence +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/set-parts-together.essence +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stdout.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/run.sh +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/set-party.essence +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected +tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stdout.expected +tests/custom/STARIS_2022/basic/pretty/pretty.essence +tests/custom/STARIS_2022/basic/pretty/run.sh +tests/custom/STARIS_2022/basic/pretty/stdout.expected +tests/custom/STARIS_2022/basic/record-simple/record.essence +tests/custom/STARIS_2022/basic/record-simple/record.solution +tests/custom/STARIS_2022/basic/record-simple/run.sh +tests/custom/STARIS_2022/basic/record-simple/stdout.expected +tests/custom/STARIS_2022/basic/record-type-error/record.essence +tests/custom/STARIS_2022/basic/record-type-error/run.sh +tests/custom/STARIS_2022/basic/record-type-error/stderr.expected +tests/custom/STARIS_2022/basic/record-type-error/stdout.expected +tests/custom/STARIS_2022/basic/set-comprehension/run.sh +tests/custom/STARIS_2022/basic/set-comprehension/set.essence +tests/custom/STARIS_2022/basic/set-comprehension/set.solution +tests/custom/STARIS_2022/basic/set-comprehension/stdout.expected +tests/custom/STARIS_2022/basic/set-operators/basic-set/basic-set.essence +tests/custom/STARIS_2022/basic/set-operators/basic-set/basic-set.solution +tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh +tests/custom/STARIS_2022/basic/set-operators/basic-set/stdout.expected +tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/in-type-error.essence +tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/run.sh +tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stderr.expected +tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stdout.expected +tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/in.essence +tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/run.sh +tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected +tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stdout.expected +tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/in.essence +tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/run.sh +tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected +tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stdout.expected +tests/custom/STARIS_2022/basic/set-with-attributes/run.sh +tests/custom/STARIS_2022/basic/set-with-attributes/set.essence +tests/custom/STARIS_2022/basic/set-with-attributes/set.solution +tests/custom/STARIS_2022/basic/set-with-attributes/stdout.expected +tests/custom/STARIS_2022/basic/set01/run.sh +tests/custom/STARIS_2022/basic/set01/set.essence +tests/custom/STARIS_2022/basic/set01/set.solution +tests/custom/STARIS_2022/basic/set01/stdout.expected +tests/custom/STARIS_2022/basic/simple-assignment/run.sh +tests/custom/STARIS_2022/basic/simple-assignment/simple.essence +tests/custom/STARIS_2022/basic/simple-assignment/simple.solution +tests/custom/STARIS_2022/basic/simple-assignment/stdout.expected +tests/custom/STARIS_2022/basic/such-that/run.sh +tests/custom/STARIS_2022/basic/such-that/stdout.expected +tests/custom/STARIS_2022/basic/such-that/such-that.essence +tests/custom/STARIS_2022/basic/such-that/such-that.solution +tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/addition.essence +tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh +tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected +tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stdout.expected +tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh +tests/custom/STARIS_2022/basic/tuples/tuple-basic/stdout.expected +tests/custom/STARIS_2022/basic/tuples/tuple-basic/tuple.essence +tests/custom/STARIS_2022/basic/tuples/tuple-basic/tuple.solution +tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/bound.essence +tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh +tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected +tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected +tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh +tests/custom/STARIS_2022/basic/tuples/tuple-index/stdout.expected +tests/custom/STARIS_2022/basic/tuples/tuple-index/tuple.essence +tests/custom/STARIS_2022/basic/tuples/tuple-index/tuple.solution +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/run.sh +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/stdout.expected +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/toInt.essence +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/toInt.solution +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/run.sh +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stdout.expected +tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/toInt-error.essence +tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/run.sh +tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/stdout.expected +tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/toMSet.essence +tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/toMSet.solution +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/run.sh +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/stdout.expected +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/toSet.essence +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/toSet.solution +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/run.sh +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/stdout.expected +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/toSet-sum.essence +tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/toSet-sum.solution +tests/custom/STARIS_2022/demo/first_test/first.essence +tests/custom/STARIS_2022/demo/first_test/first.solution +tests/custom/STARIS_2022/demo/first_test/run.sh +tests/custom/STARIS_2022/demo/first_test/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/allDiff-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/allDiffExcept-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/allDiffExcept-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/and-type-error/and-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/and-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/and-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/apart-type-error/apart-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/apart-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/defined-type-error/defined-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/defined-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/factorial-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/flatten-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/flatten-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/freq-type-error/freq-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/freq-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/hist-type-error/hist-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/hist-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/in-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/in-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/inverse-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/max-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/max-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/min-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/min-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/negate-type-error/negate-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/negate-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/not-type-error/not-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/not-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/not-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/or-type-error/or-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/or-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/or-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/participants-type-error/participants-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/participants-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/parts-type-error/parts-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/parts-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/party-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/party-type-error.solution +tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/party-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/party-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/run.sh +tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/powerSet-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/pred-type-error/pred-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/pred-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/product-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/product-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/range-type-error/range-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/range-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/range-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/restrict-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/subsequence-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/substring-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/substring-type-error/substring-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/succ-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/succ-type-error/succ-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/run.sh +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/sum-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/run.sh +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/sum-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/toInt-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/toMSet-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/toSet-type-error.essence +tests/custom/STARIS_2022/operation-type-errors/xor-type-error/run.sh +tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected +tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stdout.expected +tests/custom/STARIS_2022/operation-type-errors/xor-type-error/xor-type-error.essence +tests/custom/STARIS_2022/symmetry-detection/allDiff-symmetry-detection/allDiff-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/allDiff-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/allDiff-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/allDiffExcept-symmetry-detection/allDiffExcept-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/allDiffExcept-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/allDiffExcept-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/and-symmetry-detection/and-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/and-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/and-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/apart-symmetry-detection/apart-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/apart-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/apart-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/defined-symmetry-detection/defined-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/defined-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/defined-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/div-symmetry-detection/div-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/div-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/div-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/eq-symmetry-detection/eq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/eq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/eq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/factorial-symmetry-detection/factorial-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/factorial-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/factorial-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/flatten-symmetry-detection/flatten-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/flatten-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/flatten-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/freq-symmetry-detection/freq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/freq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/freq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/geq-symmetry-detection/geq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/geq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/geq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/gt-symmetry-detection/gt-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/gt-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/gt-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/hist-symmetry-detection/hist-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/hist-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/hist-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/in-symmetry-detection/in-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/in-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/in-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/intersect-symmetry-detection/intersect-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/intersect-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/intersect-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/inverse-symmetry-detection/inverse-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/inverse-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/inverse-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/leq-symmetry-detection/leq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/leq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/leq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/lt-symmetry-detection/lt-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/lt-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/lt-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/max-symmetry-detection/max-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/max-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/max-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/min-symmetry-detection/min-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/min-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/min-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/minus-symmetry-detection/minus-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/minus-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/minus-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/mod-symmetry-detection/mod-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/mod-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/mod-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/negate-symmetry-detection/negate-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/negate-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/negate-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/neq-symmetry-detection/neq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/neq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/neq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/not-symmetry-detection/not-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/not-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/not-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/or-symmetry-detection/or-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/or-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/or-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/participants-symmetry-detection/participants-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/participants-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/participants-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/parts-symmetry-detection/parts-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/parts-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/parts-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/party-symmetry-detection/party-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/party-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/party-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/pow-symmetry-detection/pow-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/pow-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/pow-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/powerSet-symmetry-detection/powerSet-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/powerSet-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/powerSet-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/pred-symmetry-detection/pred-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/pred-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/pred-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/product-symmetry-detection/product-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/product-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/product-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/range-symmetry-detection/range-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/range-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/range-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/restrict-symmetry-detection/restrict-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/restrict-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/restrict-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/subsequence-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/subsequence-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/subsequence-symmetry-detection/subsequence-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/subset-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/subset-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/subset-symmetry-detection/subset-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/subsetEq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/subsetEq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/subsetEq-symmetry-detection/subsetEq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/substring-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/substring-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/substring-symmetry-detection/substring-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/succ-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/succ-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/succ-symmetry-detection/succ-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/sum-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/sum-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/sum-symmetry-detection/sum-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/supset-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/supset-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/supset-symmetry-detection/supset-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/supsetEq-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/supsetEq-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/supsetEq-symmetry-detection/supsetEq-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/toInt-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/toInt-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/toInt-symmetry-detection/toInt-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/toMSet-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/toMSet-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/toMSet-symmetry-detection/toMSet-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/toRelation-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/toRelation-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/toRelation-symmetry-detection/toRelation-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/toSet-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/toSet-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/toSet-symmetry-detection/toSet-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/together-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/together-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/together-symmetry-detection/together-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/union-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/union-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/union-symmetry-detection/union-symmetry-detection.essence +tests/custom/STARIS_2022/symmetry-detection/xor-symmetry-detection/run.sh +tests/custom/STARIS_2022/symmetry-detection/xor-symmetry-detection/stdout.expected +tests/custom/STARIS_2022/symmetry-detection/xor-symmetry-detection/xor-symmetry-detection.essence +tests/custom/acceptOutput.sh +tests/custom/allDiffDecomp/1/allDiffDecomp.essence +tests/custom/allDiffDecomp/1/run.sh +tests/custom/allDiffDecomp/1/stdout.expected +tests/custom/allDiffDecomp/2/allDiffDecomp.essence +tests/custom/allDiffDecomp/2/run.sh +tests/custom/allDiffDecomp/2/stdout.expected +tests/custom/autoig/generator-to-irace/warns/run.sh +tests/custom/autoig/generator-to-irace/warns/stderr.expected +tests/custom/autoig/generator-to-irace/warns/warns.essence +tests/custom/autoig/generator-to-irace/works/run.sh +tests/custom/autoig/generator-to-irace/works/stdout.expected +tests/custom/autoig/generator-to-irace/works/works.essence +tests/custom/basic/comprehension-cardinality/comp.essence +tests/custom/basic/comprehension-cardinality/comp.solution +tests/custom/basic/comprehension-cardinality/run.sh +tests/custom/basic/comprehension-cardinality/stdout.expected +tests/custom/basic/enum_duplicate_name/e.essence +tests/custom/basic/enum_duplicate_name/run.sh +tests/custom/basic/enum_duplicate_name/stderr.expected +tests/custom/basic/enum_duplicate_name/stdout.expected +tests/custom/basic/enum_functions/enum_functions.essence +tests/custom/basic/enum_functions/expected-time.txt +tests/custom/basic/enum_functions/p1.param +tests/custom/basic/enum_functions/run.sh +tests/custom/basic/enum_functions/stdout.expected +tests/custom/basic/enumerate_enum_domain/e.essence +tests/custom/basic/enumerate_enum_domain/run.sh +tests/custom/basic/enumerate_enum_domain/stdout.expected +tests/custom/basic/function-literal-suggestion/func.essence +tests/custom/basic/function-literal-suggestion/p.param +tests/custom/basic/function-literal-suggestion/run.sh +tests/custom/basic/function-literal-suggestion/stderr.expected +tests/custom/basic/function-literal-suggestion/stdout.expected +tests/custom/basic/function_card_01/function_card_01.essence +tests/custom/basic/function_card_01/run.sh +tests/custom/basic/function_card_01/stdout.expected +tests/custom/basic/function_card_02/function_card_02.essence +tests/custom/basic/function_card_02/run.sh +tests/custom/basic/function_card_02/stdout.expected +tests/custom/basic/function_imageSet01/expected-time.txt +tests/custom/basic/function_imageSet01/function_imageSet01.essence +tests/custom/basic/function_imageSet01/run.sh +tests/custom/basic/function_imageSet01/stdout.expected +tests/custom/basic/function_inverse_01/expected-time.txt +tests/custom/basic/function_inverse_01/function_inverse_01.essence +tests/custom/basic/function_inverse_01/run.sh +tests/custom/basic/function_inverse_01/stdout.expected +tests/custom/basic/function_partial_int_01/function_partial_int_01.essence +tests/custom/basic/function_partial_int_01/run.sh +tests/custom/basic/function_partial_int_01/stdout.expected +tests/custom/basic/function_partial_int_02/function_partial_int_02.essence +tests/custom/basic/function_partial_int_02/run.sh +tests/custom/basic/function_partial_int_02/stdout.expected +tests/custom/basic/function_partial_int_03/function_partial_int_03.essence +tests/custom/basic/function_partial_int_03/run.sh +tests/custom/basic/function_partial_int_03/stdout.expected +tests/custom/basic/function_partial_int_04/function_partial_int_04.essence +tests/custom/basic/function_partial_int_04/run.sh +tests/custom/basic/function_partial_int_04/stdout.expected +tests/custom/basic/function_partial_int_05/function_partial_int_05.essence +tests/custom/basic/function_partial_int_05/run.sh +tests/custom/basic/function_partial_int_05/stdout.expected +tests/custom/basic/function_partial_int_06/function_partial_int_06.essence +tests/custom/basic/function_partial_int_06/run.sh +tests/custom/basic/function_partial_int_06/stderr.expected +tests/custom/basic/function_partial_int_06/stdout.expected +tests/custom/basic/function_partial_int_param/function_partial_int_param.essence +tests/custom/basic/function_partial_int_param/param000181.param +tests/custom/basic/function_partial_int_param/run.sh +tests/custom/basic/function_partial_int_param/stdout.expected +tests/custom/basic/function_partial_tuple_01/function_partial_tuple_01.essence +tests/custom/basic/function_partial_tuple_01/run.sh +tests/custom/basic/function_partial_tuple_01/stdout.expected +tests/custom/basic/given-seq-seq/run.sh +tests/custom/basic/given-seq-seq/seqseq.essence +tests/custom/basic/given-seq-seq/seqseq.param +tests/custom/basic/given-seq-seq/stdout.expected +tests/custom/basic/matrix-slicing/run.sh +tests/custom/basic/matrix-slicing/slice.essence +tests/custom/basic/matrix-slicing/stdout.expected +tests/custom/basic/modelling-cache/2.param +tests/custom/basic/modelling-cache/example.essence +tests/custom/basic/modelling-cache/run.sh +tests/custom/basic/modelling-cache/stdout.expected +tests/custom/basic/multiple-branching-on/run.sh +tests/custom/basic/multiple-branching-on/stderr.expected +tests/custom/basic/multiple-branching-on/test.essence +tests/custom/basic/multiple-heuristic/run.sh +tests/custom/basic/multiple-heuristic/stderr.expected +tests/custom/basic/multiple-heuristic/test.essence +tests/custom/basic/multiple-objectives/run.sh +tests/custom/basic/multiple-objectives/stderr.expected +tests/custom/basic/multiple-objectives/test.essence +tests/custom/basic/parsing-enums-in-param/knapsack.essence +tests/custom/basic/parsing-enums-in-param/knapsack.param +tests/custom/basic/parsing-enums-in-param/run.sh +tests/custom/basic/parsing-enums-in-param/stdout.expected +tests/custom/basic/parsing-imply/1_noparens.essence +tests/custom/basic/parsing-imply/2_leftparens.essence +tests/custom/basic/parsing-imply/3_rightparens.essence +tests/custom/basic/parsing-imply/4_mixparens.essence +tests/custom/basic/parsing-imply/run.sh +tests/custom/basic/parsing-imply/stdout.expected +tests/custom/basic/partition_together_apart/expected-time.txt +tests/custom/basic/partition_together_apart/partition_together_apart.essence +tests/custom/basic/partition_together_apart/run.sh +tests/custom/basic/partition_together_apart/stdout.expected +tests/custom/basic/restricted01/restricted01.essence +tests/custom/basic/restricted01/run.sh +tests/custom/basic/restricted01/stdout.expected +tests/custom/basic/restricted02/restricted02.essence +tests/custom/basic/restricted02/run.sh +tests/custom/basic/restricted02/stdout.expected +tests/custom/basic/restricted03/restricted03.essence +tests/custom/basic/restricted03/run.sh +tests/custom/basic/restricted03/stdout.expected +tests/custom/basic/restricted04/restricted04.essence +tests/custom/basic/restricted04/run.sh +tests/custom/basic/restricted04/stdout.expected +tests/custom/basic/sat-branching-on/run.sh +tests/custom/basic/sat-branching-on/sbo.essence +tests/custom/basic/sat-branching-on/stdout.expected +tests/custom/basic/seqset/run.sh +tests/custom/basic/seqset/seqset.essence +tests/custom/basic/seqset/stdout.expected +tests/custom/basic/sequence-injective/run.sh +tests/custom/basic/sequence-injective/sequence-injective.essence +tests/custom/basic/sequence-injective/stdout.expected +tests/custom/basic/set-of-tuples-of-enum/run.sh +tests/custom/basic/set-of-tuples-of-enum/set-of-tuples.essence +tests/custom/basic/set-of-tuples-of-enum/stdout.expected +tests/custom/basic/set-of-tuples-of-int/run.sh +tests/custom/basic/set-of-tuples-of-int/set-of-tuples.essence +tests/custom/basic/set-of-tuples-of-int/stdout.expected +tests/custom/basic/set-of-tuples-of-unnamed/run.sh +tests/custom/basic/set-of-tuples-of-unnamed/set-of-tuples.essence +tests/custom/basic/set-of-tuples-of-unnamed/stdout.expected +tests/custom/basic/set-size-fixed-of-tuples-of-enum/run.sh +tests/custom/basic/set-size-fixed-of-tuples-of-enum/set-of-tuples.essence +tests/custom/basic/set-size-fixed-of-tuples-of-enum/stdout.expected +tests/custom/basic/solutionsInOneFile/run.sh +tests/custom/basic/solutionsInOneFile/stdout.expected +tests/custom/basic/solutionsInOneFile/test.essence +tests/custom/basic/streamline01/expected-time.txt +tests/custom/basic/streamline01/run.sh +tests/custom/basic/streamline01/stdout.expected +tests/custom/basic/streamline01/streamline01.essence +tests/custom/boost/domain/nested1-mset/mset-maxOccur/1.essence +tests/custom/boost/domain/nested1-mset/mset-maxOccur/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-maxSize/1.essence +tests/custom/boost/domain/nested1-mset/mset-maxSize/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-maxSize/2.essence +tests/custom/boost/domain/nested1-mset/mset-maxSize/2.output.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur-maxOccur/1.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur-maxOccur/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/1.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/2.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/2.output.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur/1.essence +tests/custom/boost/domain/nested1-mset/mset-minOccur/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/1.essence +tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/2.essence +tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested1-mset/mset-minSize/1.essence +tests/custom/boost/domain/nested1-mset/mset-minSize/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-minSize/2.essence +tests/custom/boost/domain/nested1-mset/mset-minSize/2.output.essence +tests/custom/boost/domain/nested1-mset/mset-size/1.essence +tests/custom/boost/domain/nested1-mset/mset-size/1.output.essence +tests/custom/boost/domain/nested1-mset/mset-size/2.essence +tests/custom/boost/domain/nested1-mset/mset-size/2.output.essence +tests/custom/boost/domain/nested1-mset/partition-maxNumParts/1.essence +tests/custom/boost/domain/nested1-mset/partition-maxNumParts/1.output.essence +tests/custom/boost/domain/nested1-mset/partition-maxPartSize/1.essence +tests/custom/boost/domain/nested1-mset/partition-maxPartSize/1.output.essence +tests/custom/boost/domain/nested1-mset/partition-minNumParts/1.essence +tests/custom/boost/domain/nested1-mset/partition-minNumParts/1.output.essence +tests/custom/boost/domain/nested1-mset/partition-minPartSize/1.essence +tests/custom/boost/domain/nested1-mset/partition-minPartSize/1.output.essence +tests/custom/boost/domain/nested1-mset/partition-numParts/1.essence +tests/custom/boost/domain/nested1-mset/partition-numParts/1.output.essence +tests/custom/boost/domain/nested1-mset/partition-partSize/1.essence +tests/custom/boost/domain/nested1-mset/partition-partSize/1.output.essence +tests/custom/boost/domain/nested1-mset/partition-regular/1.essence +tests/custom/boost/domain/nested1-mset/partition-regular/1.output.essence +tests/custom/boost/domain/nested1-mset/relation-maxSize/1.essence +tests/custom/boost/domain/nested1-mset/relation-maxSize/1.output.essence +tests/custom/boost/domain/nested1-mset/relation-maxSize/2.essence +tests/custom/boost/domain/nested1-mset/relation-maxSize/2.output.essence +tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/1.essence +tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/2.essence +tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested1-mset/relation-minSize/1.essence +tests/custom/boost/domain/nested1-mset/relation-minSize/1.output.essence +tests/custom/boost/domain/nested1-mset/relation-minSize/2.essence +tests/custom/boost/domain/nested1-mset/relation-minSize/2.output.essence +tests/custom/boost/domain/nested1-mset/relation-size/1.essence +tests/custom/boost/domain/nested1-mset/relation-size/1.output.essence +tests/custom/boost/domain/nested1-mset/relation-size/2.essence +tests/custom/boost/domain/nested1-mset/relation-size/2.output.essence +tests/custom/boost/domain/nested1-mset/relation-size/3.essence +tests/custom/boost/domain/nested1-mset/relation-size/3.output.essence +tests/custom/boost/domain/nested1-mset/set-maxSize/1.essence +tests/custom/boost/domain/nested1-mset/set-maxSize/1.output.essence +tests/custom/boost/domain/nested1-mset/set-maxSize/2.essence +tests/custom/boost/domain/nested1-mset/set-maxSize/2.output.essence +tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/1.essence +tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/2.essence +tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested1-mset/set-minSize/1.essence +tests/custom/boost/domain/nested1-mset/set-minSize/1.output.essence +tests/custom/boost/domain/nested1-mset/set-minSize/2.essence +tests/custom/boost/domain/nested1-mset/set-minSize/2.output.essence +tests/custom/boost/domain/nested1-mset/set-size/1.essence +tests/custom/boost/domain/nested1-mset/set-size/1.output.essence +tests/custom/boost/domain/nested1-mset/set-size/2.essence +tests/custom/boost/domain/nested1-mset/set-size/2.output.essence +tests/custom/boost/domain/nested1-mset/set-size/3.essence +tests/custom/boost/domain/nested1-mset/set-size/3.output.essence +tests/custom/boost/domain/nested1-set/mset-maxOccur/1.essence +tests/custom/boost/domain/nested1-set/mset-maxOccur/1.output.essence +tests/custom/boost/domain/nested1-set/mset-maxSize/1.essence +tests/custom/boost/domain/nested1-set/mset-maxSize/1.output.essence +tests/custom/boost/domain/nested1-set/mset-maxSize/2.essence +tests/custom/boost/domain/nested1-set/mset-maxSize/2.output.essence +tests/custom/boost/domain/nested1-set/mset-minOccur-maxOccur/1.essence +tests/custom/boost/domain/nested1-set/mset-minOccur-maxOccur/1.output.essence +tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/1.essence +tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/1.output.essence +tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/2.essence +tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/2.output.essence +tests/custom/boost/domain/nested1-set/mset-minOccur/1.essence +tests/custom/boost/domain/nested1-set/mset-minOccur/1.output.essence +tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/1.essence +tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/2.essence +tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested1-set/mset-minSize/1.essence +tests/custom/boost/domain/nested1-set/mset-minSize/1.output.essence +tests/custom/boost/domain/nested1-set/mset-minSize/2.essence +tests/custom/boost/domain/nested1-set/mset-minSize/2.output.essence +tests/custom/boost/domain/nested1-set/mset-size/1.essence +tests/custom/boost/domain/nested1-set/mset-size/1.output.essence +tests/custom/boost/domain/nested1-set/mset-size/2.essence +tests/custom/boost/domain/nested1-set/mset-size/2.output.essence +tests/custom/boost/domain/nested1-set/partition-maxNumParts/1.essence +tests/custom/boost/domain/nested1-set/partition-maxNumParts/1.output.essence +tests/custom/boost/domain/nested1-set/partition-maxPartSize/1.essence +tests/custom/boost/domain/nested1-set/partition-maxPartSize/1.output.essence +tests/custom/boost/domain/nested1-set/partition-minNumParts/1.essence +tests/custom/boost/domain/nested1-set/partition-minNumParts/1.output.essence +tests/custom/boost/domain/nested1-set/partition-minPartSize/1.essence +tests/custom/boost/domain/nested1-set/partition-minPartSize/1.output.essence +tests/custom/boost/domain/nested1-set/partition-numParts/1.essence +tests/custom/boost/domain/nested1-set/partition-numParts/1.output.essence +tests/custom/boost/domain/nested1-set/partition-partSize/1.essence +tests/custom/boost/domain/nested1-set/partition-partSize/1.output.essence +tests/custom/boost/domain/nested1-set/partition-regular/1.essence +tests/custom/boost/domain/nested1-set/partition-regular/1.output.essence +tests/custom/boost/domain/nested1-set/relation-maxSize/1.essence +tests/custom/boost/domain/nested1-set/relation-maxSize/1.output.essence +tests/custom/boost/domain/nested1-set/relation-maxSize/2.essence +tests/custom/boost/domain/nested1-set/relation-maxSize/2.output.essence +tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/1.essence +tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/2.essence +tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested1-set/relation-minSize/1.essence +tests/custom/boost/domain/nested1-set/relation-minSize/1.output.essence +tests/custom/boost/domain/nested1-set/relation-minSize/2.essence +tests/custom/boost/domain/nested1-set/relation-minSize/2.output.essence +tests/custom/boost/domain/nested1-set/relation-size/1.essence +tests/custom/boost/domain/nested1-set/relation-size/1.output.essence +tests/custom/boost/domain/nested1-set/relation-size/2.essence +tests/custom/boost/domain/nested1-set/relation-size/2.output.essence +tests/custom/boost/domain/nested1-set/relation-size/3.essence +tests/custom/boost/domain/nested1-set/relation-size/3.output.essence +tests/custom/boost/domain/nested1-set/set-maxSize/1.essence +tests/custom/boost/domain/nested1-set/set-maxSize/1.output.essence +tests/custom/boost/domain/nested1-set/set-maxSize/2.essence +tests/custom/boost/domain/nested1-set/set-maxSize/2.output.essence +tests/custom/boost/domain/nested1-set/set-minSize-maxSize/1.essence +tests/custom/boost/domain/nested1-set/set-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested1-set/set-minSize-maxSize/2.essence +tests/custom/boost/domain/nested1-set/set-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested1-set/set-minSize/1.essence +tests/custom/boost/domain/nested1-set/set-minSize/1.output.essence +tests/custom/boost/domain/nested1-set/set-minSize/2.essence +tests/custom/boost/domain/nested1-set/set-minSize/2.output.essence +tests/custom/boost/domain/nested1-set/set-size/1.essence +tests/custom/boost/domain/nested1-set/set-size/1.output.essence +tests/custom/boost/domain/nested1-set/set-size/2.essence +tests/custom/boost/domain/nested1-set/set-size/2.output.essence +tests/custom/boost/domain/nested1-set/set-size/3.essence +tests/custom/boost/domain/nested1-set/set-size/3.output.essence +tests/custom/boost/domain/nested2-set-mset/set-mset/1.essence +tests/custom/boost/domain/nested2-set-mset/set-mset/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-maxOccur/1.essence +tests/custom/boost/domain/nested2-set-set/mset-maxOccur/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-maxSize/1.essence +tests/custom/boost/domain/nested2-set-set/mset-maxSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-maxSize/2.essence +tests/custom/boost/domain/nested2-set-set/mset-maxSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur-maxOccur/1.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur-maxOccur/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/1.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/2.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur/1.essence +tests/custom/boost/domain/nested2-set-set/mset-minOccur/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/1.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/2.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize/1.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize/2.essence +tests/custom/boost/domain/nested2-set-set/mset-minSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/mset-size/1.essence +tests/custom/boost/domain/nested2-set-set/mset-size/1.output.essence +tests/custom/boost/domain/nested2-set-set/mset-size/2.essence +tests/custom/boost/domain/nested2-set-set/mset-size/2.output.essence +tests/custom/boost/domain/nested2-set-set/partition-maxNumParts/1.essence +tests/custom/boost/domain/nested2-set-set/partition-maxNumParts/1.output.essence +tests/custom/boost/domain/nested2-set-set/partition-maxPartSize/1.essence +tests/custom/boost/domain/nested2-set-set/partition-maxPartSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/partition-minNumParts/1.essence +tests/custom/boost/domain/nested2-set-set/partition-minNumParts/1.output.essence +tests/custom/boost/domain/nested2-set-set/partition-minPartSize/1.essence +tests/custom/boost/domain/nested2-set-set/partition-minPartSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/partition-numParts/1.essence +tests/custom/boost/domain/nested2-set-set/partition-numParts/1.output.essence +tests/custom/boost/domain/nested2-set-set/partition-partSize/1.essence +tests/custom/boost/domain/nested2-set-set/partition-partSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/partition-regular/1.essence +tests/custom/boost/domain/nested2-set-set/partition-regular/1.output.essence +tests/custom/boost/domain/nested2-set-set/relation-maxSize/1.essence +tests/custom/boost/domain/nested2-set-set/relation-maxSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/relation-maxSize/2.essence +tests/custom/boost/domain/nested2-set-set/relation-maxSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/1.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/2.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize/1.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize/2.essence +tests/custom/boost/domain/nested2-set-set/relation-minSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/relation-size/1.essence +tests/custom/boost/domain/nested2-set-set/relation-size/1.output.essence +tests/custom/boost/domain/nested2-set-set/relation-size/2.essence +tests/custom/boost/domain/nested2-set-set/relation-size/2.output.essence +tests/custom/boost/domain/nested2-set-set/relation-size/3.essence +tests/custom/boost/domain/nested2-set-set/relation-size/3.output.essence +tests/custom/boost/domain/nested2-set-set/set-maxSize/1.essence +tests/custom/boost/domain/nested2-set-set/set-maxSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/set-maxSize/2.essence +tests/custom/boost/domain/nested2-set-set/set-maxSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/1.essence +tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/2.essence +tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/set-minSize/1.essence +tests/custom/boost/domain/nested2-set-set/set-minSize/1.output.essence +tests/custom/boost/domain/nested2-set-set/set-minSize/2.essence +tests/custom/boost/domain/nested2-set-set/set-minSize/2.output.essence +tests/custom/boost/domain/nested2-set-set/set-size/1.essence +tests/custom/boost/domain/nested2-set-set/set-size/1.output.essence +tests/custom/boost/domain/nested2-set-set/set-size/2.essence +tests/custom/boost/domain/nested2-set-set/set-size/2.output.essence +tests/custom/boost/domain/nested2-set-set/set-size/3.essence +tests/custom/boost/domain/nested2-set-set/set-size/3.output.essence +tests/custom/boost/domain/not-nested/function-total/1.essence +tests/custom/boost/domain/not-nested/function-total/1.output.essence +tests/custom/boost/domain/not-nested/mset-maxOccur/1.essence +tests/custom/boost/domain/not-nested/mset-maxOccur/1.output.essence +tests/custom/boost/domain/not-nested/mset-maxSize/1.essence +tests/custom/boost/domain/not-nested/mset-maxSize/1.output.essence +tests/custom/boost/domain/not-nested/mset-maxSize/2.essence +tests/custom/boost/domain/not-nested/mset-maxSize/2.output.essence +tests/custom/boost/domain/not-nested/mset-minOccur-maxOccur/1.essence +tests/custom/boost/domain/not-nested/mset-minOccur-maxOccur/1.output.essence +tests/custom/boost/domain/not-nested/mset-minOccur-minSize/1.essence +tests/custom/boost/domain/not-nested/mset-minOccur-minSize/1.output.essence +tests/custom/boost/domain/not-nested/mset-minOccur-minSize/2.essence +tests/custom/boost/domain/not-nested/mset-minOccur-minSize/2.output.essence +tests/custom/boost/domain/not-nested/mset-minOccur/1.essence +tests/custom/boost/domain/not-nested/mset-minOccur/1.output.essence +tests/custom/boost/domain/not-nested/mset-minSize-maxSize/1.essence +tests/custom/boost/domain/not-nested/mset-minSize-maxSize/1.output.essence +tests/custom/boost/domain/not-nested/mset-minSize-maxSize/2.essence +tests/custom/boost/domain/not-nested/mset-minSize-maxSize/2.output.essence +tests/custom/boost/domain/not-nested/mset-minSize/1.essence +tests/custom/boost/domain/not-nested/mset-minSize/1.output.essence +tests/custom/boost/domain/not-nested/mset-minSize/2.essence +tests/custom/boost/domain/not-nested/mset-minSize/2.output.essence +tests/custom/boost/domain/not-nested/mset-size/1.essence +tests/custom/boost/domain/not-nested/mset-size/1.output.essence +tests/custom/boost/domain/not-nested/mset-size/2.essence +tests/custom/boost/domain/not-nested/mset-size/2.output.essence +tests/custom/boost/domain/not-nested/partition-maxNumParts/1.essence +tests/custom/boost/domain/not-nested/partition-maxNumParts/1.output.essence +tests/custom/boost/domain/not-nested/partition-maxPartSize/1.essence +tests/custom/boost/domain/not-nested/partition-maxPartSize/1.output.essence +tests/custom/boost/domain/not-nested/partition-minNumParts/1.essence +tests/custom/boost/domain/not-nested/partition-minNumParts/1.output.essence +tests/custom/boost/domain/not-nested/partition-minPartSize/1.essence +tests/custom/boost/domain/not-nested/partition-minPartSize/1.output.essence +tests/custom/boost/domain/not-nested/partition-numParts/1.essence +tests/custom/boost/domain/not-nested/partition-numParts/1.output.essence +tests/custom/boost/domain/not-nested/partition-partSize/1.essence +tests/custom/boost/domain/not-nested/partition-partSize/1.output.essence +tests/custom/boost/domain/not-nested/partition-regular/1.essence +tests/custom/boost/domain/not-nested/partition-regular/1.output.essence +tests/custom/boost/domain/not-nested/relation-maxSize/1.essence +tests/custom/boost/domain/not-nested/relation-maxSize/1.output.essence +tests/custom/boost/domain/not-nested/relation-maxSize/2.essence +tests/custom/boost/domain/not-nested/relation-maxSize/2.output.essence +tests/custom/boost/domain/not-nested/relation-minSize-maxSize/1.essence +tests/custom/boost/domain/not-nested/relation-minSize-maxSize/1.output.essence +tests/custom/boost/domain/not-nested/relation-minSize-maxSize/2.essence +tests/custom/boost/domain/not-nested/relation-minSize-maxSize/2.output.essence +tests/custom/boost/domain/not-nested/relation-minSize/1.essence +tests/custom/boost/domain/not-nested/relation-minSize/1.output.essence +tests/custom/boost/domain/not-nested/relation-minSize/2.essence +tests/custom/boost/domain/not-nested/relation-minSize/2.output.essence +tests/custom/boost/domain/not-nested/relation-size/1.essence +tests/custom/boost/domain/not-nested/relation-size/1.output.essence +tests/custom/boost/domain/not-nested/relation-size/2.essence +tests/custom/boost/domain/not-nested/relation-size/2.output.essence +tests/custom/boost/domain/not-nested/relation-size/3.essence +tests/custom/boost/domain/not-nested/relation-size/3.output.essence +tests/custom/boost/domain/not-nested/set-maxSize/1.essence +tests/custom/boost/domain/not-nested/set-maxSize/1.output.essence +tests/custom/boost/domain/not-nested/set-maxSize/2.essence +tests/custom/boost/domain/not-nested/set-maxSize/2.output.essence +tests/custom/boost/domain/not-nested/set-minSize-maxSize/1.essence +tests/custom/boost/domain/not-nested/set-minSize-maxSize/1.output.essence +tests/custom/boost/domain/not-nested/set-minSize-maxSize/2.essence +tests/custom/boost/domain/not-nested/set-minSize-maxSize/2.output.essence +tests/custom/boost/domain/not-nested/set-minSize/1.essence +tests/custom/boost/domain/not-nested/set-minSize/1.output.essence +tests/custom/boost/domain/not-nested/set-minSize/2.essence +tests/custom/boost/domain/not-nested/set-minSize/2.output.essence +tests/custom/boost/domain/not-nested/set-size/1.essence +tests/custom/boost/domain/not-nested/set-size/1.output.essence +tests/custom/boost/domain/not-nested/set-size/2.essence +tests/custom/boost/domain/not-nested/set-size/2.output.essence +tests/custom/boost/domain/not-nested/set-size/3.essence +tests/custom/boost/domain/not-nested/set-size/3.output.essence +tests/custom/boost/eval.sh +tests/custom/boost/expected-time.txt +tests/custom/boost/run.sh +tests/custom/boost/type/mset-to-set/1.essence +tests/custom/boost/type/mset-to-set/1.output.essence +tests/custom/boost/type/mset-to-set/2.essence +tests/custom/boost/type/mset-to-set/2.output.essence +tests/custom/boost/type/mset-to-set/3.essence +tests/custom/boost/type/mset-to-set/3.output.essence +tests/custom/boost/type/relation-to-function/because-assigned-1.essence +tests/custom/boost/type/relation-to-function/because-assigned-1.output.essence +tests/custom/boost/type/relation-to-function/partial-functional-on1-andMaxSize.essence +tests/custom/boost/type/relation-to-function/partial-functional-on1-andMaxSize.output.essence +tests/custom/boost/type/relation-to-function/partial-functional-on1.essence +tests/custom/boost/type/relation-to-function/partial-functional-on1.output.essence +tests/custom/boost/type/relation-to-function/partial-functional-on2.essence +tests/custom/boost/type/relation-to-function/partial-functional-on2.output.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-1.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-1.output.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-12.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-12.output.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-13.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-13.output.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-2.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-2.output.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-23.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-23.output.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-3.essence +tests/custom/boost/type/relation-to-function/partial-relation-123-3.output.essence +tests/custom/boost/type/relation-to-function/total-functional-on1.essence +tests/custom/boost/type/relation-to-function/total-functional-on1.output.essence +tests/custom/boost/type/relation-to-function/total-functional-on2.essence +tests/custom/boost/type/relation-to-function/total-functional-on2.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-1.essence +tests/custom/boost/type/relation-to-function/total-relation-123-1.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-12.essence +tests/custom/boost/type/relation-to-function/total-relation-123-12.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-13-andStuff.essence +tests/custom/boost/type/relation-to-function/total-relation-123-13-andStuff.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-13.essence +tests/custom/boost/type/relation-to-function/total-relation-123-13.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-2.essence +tests/custom/boost/type/relation-to-function/total-relation-123-2.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-23.essence +tests/custom/boost/type/relation-to-function/total-relation-123-23.output.essence +tests/custom/boost/type/relation-to-function/total-relation-123-3.essence +tests/custom/boost/type/relation-to-function/total-relation-123-3.output.essence +tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/matrix.essence +tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/matrix.essence +tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/matrix.essence +tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh +tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/matrix.essence +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/matrix.param +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/matrix.essence +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/matrix.param +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/matrix.essence +tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/matrix.param +tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/tuple.param +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/tuple.param +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/tuple.param +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/tuple.param +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/tuple.param +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/stdout.expected +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/tuple.essence +tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/tuple.param +tests/custom/graphs/shortest_path/01/graph_connected.essence +tests/custom/graphs/shortest_path/01/run.sh +tests/custom/graphs/shortest_path/01/stdout.expected +tests/custom/graphs/shortest_path/02/graph_connected.essence +tests/custom/graphs/shortest_path/02/run.sh +tests/custom/graphs/shortest_path/02/stdout.expected +tests/custom/graphs/shortest_path/03/graph_connected.essence +tests/custom/graphs/shortest_path/03/run.sh +tests/custom/graphs/shortest_path/03/stdout.expected +tests/custom/graphs/shortest_path/04/graph_connected.essence +tests/custom/graphs/shortest_path/04/run.sh +tests/custom/graphs/shortest_path/04/stdout.expected +tests/custom/help-text/run.sh +tests/custom/ide/basic/category.essence +tests/custom/ide/basic/lexer.essence +tests/custom/ide/basic/parser.essence +tests/custom/ide/basic/run.sh +tests/custom/ide/basic/stdout.expected +tests/custom/ide/basic/type.essence +tests/custom/ide/basic/wellformed.essence +tests/custom/ide/dump-decl/run.sh +tests/custom/ide/dump-decl/stdout.expected +tests/custom/ide/dump-decl/t.essence +tests/custom/ide/dump-repr/run.sh +tests/custom/ide/dump-repr/stdout.expected +tests/custom/ide/dump-repr/t.essence +tests/custom/issues/119/1/_old_issues_118_smaller.essence +tests/custom/issues/119/1/expected-time.txt +tests/custom/issues/119/1/run.sh +tests/custom/issues/119/1/stdout.expected +tests/custom/issues/119/2/_old_issues_118_smaller2.essence +tests/custom/issues/119/2/expected-time.txt +tests/custom/issues/119/2/run.sh +tests/custom/issues/119/2/stdout.expected +tests/custom/issues/284/_issue_13.essence +tests/custom/issues/284/run.sh +tests/custom/issues/284/stdout.expected +tests/custom/issues/298/298.essence +tests/custom/issues/298/run.sh +tests/custom/issues/298/stderr.expected +tests/custom/issues/298/stdout.expected +tests/custom/issues/345/345.essence +tests/custom/issues/345/p.param +tests/custom/issues/345/run.sh +tests/custom/issues/345/stderr.expected +tests/custom/issues/345/stdout.expected +tests/custom/issues/346/given.solution +tests/custom/issues/346/givens_as_finds.essence +tests/custom/issues/346/run.sh +tests/custom/issues/346/stderr.expected +tests/custom/issues/351/351.essence +tests/custom/issues/351/run.sh +tests/custom/issues/351/stderr.expected +tests/custom/issues/351/stdout.expected +tests/custom/issues/358/358.essence +tests/custom/issues/358/run.sh +tests/custom/issues/358/stdout.expected +tests/custom/issues/365/365.essence +tests/custom/issues/365/run.sh +tests/custom/issues/365/stderr.expected +tests/custom/issues/366/366.essence +tests/custom/issues/366/run.sh +tests/custom/issues/370/01/370.essence +tests/custom/issues/370/01/expected-time.txt +tests/custom/issues/370/01/run.sh +tests/custom/issues/370/01/stdout.expected +tests/custom/issues/370/02/370.essence +tests/custom/issues/370/02/expected-time.txt +tests/custom/issues/370/02/run.sh +tests/custom/issues/370/02/stdout.expected +tests/custom/issues/370/03/370.essence +tests/custom/issues/370/03/expected-time.txt +tests/custom/issues/370/03/run.sh +tests/custom/issues/370/03/stdout.expected +tests/custom/issues/371/371-1.essence +tests/custom/issues/371/371-2.essence +tests/custom/issues/371/run.sh +tests/custom/issues/371/stdout.expected +tests/custom/issues/383/383-1.essence +tests/custom/issues/383/383-2.essence +tests/custom/issues/383/383-3.essence +tests/custom/issues/383/run.sh +tests/custom/issues/383/stdout.expected +tests/custom/issues/387/int01/387.essence +tests/custom/issues/387/int01/run.sh +tests/custom/issues/387/int01/stdout.expected +tests/custom/issues/387/int02/387.essence +tests/custom/issues/387/int02/run.sh +tests/custom/issues/387/int02/stdout.expected +tests/custom/issues/387/int03/387.essence +tests/custom/issues/387/int03/run.sh +tests/custom/issues/387/int03/stdout.expected +tests/custom/issues/387/int04/387.essence +tests/custom/issues/387/int04/run.sh +tests/custom/issues/387/int04/stdout.expected +tests/custom/issues/388/1/388-1.essence +tests/custom/issues/388/1/expected-time.txt +tests/custom/issues/388/1/run.sh +tests/custom/issues/388/1/stdout.expected +tests/custom/issues/388/2/388-2.essence +tests/custom/issues/388/2/expected-time.txt +tests/custom/issues/388/2/run.sh +tests/custom/issues/388/2/stdout.expected +tests/custom/issues/390/390.essence +tests/custom/issues/390/run.sh +tests/custom/issues/390/stderr.expected +tests/custom/issues/390/stdout.expected +tests/custom/issues/395/1.essence +tests/custom/issues/395/2.essence +tests/custom/issues/395/3.essence +tests/custom/issues/395/m_is_3.param +tests/custom/issues/395/run.sh +tests/custom/issues/395/stdout.expected +tests/custom/issues/396/396.essence +tests/custom/issues/396/run.sh +tests/custom/issues/396/stderr.expected +tests/custom/issues/400/400.essence +tests/custom/issues/400/run.sh +tests/custom/issues/400/stdout.expected +tests/custom/issues/401/401-1.essence +tests/custom/issues/401/401-2.essence +tests/custom/issues/401/401-3.essence +tests/custom/issues/401/run.sh +tests/custom/issues/401/stdout.expected +tests/custom/issues/402/402.essence +tests/custom/issues/402/run.sh +tests/custom/issues/402/stdout.expected +tests/custom/issues/404/run.sh +tests/custom/issues/404/stderr.expected +tests/custom/issues/404/stdout.expected +tests/custom/issues/404/test.essence +tests/custom/issues/404/test.param +tests/custom/issues/405/405.essence +tests/custom/issues/405/run.sh +tests/custom/issues/405/stderr.expected +tests/custom/issues/408/408.essence +tests/custom/issues/408/run.sh +tests/custom/issues/408/stdout.expected +tests/custom/issues/409/409.essence +tests/custom/issues/409/run.sh +tests/custom/issues/409/stderr.expected +tests/custom/issues/419/419.essence +tests/custom/issues/419/run.sh +tests/custom/issues/419/stdout.expected +tests/custom/issues/424/expected-time.txt +tests/custom/issues/424/knapsack.essence +tests/custom/issues/424/large.param.gz +tests/custom/issues/424/run.sh +tests/custom/issues/424/stdout.expected +tests/custom/issues/430/430.essence +tests/custom/issues/430/p.param +tests/custom/issues/430/run.sh +tests/custom/issues/430/stdout.expected +tests/custom/issues/431/431.essence +tests/custom/issues/431/run.sh +tests/custom/issues/431/stderr.expected +tests/custom/issues/432/4col.essence +tests/custom/issues/432/p.param +tests/custom/issues/432/run.sh +tests/custom/issues/432/stderr.expected +tests/custom/issues/432/stdout.expected +tests/custom/issues/438/1.essence +tests/custom/issues/438/1.param +tests/custom/issues/438/run.sh +tests/custom/issues/438/stdout.expected +tests/custom/issues/439/439.essence +tests/custom/issues/439/run.sh +tests/custom/issues/439/stderr.expected +tests/custom/issues/439/stdout.expected +tests/custom/issues/440/440.essence +tests/custom/issues/440/p.param +tests/custom/issues/440/run.sh +tests/custom/issues/440/stderr.expected +tests/custom/issues/440/stdout.expected +tests/custom/issues/443/443-bool-typed.essence +tests/custom/issues/443/443-bool.essence +tests/custom/issues/443/443-workaround.essence +tests/custom/issues/443/443.essence +tests/custom/issues/443/run.sh +tests/custom/issues/443/stdout.expected +tests/custom/issues/448/448-1.essence +tests/custom/issues/448/448-2.essence +tests/custom/issues/448/448-3.essence +tests/custom/issues/448/run.sh +tests/custom/issues/448/stdout.expected +tests/custom/issues/452/452.essence +tests/custom/issues/452/452.solution +tests/custom/issues/452/run.sh +tests/custom/issues/453/run.sh +tests/custom/issues/453/stdout.expected +tests/custom/issues/453/test.eprime-param +tests/custom/issues/453/test.essence +tests/custom/issues/453/test.param +tests/custom/issues/459/459.essence +tests/custom/issues/459/run.sh +tests/custom/issues/459/stderr.expected +tests/custom/issues/465/1/ex.essence +tests/custom/issues/465/1/run.sh +tests/custom/issues/465/1/stdout.expected +tests/custom/issues/465/2/ex.essence +tests/custom/issues/465/2/run.sh +tests/custom/issues/465/2/stdout.expected +tests/custom/issues/465/3/ex.essence +tests/custom/issues/465/3/run.sh +tests/custom/issues/465/3/stdout.expected +tests/custom/issues/465/4/ex.essence +tests/custom/issues/465/4/run.sh +tests/custom/issues/465/4/stdout.expected +tests/custom/issues/465/5/ex.essence +tests/custom/issues/465/5/run.sh +tests/custom/issues/465/5/stdout.expected +tests/custom/issues/465/6/ex.essence +tests/custom/issues/465/6/run.sh +tests/custom/issues/465/6/stdout.expected +tests/custom/issues/465/7/ex.essence +tests/custom/issues/465/7/run.sh +tests/custom/issues/465/7/stdout.expected +tests/custom/issues/465/8/ex.essence +tests/custom/issues/465/8/run.sh +tests/custom/issues/465/8/stdout.expected +tests/custom/issues/465/9/ex.essence +tests/custom/issues/465/9/run.sh +tests/custom/issues/465/9/stdout.expected +tests/custom/issues/470/470.essence +tests/custom/issues/470/run.sh +tests/custom/issues/470/stdout.expected +tests/custom/issues/471/471-ppp.essence +tests/custom/issues/471/run.sh +tests/custom/issues/471/stdout.expected +tests/custom/issues/473/regression.essence +tests/custom/issues/473/run.sh +tests/custom/issues/473/stdout.expected +tests/custom/issues/473/test.param +tests/custom/issues/473/works.essence +tests/custom/issues/478/run.sh +tests/custom/issues/478/sol.solution +tests/custom/issues/478/stderr.expected +tests/custom/issues/478/stdout.expected +tests/custom/issues/479/model.essence +tests/custom/issues/479/p.param +tests/custom/issues/479/run.sh +tests/custom/issues/479/stdout.expected +tests/custom/issues/480/model.essence +tests/custom/issues/480/p.param +tests/custom/issues/480/run.sh +tests/custom/issues/480/stdout.expected +tests/custom/issues/481/barman.essence +tests/custom/issues/481/expected-time.txt +tests/custom/issues/481/model.essence +tests/custom/issues/481/run.sh +tests/custom/issues/481/stdout.expected +tests/custom/issues/482/model.essence +tests/custom/issues/482/run.sh +tests/custom/issues/482/stdout.expected +tests/custom/issues/485/model.essence +tests/custom/issues/485/run.sh +tests/custom/issues/485/stdout.expected +tests/custom/issues/486/model.essence +tests/custom/issues/486/run.sh +tests/custom/issues/486/stdout.expected +tests/custom/issues/501/501.essence +tests/custom/issues/501/501.param +tests/custom/issues/501/run.sh +tests/custom/issues/501/stdout.expected +tests/custom/issues/502/502.essence +tests/custom/issues/502/run.sh +tests/custom/issues/502/stdout.expected +tests/custom/issues/503/503.essence +tests/custom/issues/503/run.sh +tests/custom/issues/503/stdout.expected +tests/custom/issues/506/model.essence +tests/custom/issues/506/run.sh +tests/custom/issues/506/stdout.expected +tests/custom/issues/506/test.param +tests/custom/issues/511/511.essence +tests/custom/issues/511/run.sh +tests/custom/issues/511/stdout.expected +tests/custom/issues/517/517.essence +tests/custom/issues/517/run.sh +tests/custom/json-integration/json-in/README +tests/custom/json-integration/json-in/param.json +tests/custom/json-integration/json-in/run.sh +tests/custom/json-integration/json-in/stdout.expected +tests/custom/json-integration/json-in/test.essence +tests/custom/json-integration/json-out/run.sh +tests/custom/json-integration/json-out/stdout.expected +tests/custom/json-integration/json-out/test.essence +tests/custom/json-integration/json-solution/json-solution.essence +tests/custom/json-integration/json-solution/n4.param +tests/custom/json-integration/json-solution/run.sh +tests/custom/json-integration/json-solution/stdout.expected +tests/custom/json-integration/jsons-out/jsons.essence +tests/custom/json-integration/jsons-out/run.sh +tests/custom/json-integration/jsons-out/stdout.expected +tests/custom/json-integration/jsons-streaming-out/jsons.essence +tests/custom/json-integration/jsons-streaming-out/run.sh +tests/custom/json-integration/jsons-streaming-out/stdout.expected +tests/custom/lex_less_untouched/example1/example.essence +tests/custom/lex_less_untouched/example1/run.sh +tests/custom/lex_less_untouched/example1/stdout.expected +tests/custom/lex_less_untouched/example2/example.essence +tests/custom/lex_less_untouched/example2/run.sh +tests/custom/lex_less_untouched/example2/stdout.expected +tests/custom/lex_less_untouched/hamiltonian/hamiltonian.essence +tests/custom/lex_less_untouched/hamiltonian/run.sh +tests/custom/lex_less_untouched/hamiltonian/stdout.expected +tests/custom/logfollow/01/model.essence +tests/custom/logfollow/01/model2.essence +tests/custom/logfollow/01/run.sh +tests/custom/logfollow/01/stdout.expected +tests/custom/matrixNoIndexedBy/matrixQ.essence +tests/custom/matrixNoIndexedBy/run.sh +tests/custom/matrixNoIndexedBy/stdout.expected +tests/custom/mildly_interesting/footballtennis_riddle/riddle1.essence +tests/custom/mildly_interesting/footballtennis_riddle/riddle2.essence +tests/custom/mildly_interesting/footballtennis_riddle/run.sh +tests/custom/mildly_interesting/footballtennis_riddle/stdout.expected +tests/custom/minizinc-out/inst.param +tests/custom/minizinc-out/run.sh +tests/custom/minizinc-out/stderr.expected +tests/custom/minizinc-out/stdout.expected +tests/custom/paramgen/function01/expected-time.txt +tests/custom/paramgen/function01/problem.essence +tests/custom/paramgen/function01/run.sh +tests/custom/paramgen/function01/stdout.expected +tests/custom/paramgen/function01/test.param +tests/custom/paramgen/int01/problem.essence +tests/custom/paramgen/int01/run.sh +tests/custom/paramgen/int01/stdout.expected +tests/custom/paramgen/mset01/expected-time.txt +tests/custom/paramgen/mset01/problem.essence +tests/custom/paramgen/mset01/run.sh +tests/custom/paramgen/mset01/stdout.expected +tests/custom/paramgen/mset01/test.param +tests/custom/paramgen/record01/expected-time.txt +tests/custom/paramgen/record01/problem.essence +tests/custom/paramgen/record01/run.sh +tests/custom/paramgen/record01/stdout.expected +tests/custom/paramgen/relation01/expected-time.txt +tests/custom/paramgen/relation01/problem.essence +tests/custom/paramgen/relation01/run.sh +tests/custom/paramgen/relation01/stdout.expected +tests/custom/paramgen/relation01/test.param +tests/custom/paramgen/set01/expected-time.txt +tests/custom/paramgen/set01/problem.essence +tests/custom/paramgen/set01/run.sh +tests/custom/paramgen/set01/stdout.expected +tests/custom/paramgen/set01/test.param +tests/custom/peg/peg.essence +tests/custom/transform/function/matrix/const_01/function.essence +tests/custom/transform/function/matrix/const_01/run.sh +tests/custom/transform/function/matrix/const_01/stdout.expected +tests/custom/transform/function/matrix/var_01/function.essence +tests/custom/transform/function/matrix/var_01/run.sh +tests/custom/transform/function/matrix/var_01/stdout.expected +tests/custom/transform/function/partition/const_01/function.essence +tests/custom/transform/function/partition/const_01/run.sh +tests/custom/transform/function/partition/const_01/stdout.expected +tests/custom/transform/function/partition/var_01/function.essence +tests/custom/transform/function/partition/var_01/run.sh +tests/custom/transform/function/partition/var_01/stdout.expected +tests/custom/transform/function/record/const_01/function.essence +tests/custom/transform/function/record/const_01/run.sh +tests/custom/transform/function/record/const_01/stdout.expected +tests/custom/transform/function/record/var_01/function.essence +tests/custom/transform/function/record/var_01/run.sh +tests/custom/transform/function/record/var_01/stdout.expected +tests/custom/transform/function/record/var_02/expected-time.txt +tests/custom/transform/function/record/var_02/function.essence +tests/custom/transform/function/record/var_02/run.sh +tests/custom/transform/function/record/var_02/stdout.expected +tests/custom/transform/function/sequence/const_01/function.essence +tests/custom/transform/function/sequence/const_01/run.sh +tests/custom/transform/function/sequence/const_01/stdout.expected +tests/custom/transform/function/sequence/var_01/function.essence +tests/custom/transform/function/sequence/var_01/run.sh +tests/custom/transform/function/sequence/var_01/stdout.expected +tests/custom/transform/function/set/const_01/function.essence +tests/custom/transform/function/set/const_01/run.sh +tests/custom/transform/function/set/const_01/stdout.expected +tests/custom/transform/function/set/var_01/function.essence +tests/custom/transform/function/set/var_01/run.sh +tests/custom/transform/function/set/var_01/stdout.expected +tests/custom/transform/function/set/var_02/function.essence +tests/custom/transform/function/set/var_02/run.sh +tests/custom/transform/function/set/var_02/stdout.expected +tests/custom/transform/function/tuple/const_01/function.essence +tests/custom/transform/function/tuple/const_01/run.sh +tests/custom/transform/function/tuple/const_01/stdout.expected +tests/custom/transform/function/tuple/var_01/function.essence +tests/custom/transform/function/tuple/var_01/run.sh +tests/custom/transform/function/tuple/var_01/stdout.expected +tests/custom/transform/function/variant/const_01/function.essence +tests/custom/transform/function/variant/const_01/run.sh +tests/custom/transform/function/variant/const_01/stdout.expected +tests/custom/transform/function/variant/var_01/function.essence +tests/custom/transform/function/variant/var_01/run.sh +tests/custom/transform/function/variant/var_01/stdout.expected +tests/custom/transform/function/variant/var_02/function.essence +tests/custom/transform/function/variant/var_02/run.sh +tests/custom/transform/function/variant/var_02/stdout.expected +tests/custom/transform/function/variant/var_03/function.essence +tests/custom/transform/function/variant/var_03/run.sh +tests/custom/transform/function/variant/var_03/stdout.expected +tests/custom/transform/function/variant/var_04/function.essence +tests/custom/transform/function/variant/var_04/run.sh +tests/custom/transform/function/variant/var_04/stdout.expected +tests/custom/tsdef/run.sh +tests/custom/tsdef/stdout.expected +tests/custom/variant-motif/data/zkc.param +tests/custom/variant-motif/motif.essence +tests/custom/variant-motif/readConjureSolution.py +tests/custom/variant-motif/run.sh +tests/custom/variant-motif/stdout.expected +tests/custom/variant-motif/zkc.param +tests/exhaustive/README.md +tests/exhaustive/acceptOutput.sh +tests/exhaustive/autogen/gen01/expected/model-solution000001.solution +tests/exhaustive/autogen/gen01/expected/model-solution000002.solution +tests/exhaustive/autogen/gen01/expected/model.eprime +tests/exhaustive/autogen/gen01/gen01.essence +tests/exhaustive/autogen/gen02/expected-time.txt +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_1_1-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_1_1.eprime +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_1_2-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_1_2.eprime +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_1_3-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_1_3.eprime +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_1_4-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_1_4.eprime +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_2_1-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_2_1.eprime +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_2_2-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_2_2.eprime +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_2_3-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_2_3.eprime +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_2_4-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_2_4.eprime +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_3_1-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_3_1.eprime +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_3_2-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_3_2.eprime +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_3_3-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_3_3.eprime +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_3_4-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_3_4.eprime +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_4_1-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_4_1.eprime +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_4_2-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_4_2.eprime +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_4_3-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_4_3.eprime +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000001.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000002.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000003.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000004.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000005.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000006.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000007.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000008.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000009.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000010.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000011.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000012.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000013.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000014.solution +tests/exhaustive/autogen/gen02/expected/model_4_4-solution000015.solution +tests/exhaustive/autogen/gen02/expected/model_4_4.eprime +tests/exhaustive/autogen/gen02/gen02.essence +tests/exhaustive/autogen/gen03/expected/model-solution000001.solution +tests/exhaustive/autogen/gen03/expected/model.eprime +tests/exhaustive/autogen/gen03/gen03.essence +tests/exhaustive/autogen/gen04/expected/model-solution000001.solution +tests/exhaustive/autogen/gen04/expected/model-solution000002.solution +tests/exhaustive/autogen/gen04/expected/model.eprime +tests/exhaustive/autogen/gen04/gen04.essence +tests/exhaustive/autogen/gen05/expected/model-solution000001.solution +tests/exhaustive/autogen/gen05/expected/model.eprime +tests/exhaustive/autogen/gen05/gen05.essence +tests/exhaustive/autogen/gen06/expected/model-solution000001.solution +tests/exhaustive/autogen/gen06/expected/model-solution000002.solution +tests/exhaustive/autogen/gen06/expected/model.eprime +tests/exhaustive/autogen/gen06/gen06.essence +tests/exhaustive/autogen/gen07/expected/model-solution000001.solution +tests/exhaustive/autogen/gen07/expected/model-solution000002.solution +tests/exhaustive/autogen/gen07/expected/model.eprime +tests/exhaustive/autogen/gen07/gen07.essence +tests/exhaustive/autogen/gen08/expected/model.eprime +tests/exhaustive/autogen/gen08/gen08.essence +tests/exhaustive/autogen/gen09/expected/model-solution000001.solution +tests/exhaustive/autogen/gen09/expected/model-solution000002.solution +tests/exhaustive/autogen/gen09/expected/model-solution000003.solution +tests/exhaustive/autogen/gen09/expected/model-solution000004.solution +tests/exhaustive/autogen/gen09/expected/model-solution000005.solution +tests/exhaustive/autogen/gen09/expected/model-solution000006.solution +tests/exhaustive/autogen/gen09/expected/model-solution000007.solution +tests/exhaustive/autogen/gen09/expected/model-solution000008.solution +tests/exhaustive/autogen/gen09/expected/model.eprime +tests/exhaustive/autogen/gen09/gen09.essence +tests/exhaustive/autogen/gen10/expected-time.txt +tests/exhaustive/autogen/gen10/expected/model_1_1-solution000001.solution +tests/exhaustive/autogen/gen10/expected/model_1_1-solution000002.solution +tests/exhaustive/autogen/gen10/expected/model_1_1-solution000003.solution +tests/exhaustive/autogen/gen10/expected/model_1_1-solution000004.solution +tests/exhaustive/autogen/gen10/expected/model_1_1.eprime +tests/exhaustive/autogen/gen10/expected/model_1_2-solution000001.solution +tests/exhaustive/autogen/gen10/expected/model_1_2-solution000002.solution +tests/exhaustive/autogen/gen10/expected/model_1_2-solution000003.solution +tests/exhaustive/autogen/gen10/expected/model_1_2-solution000004.solution +tests/exhaustive/autogen/gen10/expected/model_1_2.eprime +tests/exhaustive/autogen/gen10/expected/model_2_1-solution000001.solution +tests/exhaustive/autogen/gen10/expected/model_2_1-solution000002.solution +tests/exhaustive/autogen/gen10/expected/model_2_1-solution000003.solution +tests/exhaustive/autogen/gen10/expected/model_2_1-solution000004.solution +tests/exhaustive/autogen/gen10/expected/model_2_1.eprime +tests/exhaustive/autogen/gen10/expected/model_2_2-solution000001.solution +tests/exhaustive/autogen/gen10/expected/model_2_2-solution000002.solution +tests/exhaustive/autogen/gen10/expected/model_2_2-solution000003.solution +tests/exhaustive/autogen/gen10/expected/model_2_2-solution000004.solution +tests/exhaustive/autogen/gen10/expected/model_2_2.eprime +tests/exhaustive/autogen/gen10/gen10.essence +tests/exhaustive/autogen/gen11/expected/model-solution000001.solution +tests/exhaustive/autogen/gen11/expected/model-solution000002.solution +tests/exhaustive/autogen/gen11/expected/model.eprime +tests/exhaustive/autogen/gen11/gen11.essence +tests/exhaustive/autogen/gen12/expected/model.eprime +tests/exhaustive/autogen/gen12/gen12.essence +tests/exhaustive/autogen/gen13/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen13/expected/model_1-solution000002.solution +tests/exhaustive/autogen/gen13/expected/model_1.eprime +tests/exhaustive/autogen/gen13/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen13/expected/model_2-solution000002.solution +tests/exhaustive/autogen/gen13/expected/model_2.eprime +tests/exhaustive/autogen/gen13/expected/model_3-solution000001.solution +tests/exhaustive/autogen/gen13/expected/model_3-solution000002.solution +tests/exhaustive/autogen/gen13/expected/model_3.eprime +tests/exhaustive/autogen/gen13/expected/model_4-solution000001.solution +tests/exhaustive/autogen/gen13/expected/model_4-solution000002.solution +tests/exhaustive/autogen/gen13/expected/model_4.eprime +tests/exhaustive/autogen/gen13/gen13.essence +tests/exhaustive/autogen/gen14_1/additional-arguments.txt +tests/exhaustive/autogen/gen14_1/expected-time.txt +tests/exhaustive/autogen/gen14_1/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen14_1/expected/model_1-solution000002.solution +tests/exhaustive/autogen/gen14_1/expected/model_1.eprime +tests/exhaustive/autogen/gen14_1/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen14_1/expected/model_2-solution000002.solution +tests/exhaustive/autogen/gen14_1/expected/model_2.eprime +tests/exhaustive/autogen/gen14_1/expected/model_3-solution000001.solution +tests/exhaustive/autogen/gen14_1/expected/model_3-solution000002.solution +tests/exhaustive/autogen/gen14_1/expected/model_3.eprime +tests/exhaustive/autogen/gen14_1/expected/model_4-solution000001.solution +tests/exhaustive/autogen/gen14_1/expected/model_4-solution000002.solution +tests/exhaustive/autogen/gen14_1/expected/model_4.eprime +tests/exhaustive/autogen/gen14_1/gen14_1.essence +tests/exhaustive/autogen/gen14_2/additional-arguments.txt +tests/exhaustive/autogen/gen14_2/expected-time.txt +tests/exhaustive/autogen/gen14_2/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen14_2/expected/model_1-solution000002.solution +tests/exhaustive/autogen/gen14_2/expected/model_1.eprime +tests/exhaustive/autogen/gen14_2/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen14_2/expected/model_2-solution000002.solution +tests/exhaustive/autogen/gen14_2/expected/model_2.eprime +tests/exhaustive/autogen/gen14_2/expected/model_3-solution000001.solution +tests/exhaustive/autogen/gen14_2/expected/model_3-solution000002.solution +tests/exhaustive/autogen/gen14_2/expected/model_3.eprime +tests/exhaustive/autogen/gen14_2/expected/model_4-solution000001.solution +tests/exhaustive/autogen/gen14_2/expected/model_4-solution000002.solution +tests/exhaustive/autogen/gen14_2/expected/model_4.eprime +tests/exhaustive/autogen/gen14_2/gen14_2.essence +tests/exhaustive/autogen/gen15/expected/model-solution000001.solution +tests/exhaustive/autogen/gen15/expected/model.eprime +tests/exhaustive/autogen/gen15/gen15.essence +tests/exhaustive/autogen/gen16/expected/model-solution000001.solution +tests/exhaustive/autogen/gen16/expected/model.eprime +tests/exhaustive/autogen/gen16/gen16.essence +tests/exhaustive/autogen/gen17/expected/model_1.eprime +tests/exhaustive/autogen/gen17/expected/model_2.eprime +tests/exhaustive/autogen/gen17/gen17.essence +tests/exhaustive/autogen/gen18/expected/model-solution000001.solution +tests/exhaustive/autogen/gen18/expected/model-solution000002.solution +tests/exhaustive/autogen/gen18/expected/model.eprime +tests/exhaustive/autogen/gen18/gen18.essence +tests/exhaustive/autogen/gen19/expected/model.eprime +tests/exhaustive/autogen/gen19/gen19.essence +tests/exhaustive/autogen/gen20_1/expected/model.eprime +tests/exhaustive/autogen/gen20_1/gen20_1.essence +tests/exhaustive/autogen/gen20_2/expected/model-solution000001.solution +tests/exhaustive/autogen/gen20_2/expected/model.eprime +tests/exhaustive/autogen/gen20_2/gen20_2.essence +tests/exhaustive/autogen/gen21_1/expected/model.eprime +tests/exhaustive/autogen/gen21_1/gen21_1.essence +tests/exhaustive/autogen/gen21_2/expected/model.eprime +tests/exhaustive/autogen/gen21_2/gen21_2.essence +tests/exhaustive/autogen/gen22/expected/model-solution000001.solution +tests/exhaustive/autogen/gen22/expected/model-solution000002.solution +tests/exhaustive/autogen/gen22/expected/model-solution000003.solution +tests/exhaustive/autogen/gen22/expected/model.eprime +tests/exhaustive/autogen/gen22/gen22.essence +tests/exhaustive/autogen/gen23/expected/model-solution000001.solution +tests/exhaustive/autogen/gen23/expected/model.eprime +tests/exhaustive/autogen/gen23/gen23.essence +tests/exhaustive/autogen/gen24/expected/model-solution000001.solution +tests/exhaustive/autogen/gen24/expected/model.eprime +tests/exhaustive/autogen/gen24/gen24.essence +tests/exhaustive/autogen/gen25/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen25/expected/model_1-solution000002.solution +tests/exhaustive/autogen/gen25/expected/model_1-solution000003.solution +tests/exhaustive/autogen/gen25/expected/model_1-solution000004.solution +tests/exhaustive/autogen/gen25/expected/model_1.eprime +tests/exhaustive/autogen/gen25/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen25/expected/model_2-solution000002.solution +tests/exhaustive/autogen/gen25/expected/model_2-solution000003.solution +tests/exhaustive/autogen/gen25/expected/model_2-solution000004.solution +tests/exhaustive/autogen/gen25/expected/model_2.eprime +tests/exhaustive/autogen/gen25/gen25.essence +tests/exhaustive/autogen/gen26_1/expected/model.eprime +tests/exhaustive/autogen/gen26_1/gen26_1.essence +tests/exhaustive/autogen/gen26_2/expected/model_1.eprime +tests/exhaustive/autogen/gen26_2/expected/model_2.eprime +tests/exhaustive/autogen/gen26_2/gen26_2.essence +tests/exhaustive/autogen/gen26_3/expected/model.eprime +tests/exhaustive/autogen/gen26_3/gen26_3.essence +tests/exhaustive/autogen/gen27/expected/model-solution000001.solution +tests/exhaustive/autogen/gen27/expected/model.eprime +tests/exhaustive/autogen/gen27/gen27.essence +tests/exhaustive/autogen/gen28/expected/model.eprime +tests/exhaustive/autogen/gen28/gen28.essence +tests/exhaustive/autogen/gen29/expected/model.eprime +tests/exhaustive/autogen/gen29/gen29.essence +tests/exhaustive/autogen/gen30/expected/model-solution000001.solution +tests/exhaustive/autogen/gen30/expected/model-solution000002.solution +tests/exhaustive/autogen/gen30/expected/model.eprime +tests/exhaustive/autogen/gen30/gen30.essence +tests/exhaustive/autogen/gen31/expected/model-solution000001.solution +tests/exhaustive/autogen/gen31/expected/model.eprime +tests/exhaustive/autogen/gen31/gen31.essence +tests/exhaustive/autogen/gen32/expected-time.txt +tests/exhaustive/autogen/gen32/expected/model_1_1_1.eprime +tests/exhaustive/autogen/gen32/expected/model_1_1_2.eprime +tests/exhaustive/autogen/gen32/expected/model_1_1_3.eprime +tests/exhaustive/autogen/gen32/expected/model_1_1_4.eprime +tests/exhaustive/autogen/gen32/expected/model_1_2_1.eprime +tests/exhaustive/autogen/gen32/expected/model_1_2_3.eprime +tests/exhaustive/autogen/gen32/expected/model_1_2_4.eprime +tests/exhaustive/autogen/gen32/expected/model_1_3_1.eprime +tests/exhaustive/autogen/gen32/expected/model_1_3_2.eprime +tests/exhaustive/autogen/gen32/expected/model_1_3_4.eprime +tests/exhaustive/autogen/gen32/expected/model_1_4_1.eprime +tests/exhaustive/autogen/gen32/expected/model_1_4_2.eprime +tests/exhaustive/autogen/gen32/expected/model_1_4_3.eprime +tests/exhaustive/autogen/gen32/expected/model_2_1_1.eprime +tests/exhaustive/autogen/gen32/expected/model_2_1_3.eprime +tests/exhaustive/autogen/gen32/expected/model_2_1_4.eprime +tests/exhaustive/autogen/gen32/expected/model_2_2_1.eprime +tests/exhaustive/autogen/gen32/expected/model_2_2_2.eprime +tests/exhaustive/autogen/gen32/expected/model_2_2_3.eprime +tests/exhaustive/autogen/gen32/expected/model_2_2_4.eprime +tests/exhaustive/autogen/gen32/expected/model_2_3_1.eprime +tests/exhaustive/autogen/gen32/expected/model_2_3_2.eprime +tests/exhaustive/autogen/gen32/expected/model_2_3_4.eprime +tests/exhaustive/autogen/gen32/expected/model_2_4_1.eprime +tests/exhaustive/autogen/gen32/expected/model_2_4_2.eprime +tests/exhaustive/autogen/gen32/expected/model_2_4_3.eprime +tests/exhaustive/autogen/gen32/expected/model_3_1_1.eprime +tests/exhaustive/autogen/gen32/expected/model_3_1_2.eprime +tests/exhaustive/autogen/gen32/expected/model_3_1_4.eprime +tests/exhaustive/autogen/gen32/expected/model_3_2_1.eprime +tests/exhaustive/autogen/gen32/expected/model_3_2_2.eprime +tests/exhaustive/autogen/gen32/expected/model_3_2_4.eprime +tests/exhaustive/autogen/gen32/expected/model_3_3_1.eprime +tests/exhaustive/autogen/gen32/expected/model_3_3_2.eprime +tests/exhaustive/autogen/gen32/expected/model_3_3_3.eprime +tests/exhaustive/autogen/gen32/expected/model_3_3_4.eprime +tests/exhaustive/autogen/gen32/expected/model_3_4_1.eprime +tests/exhaustive/autogen/gen32/expected/model_3_4_2.eprime +tests/exhaustive/autogen/gen32/expected/model_3_4_3.eprime +tests/exhaustive/autogen/gen32/expected/model_4_1_1.eprime +tests/exhaustive/autogen/gen32/expected/model_4_1_2.eprime +tests/exhaustive/autogen/gen32/expected/model_4_1_3.eprime +tests/exhaustive/autogen/gen32/expected/model_4_2_1.eprime +tests/exhaustive/autogen/gen32/expected/model_4_2_2.eprime +tests/exhaustive/autogen/gen32/expected/model_4_2_3.eprime +tests/exhaustive/autogen/gen32/expected/model_4_3_1.eprime +tests/exhaustive/autogen/gen32/expected/model_4_3_2.eprime +tests/exhaustive/autogen/gen32/expected/model_4_3_3.eprime +tests/exhaustive/autogen/gen32/expected/model_4_4_1.eprime +tests/exhaustive/autogen/gen32/expected/model_4_4_2.eprime +tests/exhaustive/autogen/gen32/expected/model_4_4_3.eprime +tests/exhaustive/autogen/gen32/expected/model_4_4_4.eprime +tests/exhaustive/autogen/gen32/gen32.essence +tests/exhaustive/autogen/gen33/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen33/expected/model_1.eprime +tests/exhaustive/autogen/gen33/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen33/expected/model_2.eprime +tests/exhaustive/autogen/gen33/gen33.essence +tests/exhaustive/autogen/gen34_1/expected/model-solution000001.solution +tests/exhaustive/autogen/gen34_1/expected/model-solution000002.solution +tests/exhaustive/autogen/gen34_1/expected/model.eprime +tests/exhaustive/autogen/gen34_1/gen34.essence +tests/exhaustive/autogen/gen34_2/expected-time.txt +tests/exhaustive/autogen/gen34_2/expected/model-solution000001.solution +tests/exhaustive/autogen/gen34_2/expected/model-solution000002.solution +tests/exhaustive/autogen/gen34_2/expected/model.eprime +tests/exhaustive/autogen/gen34_2/gen34_2.essence +tests/exhaustive/autogen/gen35/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen35/expected/model_1.eprime +tests/exhaustive/autogen/gen35/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen35/expected/model_2.eprime +tests/exhaustive/autogen/gen35/gen35.essence +tests/exhaustive/autogen/gen36/expected-time.txt +tests/exhaustive/autogen/gen36/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen36/expected/model_1.eprime +tests/exhaustive/autogen/gen36/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen36/expected/model_2.eprime +tests/exhaustive/autogen/gen36/expected/model_3-solution000001.solution +tests/exhaustive/autogen/gen36/expected/model_3.eprime +tests/exhaustive/autogen/gen36/expected/model_4-solution000001.solution +tests/exhaustive/autogen/gen36/expected/model_4.eprime +tests/exhaustive/autogen/gen36/expected/model_5-solution000001.solution +tests/exhaustive/autogen/gen36/expected/model_5.eprime +tests/exhaustive/autogen/gen36/expected/model_6-solution000001.solution +tests/exhaustive/autogen/gen36/expected/model_6.eprime +tests/exhaustive/autogen/gen36/gen36.essence +tests/exhaustive/autogen/gen37/expected-time.txt +tests/exhaustive/autogen/gen37/expected/model_1-solution000001.solution +tests/exhaustive/autogen/gen37/expected/model_1-solution000002.solution +tests/exhaustive/autogen/gen37/expected/model_1-solution000003.solution +tests/exhaustive/autogen/gen37/expected/model_1-solution000004.solution +tests/exhaustive/autogen/gen37/expected/model_1-solution000005.solution +tests/exhaustive/autogen/gen37/expected/model_1-solution000006.solution +tests/exhaustive/autogen/gen37/expected/model_1.eprime +tests/exhaustive/autogen/gen37/expected/model_2-solution000001.solution +tests/exhaustive/autogen/gen37/expected/model_2-solution000002.solution +tests/exhaustive/autogen/gen37/expected/model_2-solution000003.solution +tests/exhaustive/autogen/gen37/expected/model_2-solution000004.solution +tests/exhaustive/autogen/gen37/expected/model_2-solution000005.solution +tests/exhaustive/autogen/gen37/expected/model_2-solution000006.solution +tests/exhaustive/autogen/gen37/expected/model_2.eprime +tests/exhaustive/autogen/gen37/expected/model_3-solution000001.solution +tests/exhaustive/autogen/gen37/expected/model_3-solution000002.solution +tests/exhaustive/autogen/gen37/expected/model_3-solution000003.solution +tests/exhaustive/autogen/gen37/expected/model_3-solution000004.solution +tests/exhaustive/autogen/gen37/expected/model_3-solution000005.solution +tests/exhaustive/autogen/gen37/expected/model_3-solution000006.solution +tests/exhaustive/autogen/gen37/expected/model_3.eprime +tests/exhaustive/autogen/gen37/expected/model_4-solution000001.solution +tests/exhaustive/autogen/gen37/expected/model_4-solution000002.solution +tests/exhaustive/autogen/gen37/expected/model_4-solution000003.solution +tests/exhaustive/autogen/gen37/expected/model_4-solution000004.solution +tests/exhaustive/autogen/gen37/expected/model_4-solution000005.solution +tests/exhaustive/autogen/gen37/expected/model_4-solution000006.solution +tests/exhaustive/autogen/gen37/expected/model_4.eprime +tests/exhaustive/autogen/gen37/gen37.essence +tests/exhaustive/autogen/gen38/expected/model.eprime +tests/exhaustive/autogen/gen38/gen38.essence +tests/exhaustive/basic/alldifferent_except_01/alldifferent_except.essence +tests/exhaustive/basic/alldifferent_except_01/expected/model-solution000001.solution +tests/exhaustive/basic/alldifferent_except_01/expected/model.eprime +tests/exhaustive/basic/binrel01/binrel01.essence +tests/exhaustive/basic/binrel01/expected/model-solution000001.solution +tests/exhaustive/basic/binrel01/expected/model-solution000002.solution +tests/exhaustive/basic/binrel01/expected/model-solution000003.solution +tests/exhaustive/basic/binrel01/expected/model-solution000004.solution +tests/exhaustive/basic/binrel01/expected/model-solution000005.solution +tests/exhaustive/basic/binrel01/expected/model-solution000006.solution +tests/exhaustive/basic/binrel01/expected/model-solution000007.solution +tests/exhaustive/basic/binrel01/expected/model-solution000008.solution +tests/exhaustive/basic/binrel01/expected/model.eprime +tests/exhaustive/basic/binrel02/binrel02.essence +tests/exhaustive/basic/binrel02/expected/model-solution000001.solution +tests/exhaustive/basic/binrel02/expected/model-solution000002.solution +tests/exhaustive/basic/binrel02/expected/model-solution000003.solution +tests/exhaustive/basic/binrel02/expected/model-solution000004.solution +tests/exhaustive/basic/binrel02/expected/model-solution000005.solution +tests/exhaustive/basic/binrel02/expected/model.eprime +tests/exhaustive/basic/binrel03/binrel03.essence +tests/exhaustive/basic/binrel03/expected/model-solution000001.solution +tests/exhaustive/basic/binrel03/expected/model-solution000002.solution +tests/exhaustive/basic/binrel03/expected/model-solution000003.solution +tests/exhaustive/basic/binrel03/expected/model-solution000004.solution +tests/exhaustive/basic/binrel03/expected/model-solution000005.solution +tests/exhaustive/basic/binrel03/expected/model-solution000006.solution +tests/exhaustive/basic/binrel03/expected/model-solution000007.solution +tests/exhaustive/basic/binrel03/expected/model-solution000008.solution +tests/exhaustive/basic/binrel03/expected/model-solution000009.solution +tests/exhaustive/basic/binrel03/expected/model-solution000010.solution +tests/exhaustive/basic/binrel03/expected/model-solution000011.solution +tests/exhaustive/basic/binrel03/expected/model-solution000012.solution +tests/exhaustive/basic/binrel03/expected/model-solution000013.solution +tests/exhaustive/basic/binrel03/expected/model-solution000014.solution +tests/exhaustive/basic/binrel03/expected/model-solution000015.solution +tests/exhaustive/basic/binrel03/expected/model-solution000016.solution +tests/exhaustive/basic/binrel03/expected/model-solution000017.solution +tests/exhaustive/basic/binrel03/expected/model-solution000018.solution +tests/exhaustive/basic/binrel03/expected/model-solution000019.solution +tests/exhaustive/basic/binrel03/expected/model.eprime +tests/exhaustive/basic/binrel04/binrel04.essence +tests/exhaustive/basic/binrel04/expected/model-solution000001.solution +tests/exhaustive/basic/binrel04/expected/model-solution000002.solution +tests/exhaustive/basic/binrel04/expected/model-solution000003.solution +tests/exhaustive/basic/binrel04/expected/model-solution000004.solution +tests/exhaustive/basic/binrel04/expected/model-solution000005.solution +tests/exhaustive/basic/binrel04/expected/model-solution000006.solution +tests/exhaustive/basic/binrel04/expected/model-solution000007.solution +tests/exhaustive/basic/binrel04/expected/model-solution000008.solution +tests/exhaustive/basic/binrel04/expected/model-solution000009.solution +tests/exhaustive/basic/binrel04/expected/model-solution000010.solution +tests/exhaustive/basic/binrel04/expected/model.eprime +tests/exhaustive/basic/bool_is_false/bool_is_false.essence +tests/exhaustive/basic/bool_is_false/expected/model-solution000001.solution +tests/exhaustive/basic/bool_is_false/expected/model.eprime +tests/exhaustive/basic/bool_is_free1/bool_is_free.essence +tests/exhaustive/basic/bool_is_free1/expected/model-solution000001.solution +tests/exhaustive/basic/bool_is_free1/expected/model-solution000002.solution +tests/exhaustive/basic/bool_is_free1/expected/model.eprime +tests/exhaustive/basic/bool_is_free2/bool_is_free2.essence +tests/exhaustive/basic/bool_is_free2/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/bool_is_free2/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/bool_is_free2/expected/model-param000001.eprime-param +tests/exhaustive/basic/bool_is_free2/expected/model-param000002-solution000001.solution +tests/exhaustive/basic/bool_is_free2/expected/model-param000002-solution000002.solution +tests/exhaustive/basic/bool_is_free2/expected/model-param000002.eprime-param +tests/exhaustive/basic/bool_is_free2/expected/model.eprime +tests/exhaustive/basic/bool_is_free2/param000001.param +tests/exhaustive/basic/bool_is_free2/param000002.param +tests/exhaustive/basic/bool_is_param/bool_is_param.essence +tests/exhaustive/basic/bool_is_param/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/bool_is_param/expected/model-param000001.eprime-param +tests/exhaustive/basic/bool_is_param/expected/model-param000002-solution000001.solution +tests/exhaustive/basic/bool_is_param/expected/model-param000002.eprime-param +tests/exhaustive/basic/bool_is_param/expected/model.eprime +tests/exhaustive/basic/bool_is_param/param000001.param +tests/exhaustive/basic/bool_is_param/param000002.param +tests/exhaustive/basic/bubble_01/bubble_01.essence +tests/exhaustive/basic/bubble_01/expected/model-solution000001.solution +tests/exhaustive/basic/bubble_01/expected/model-solution000002.solution +tests/exhaustive/basic/bubble_01/expected/model-solution000003.solution +tests/exhaustive/basic/bubble_01/expected/model.eprime +tests/exhaustive/basic/comprehension_01_1/comprehension_01.essence +tests/exhaustive/basic/comprehension_01_1/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_01_1/expected/model.eprime +tests/exhaustive/basic/comprehension_01_2/comprehension_01_2.essence +tests/exhaustive/basic/comprehension_01_2/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_01_2/expected/model-solution000002.solution +tests/exhaustive/basic/comprehension_01_2/expected/model.eprime +tests/exhaustive/basic/comprehension_02_1/comprehension_02.essence +tests/exhaustive/basic/comprehension_02_1/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_02_1/expected/model.eprime +tests/exhaustive/basic/comprehension_02_2/comprehension_02_2.essence +tests/exhaustive/basic/comprehension_02_2/expected-time.txt +tests/exhaustive/basic/comprehension_02_2/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_02_2/expected/model-solution000002.solution +tests/exhaustive/basic/comprehension_02_2/expected/model.eprime +tests/exhaustive/basic/comprehension_03_1/comprehension_03.essence +tests/exhaustive/basic/comprehension_03_1/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_03_1/expected/model.eprime +tests/exhaustive/basic/comprehension_03_2/comprehension_03_2.essence +tests/exhaustive/basic/comprehension_03_2/expected-time.txt +tests/exhaustive/basic/comprehension_03_2/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_03_2/expected/model-solution000002.solution +tests/exhaustive/basic/comprehension_03_2/expected/model.eprime +tests/exhaustive/basic/comprehension_04_1/comprehension_04.essence +tests/exhaustive/basic/comprehension_04_1/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_04_1/expected/model.eprime +tests/exhaustive/basic/comprehension_04_2/comprehension_04_2.essence +tests/exhaustive/basic/comprehension_04_2/expected-time.txt +tests/exhaustive/basic/comprehension_04_2/expected/model-solution000001.solution +tests/exhaustive/basic/comprehension_04_2/expected/model-solution000002.solution +tests/exhaustive/basic/comprehension_04_2/expected/model-solution000003.solution +tests/exhaustive/basic/comprehension_04_2/expected/model-solution000004.solution +tests/exhaustive/basic/comprehension_04_2/expected/model.eprime +tests/exhaustive/basic/comprehension_letting/comprehension_letting.essence +tests/exhaustive/basic/comprehension_letting/expected-time.txt +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3.eprime +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000002.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000003.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000004.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000005.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000006.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000007.solution +tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4.eprime +tests/exhaustive/basic/cut_01_off/cut_01_nocut.essence +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000001.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000002.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000003.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000004.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000005.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000006.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000007.solution +tests/exhaustive/basic/cut_01_off/expected/model_1-solution000008.solution +tests/exhaustive/basic/cut_01_off/expected/model_1.eprime +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000001.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000002.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000003.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000004.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000005.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000006.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000007.solution +tests/exhaustive/basic/cut_01_off/expected/model_2-solution000008.solution +tests/exhaustive/basic/cut_01_off/expected/model_2.eprime +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000001.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000002.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000003.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000004.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000005.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000006.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000007.solution +tests/exhaustive/basic/cut_01_off/expected/model_3-solution000008.solution +tests/exhaustive/basic/cut_01_off/expected/model_3.eprime +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000001.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000002.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000003.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000004.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000005.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000006.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000007.solution +tests/exhaustive/basic/cut_01_off/expected/model_4-solution000008.solution +tests/exhaustive/basic/cut_01_off/expected/model_4.eprime +tests/exhaustive/basic/cut_01_on/cut_01.essence +tests/exhaustive/basic/cut_01_on/expected-time.txt +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_1_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_2_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_3_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_1_4_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_1_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_2_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_3_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_2_4_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_1_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_2_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_3_4.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_3_4_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_1_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_2_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_3_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_1.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_2.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_3.eprime +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000002.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000003.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000004.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000005.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000006.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000007.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000008.solution +tests/exhaustive/basic/cut_01_on/expected/model_4_4_4.eprime +tests/exhaustive/basic/domainRefAsIndex/domainRefAsIndex.essence +tests/exhaustive/basic/domainRefAsIndex/expected/model-solution000001.solution +tests/exhaustive/basic/domainRefAsIndex/expected/model-solution000002.solution +tests/exhaustive/basic/domainRefAsIndex/expected/model-solution000003.solution +tests/exhaustive/basic/domainRefAsIndex/expected/model.eprime +tests/exhaustive/basic/empty_matrix/empty_matrix.essence +tests/exhaustive/basic/empty_matrix/expected/model.eprime +tests/exhaustive/basic/enum01/enum01.essence +tests/exhaustive/basic/enum01/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/enum01/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/enum01/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/enum01/expected/model-param000001.eprime-param +tests/exhaustive/basic/enum01/expected/model.eprime +tests/exhaustive/basic/enum01/param000001.param +tests/exhaustive/basic/enum02/enum02.essence +tests/exhaustive/basic/enum02/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/enum02/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/enum02/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/enum02/expected/model-param000001.eprime-param +tests/exhaustive/basic/enum02/expected/model.eprime +tests/exhaustive/basic/enum02/param000001.param +tests/exhaustive/basic/enum03/enum03.essence +tests/exhaustive/basic/enum03/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/enum03/expected/model-param000001.eprime-param +tests/exhaustive/basic/enum03/expected/model.eprime +tests/exhaustive/basic/enum03/param000001.param +tests/exhaustive/basic/enum04/01.param +tests/exhaustive/basic/enum04/Crossfigures.essence +tests/exhaustive/basic/enum04/expected/model-01-solution000001.solution +tests/exhaustive/basic/enum04/expected/model-01.eprime-param +tests/exhaustive/basic/enum04/expected/model.eprime +tests/exhaustive/basic/enum05-enum/enum05/SetOfEnum.essence +tests/exhaustive/basic/enum05-enum/enum05/expected-time.txt +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_1.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3.eprime +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4-solution000002.solution +tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4.eprime +tests/exhaustive/basic/enum05-unnamed/SetOfEnum.essence +tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000001.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000002.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000003.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000004.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_1.eprime +tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000001.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000002.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000003.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000004.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_2.eprime +tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000001.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000002.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000003.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000004.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_3.eprime +tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000001.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000002.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000003.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000004.solution +tests/exhaustive/basic/enum05-unnamed/expected/model_4.eprime +tests/exhaustive/basic/enum06/MSetOfEnum.essence +tests/exhaustive/basic/enum06/expected-time.txt +tests/exhaustive/basic/enum06/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_1_1-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_1_1.eprime +tests/exhaustive/basic/enum06/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_1_2-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_1_2.eprime +tests/exhaustive/basic/enum06/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_1_3-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_1_3.eprime +tests/exhaustive/basic/enum06/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_2_1-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_2_1.eprime +tests/exhaustive/basic/enum06/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_2_2-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_2_2.eprime +tests/exhaustive/basic/enum06/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_2_3-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_2_3.eprime +tests/exhaustive/basic/enum06/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_3_1-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_3_1.eprime +tests/exhaustive/basic/enum06/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_3_2-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_3_2.eprime +tests/exhaustive/basic/enum06/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000002.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000003.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000004.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000005.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000006.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000007.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000008.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000009.solution +tests/exhaustive/basic/enum06/expected/model_3_3-solution000010.solution +tests/exhaustive/basic/enum06/expected/model_3_3.eprime +tests/exhaustive/basic/enum_card_01/enum_card.essence +tests/exhaustive/basic/enum_card_01/expected/model-p-solution000001.solution +tests/exhaustive/basic/enum_card_01/expected/model-p.eprime-param +tests/exhaustive/basic/enum_card_01/expected/model.eprime +tests/exhaustive/basic/enum_card_01/p.param +tests/exhaustive/basic/enum_card_02/enum_card_02.essence +tests/exhaustive/basic/enum_card_02/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/enum_card_02/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/enum_card_02/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/enum_card_02/expected/model-param000001.eprime-param +tests/exhaustive/basic/enum_card_02/expected/model.eprime +tests/exhaustive/basic/enum_card_02/param000001.param +tests/exhaustive/basic/enum_liberated/enum_liberated.essence +tests/exhaustive/basic/enum_liberated/expected/model-p1-solution000001.solution +tests/exhaustive/basic/enum_liberated/expected/model-p1-solution000002.solution +tests/exhaustive/basic/enum_liberated/expected/model-p1.eprime-param +tests/exhaustive/basic/enum_liberated/expected/model.eprime +tests/exhaustive/basic/enum_liberated/p1.param +tests/exhaustive/basic/enum_onlyDefn/enum.essence +tests/exhaustive/basic/enum_onlyDefn/expected/model-solution000001.solution +tests/exhaustive/basic/enum_onlyDefn/expected/model.eprime +tests/exhaustive/basic/finiteGivens_relation01/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_relation01/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_relation01/expected/model.eprime +tests/exhaustive/basic/finiteGivens_relation01/finiteGivens_relation01.essence +tests/exhaustive/basic/finiteGivens_relation01/p1.param +tests/exhaustive/basic/finiteGivens_set01/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set01/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set01/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set01/finiteGivens_set01.essence +tests/exhaustive/basic/finiteGivens_set01/p1.param +tests/exhaustive/basic/finiteGivens_set02/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set02/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set02/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set02/finiteGivens_set02.essence +tests/exhaustive/basic/finiteGivens_set02/p1.param +tests/exhaustive/basic/finiteGivens_set03/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set03/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set03/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set03/finiteGivens_set03.essence +tests/exhaustive/basic/finiteGivens_set03/p1.param +tests/exhaustive/basic/finiteGivens_set04/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set04/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set04/expected/model-p2-solution000001.solution +tests/exhaustive/basic/finiteGivens_set04/expected/model-p2.eprime-param +tests/exhaustive/basic/finiteGivens_set04/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set04/finiteGivens_set04.essence +tests/exhaustive/basic/finiteGivens_set04/p1.param +tests/exhaustive/basic/finiteGivens_set04/p2.param +tests/exhaustive/basic/finiteGivens_set05/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set05/expected/model-p1-solution000002.solution +tests/exhaustive/basic/finiteGivens_set05/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set05/expected/model-p2-solution000001.solution +tests/exhaustive/basic/finiteGivens_set05/expected/model-p2-solution000002.solution +tests/exhaustive/basic/finiteGivens_set05/expected/model-p2-solution000003.solution +tests/exhaustive/basic/finiteGivens_set05/expected/model-p2.eprime-param +tests/exhaustive/basic/finiteGivens_set05/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set05/p1.param +tests/exhaustive/basic/finiteGivens_set05/p2.param +tests/exhaustive/basic/finiteGivens_set05/set-given.essence +tests/exhaustive/basic/finiteGivens_set_of_record/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set_of_record/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set_of_record/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set_of_record/finite.essence +tests/exhaustive/basic/finiteGivens_set_of_record/p1.param +tests/exhaustive/basic/finiteGivens_set_of_tuple/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set_of_tuple/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set_of_tuple/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set_of_tuple/finite.essence +tests/exhaustive/basic/finiteGivens_set_of_tuple/p1.param +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p1-solution000001.solution +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p1.eprime-param +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p2-solution000001.solution +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p2.eprime-param +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p3-solution000001.solution +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p3.eprime-param +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p4-solution000001.solution +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p4.eprime-param +tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model.eprime +tests/exhaustive/basic/finiteGivens_set_of_variant/finite.essence +tests/exhaustive/basic/finiteGivens_set_of_variant/p1.param +tests/exhaustive/basic/finiteGivens_set_of_variant/p2.param +tests/exhaustive/basic/finiteGivens_set_of_variant/p3.param +tests/exhaustive/basic/finiteGivens_set_of_variant/p4.param +tests/exhaustive/basic/function_complex_01/expected-time.txt +tests/exhaustive/basic/function_complex_01/expected/model_1-solution000001.solution +tests/exhaustive/basic/function_complex_01/expected/model_1-solution000002.solution +tests/exhaustive/basic/function_complex_01/expected/model_1-solution000003.solution +tests/exhaustive/basic/function_complex_01/expected/model_1-solution000004.solution +tests/exhaustive/basic/function_complex_01/expected/model_1-solution000005.solution +tests/exhaustive/basic/function_complex_01/expected/model_1-solution000006.solution +tests/exhaustive/basic/function_complex_01/expected/model_1.eprime +tests/exhaustive/basic/function_complex_01/expected/model_2-solution000001.solution +tests/exhaustive/basic/function_complex_01/expected/model_2-solution000002.solution +tests/exhaustive/basic/function_complex_01/expected/model_2-solution000003.solution +tests/exhaustive/basic/function_complex_01/expected/model_2-solution000004.solution +tests/exhaustive/basic/function_complex_01/expected/model_2-solution000005.solution +tests/exhaustive/basic/function_complex_01/expected/model_2-solution000006.solution +tests/exhaustive/basic/function_complex_01/expected/model_2.eprime +tests/exhaustive/basic/function_complex_01/function_complex_01.essence +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000004.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000005.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000006.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000007.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000008.solution +tests/exhaustive/basic/function_defined/expected/model_1_1-solution000009.solution +tests/exhaustive/basic/function_defined/expected/model_1_1.eprime +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000004.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000005.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000006.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000007.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000008.solution +tests/exhaustive/basic/function_defined/expected/model_1_2-solution000009.solution +tests/exhaustive/basic/function_defined/expected/model_1_2.eprime +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000004.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000005.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000006.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000007.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000008.solution +tests/exhaustive/basic/function_defined/expected/model_2_1-solution000009.solution +tests/exhaustive/basic/function_defined/expected/model_2_1.eprime +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000004.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000005.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000006.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000007.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000008.solution +tests/exhaustive/basic/function_defined/expected/model_2_2-solution000009.solution +tests/exhaustive/basic/function_defined/expected/model_2_2.eprime +tests/exhaustive/basic/function_defined/function_defined.essence +tests/exhaustive/basic/function_image_01/expected/model-solution000001.solution +tests/exhaustive/basic/function_image_01/expected/model-solution000002.solution +tests/exhaustive/basic/function_image_01/expected/model-solution000003.solution +tests/exhaustive/basic/function_image_01/expected/model-solution000004.solution +tests/exhaustive/basic/function_image_01/expected/model.eprime +tests/exhaustive/basic/function_image_01/function_image_01.essence +tests/exhaustive/basic/function_image_02/expected/model_1-solution000001.solution +tests/exhaustive/basic/function_image_02/expected/model_1-solution000002.solution +tests/exhaustive/basic/function_image_02/expected/model_1-solution000003.solution +tests/exhaustive/basic/function_image_02/expected/model_1.eprime +tests/exhaustive/basic/function_image_02/function_image_02.essence +tests/exhaustive/basic/function_image_03/expected/model-solution000001.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000002.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000003.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000004.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000005.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000006.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000007.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000008.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000009.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000010.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000011.solution +tests/exhaustive/basic/function_image_03/expected/model-solution000012.solution +tests/exhaustive/basic/function_image_03/expected/model.eprime +tests/exhaustive/basic/function_image_03/function_image_03.essence +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000001.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000002.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000003.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000004.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000005.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000006.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000007.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000008.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_1.eprime +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000001.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000002.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000003.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000004.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000005.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000006.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000007.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000008.solution +tests/exhaustive/basic/function_partial_int_set_01/expected/model_2.eprime +tests/exhaustive/basic/function_partial_int_set_01/function_partial_int_set_01.essence +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000003.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000004.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000005.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000006.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000007.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000008.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000009.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1.eprime +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000003.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000004.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000005.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000006.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000007.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000008.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000009.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2.eprime +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000002.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000003.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000004.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000005.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000006.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000007.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000008.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000009.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1.eprime +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000003.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000004.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000005.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000006.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000007.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000008.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000009.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1.eprime +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000002.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000003.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000004.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000005.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000006.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000007.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000008.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000009.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1.eprime +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000003.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000004.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000005.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000006.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000007.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000008.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000009.solution +tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2.eprime +tests/exhaustive/basic/function_partial_record_01/function_partial_record_01.essence +tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000007.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000012.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_1_1.eprime +tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000007.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000012.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_1_2.eprime +tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000007.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000012.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_2_1.eprime +tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000007.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000012.eprime-param +tests/exhaustive/basic/function_partial_record_param/expected/model_2_2.eprime +tests/exhaustive/basic/function_partial_record_param/function_partial_record_param.essence +tests/exhaustive/basic/function_partial_record_param/param000007.param +tests/exhaustive/basic/function_partial_record_param/param000012.param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000007.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000012.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1.eprime +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000007.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000012.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2.eprime +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000007.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000012.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1.eprime +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000007-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000007.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000012-solution000001.solution +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000012.eprime-param +tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2.eprime +tests/exhaustive/basic/function_partial_tuple_param/function_partial_tuple_param.essence +tests/exhaustive/basic/function_partial_tuple_param/param000007.param +tests/exhaustive/basic/function_partial_tuple_param/param000012.param +tests/exhaustive/basic/function_preImage/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/function_preImage/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/function_preImage/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/function_preImage/expected/model_1_1.eprime +tests/exhaustive/basic/function_preImage/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/function_preImage/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/function_preImage/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/function_preImage/expected/model_1_2.eprime +tests/exhaustive/basic/function_preImage/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/function_preImage/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/function_preImage/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/function_preImage/expected/model_2_1.eprime +tests/exhaustive/basic/function_preImage/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/function_preImage/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/function_preImage/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/function_preImage/expected/model_2_2.eprime +tests/exhaustive/basic/function_preImage/function_preImage.essence +tests/exhaustive/basic/function_range/expected-time.txt +tests/exhaustive/basic/function_range/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000004.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000005.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000006.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000007.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000008.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000009.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000010.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000011.solution +tests/exhaustive/basic/function_range/expected/model_1_1-solution000012.solution +tests/exhaustive/basic/function_range/expected/model_1_1.eprime +tests/exhaustive/basic/function_range/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000004.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000005.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000006.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000007.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000008.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000009.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000010.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000011.solution +tests/exhaustive/basic/function_range/expected/model_1_2-solution000012.solution +tests/exhaustive/basic/function_range/expected/model_1_2.eprime +tests/exhaustive/basic/function_range/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000004.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000005.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000006.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000007.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000008.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000009.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000010.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000011.solution +tests/exhaustive/basic/function_range/expected/model_2_1-solution000012.solution +tests/exhaustive/basic/function_range/expected/model_2_1.eprime +tests/exhaustive/basic/function_range/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000004.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000005.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000006.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000007.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000008.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000009.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000010.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000011.solution +tests/exhaustive/basic/function_range/expected/model_2_2-solution000012.solution +tests/exhaustive/basic/function_range/expected/model_2_2.eprime +tests/exhaustive/basic/function_range/function_range.essence +tests/exhaustive/basic/function_record_injective_aac/expected/model.eprime +tests/exhaustive/basic/function_record_injective_aac/function_record_injective_aac.essence +tests/exhaustive/basic/function_record_injective_attr/expected/model.eprime +tests/exhaustive/basic/function_record_injective_attr/function_record_injective.essence +tests/exhaustive/basic/function_total_bool_01/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_bool_01/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_bool_01/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_bool_01/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_bool_01/expected/model.eprime +tests/exhaustive/basic/function_total_bool_01/function_total_bool_01.essence +tests/exhaustive/basic/function_total_bool_02/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_bool_02/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_bool_02/expected/model.eprime +tests/exhaustive/basic/function_total_bool_02/function_total_bool_02.essence +tests/exhaustive/basic/function_total_bool_03/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_bool_03/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_bool_03/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_bool_03/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_bool_03/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_bool_03/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_bool_03/expected/model.eprime +tests/exhaustive/basic/function_total_bool_03/function_total_bool_03.essence +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000009.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000010.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000011.solution +tests/exhaustive/basic/function_total_bool_04/expected/model-solution000012.solution +tests/exhaustive/basic/function_total_bool_04/expected/model.eprime +tests/exhaustive/basic/function_total_bool_04/function_total_bool_04.essence +tests/exhaustive/basic/function_total_bool_05/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_bool_05/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_bool_05/expected/model.eprime +tests/exhaustive/basic/function_total_bool_05/function_total_bool_05.essence +tests/exhaustive/basic/function_total_bool_06/expected/model.eprime +tests/exhaustive/basic/function_total_bool_06/function_total_bool_06.essence +tests/exhaustive/basic/function_total_bool_param/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_bool_param/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_bool_param/expected/model-param000002-solution000001.solution +tests/exhaustive/basic/function_total_bool_param/expected/model-param000002.eprime-param +tests/exhaustive/basic/function_total_bool_param/expected/model-param000003-solution000001.solution +tests/exhaustive/basic/function_total_bool_param/expected/model-param000003.eprime-param +tests/exhaustive/basic/function_total_bool_param/expected/model-param000004-solution000001.solution +tests/exhaustive/basic/function_total_bool_param/expected/model-param000004.eprime-param +tests/exhaustive/basic/function_total_bool_param/expected/model.eprime +tests/exhaustive/basic/function_total_bool_param/function_total_bool_param.essence +tests/exhaustive/basic/function_total_bool_param/param000001.param +tests/exhaustive/basic/function_total_bool_param/param000002.param +tests/exhaustive/basic/function_total_bool_param/param000003.param +tests/exhaustive/basic/function_total_bool_param/param000004.param +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000004.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000005.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000006.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000007.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000008.solution +tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_01/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_01/function_total_enumGiven_01.essence +tests/exhaustive/basic/function_total_enumGiven_01/param000001.param +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000004.solution +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000005.solution +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000006.solution +tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_02/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_02/function_total_enumGiven_02.essence +tests/exhaustive/basic/function_total_enumGiven_02/param000001.param +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000004.solution +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000005.solution +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000006.solution +tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_03/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_03/function_total_enumGiven_03.essence +tests/exhaustive/basic/function_total_enumGiven_03/param000001.param +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000004.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000005.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000006.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000007.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000008.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000009.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000010.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000011.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000012.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000013.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000014.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000015.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000016.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000017.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000018.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000019.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000020.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000021.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000022.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000023.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000024.solution +tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_04/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_04/function_total_enumGiven_04.essence +tests/exhaustive/basic/function_total_enumGiven_04/param000001.param +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000002.solution +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000003.solution +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000004.solution +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000005.solution +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000006.solution +tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_05/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_05/function_total_enumGiven_05.essence +tests/exhaustive/basic/function_total_enumGiven_05/param000001.param +tests/exhaustive/basic/function_total_enumGiven_06/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_06/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_06/function_total_enumGiven_06.essence +tests/exhaustive/basic/function_total_enumGiven_06/param000001.param +tests/exhaustive/basic/function_total_enumGiven_param/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumGiven_param/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumGiven_param/expected/model.eprime +tests/exhaustive/basic/function_total_enumGiven_param/function_total_enumGiven_param.essence +tests/exhaustive/basic/function_total_enumGiven_param/param000001.param +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_enumLetting_01/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_01/function_total_enumLetting_01.essence +tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_enumLetting_02/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_02/function_total_enumLetting_02.essence +tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_enumLetting_03/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_03/function_total_enumLetting_03.essence +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000009.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000010.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000011.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000012.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000013.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000014.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000015.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000016.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000017.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000018.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000019.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000020.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000021.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000022.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000023.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000024.solution +tests/exhaustive/basic/function_total_enumLetting_04/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_04/function_total_enumLetting_04.essence +tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_enumLetting_05/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_05/function_total_enumLetting_05.essence +tests/exhaustive/basic/function_total_enumLetting_06/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_06/function_total_enumLetting_06.essence +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000002-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000002.eprime-param +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000003-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000003.eprime-param +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000004-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000004.eprime-param +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000005-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000005.eprime-param +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000006-solution000001.solution +tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000006.eprime-param +tests/exhaustive/basic/function_total_enumLetting_param/expected/model.eprime +tests/exhaustive/basic/function_total_enumLetting_param/function_total_enumLetting_param.essence +tests/exhaustive/basic/function_total_enumLetting_param/param000001.param +tests/exhaustive/basic/function_total_enumLetting_param/param000002.param +tests/exhaustive/basic/function_total_enumLetting_param/param000003.param +tests/exhaustive/basic/function_total_enumLetting_param/param000004.param +tests/exhaustive/basic/function_total_enumLetting_param/param000005.param +tests/exhaustive/basic/function_total_enumLetting_param/param000006.param +tests/exhaustive/basic/function_total_int_01/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_int_01/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_int_01/expected/model.eprime +tests/exhaustive/basic/function_total_int_01/function_total_int_01.essence +tests/exhaustive/basic/function_total_int_02/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_int_02/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_int_02/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_int_02/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_int_02/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_int_02/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_int_02/expected/model.eprime +tests/exhaustive/basic/function_total_int_02/function_total_int_02.essence +tests/exhaustive/basic/function_total_int_03/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_int_03/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_int_03/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_int_03/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_int_03/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_int_03/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_int_03/expected/model.eprime +tests/exhaustive/basic/function_total_int_03/function_total_int_03.essence +tests/exhaustive/basic/function_total_int_04/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000009.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000010.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000011.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000012.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000013.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000014.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000015.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000016.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000017.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000018.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000019.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000020.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000021.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000022.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000023.solution +tests/exhaustive/basic/function_total_int_04/expected/model-solution000024.solution +tests/exhaustive/basic/function_total_int_04/expected/model.eprime +tests/exhaustive/basic/function_total_int_04/function_total_int_04.essence +tests/exhaustive/basic/function_total_int_05/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_int_05/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_int_05/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_int_05/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_int_05/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_int_05/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_int_05/expected/model.eprime +tests/exhaustive/basic/function_total_int_05/function_total_int_05.essence +tests/exhaustive/basic/function_total_int_06/expected/model.eprime +tests/exhaustive/basic/function_total_int_06/function_total_int_06.essence +tests/exhaustive/basic/function_total_int_param/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/function_total_int_param/expected/model-param000001.eprime-param +tests/exhaustive/basic/function_total_int_param/expected/model-param000002-solution000001.solution +tests/exhaustive/basic/function_total_int_param/expected/model-param000002.eprime-param +tests/exhaustive/basic/function_total_int_param/expected/model-param000003-solution000001.solution +tests/exhaustive/basic/function_total_int_param/expected/model-param000003.eprime-param +tests/exhaustive/basic/function_total_int_param/expected/model-param000004-solution000001.solution +tests/exhaustive/basic/function_total_int_param/expected/model-param000004.eprime-param +tests/exhaustive/basic/function_total_int_param/expected/model-param000005-solution000001.solution +tests/exhaustive/basic/function_total_int_param/expected/model-param000005.eprime-param +tests/exhaustive/basic/function_total_int_param/expected/model-param000006-solution000001.solution +tests/exhaustive/basic/function_total_int_param/expected/model-param000006.eprime-param +tests/exhaustive/basic/function_total_int_param/expected/model.eprime +tests/exhaustive/basic/function_total_int_param/function_total_int_param.essence +tests/exhaustive/basic/function_total_int_param/param000001.param +tests/exhaustive/basic/function_total_int_param/param000002.param +tests/exhaustive/basic/function_total_int_param/param000003.param +tests/exhaustive/basic/function_total_int_param/param000004.param +tests/exhaustive/basic/function_total_int_param/param000005.param +tests/exhaustive/basic/function_total_int_param/param000006.param +tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000001.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000002.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000003.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000004.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000005.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000006.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_1.eprime +tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000001.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000002.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000003.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000004.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000005.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000006.solution +tests/exhaustive/basic/function_total_int_set_01/expected/model_2.eprime +tests/exhaustive/basic/function_total_int_set_01/function_total_int_set_01.essence +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000009.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000010.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000011.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000012.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000013.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000014.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000015.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000016.solution +tests/exhaustive/basic/function_total_record_01_find/expected/model.eprime +tests/exhaustive/basic/function_total_record_01_find/function_total_record_01.essence +tests/exhaustive/basic/function_total_record_01_param/expected/model-param02-solution000001.solution +tests/exhaustive/basic/function_total_record_01_param/expected/model-param02.eprime-param +tests/exhaustive/basic/function_total_record_01_param/expected/model-param13-solution000001.solution +tests/exhaustive/basic/function_total_record_01_param/expected/model-param13.eprime-param +tests/exhaustive/basic/function_total_record_01_param/expected/model.eprime +tests/exhaustive/basic/function_total_record_01_param/function_total_record_01_param.essence +tests/exhaustive/basic/function_total_record_01_param/param02.param +tests/exhaustive/basic/function_total_record_01_param/param13.param +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000001.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000002.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000003.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000004.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000005.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000006.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000007.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000008.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000009.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000010.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000011.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000012.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000013.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000014.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000015.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000016.solution +tests/exhaustive/basic/function_total_tuple_01_find/expected/model.eprime +tests/exhaustive/basic/function_total_tuple_01_find/function_total_tuple_01.essence +tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param02-solution000001.solution +tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param02.eprime-param +tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param13-solution000001.solution +tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param13.eprime-param +tests/exhaustive/basic/function_total_tuple_01_param/expected/model.eprime +tests/exhaustive/basic/function_total_tuple_01_param/function_total_tuple_01_param.essence +tests/exhaustive/basic/function_total_tuple_01_param/param02.param +tests/exhaustive/basic/function_total_tuple_01_param/param13.param +tests/exhaustive/basic/function_tuple_injective_aac/expected/model.eprime +tests/exhaustive/basic/function_tuple_injective_aac/function_tuple_injective_aac.essence +tests/exhaustive/basic/function_tuple_injective_attr/expected/model.eprime +tests/exhaustive/basic/function_tuple_injective_attr/function_tuple_injective.essence +tests/exhaustive/basic/heuristic_conflict/expected/model-solution000001.solution +tests/exhaustive/basic/heuristic_conflict/expected/model-solution000002.solution +tests/exhaustive/basic/heuristic_conflict/expected/model-solution000003.solution +tests/exhaustive/basic/heuristic_conflict/expected/model-solution000004.solution +tests/exhaustive/basic/heuristic_conflict/expected/model-solution000005.solution +tests/exhaustive/basic/heuristic_conflict/expected/model-solution000006.solution +tests/exhaustive/basic/heuristic_conflict/expected/model.eprime +tests/exhaustive/basic/heuristic_conflict/heuristic_conflict.essence +tests/exhaustive/basic/heuristic_sdf/expected/model-solution000001.solution +tests/exhaustive/basic/heuristic_sdf/expected/model-solution000002.solution +tests/exhaustive/basic/heuristic_sdf/expected/model-solution000003.solution +tests/exhaustive/basic/heuristic_sdf/expected/model-solution000004.solution +tests/exhaustive/basic/heuristic_sdf/expected/model-solution000005.solution +tests/exhaustive/basic/heuristic_sdf/expected/model-solution000006.solution +tests/exhaustive/basic/heuristic_sdf/expected/model.eprime +tests/exhaustive/basic/heuristic_sdf/heuristic_sdf.essence +tests/exhaustive/basic/heuristic_srf/expected/model-solution000001.solution +tests/exhaustive/basic/heuristic_srf/expected/model-solution000002.solution +tests/exhaustive/basic/heuristic_srf/expected/model-solution000003.solution +tests/exhaustive/basic/heuristic_srf/expected/model-solution000004.solution +tests/exhaustive/basic/heuristic_srf/expected/model-solution000005.solution +tests/exhaustive/basic/heuristic_srf/expected/model-solution000006.solution +tests/exhaustive/basic/heuristic_srf/expected/model.eprime +tests/exhaustive/basic/heuristic_srf/heuristic_srf.essence +tests/exhaustive/basic/heuristic_static/expected/model-solution000001.solution +tests/exhaustive/basic/heuristic_static/expected/model-solution000002.solution +tests/exhaustive/basic/heuristic_static/expected/model-solution000003.solution +tests/exhaustive/basic/heuristic_static/expected/model-solution000004.solution +tests/exhaustive/basic/heuristic_static/expected/model-solution000005.solution +tests/exhaustive/basic/heuristic_static/expected/model-solution000006.solution +tests/exhaustive/basic/heuristic_static/expected/model.eprime +tests/exhaustive/basic/heuristic_static/heuristic_static.essence +tests/exhaustive/basic/int_from_comprehension/1.param +tests/exhaustive/basic/int_from_comprehension/expected/model-1-solution000001.solution +tests/exhaustive/basic/int_from_comprehension/expected/model-1-solution000002.solution +tests/exhaustive/basic/int_from_comprehension/expected/model-1-solution000003.solution +tests/exhaustive/basic/int_from_comprehension/expected/model-1.eprime-param +tests/exhaustive/basic/int_from_comprehension/expected/model.eprime +tests/exhaustive/basic/int_from_comprehension/int_from_comprehension.essence +tests/exhaustive/basic/int_is_fixed/expected/model-solution000001.solution +tests/exhaustive/basic/int_is_fixed/expected/model.eprime +tests/exhaustive/basic/int_is_fixed/int_is_fixed.essence +tests/exhaustive/basic/int_is_free/expected/model-solution000001.solution +tests/exhaustive/basic/int_is_free/expected/model-solution000002.solution +tests/exhaustive/basic/int_is_free/expected/model-solution000003.solution +tests/exhaustive/basic/int_is_free/expected/model-solution000004.solution +tests/exhaustive/basic/int_is_free/expected/model-solution000005.solution +tests/exhaustive/basic/int_is_free/expected/model.eprime +tests/exhaustive/basic/int_is_free/int_is_free.essence +tests/exhaustive/basic/int_is_param/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/int_is_param/expected/model-param000001.eprime-param +tests/exhaustive/basic/int_is_param/expected/model-param000002-solution000001.solution +tests/exhaustive/basic/int_is_param/expected/model-param000002.eprime-param +tests/exhaustive/basic/int_is_param/expected/model-param1-solution000001.solution +tests/exhaustive/basic/int_is_param/expected/model-param1.eprime-param +tests/exhaustive/basic/int_is_param/expected/model-param2-solution000001.solution +tests/exhaustive/basic/int_is_param/expected/model-param2.eprime-param +tests/exhaustive/basic/int_is_param/expected/model.eprime +tests/exhaustive/basic/int_is_param/int_is_param.essence +tests/exhaustive/basic/int_is_param/param000001.param +tests/exhaustive/basic/int_is_param/param000002.param +tests/exhaustive/basic/int_is_param/param1.param +tests/exhaustive/basic/int_is_param/param2.param +tests/exhaustive/basic/int_param_domain_01/a1_b5_c3.param +tests/exhaustive/basic/int_param_domain_01/expected/model-a1_b5_c3-solution000001.solution +tests/exhaustive/basic/int_param_domain_01/expected/model-a1_b5_c3.eprime-param +tests/exhaustive/basic/int_param_domain_01/expected/model.eprime +tests/exhaustive/basic/int_param_domain_01/int_param_domain_01.essence +tests/exhaustive/basic/int_param_domain_02/a1_b5_c3.param +tests/exhaustive/basic/int_param_domain_02/expected/model-a1_b5_c3-solution000001.solution +tests/exhaustive/basic/int_param_domain_02/expected/model-a1_b5_c3.eprime-param +tests/exhaustive/basic/int_param_domain_02/expected/model.eprime +tests/exhaustive/basic/int_param_domain_02/int_param_domain_02.essence +tests/exhaustive/basic/int_param_domain_03/a1_b5_c3.param +tests/exhaustive/basic/int_param_domain_03/expected/model-a1_b5_c3-solution000001.solution +tests/exhaustive/basic/int_param_domain_03/expected/model-a1_b5_c3.eprime-param +tests/exhaustive/basic/int_param_domain_03/expected/model.eprime +tests/exhaustive/basic/int_param_domain_03/int_param_domain_03.essence +tests/exhaustive/basic/int_param_domain_04/a1_b5_c3.param +tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000001.solution +tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000002.solution +tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000003.solution +tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000004.solution +tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000005.solution +tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3.eprime-param +tests/exhaustive/basic/int_param_domain_04/expected/model.eprime +tests/exhaustive/basic/int_param_domain_04/int_param_domain_04.essence +tests/exhaustive/basic/letting_shadowing/expected/model-p1-solution000001.solution +tests/exhaustive/basic/letting_shadowing/expected/model-p1.eprime-param +tests/exhaustive/basic/letting_shadowing/expected/model.eprime +tests/exhaustive/basic/letting_shadowing/letting_shadowing.essence +tests/exhaustive/basic/letting_shadowing/p1.param +tests/exhaustive/basic/matrix01_bools/expected/model-solution000001.solution +tests/exhaustive/basic/matrix01_bools/expected/model-solution000002.solution +tests/exhaustive/basic/matrix01_bools/expected/model.eprime +tests/exhaustive/basic/matrix01_bools/matrix01_bools.essence +tests/exhaustive/basic/matrix02_tuple/expected/model-solution000001.solution +tests/exhaustive/basic/matrix02_tuple/expected/model-solution000002.solution +tests/exhaustive/basic/matrix02_tuple/expected/model.eprime +tests/exhaustive/basic/matrix02_tuple/matrix02_tuple.essence +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000002.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000003.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000004.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000005.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000006.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000007.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000008.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000009.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000010.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000011.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000012.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000013.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000014.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000015.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000016.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000017.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000018.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000019.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000020.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000021.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000022.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000023.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000024.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000025.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000026.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000027.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000028.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000029.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000030.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000031.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000032.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000033.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000034.solution +tests/exhaustive/basic/matrix_atmost_atleast/expected/model.eprime +tests/exhaustive/basic/matrix_atmost_atleast/matrix_atmost_atleast.essence +tests/exhaustive/basic/matrix_comprehension_nested_01/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_comprehension_nested_01/expected/model.eprime +tests/exhaustive/basic/matrix_comprehension_nested_01/matrix_comprehension_nested_01.essence +tests/exhaustive/basic/matrix_freq/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_freq/expected/model-solution000002.solution +tests/exhaustive/basic/matrix_freq/expected/model-solution000003.solution +tests/exhaustive/basic/matrix_freq/expected/model.eprime +tests/exhaustive/basic/matrix_freq/matrix_freq.essence +tests/exhaustive/basic/matrix_hist_01/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_hist_01/expected/model.eprime +tests/exhaustive/basic/matrix_hist_01/matrix_hist_01.essence +tests/exhaustive/basic/matrix_indexing_identical/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_indexing_identical/expected/model-solution000002.solution +tests/exhaustive/basic/matrix_indexing_identical/expected/model-solution000003.solution +tests/exhaustive/basic/matrix_indexing_identical/expected/model.eprime +tests/exhaustive/basic/matrix_indexing_identical/matrix_indexing_identical.essence +tests/exhaustive/basic/matrix_literal_comprehension/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_literal_comprehension/expected/model.eprime +tests/exhaustive/basic/matrix_literal_comprehension/matrix_literal_comprehension.essence +tests/exhaustive/basic/matrix_literal_contains_set/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_literal_contains_set/expected/model.eprime +tests/exhaustive/basic/matrix_literal_contains_set/matrix_literal_contains_set.essence +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000002.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000003.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000004.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000005.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000006.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000007.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000008.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000009.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_1.eprime +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000002.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000003.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000004.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000005.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000006.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000007.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000008.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000009.solution +tests/exhaustive/basic/matrix_of_set_01/expected/model_2.eprime +tests/exhaustive/basic/matrix_of_set_01/matrix_of_set_01.essence +tests/exhaustive/basic/matrix_of_set_02/expected-time.txt +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3.eprime +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000002.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000003.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000004.solution +tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4.eprime +tests/exhaustive/basic/matrix_of_set_02/matrix_of_set_02.essence +tests/exhaustive/basic/matrix_of_set_03_2d/expected-time.txt +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4.eprime +tests/exhaustive/basic/matrix_of_set_03_2d/matrix_of_set_03_2d.essence +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected-time.txt +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2.eprime +tests/exhaustive/basic/matrix_of_set_04_2dLit/matrix_of_set_04_2dLit.essence +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected-time.txt +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2.eprime +tests/exhaustive/basic/matrix_of_set_05_2dLit/matrix_of_set_05_2dLit.essence +tests/exhaustive/basic/matrix_of_tuple_eq/expected/model-solution000001.solution +tests/exhaustive/basic/matrix_of_tuple_eq/expected/model.eprime +tests/exhaustive/basic/matrix_of_tuple_eq/matrix_of_tuple_eq.essence +tests/exhaustive/basic/max_test/2-3.param +tests/exhaustive/basic/max_test/expected/model-2-3-solution000001.solution +tests/exhaustive/basic/max_test/expected/model-2-3.eprime-param +tests/exhaustive/basic/max_test/expected/model.eprime +tests/exhaustive/basic/max_test/max_test.essence +tests/exhaustive/basic/mset01_find/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000005.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000006.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000007.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000008.solution +tests/exhaustive/basic/mset01_find/expected/model_1-solution000009.solution +tests/exhaustive/basic/mset01_find/expected/model_1.eprime +tests/exhaustive/basic/mset01_find/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000005.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000006.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000007.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000008.solution +tests/exhaustive/basic/mset01_find/expected/model_2-solution000009.solution +tests/exhaustive/basic/mset01_find/expected/model_2.eprime +tests/exhaustive/basic/mset01_find/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000005.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000006.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000007.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000008.solution +tests/exhaustive/basic/mset01_find/expected/model_3-solution000009.solution +tests/exhaustive/basic/mset01_find/expected/model_3.eprime +tests/exhaustive/basic/mset01_find/mset01.essence +tests/exhaustive/basic/mset01_param/expected-time.txt +tests/exhaustive/basic/mset01_param/expected/model_1_1-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_1-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_1-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_1-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_1-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_1-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_1.eprime +tests/exhaustive/basic/mset01_param/expected/model_1_2-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_2-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_2-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_2-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_2-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_2-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_2.eprime +tests/exhaustive/basic/mset01_param/expected/model_1_3-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_3-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_3-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_3-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_3-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_1_3-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_1_3.eprime +tests/exhaustive/basic/mset01_param/expected/model_2_1-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_1-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_1-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_1-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_1-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_1-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_1.eprime +tests/exhaustive/basic/mset01_param/expected/model_2_2-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_2-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_2-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_2-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_2-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_2-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_2.eprime +tests/exhaustive/basic/mset01_param/expected/model_2_3-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_3-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_3-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_3-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_3-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_2_3-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_2_3.eprime +tests/exhaustive/basic/mset01_param/expected/model_3_1-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_1-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_1-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_1-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_1-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_1-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_1.eprime +tests/exhaustive/basic/mset01_param/expected/model_3_2-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_2-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_2-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_2-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_2-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_2-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_2.eprime +tests/exhaustive/basic/mset01_param/expected/model_3_3-param1-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_3-param1.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_3-param4-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_3-param4.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_3-param7-solution000001.solution +tests/exhaustive/basic/mset01_param/expected/model_3_3-param7.eprime-param +tests/exhaustive/basic/mset01_param/expected/model_3_3.eprime +tests/exhaustive/basic/mset01_param/mset01_param.essence +tests/exhaustive/basic/mset01_param/param1.param +tests/exhaustive/basic/mset01_param/param4.param +tests/exhaustive/basic/mset01_param/param7.param +tests/exhaustive/basic/mset02/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000005.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000006.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000007.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000008.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000009.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000010.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000011.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000012.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000013.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000014.solution +tests/exhaustive/basic/mset02/expected/model_1-solution000015.solution +tests/exhaustive/basic/mset02/expected/model_1.eprime +tests/exhaustive/basic/mset02/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000005.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000006.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000007.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000008.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000009.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000010.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000011.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000012.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000013.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000014.solution +tests/exhaustive/basic/mset02/expected/model_2-solution000015.solution +tests/exhaustive/basic/mset02/expected/model_2.eprime +tests/exhaustive/basic/mset02/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000005.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000006.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000007.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000008.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000009.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000010.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000011.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000012.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000013.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000014.solution +tests/exhaustive/basic/mset02/expected/model_3-solution000015.solution +tests/exhaustive/basic/mset02/expected/model_3.eprime +tests/exhaustive/basic/mset02/mset02.essence +tests/exhaustive/basic/mset03_1/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000005.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000006.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000007.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000008.solution +tests/exhaustive/basic/mset03_1/expected/model_1-solution000009.solution +tests/exhaustive/basic/mset03_1/expected/model_1.eprime +tests/exhaustive/basic/mset03_1/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000005.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000006.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000007.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000008.solution +tests/exhaustive/basic/mset03_1/expected/model_2-solution000009.solution +tests/exhaustive/basic/mset03_1/expected/model_2.eprime +tests/exhaustive/basic/mset03_1/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000005.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000006.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000007.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000008.solution +tests/exhaustive/basic/mset03_1/expected/model_3-solution000009.solution +tests/exhaustive/basic/mset03_1/expected/model_3.eprime +tests/exhaustive/basic/mset03_1/mset03.essence +tests/exhaustive/basic/mset03_2/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000005.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000006.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000007.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000008.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000009.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000010.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000011.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000012.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000013.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000014.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000015.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000016.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000017.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000018.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000019.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000020.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000021.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000022.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000023.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000024.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000025.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000026.solution +tests/exhaustive/basic/mset03_2/expected/model_1-solution000027.solution +tests/exhaustive/basic/mset03_2/expected/model_1.eprime +tests/exhaustive/basic/mset03_2/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000005.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000006.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000007.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000008.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000009.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000010.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000011.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000012.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000013.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000014.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000015.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000016.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000017.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000018.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000019.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000020.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000021.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000022.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000023.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000024.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000025.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000026.solution +tests/exhaustive/basic/mset03_2/expected/model_2-solution000027.solution +tests/exhaustive/basic/mset03_2/expected/model_2.eprime +tests/exhaustive/basic/mset03_2/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000005.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000006.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000007.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000008.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000009.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000010.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000011.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000012.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000013.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000014.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000015.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000016.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000017.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000018.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000019.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000020.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000021.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000022.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000023.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000024.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000025.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000026.solution +tests/exhaustive/basic/mset03_2/expected/model_3-solution000027.solution +tests/exhaustive/basic/mset03_2/expected/model_3.eprime +tests/exhaustive/basic/mset03_2/mset03_2.essence +tests/exhaustive/basic/mset04/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset04/expected/model_1.eprime +tests/exhaustive/basic/mset04/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset04/expected/model_2.eprime +tests/exhaustive/basic/mset04/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset04/expected/model_3.eprime +tests/exhaustive/basic/mset04/mset04.essence +tests/exhaustive/basic/mset05/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset05/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset05/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset05/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset05/expected/model_1-solution000005.solution +tests/exhaustive/basic/mset05/expected/model_1-solution000006.solution +tests/exhaustive/basic/mset05/expected/model_1.eprime +tests/exhaustive/basic/mset05/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset05/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset05/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset05/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset05/expected/model_2-solution000005.solution +tests/exhaustive/basic/mset05/expected/model_2-solution000006.solution +tests/exhaustive/basic/mset05/expected/model_2.eprime +tests/exhaustive/basic/mset05/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset05/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset05/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset05/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset05/expected/model_3-solution000005.solution +tests/exhaustive/basic/mset05/expected/model_3-solution000006.solution +tests/exhaustive/basic/mset05/expected/model_3.eprime +tests/exhaustive/basic/mset05/mset05.essence +tests/exhaustive/basic/mset06_1/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset06_1/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset06_1/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset06_1/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset06_1/expected/model_1.eprime +tests/exhaustive/basic/mset06_1/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset06_1/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset06_1/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset06_1/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset06_1/expected/model_2.eprime +tests/exhaustive/basic/mset06_1/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset06_1/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset06_1/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset06_1/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset06_1/expected/model_3.eprime +tests/exhaustive/basic/mset06_1/mset06.essence +tests/exhaustive/basic/mset06_2/expected/model_1-solution000001.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000002.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000003.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000004.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000005.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000006.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000007.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000008.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000009.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000010.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000011.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000012.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000013.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000014.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000015.solution +tests/exhaustive/basic/mset06_2/expected/model_1-solution000016.solution +tests/exhaustive/basic/mset06_2/expected/model_1.eprime +tests/exhaustive/basic/mset06_2/expected/model_2-solution000001.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000002.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000003.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000004.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000005.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000006.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000007.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000008.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000009.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000010.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000011.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000012.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000013.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000014.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000015.solution +tests/exhaustive/basic/mset06_2/expected/model_2-solution000016.solution +tests/exhaustive/basic/mset06_2/expected/model_2.eprime +tests/exhaustive/basic/mset06_2/expected/model_3-solution000001.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000002.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000003.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000004.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000005.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000006.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000007.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000008.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000009.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000010.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000011.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000012.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000013.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000014.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000015.solution +tests/exhaustive/basic/mset06_2/expected/model_3-solution000016.solution +tests/exhaustive/basic/mset06_2/expected/model_3.eprime +tests/exhaustive/basic/mset06_2/mset06_2.essence +tests/exhaustive/basic/mset07/a3.param +tests/exhaustive/basic/mset07/expected/model_1-a3-solution000001.solution +tests/exhaustive/basic/mset07/expected/model_1-a3-solution000002.solution +tests/exhaustive/basic/mset07/expected/model_1-a3-solution000003.solution +tests/exhaustive/basic/mset07/expected/model_1-a3-solution000004.solution +tests/exhaustive/basic/mset07/expected/model_1-a3-solution000005.solution +tests/exhaustive/basic/mset07/expected/model_1-a3-solution000006.solution +tests/exhaustive/basic/mset07/expected/model_1-a3.eprime-param +tests/exhaustive/basic/mset07/expected/model_1.eprime +tests/exhaustive/basic/mset07/expected/model_2-a3-solution000001.solution +tests/exhaustive/basic/mset07/expected/model_2-a3-solution000002.solution +tests/exhaustive/basic/mset07/expected/model_2-a3-solution000003.solution +tests/exhaustive/basic/mset07/expected/model_2-a3-solution000004.solution +tests/exhaustive/basic/mset07/expected/model_2-a3-solution000005.solution +tests/exhaustive/basic/mset07/expected/model_2-a3-solution000006.solution +tests/exhaustive/basic/mset07/expected/model_2-a3.eprime-param +tests/exhaustive/basic/mset07/expected/model_2.eprime +tests/exhaustive/basic/mset07/expected/model_3-a3-solution000001.solution +tests/exhaustive/basic/mset07/expected/model_3-a3-solution000002.solution +tests/exhaustive/basic/mset07/expected/model_3-a3-solution000003.solution +tests/exhaustive/basic/mset07/expected/model_3-a3-solution000004.solution +tests/exhaustive/basic/mset07/expected/model_3-a3-solution000005.solution +tests/exhaustive/basic/mset07/expected/model_3-a3-solution000006.solution +tests/exhaustive/basic/mset07/expected/model_3-a3.eprime-param +tests/exhaustive/basic/mset07/expected/model_3.eprime +tests/exhaustive/basic/mset07/mset07.essence +tests/exhaustive/basic/name-reuse/expected-time.txt +tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_1_1.eprime +tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_1_2.eprime +tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_1_3.eprime +tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_1_4.eprime +tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_2_1.eprime +tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_2_2.eprime +tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_2_3.eprime +tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_2_4.eprime +tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_3_1.eprime +tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_3_2.eprime +tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_3_3.eprime +tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_3_4.eprime +tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_4_1.eprime +tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_4_2.eprime +tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_4_3.eprime +tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000002.solution +tests/exhaustive/basic/name-reuse/expected/model_4_4.eprime +tests/exhaustive/basic/name-reuse/name-reuse.essence +tests/exhaustive/basic/param-min/mset/expected/model-test-solution000001.solution +tests/exhaustive/basic/param-min/mset/expected/model-test.eprime-param +tests/exhaustive/basic/param-min/mset/expected/model.eprime +tests/exhaustive/basic/param-min/mset/test.essence +tests/exhaustive/basic/param-min/mset/test.param +tests/exhaustive/basic/param-min/set/expected/model-test-solution000001.solution +tests/exhaustive/basic/param-min/set/expected/model-test.eprime-param +tests/exhaustive/basic/param-min/set/expected/model.eprime +tests/exhaustive/basic/param-min/set/test.essence +tests/exhaustive/basic/param-min/set/test.param +tests/exhaustive/basic/parameterEq/2.param +tests/exhaustive/basic/parameterEq/expected/model-2-solution000001.solution +tests/exhaustive/basic/parameterEq/expected/model-2.eprime-param +tests/exhaustive/basic/parameterEq/expected/model.eprime +tests/exhaustive/basic/parameterEq/parameterEq.essence +tests/exhaustive/basic/partition_01/expected/model_1-solution000001.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000002.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000003.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000004.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000005.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000006.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000007.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000008.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000009.solution +tests/exhaustive/basic/partition_01/expected/model_1-solution000010.solution +tests/exhaustive/basic/partition_01/expected/model_1.eprime +tests/exhaustive/basic/partition_01/expected/model_2-solution000001.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000002.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000003.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000004.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000005.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000006.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000007.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000008.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000009.solution +tests/exhaustive/basic/partition_01/expected/model_2-solution000010.solution +tests/exhaustive/basic/partition_01/expected/model_2.eprime +tests/exhaustive/basic/partition_01/expected/model_3-solution000001.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000002.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000003.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000004.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000005.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000006.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000007.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000008.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000009.solution +tests/exhaustive/basic/partition_01/expected/model_3-solution000010.solution +tests/exhaustive/basic/partition_01/expected/model_3.eprime +tests/exhaustive/basic/partition_01/partition_01.essence +tests/exhaustive/basic/partition_02/expected-time.txt +tests/exhaustive/basic/partition_02/expected/model_1-solution000001.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000002.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000003.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000004.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000005.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000006.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000007.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000008.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000009.solution +tests/exhaustive/basic/partition_02/expected/model_1-solution000010.solution +tests/exhaustive/basic/partition_02/expected/model_1.eprime +tests/exhaustive/basic/partition_02/expected/model_2-solution000001.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000002.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000003.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000004.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000005.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000006.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000007.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000008.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000009.solution +tests/exhaustive/basic/partition_02/expected/model_2-solution000010.solution +tests/exhaustive/basic/partition_02/expected/model_2.eprime +tests/exhaustive/basic/partition_02/expected/model_3-solution000001.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000002.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000003.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000004.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000005.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000006.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000007.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000008.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000009.solution +tests/exhaustive/basic/partition_02/expected/model_3-solution000010.solution +tests/exhaustive/basic/partition_02/expected/model_3.eprime +tests/exhaustive/basic/partition_02/expected/model_4-solution000001.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000002.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000003.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000004.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000005.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000006.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000007.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000008.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000009.solution +tests/exhaustive/basic/partition_02/expected/model_4-solution000010.solution +tests/exhaustive/basic/partition_02/expected/model_4.eprime +tests/exhaustive/basic/partition_02/partition_02.essence +tests/exhaustive/basic/partition_03/expected/model_1-solution000001.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000002.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000003.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000004.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000005.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000006.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000007.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000008.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000009.solution +tests/exhaustive/basic/partition_03/expected/model_1-solution000010.solution +tests/exhaustive/basic/partition_03/expected/model_1.eprime +tests/exhaustive/basic/partition_03/expected/model_2-solution000001.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000002.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000003.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000004.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000005.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000006.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000007.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000008.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000009.solution +tests/exhaustive/basic/partition_03/expected/model_2-solution000010.solution +tests/exhaustive/basic/partition_03/expected/model_2.eprime +tests/exhaustive/basic/partition_03/expected/model_3-solution000001.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000002.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000003.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000004.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000005.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000006.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000007.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000008.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000009.solution +tests/exhaustive/basic/partition_03/expected/model_3-solution000010.solution +tests/exhaustive/basic/partition_03/expected/model_3.eprime +tests/exhaustive/basic/partition_03/partition_03.essence +tests/exhaustive/basic/partition_05_1/additional-arguments.txt +tests/exhaustive/basic/partition_05_1/expected-time.txt +tests/exhaustive/basic/partition_05_1/expected/model_1-solution000001.solution +tests/exhaustive/basic/partition_05_1/expected/model_1.eprime +tests/exhaustive/basic/partition_05_1/expected/model_2-solution000001.solution +tests/exhaustive/basic/partition_05_1/expected/model_2.eprime +tests/exhaustive/basic/partition_05_1/expected/model_3-solution000001.solution +tests/exhaustive/basic/partition_05_1/expected/model_3.eprime +tests/exhaustive/basic/partition_05_1/expected/model_4-solution000001.solution +tests/exhaustive/basic/partition_05_1/expected/model_4.eprime +tests/exhaustive/basic/partition_05_1/partition_05_1.essence +tests/exhaustive/basic/partition_05_2/additional-arguments.txt +tests/exhaustive/basic/partition_05_2/expected-time.txt +tests/exhaustive/basic/partition_05_2/expected/model_1-solution000001.solution +tests/exhaustive/basic/partition_05_2/expected/model_1.eprime +tests/exhaustive/basic/partition_05_2/expected/model_2-solution000001.solution +tests/exhaustive/basic/partition_05_2/expected/model_2.eprime +tests/exhaustive/basic/partition_05_2/expected/model_3-solution000001.solution +tests/exhaustive/basic/partition_05_2/expected/model_3.eprime +tests/exhaustive/basic/partition_05_2/expected/model_4-solution000001.solution +tests/exhaustive/basic/partition_05_2/expected/model_4.eprime +tests/exhaustive/basic/partition_05_2/partition_05_2.essence +tests/exhaustive/basic/partition_06/expected-time.txt +tests/exhaustive/basic/partition_06/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_1_1.eprime +tests/exhaustive/basic/partition_06/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_1_2.eprime +tests/exhaustive/basic/partition_06/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_1_3-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_1_3-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_1_3.eprime +tests/exhaustive/basic/partition_06/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_1_4-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_1_4-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_1_4.eprime +tests/exhaustive/basic/partition_06/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_2_1.eprime +tests/exhaustive/basic/partition_06/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_2_2.eprime +tests/exhaustive/basic/partition_06/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_2_3-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_2_3-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_2_3.eprime +tests/exhaustive/basic/partition_06/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_2_4-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_2_4-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_2_4.eprime +tests/exhaustive/basic/partition_06/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_3_1-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_3_1-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_3_1.eprime +tests/exhaustive/basic/partition_06/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_3_2-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_3_2-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_3_2.eprime +tests/exhaustive/basic/partition_06/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_3_3-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_3_3-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_3_3.eprime +tests/exhaustive/basic/partition_06/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_3_4-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_3_4-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_3_4.eprime +tests/exhaustive/basic/partition_06/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_4_1-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_4_1-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_4_1.eprime +tests/exhaustive/basic/partition_06/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_4_2-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_4_2-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_4_2.eprime +tests/exhaustive/basic/partition_06/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_4_3-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_4_3-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_4_3.eprime +tests/exhaustive/basic/partition_06/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/partition_06/expected/model_4_4-solution000002.solution +tests/exhaustive/basic/partition_06/expected/model_4_4-solution000003.solution +tests/exhaustive/basic/partition_06/expected/model_4_4.eprime +tests/exhaustive/basic/partition_06/partition_06.essence +tests/exhaustive/basic/partition_07_param/expected/model-given-solution000001.solution +tests/exhaustive/basic/partition_07_param/expected/model-given.eprime-param +tests/exhaustive/basic/partition_07_param/expected/model.eprime +tests/exhaustive/basic/partition_07_param/given.param +tests/exhaustive/basic/partition_07_param/spec.essence +tests/exhaustive/basic/partition_08_param/expected/model-given-solution000001.solution +tests/exhaustive/basic/partition_08_param/expected/model-given.eprime-param +tests/exhaustive/basic/partition_08_param/expected/model.eprime +tests/exhaustive/basic/partition_08_param/given.param +tests/exhaustive/basic/partition_08_param/spec.essence +tests/exhaustive/basic/partition_lit_01/expected/model-solution000001.solution +tests/exhaustive/basic/partition_lit_01/expected/model.eprime +tests/exhaustive/basic/partition_lit_01/partition_lit_01.essence +tests/exhaustive/basic/powerSetComprehensionDirect/expected-time.txt +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000002.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000003.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000004.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000005.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000006.solution +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p.eprime-param +tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4.eprime +tests/exhaustive/basic/powerSetComprehensionDirect/p.param +tests/exhaustive/basic/powerSetComprehensionDirect/pow.essence +tests/exhaustive/basic/powerSetComprehensionPat/expected-time.txt +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3.eprime +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4.eprime +tests/exhaustive/basic/powerSetComprehensionPat/powerSetComprehension.essence +tests/exhaustive/basic/record00/expected/model-solution000001.solution +tests/exhaustive/basic/record00/expected/model.eprime +tests/exhaustive/basic/record00/record00.essence +tests/exhaustive/basic/record01/expected-time.txt +tests/exhaustive/basic/record01/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000004.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000005.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000006.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000007.solution +tests/exhaustive/basic/record01/expected/model_1_1-solution000008.solution +tests/exhaustive/basic/record01/expected/model_1_1.eprime +tests/exhaustive/basic/record01/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000004.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000005.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000006.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000007.solution +tests/exhaustive/basic/record01/expected/model_1_2-solution000008.solution +tests/exhaustive/basic/record01/expected/model_1_2.eprime +tests/exhaustive/basic/record01/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000004.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000005.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000006.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000007.solution +tests/exhaustive/basic/record01/expected/model_2_1-solution000008.solution +tests/exhaustive/basic/record01/expected/model_2_1.eprime +tests/exhaustive/basic/record01/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000004.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000005.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000006.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000007.solution +tests/exhaustive/basic/record01/expected/model_2_2-solution000008.solution +tests/exhaustive/basic/record01/expected/model_2_2.eprime +tests/exhaustive/basic/record01/record01.essence +tests/exhaustive/basic/reflexive_rel/expected/model-solution000001.solution +tests/exhaustive/basic/reflexive_rel/expected/model-solution000002.solution +tests/exhaustive/basic/reflexive_rel/expected/model-solution000003.solution +tests/exhaustive/basic/reflexive_rel/expected/model-solution000004.solution +tests/exhaustive/basic/reflexive_rel/expected/model.eprime +tests/exhaustive/basic/reflexive_rel/reflexive_rel.essence +tests/exhaustive/basic/relation01/expected/model-solution000001.solution +tests/exhaustive/basic/relation01/expected/model-solution000002.solution +tests/exhaustive/basic/relation01/expected/model-solution000003.solution +tests/exhaustive/basic/relation01/expected/model-solution000004.solution +tests/exhaustive/basic/relation01/expected/model-solution000005.solution +tests/exhaustive/basic/relation01/expected/model-solution000006.solution +tests/exhaustive/basic/relation01/expected/model-solution000007.solution +tests/exhaustive/basic/relation01/expected/model-solution000008.solution +tests/exhaustive/basic/relation01/expected/model-solution000009.solution +tests/exhaustive/basic/relation01/expected/model-solution000010.solution +tests/exhaustive/basic/relation01/expected/model-solution000011.solution +tests/exhaustive/basic/relation01/expected/model-solution000012.solution +tests/exhaustive/basic/relation01/expected/model-solution000013.solution +tests/exhaustive/basic/relation01/expected/model-solution000014.solution +tests/exhaustive/basic/relation01/expected/model-solution000015.solution +tests/exhaustive/basic/relation01/expected/model-solution000016.solution +tests/exhaustive/basic/relation01/expected/model.eprime +tests/exhaustive/basic/relation01/relation01.essence +tests/exhaustive/basic/relation02/expected/model-param000001-solution000001.solution +tests/exhaustive/basic/relation02/expected/model-param000001.eprime-param +tests/exhaustive/basic/relation02/expected/model.eprime +tests/exhaustive/basic/relation02/param000001.param +tests/exhaustive/basic/relation02/relation02.essence +tests/exhaustive/basic/relation03_1/expected/model-solution000001.solution +tests/exhaustive/basic/relation03_1/expected/model-solution000002.solution +tests/exhaustive/basic/relation03_1/expected/model-solution000003.solution +tests/exhaustive/basic/relation03_1/expected/model-solution000004.solution +tests/exhaustive/basic/relation03_1/expected/model.eprime +tests/exhaustive/basic/relation03_1/relation03.essence +tests/exhaustive/basic/relation03_2/expected/model-solution000001.solution +tests/exhaustive/basic/relation03_2/expected/model-solution000002.solution +tests/exhaustive/basic/relation03_2/expected/model-solution000003.solution +tests/exhaustive/basic/relation03_2/expected/model-solution000004.solution +tests/exhaustive/basic/relation03_2/expected/model.eprime +tests/exhaustive/basic/relation03_2/relation03_2.essence +tests/exhaustive/basic/relation04_find/expected/model-solution000001.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000002.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000003.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000004.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000005.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000006.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000007.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000008.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000009.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000010.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000011.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000012.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000013.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000014.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000015.solution +tests/exhaustive/basic/relation04_find/expected/model-solution000016.solution +tests/exhaustive/basic/relation04_find/expected/model.eprime +tests/exhaustive/basic/relation04_find/relation04.essence +tests/exhaustive/basic/relation04_param/expected-time.txt +tests/exhaustive/basic/relation04_param/expected/model_1_1-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_1_1-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_1_1.eprime +tests/exhaustive/basic/relation04_param/expected/model_1_2-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_1_2-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_1_2.eprime +tests/exhaustive/basic/relation04_param/expected/model_1_3-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_1_3-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_1_3.eprime +tests/exhaustive/basic/relation04_param/expected/model_1_4-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_1_4-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_1_4.eprime +tests/exhaustive/basic/relation04_param/expected/model_2_1-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_2_1-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_2_1.eprime +tests/exhaustive/basic/relation04_param/expected/model_2_2-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_2_2-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_2_2.eprime +tests/exhaustive/basic/relation04_param/expected/model_2_3-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_2_3-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_2_3.eprime +tests/exhaustive/basic/relation04_param/expected/model_2_4-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_2_4-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_2_4.eprime +tests/exhaustive/basic/relation04_param/expected/model_3_1-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_3_1-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_3_1.eprime +tests/exhaustive/basic/relation04_param/expected/model_3_2-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_3_2-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_3_2.eprime +tests/exhaustive/basic/relation04_param/expected/model_3_3-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_3_3-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_3_3.eprime +tests/exhaustive/basic/relation04_param/expected/model_3_4-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_3_4-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_3_4.eprime +tests/exhaustive/basic/relation04_param/expected/model_4_1-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_4_1-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_4_1.eprime +tests/exhaustive/basic/relation04_param/expected/model_4_2-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_4_2-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_4_2.eprime +tests/exhaustive/basic/relation04_param/expected/model_4_3-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_4_3-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_4_3.eprime +tests/exhaustive/basic/relation04_param/expected/model_4_4-param4-solution000001.solution +tests/exhaustive/basic/relation04_param/expected/model_4_4-param4.eprime-param +tests/exhaustive/basic/relation04_param/expected/model_4_4.eprime +tests/exhaustive/basic/relation04_param/param4.param +tests/exhaustive/basic/relation04_param/relation04_param.essence +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000001.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000002.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000003.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000004.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000005.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000006.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000007.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000008.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000009.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000010.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000011.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000012.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000013.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000014.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000015.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1.eprime +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000001.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000002.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000003.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000004.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000005.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000006.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000007.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000008.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000009.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000010.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000011.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000012.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000013.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000014.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000015.solution +tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2.eprime +tests/exhaustive/basic/relation05_set_fixed_direct/relation05_set_fixed.essence +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000001.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000002.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000003.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000004.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000005.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000006.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000007.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000008.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000009.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000010.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000011.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000012.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000013.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000014.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000015.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1.eprime +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000001.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000002.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000003.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000004.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000005.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000006.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000007.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000008.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000009.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000010.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000011.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000012.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000013.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000014.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000015.solution +tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2.eprime +tests/exhaustive/basic/relation05_set_fixed_setty/relation05_set_fixed_setty.essence +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000001.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000002.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000003.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000004.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000005.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000006.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000007.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000008.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000009.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000010.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000011.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000012.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000013.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000014.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000015.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000016.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000017.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000018.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000019.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000020.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000021.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000022.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000023.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000024.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000025.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000026.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000027.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000028.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000029.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000030.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000031.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000032.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000033.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000034.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000035.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1.eprime +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000001.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000002.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000003.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000004.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000005.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000006.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000007.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000008.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000009.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000010.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000011.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000012.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000013.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000014.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000015.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000016.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000017.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000018.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000019.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000020.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000021.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000022.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000023.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000024.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000025.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000026.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000027.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000028.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000029.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000030.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000031.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000032.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000033.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000034.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000035.solution +tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2.eprime +tests/exhaustive/basic/relation06_set_bounded_direct/relation06_set_bounded.essence +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000001.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000002.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000003.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000004.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000005.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000006.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000007.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000008.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000009.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000010.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000011.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000012.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000013.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000014.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000015.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000016.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000017.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000018.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000019.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000020.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000021.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000022.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000023.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000024.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000025.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000026.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000027.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000028.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000029.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000030.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000031.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000032.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000033.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000034.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000035.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1.eprime +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000001.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000002.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000003.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000004.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000005.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000006.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000007.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000008.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000009.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000010.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000011.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000012.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000013.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000014.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000015.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000016.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000017.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000018.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000019.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000020.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000021.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000022.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000023.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000024.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000025.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000026.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000027.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000028.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000029.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000030.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000031.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000032.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000033.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000034.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000035.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2.eprime +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000001.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000002.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000003.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000004.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000005.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000006.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000007.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000008.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000009.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000010.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000011.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000012.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000013.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000014.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000015.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000016.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000017.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000018.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000019.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000020.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000021.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000022.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000023.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000024.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000025.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000026.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000027.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000028.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000029.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000030.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000031.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000032.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000033.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000034.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000035.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3.eprime +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000001.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000002.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000003.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000004.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000005.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000006.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000007.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000008.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000009.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000010.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000011.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000012.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000013.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000014.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000015.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000016.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000017.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000018.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000019.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000020.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000021.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000022.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000023.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000024.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000025.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000026.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000027.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000028.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000029.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000030.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000031.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000032.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000033.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000034.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000035.solution +tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4.eprime +tests/exhaustive/basic/relation06_set_bounded_setty/relation06_set_bounded_setty.essence +tests/exhaustive/basic/relation07_connex/expected/model-solution000001.solution +tests/exhaustive/basic/relation07_connex/expected/model.eprime +tests/exhaustive/basic/relation07_connex/relation07_connex.essence +tests/exhaustive/basic/sequence01/expected/model-solution000001.solution +tests/exhaustive/basic/sequence01/expected/model-solution000002.solution +tests/exhaustive/basic/sequence01/expected/model-solution000003.solution +tests/exhaustive/basic/sequence01/expected/model-solution000004.solution +tests/exhaustive/basic/sequence01/expected/model-solution000005.solution +tests/exhaustive/basic/sequence01/expected/model-solution000006.solution +tests/exhaustive/basic/sequence01/expected/model-solution000007.solution +tests/exhaustive/basic/sequence01/expected/model-solution000008.solution +tests/exhaustive/basic/sequence01/expected/model-solution000009.solution +tests/exhaustive/basic/sequence01/expected/model.eprime +tests/exhaustive/basic/sequence01/sequence01.essence +tests/exhaustive/basic/sequence02/expected/model-solution000001.solution +tests/exhaustive/basic/sequence02/expected/model-solution000002.solution +tests/exhaustive/basic/sequence02/expected/model-solution000003.solution +tests/exhaustive/basic/sequence02/expected/model-solution000004.solution +tests/exhaustive/basic/sequence02/expected/model-solution000005.solution +tests/exhaustive/basic/sequence02/expected/model-solution000006.solution +tests/exhaustive/basic/sequence02/expected/model-solution000007.solution +tests/exhaustive/basic/sequence02/expected/model-solution000008.solution +tests/exhaustive/basic/sequence02/expected/model-solution000009.solution +tests/exhaustive/basic/sequence02/expected/model-solution000010.solution +tests/exhaustive/basic/sequence02/expected/model-solution000011.solution +tests/exhaustive/basic/sequence02/expected/model-solution000012.solution +tests/exhaustive/basic/sequence02/expected/model-solution000013.solution +tests/exhaustive/basic/sequence02/expected/model.eprime +tests/exhaustive/basic/sequence02/sequence02.essence +tests/exhaustive/basic/sequence03/expected/model-solution000001.solution +tests/exhaustive/basic/sequence03/expected/model-solution000002.solution +tests/exhaustive/basic/sequence03/expected/model-solution000003.solution +tests/exhaustive/basic/sequence03/expected/model-solution000004.solution +tests/exhaustive/basic/sequence03/expected/model-solution000005.solution +tests/exhaustive/basic/sequence03/expected/model-solution000006.solution +tests/exhaustive/basic/sequence03/expected/model-solution000007.solution +tests/exhaustive/basic/sequence03/expected/model-solution000008.solution +tests/exhaustive/basic/sequence03/expected/model-solution000009.solution +tests/exhaustive/basic/sequence03/expected/model-solution000010.solution +tests/exhaustive/basic/sequence03/expected/model-solution000011.solution +tests/exhaustive/basic/sequence03/expected/model-solution000012.solution +tests/exhaustive/basic/sequence03/expected/model.eprime +tests/exhaustive/basic/sequence03/sequence03.essence +tests/exhaustive/basic/sequence04/expected/model-solution000001.solution +tests/exhaustive/basic/sequence04/expected/model-solution000002.solution +tests/exhaustive/basic/sequence04/expected/model-solution000003.solution +tests/exhaustive/basic/sequence04/expected/model-solution000004.solution +tests/exhaustive/basic/sequence04/expected/model-solution000005.solution +tests/exhaustive/basic/sequence04/expected/model.eprime +tests/exhaustive/basic/sequence04/sequence04.essence +tests/exhaustive/basic/sequence05/expected/model-solution000001.solution +tests/exhaustive/basic/sequence05/expected/model-solution000002.solution +tests/exhaustive/basic/sequence05/expected/model-solution000003.solution +tests/exhaustive/basic/sequence05/expected/model-solution000004.solution +tests/exhaustive/basic/sequence05/expected/model.eprime +tests/exhaustive/basic/sequence05/sequence05.essence +tests/exhaustive/basic/sequence_empty_01/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_empty_01/expected/model.eprime +tests/exhaustive/basic/sequence_empty_01/seq.essence +tests/exhaustive/basic/sequence_empty_02/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_empty_02/expected/model.eprime +tests/exhaustive/basic/sequence_empty_02/seq.essence +tests/exhaustive/basic/sequence_empty_03/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_empty_03/expected/model.eprime +tests/exhaustive/basic/sequence_empty_03/seq.essence +tests/exhaustive/basic/sequence_empty_04/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_empty_04/expected/model.eprime +tests/exhaustive/basic/sequence_empty_04/seq.essence +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000002.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000003.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000004.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000005.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000006.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000007.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000008.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000009.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000010.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000011.solution +tests/exhaustive/basic/sequence_injective_01/expected/model-solution000012.solution +tests/exhaustive/basic/sequence_injective_01/expected/model.eprime +tests/exhaustive/basic/sequence_injective_01/sequence.essence +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000002.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000003.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000004.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000005.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000006.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000007.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000008.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000009.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000010.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000011.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000012.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000013.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000014.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000015.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000016.solution +tests/exhaustive/basic/sequence_injective_02/expected/model-solution000017.solution +tests/exhaustive/basic/sequence_injective_02/expected/model.eprime +tests/exhaustive/basic/sequence_injective_02/sequence.essence +tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000002.solution +tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000003.solution +tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000004.solution +tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000005.solution +tests/exhaustive/basic/sequence_subseq_dups/expected/model.eprime +tests/exhaustive/basic/sequence_subseq_dups/seq.essence +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000002.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000003.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000004.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000005.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000006.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000007.solution +tests/exhaustive/basic/sequence_subseq_nodups/expected/model.eprime +tests/exhaustive/basic/sequence_subseq_nodups/seq.essence +tests/exhaustive/basic/sequence_substr/expected/model-solution000001.solution +tests/exhaustive/basic/sequence_substr/expected/model-solution000002.solution +tests/exhaustive/basic/sequence_substr/expected/model-solution000003.solution +tests/exhaustive/basic/sequence_substr/expected/model-solution000004.solution +tests/exhaustive/basic/sequence_substr/expected/model-solution000005.solution +tests/exhaustive/basic/sequence_substr/expected/model-solution000006.solution +tests/exhaustive/basic/sequence_substr/expected/model.eprime +tests/exhaustive/basic/sequence_substr/seq.essence +tests/exhaustive/basic/set01_1/expected/model_1-solution000001.solution +tests/exhaustive/basic/set01_1/expected/model_1-solution000002.solution +tests/exhaustive/basic/set01_1/expected/model_1-solution000003.solution +tests/exhaustive/basic/set01_1/expected/model_1.eprime +tests/exhaustive/basic/set01_1/expected/model_2-solution000001.solution +tests/exhaustive/basic/set01_1/expected/model_2-solution000002.solution +tests/exhaustive/basic/set01_1/expected/model_2-solution000003.solution +tests/exhaustive/basic/set01_1/expected/model_2.eprime +tests/exhaustive/basic/set01_1/set01.essence +tests/exhaustive/basic/set01_2/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/set01_2/expected/model_1_1.eprime +tests/exhaustive/basic/set01_2/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/set01_2/expected/model_1_2.eprime +tests/exhaustive/basic/set01_2/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/set01_2/expected/model_2_1.eprime +tests/exhaustive/basic/set01_2/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/set01_2/expected/model_2_2.eprime +tests/exhaustive/basic/set01_2/set01_2.essence +tests/exhaustive/basic/set01_3/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/set01_3/expected/model_1_1.eprime +tests/exhaustive/basic/set01_3/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/set01_3/expected/model_1_2.eprime +tests/exhaustive/basic/set01_3/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/set01_3/expected/model_2_1.eprime +tests/exhaustive/basic/set01_3/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/set01_3/expected/model_2_2.eprime +tests/exhaustive/basic/set01_3/set01_3.essence +tests/exhaustive/basic/set02/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/set02/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/set02/expected/model_1_1.eprime +tests/exhaustive/basic/set02/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/set02/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/set02/expected/model_1_2.eprime +tests/exhaustive/basic/set02/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/set02/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/set02/expected/model_2_1.eprime +tests/exhaustive/basic/set02/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/set02/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/set02/expected/model_2_2.eprime +tests/exhaustive/basic/set02/set02.essence +tests/exhaustive/basic/set03/expected-time.txt +tests/exhaustive/basic/set03/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/set03/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/set03/expected/model_1_1.eprime +tests/exhaustive/basic/set03/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/set03/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/set03/expected/model_1_2.eprime +tests/exhaustive/basic/set03/expected/model_1_3-solution000001.solution +tests/exhaustive/basic/set03/expected/model_1_3-solution000002.solution +tests/exhaustive/basic/set03/expected/model_1_3.eprime +tests/exhaustive/basic/set03/expected/model_1_4-solution000001.solution +tests/exhaustive/basic/set03/expected/model_1_4-solution000002.solution +tests/exhaustive/basic/set03/expected/model_1_4.eprime +tests/exhaustive/basic/set03/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/set03/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/set03/expected/model_2_1.eprime +tests/exhaustive/basic/set03/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/set03/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/set03/expected/model_2_2.eprime +tests/exhaustive/basic/set03/expected/model_2_3-solution000001.solution +tests/exhaustive/basic/set03/expected/model_2_3-solution000002.solution +tests/exhaustive/basic/set03/expected/model_2_3.eprime +tests/exhaustive/basic/set03/expected/model_2_4-solution000001.solution +tests/exhaustive/basic/set03/expected/model_2_4-solution000002.solution +tests/exhaustive/basic/set03/expected/model_2_4.eprime +tests/exhaustive/basic/set03/expected/model_3_1-solution000001.solution +tests/exhaustive/basic/set03/expected/model_3_1-solution000002.solution +tests/exhaustive/basic/set03/expected/model_3_1.eprime +tests/exhaustive/basic/set03/expected/model_3_2-solution000001.solution +tests/exhaustive/basic/set03/expected/model_3_2-solution000002.solution +tests/exhaustive/basic/set03/expected/model_3_2.eprime +tests/exhaustive/basic/set03/expected/model_3_3-solution000001.solution +tests/exhaustive/basic/set03/expected/model_3_3-solution000002.solution +tests/exhaustive/basic/set03/expected/model_3_3.eprime +tests/exhaustive/basic/set03/expected/model_3_4-solution000001.solution +tests/exhaustive/basic/set03/expected/model_3_4-solution000002.solution +tests/exhaustive/basic/set03/expected/model_3_4.eprime +tests/exhaustive/basic/set03/expected/model_4_1-solution000001.solution +tests/exhaustive/basic/set03/expected/model_4_1-solution000002.solution +tests/exhaustive/basic/set03/expected/model_4_1.eprime +tests/exhaustive/basic/set03/expected/model_4_2-solution000001.solution +tests/exhaustive/basic/set03/expected/model_4_2-solution000002.solution +tests/exhaustive/basic/set03/expected/model_4_2.eprime +tests/exhaustive/basic/set03/expected/model_4_3-solution000001.solution +tests/exhaustive/basic/set03/expected/model_4_3-solution000002.solution +tests/exhaustive/basic/set03/expected/model_4_3.eprime +tests/exhaustive/basic/set03/expected/model_4_4-solution000001.solution +tests/exhaustive/basic/set03/expected/model_4_4-solution000002.solution +tests/exhaustive/basic/set03/expected/model_4_4.eprime +tests/exhaustive/basic/set03/set03.essence +tests/exhaustive/basic/set04/expected-time.txt +tests/exhaustive/basic/set04/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_1_1.eprime +tests/exhaustive/basic/set04/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_1_2.eprime +tests/exhaustive/basic/set04/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_1_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_1_3.eprime +tests/exhaustive/basic/set04/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_1_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_1_4.eprime +tests/exhaustive/basic/set04/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_2_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_2_1.eprime +tests/exhaustive/basic/set04/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_2_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_2_3.eprime +tests/exhaustive/basic/set04/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_2_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_2_4.eprime +tests/exhaustive/basic/set04/expected/model_1_3_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_3_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_3_1.eprime +tests/exhaustive/basic/set04/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_3_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_3_2.eprime +tests/exhaustive/basic/set04/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_3_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_3_4.eprime +tests/exhaustive/basic/set04/expected/model_1_4_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_4_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_4_1.eprime +tests/exhaustive/basic/set04/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_4_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_4_2.eprime +tests/exhaustive/basic/set04/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_1_4_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_1_4_3.eprime +tests/exhaustive/basic/set04/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_1_1.eprime +tests/exhaustive/basic/set04/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_1_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_1_3.eprime +tests/exhaustive/basic/set04/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_1_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_1_4.eprime +tests/exhaustive/basic/set04/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_2_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_2_1.eprime +tests/exhaustive/basic/set04/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_2_2.eprime +tests/exhaustive/basic/set04/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_2_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_2_3.eprime +tests/exhaustive/basic/set04/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_2_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_2_4.eprime +tests/exhaustive/basic/set04/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_3_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_3_1.eprime +tests/exhaustive/basic/set04/expected/model_2_3_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_3_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_3_2.eprime +tests/exhaustive/basic/set04/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_3_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_3_4.eprime +tests/exhaustive/basic/set04/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_4_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_4_1.eprime +tests/exhaustive/basic/set04/expected/model_2_4_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_4_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_4_2.eprime +tests/exhaustive/basic/set04/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_2_4_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_2_4_3.eprime +tests/exhaustive/basic/set04/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_1_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_1_1.eprime +tests/exhaustive/basic/set04/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_1_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_1_2.eprime +tests/exhaustive/basic/set04/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_1_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_1_4.eprime +tests/exhaustive/basic/set04/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_2_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_2_1.eprime +tests/exhaustive/basic/set04/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_2_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_2_2.eprime +tests/exhaustive/basic/set04/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_2_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_2_4.eprime +tests/exhaustive/basic/set04/expected/model_3_3_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_3_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_3_1.eprime +tests/exhaustive/basic/set04/expected/model_3_3_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_3_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_3_2.eprime +tests/exhaustive/basic/set04/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_3_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_3_3.eprime +tests/exhaustive/basic/set04/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_3_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_3_4.eprime +tests/exhaustive/basic/set04/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_4_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_4_1.eprime +tests/exhaustive/basic/set04/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_4_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_4_2.eprime +tests/exhaustive/basic/set04/expected/model_3_4_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_3_4_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_3_4_3.eprime +tests/exhaustive/basic/set04/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_1_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_1_1.eprime +tests/exhaustive/basic/set04/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_1_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_1_2.eprime +tests/exhaustive/basic/set04/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_1_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_1_3.eprime +tests/exhaustive/basic/set04/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_2_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_2_1.eprime +tests/exhaustive/basic/set04/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_2_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_2_2.eprime +tests/exhaustive/basic/set04/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_2_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_2_3.eprime +tests/exhaustive/basic/set04/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_3_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_3_1.eprime +tests/exhaustive/basic/set04/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_3_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_3_2.eprime +tests/exhaustive/basic/set04/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_3_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_3_3.eprime +tests/exhaustive/basic/set04/expected/model_4_4_1-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_4_1-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_4_1.eprime +tests/exhaustive/basic/set04/expected/model_4_4_2-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_4_2-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_4_2.eprime +tests/exhaustive/basic/set04/expected/model_4_4_3-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_4_3-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_4_3.eprime +tests/exhaustive/basic/set04/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/set04/expected/model_4_4_4-solution000002.solution +tests/exhaustive/basic/set04/expected/model_4_4_4.eprime +tests/exhaustive/basic/set04/set04.essence +tests/exhaustive/basic/set05/expected-time.txt +tests/exhaustive/basic/set05/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_1_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_1_1.eprime +tests/exhaustive/basic/set05/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_1_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_1_2.eprime +tests/exhaustive/basic/set05/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_1_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_1_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_1_3.eprime +tests/exhaustive/basic/set05/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_1_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_1_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_1_4.eprime +tests/exhaustive/basic/set05/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_2_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_2_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_2_1.eprime +tests/exhaustive/basic/set05/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_2_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_2_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_2_3.eprime +tests/exhaustive/basic/set05/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_2_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_2_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_2_4.eprime +tests/exhaustive/basic/set05/expected/model_1_3_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_3_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_3_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_3_1.eprime +tests/exhaustive/basic/set05/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_3_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_3_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_3_2.eprime +tests/exhaustive/basic/set05/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_3_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_3_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_3_4.eprime +tests/exhaustive/basic/set05/expected/model_1_4_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_4_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_4_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_4_1.eprime +tests/exhaustive/basic/set05/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_4_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_4_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_4_2.eprime +tests/exhaustive/basic/set05/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_1_4_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_1_4_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_1_4_3.eprime +tests/exhaustive/basic/set05/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_1_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_1_1.eprime +tests/exhaustive/basic/set05/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_1_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_1_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_1_3.eprime +tests/exhaustive/basic/set05/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_1_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_1_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_1_4.eprime +tests/exhaustive/basic/set05/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_2_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_2_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_2_1.eprime +tests/exhaustive/basic/set05/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_2_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_2_2.eprime +tests/exhaustive/basic/set05/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_2_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_2_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_2_3.eprime +tests/exhaustive/basic/set05/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_2_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_2_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_2_4.eprime +tests/exhaustive/basic/set05/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_3_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_3_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_3_1.eprime +tests/exhaustive/basic/set05/expected/model_2_3_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_3_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_3_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_3_2.eprime +tests/exhaustive/basic/set05/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_3_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_3_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_3_4.eprime +tests/exhaustive/basic/set05/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_4_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_4_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_4_1.eprime +tests/exhaustive/basic/set05/expected/model_2_4_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_4_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_4_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_4_2.eprime +tests/exhaustive/basic/set05/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_2_4_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_2_4_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_2_4_3.eprime +tests/exhaustive/basic/set05/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_1_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_1_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_1_1.eprime +tests/exhaustive/basic/set05/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_1_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_1_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_1_2.eprime +tests/exhaustive/basic/set05/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_1_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_1_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_1_4.eprime +tests/exhaustive/basic/set05/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_2_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_2_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_2_1.eprime +tests/exhaustive/basic/set05/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_2_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_2_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_2_2.eprime +tests/exhaustive/basic/set05/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_2_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_2_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_2_4.eprime +tests/exhaustive/basic/set05/expected/model_3_3_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_3_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_3_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_3_1.eprime +tests/exhaustive/basic/set05/expected/model_3_3_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_3_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_3_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_3_2.eprime +tests/exhaustive/basic/set05/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_3_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_3_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_3_3.eprime +tests/exhaustive/basic/set05/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_3_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_3_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_3_4.eprime +tests/exhaustive/basic/set05/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_4_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_4_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_4_1.eprime +tests/exhaustive/basic/set05/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_4_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_4_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_4_2.eprime +tests/exhaustive/basic/set05/expected/model_3_4_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_3_4_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_3_4_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_3_4_3.eprime +tests/exhaustive/basic/set05/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_1_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_1_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_1_1.eprime +tests/exhaustive/basic/set05/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_1_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_1_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_1_2.eprime +tests/exhaustive/basic/set05/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_1_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_1_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_1_3.eprime +tests/exhaustive/basic/set05/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_2_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_2_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_2_1.eprime +tests/exhaustive/basic/set05/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_2_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_2_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_2_2.eprime +tests/exhaustive/basic/set05/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_2_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_2_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_2_3.eprime +tests/exhaustive/basic/set05/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_3_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_3_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_3_1.eprime +tests/exhaustive/basic/set05/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_3_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_3_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_3_2.eprime +tests/exhaustive/basic/set05/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_3_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_3_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_3_3.eprime +tests/exhaustive/basic/set05/expected/model_4_4_1-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_4_1-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_4_1-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_4_1.eprime +tests/exhaustive/basic/set05/expected/model_4_4_2-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_4_2-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_4_2-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_4_2.eprime +tests/exhaustive/basic/set05/expected/model_4_4_3-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_4_3-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_4_3-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_4_3.eprime +tests/exhaustive/basic/set05/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/set05/expected/model_4_4_4-solution000002.solution +tests/exhaustive/basic/set05/expected/model_4_4_4-solution000003.solution +tests/exhaustive/basic/set05/expected/model_4_4_4.eprime +tests/exhaustive/basic/set05/set05.essence +tests/exhaustive/basic/set06/expected-time.txt +tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_1.eprime +tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_2.eprime +tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_3.eprime +tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_1_4.eprime +tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_2_1.eprime +tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_2_3.eprime +tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_2_4.eprime +tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_3_1.eprime +tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_3_2.eprime +tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_3_4.eprime +tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_4_1.eprime +tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_4_2.eprime +tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_1_4_3.eprime +tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_1_1.eprime +tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_1_3.eprime +tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_1_4.eprime +tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_2_1.eprime +tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_2_3.eprime +tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_2_4.eprime +tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_3_1.eprime +tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_3_4.eprime +tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_4_1.eprime +tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_2_4_3.eprime +tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_1_1.eprime +tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_1_2.eprime +tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_1_4.eprime +tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_2_1.eprime +tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_2_4.eprime +tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_3_1.eprime +tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_3_2.eprime +tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_3_4.eprime +tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_4_1.eprime +tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_3_4_2.eprime +tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_1_1.eprime +tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_1_2.eprime +tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_1_3.eprime +tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_2_1.eprime +tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_2_3.eprime +tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_3_1.eprime +tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_3_2.eprime +tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_4_1.eprime +tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_4_2.eprime +tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_1_4_4_3.eprime +tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_1_1.eprime +tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_1_3.eprime +tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_1_4.eprime +tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_2_1.eprime +tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_2_3.eprime +tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_2_4.eprime +tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_3_1.eprime +tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_3_4.eprime +tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_4_1.eprime +tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_1_4_3.eprime +tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_1_1.eprime +tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_1_3.eprime +tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_1_4.eprime +tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_1.eprime +tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_2.eprime +tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_3.eprime +tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_2_4.eprime +tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_3_1.eprime +tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_3_2.eprime +tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_3_4.eprime +tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_4_1.eprime +tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_4_2.eprime +tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_2_4_3.eprime +tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_1_1.eprime +tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_1_4.eprime +tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_2_1.eprime +tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_2_2.eprime +tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_2_4.eprime +tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_3_1.eprime +tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_3_2.eprime +tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_3_4.eprime +tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_4_1.eprime +tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_3_4_2.eprime +tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_1_1.eprime +tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_1_3.eprime +tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_2_1.eprime +tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_2_2.eprime +tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_2_3.eprime +tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_3_1.eprime +tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_3_2.eprime +tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_4_1.eprime +tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_4_2.eprime +tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_2_4_4_3.eprime +tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_1_1.eprime +tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_1_2.eprime +tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_1_4.eprime +tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_2_1.eprime +tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_2_4.eprime +tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_3_1.eprime +tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_3_2.eprime +tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_3_4.eprime +tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_4_1.eprime +tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_1_4_2.eprime +tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_1_1.eprime +tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_1_4.eprime +tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_2_1.eprime +tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_2_2.eprime +tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_2_4.eprime +tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_3_1.eprime +tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_3_2.eprime +tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_3_4.eprime +tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_4_1.eprime +tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_2_4_2.eprime +tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_1_1.eprime +tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_1_2.eprime +tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_1_4.eprime +tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_2_1.eprime +tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_2_2.eprime +tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_2_4.eprime +tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_1.eprime +tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_2.eprime +tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_3.eprime +tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_3_4.eprime +tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_4_1.eprime +tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_4_2.eprime +tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_3_4_3.eprime +tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_1_1.eprime +tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_1_2.eprime +tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_2_1.eprime +tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_2_2.eprime +tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_3_1.eprime +tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_3_2.eprime +tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_3_3.eprime +tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_4_1.eprime +tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_4_2.eprime +tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_3_4_4_3.eprime +tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_1_1.eprime +tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_1_2.eprime +tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_1_3.eprime +tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_2_1.eprime +tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_2_3.eprime +tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_3_1.eprime +tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_3_2.eprime +tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_4_1.eprime +tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_4_2.eprime +tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_1_4_3.eprime +tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_1_1.eprime +tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_1_3.eprime +tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_2_1.eprime +tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_2_2.eprime +tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_2_3.eprime +tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_3_1.eprime +tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_3_2.eprime +tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_4_1.eprime +tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_4_2.eprime +tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_2_4_3.eprime +tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_1_1.eprime +tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_1_2.eprime +tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_2_1.eprime +tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_2_2.eprime +tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_3_1.eprime +tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_3_2.eprime +tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_3_3.eprime +tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_4_1.eprime +tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_4_2.eprime +tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_3_4_3.eprime +tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_1_1.eprime +tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_1_2.eprime +tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_1_3.eprime +tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_2_1.eprime +tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_2_2.eprime +tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_2_3.eprime +tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_3_1.eprime +tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_3_2.eprime +tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_3_3.eprime +tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_1.eprime +tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_2.eprime +tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_3.eprime +tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000001.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000002.solution +tests/exhaustive/basic/set06/expected/model_4_4_4_4.eprime +tests/exhaustive/basic/set06/set06.essence +tests/exhaustive/basic/set07/expected-time.txt +tests/exhaustive/basic/set07/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_1_1.eprime +tests/exhaustive/basic/set07/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_1_2.eprime +tests/exhaustive/basic/set07/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_1_3.eprime +tests/exhaustive/basic/set07/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_1_4.eprime +tests/exhaustive/basic/set07/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_2_1.eprime +tests/exhaustive/basic/set07/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_2_3.eprime +tests/exhaustive/basic/set07/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_2_4.eprime +tests/exhaustive/basic/set07/expected/model_1_3_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_3_1.eprime +tests/exhaustive/basic/set07/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_3_2.eprime +tests/exhaustive/basic/set07/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_3_4.eprime +tests/exhaustive/basic/set07/expected/model_1_4_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_4_1.eprime +tests/exhaustive/basic/set07/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_4_2.eprime +tests/exhaustive/basic/set07/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_1_4_3.eprime +tests/exhaustive/basic/set07/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_1_1.eprime +tests/exhaustive/basic/set07/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_1_3.eprime +tests/exhaustive/basic/set07/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_1_4.eprime +tests/exhaustive/basic/set07/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_2_1.eprime +tests/exhaustive/basic/set07/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_2_2.eprime +tests/exhaustive/basic/set07/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_2_3.eprime +tests/exhaustive/basic/set07/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_2_4.eprime +tests/exhaustive/basic/set07/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_3_1.eprime +tests/exhaustive/basic/set07/expected/model_2_3_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_3_2.eprime +tests/exhaustive/basic/set07/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_3_4.eprime +tests/exhaustive/basic/set07/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_4_1.eprime +tests/exhaustive/basic/set07/expected/model_2_4_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_4_2.eprime +tests/exhaustive/basic/set07/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_2_4_3.eprime +tests/exhaustive/basic/set07/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_1_1.eprime +tests/exhaustive/basic/set07/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_1_2.eprime +tests/exhaustive/basic/set07/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_1_4.eprime +tests/exhaustive/basic/set07/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_2_1.eprime +tests/exhaustive/basic/set07/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_2_2.eprime +tests/exhaustive/basic/set07/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_2_4.eprime +tests/exhaustive/basic/set07/expected/model_3_3_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_3_1.eprime +tests/exhaustive/basic/set07/expected/model_3_3_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_3_2.eprime +tests/exhaustive/basic/set07/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_3_3.eprime +tests/exhaustive/basic/set07/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_3_4.eprime +tests/exhaustive/basic/set07/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_4_1.eprime +tests/exhaustive/basic/set07/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_4_2.eprime +tests/exhaustive/basic/set07/expected/model_3_4_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_3_4_3.eprime +tests/exhaustive/basic/set07/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_1_1.eprime +tests/exhaustive/basic/set07/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_1_2.eprime +tests/exhaustive/basic/set07/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_1_3.eprime +tests/exhaustive/basic/set07/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_2_1.eprime +tests/exhaustive/basic/set07/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_2_2.eprime +tests/exhaustive/basic/set07/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_2_3.eprime +tests/exhaustive/basic/set07/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_3_1.eprime +tests/exhaustive/basic/set07/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_3_2.eprime +tests/exhaustive/basic/set07/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_3_3.eprime +tests/exhaustive/basic/set07/expected/model_4_4_1-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_4_1.eprime +tests/exhaustive/basic/set07/expected/model_4_4_2-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_4_2.eprime +tests/exhaustive/basic/set07/expected/model_4_4_3-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_4_3.eprime +tests/exhaustive/basic/set07/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/set07/expected/model_4_4_4.eprime +tests/exhaustive/basic/set07/set07.essence +tests/exhaustive/basic/set08/expected-time.txt +tests/exhaustive/basic/set08/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/set08/expected/model_1_1.eprime +tests/exhaustive/basic/set08/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/set08/expected/model_1_2.eprime +tests/exhaustive/basic/set08/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/set08/expected/model_2_1.eprime +tests/exhaustive/basic/set08/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/set08/expected/model_2_2.eprime +tests/exhaustive/basic/set08/set08.essence +tests/exhaustive/basic/set09/expected-time.txt +tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_1.eprime +tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_2.eprime +tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_3.eprime +tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_1_4.eprime +tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_1.eprime +tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_2.eprime +tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_3.eprime +tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_2_4.eprime +tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_1.eprime +tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_2.eprime +tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_3.eprime +tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_3_4.eprime +tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_1.eprime +tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_2.eprime +tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_3.eprime +tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_1_4_4.eprime +tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_1.eprime +tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_2.eprime +tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_3.eprime +tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_1_4.eprime +tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_1.eprime +tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_2.eprime +tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_3.eprime +tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_2_4.eprime +tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_1.eprime +tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_2.eprime +tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_3.eprime +tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_3_4.eprime +tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_1.eprime +tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_2.eprime +tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_3.eprime +tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_2_4_4.eprime +tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_1.eprime +tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_2.eprime +tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_3.eprime +tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_1_4.eprime +tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_1.eprime +tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_2.eprime +tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_3.eprime +tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_2_4.eprime +tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_1.eprime +tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_2.eprime +tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_3.eprime +tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_3_4.eprime +tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_1.eprime +tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_2.eprime +tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_3.eprime +tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_3_4_4.eprime +tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_1.eprime +tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_2.eprime +tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_3.eprime +tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_1_4.eprime +tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_1.eprime +tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_2.eprime +tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_3.eprime +tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_2_4.eprime +tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_1.eprime +tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_2.eprime +tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_3.eprime +tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_3_4.eprime +tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_1.eprime +tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_2.eprime +tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_3.eprime +tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_1_4_4_4.eprime +tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_1.eprime +tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_2.eprime +tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_3.eprime +tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_1_4.eprime +tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_1.eprime +tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_2.eprime +tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_3.eprime +tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_2_4.eprime +tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_1.eprime +tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_2.eprime +tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_3.eprime +tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_3_4.eprime +tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_1.eprime +tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_2.eprime +tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_3.eprime +tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_1_4_4.eprime +tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_1.eprime +tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_2.eprime +tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_3.eprime +tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_1_4.eprime +tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_1.eprime +tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_2.eprime +tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_3.eprime +tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_2_4.eprime +tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_1.eprime +tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_2.eprime +tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_3.eprime +tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_3_4.eprime +tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_1.eprime +tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_2.eprime +tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_3.eprime +tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_2_4_4.eprime +tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_1.eprime +tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_2.eprime +tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_3.eprime +tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_1_4.eprime +tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_1.eprime +tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_2.eprime +tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_3.eprime +tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_2_4.eprime +tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_1.eprime +tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_2.eprime +tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_3.eprime +tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_3_4.eprime +tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_1.eprime +tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_2.eprime +tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_3.eprime +tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_3_4_4.eprime +tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_1.eprime +tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_2.eprime +tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_3.eprime +tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_1_4.eprime +tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_1.eprime +tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_2.eprime +tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_3.eprime +tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_2_4.eprime +tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_1.eprime +tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_2.eprime +tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_3.eprime +tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_3_4.eprime +tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_1.eprime +tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_2.eprime +tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_3.eprime +tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_2_4_4_4.eprime +tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_1.eprime +tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_2.eprime +tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_3.eprime +tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_1_4.eprime +tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_1.eprime +tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_2.eprime +tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_3.eprime +tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_2_4.eprime +tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_1.eprime +tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_2.eprime +tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_3.eprime +tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_3_4.eprime +tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_1.eprime +tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_2.eprime +tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_3.eprime +tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_1_4_4.eprime +tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_1.eprime +tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_2.eprime +tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_3.eprime +tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_1_4.eprime +tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_1.eprime +tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_2.eprime +tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_3.eprime +tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_2_4.eprime +tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_1.eprime +tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_2.eprime +tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_3.eprime +tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_3_4.eprime +tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_1.eprime +tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_2.eprime +tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_3.eprime +tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_2_4_4.eprime +tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_1.eprime +tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_2.eprime +tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_3.eprime +tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_1_4.eprime +tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_1.eprime +tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_2.eprime +tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_3.eprime +tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_2_4.eprime +tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_1.eprime +tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_2.eprime +tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_3.eprime +tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_3_4.eprime +tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_1.eprime +tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_2.eprime +tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_3.eprime +tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_3_4_4.eprime +tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_1.eprime +tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_2.eprime +tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_3.eprime +tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_1_4.eprime +tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_1.eprime +tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_2.eprime +tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_3.eprime +tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_2_4.eprime +tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_1.eprime +tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_2.eprime +tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_3.eprime +tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_3_4.eprime +tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_1.eprime +tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_2.eprime +tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_3.eprime +tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_3_4_4_4.eprime +tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_1.eprime +tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_2.eprime +tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_3.eprime +tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_1_4.eprime +tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_1.eprime +tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_2.eprime +tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_3.eprime +tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_2_4.eprime +tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_1.eprime +tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_2.eprime +tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_3.eprime +tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_3_4.eprime +tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_1.eprime +tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_2.eprime +tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_3.eprime +tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_1_4_4.eprime +tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_1.eprime +tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_2.eprime +tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_3.eprime +tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_1_4.eprime +tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_1.eprime +tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_2.eprime +tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_3.eprime +tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_2_4.eprime +tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_1.eprime +tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_2.eprime +tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_3.eprime +tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_3_4.eprime +tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_1.eprime +tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_2.eprime +tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_3.eprime +tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_2_4_4.eprime +tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_1.eprime +tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_2.eprime +tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_3.eprime +tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_1_4.eprime +tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_1.eprime +tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_2.eprime +tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_3.eprime +tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_2_4.eprime +tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_1.eprime +tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_2.eprime +tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_3.eprime +tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_3_4.eprime +tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_1.eprime +tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_2.eprime +tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_3.eprime +tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_3_4_4.eprime +tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_1.eprime +tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_2.eprime +tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_3.eprime +tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_1_4.eprime +tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_1.eprime +tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_2.eprime +tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_3.eprime +tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_2_4.eprime +tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_1.eprime +tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_2.eprime +tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_3.eprime +tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_3_4.eprime +tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_1.eprime +tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_2.eprime +tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_3.eprime +tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000001.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000002.solution +tests/exhaustive/basic/set09/expected/model_4_4_4_4.eprime +tests/exhaustive/basic/set09/set09.essence +tests/exhaustive/basic/setOfSet01/expected-time.txt +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_1-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_1.eprime +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_2-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_2.eprime +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_3-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_3.eprime +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_4-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_4.eprime +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_5-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_5.eprime +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_6-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_6.eprime +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_7-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_7.eprime +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000001.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000002.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000003.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000004.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000005.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000006.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000007.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000008.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000009.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000010.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000011.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000012.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000013.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000014.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000015.solution +tests/exhaustive/basic/setOfSet01/expected/model_8-solution000016.solution +tests/exhaustive/basic/setOfSet01/expected/model_8.eprime +tests/exhaustive/basic/setOfSet01/setOfSet01.essence +tests/exhaustive/basic/setOfSet02/expected-time.txt +tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000001.solution +tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000002.solution +tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000003.solution +tests/exhaustive/basic/setOfSet02/expected/model_1_1.eprime +tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000001.solution +tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000002.solution +tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000003.solution +tests/exhaustive/basic/setOfSet02/expected/model_1_2.eprime +tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000001.solution +tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000002.solution +tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000003.solution +tests/exhaustive/basic/setOfSet02/expected/model_2_1.eprime +tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000001.solution +tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000002.solution +tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000003.solution +tests/exhaustive/basic/setOfSet02/expected/model_2_2.eprime +tests/exhaustive/basic/setOfSet02/setOfSet02.essence +tests/exhaustive/basic/setOfSet03/expected/model_1-solution000001.solution +tests/exhaustive/basic/setOfSet03/expected/model_1-solution000002.solution +tests/exhaustive/basic/setOfSet03/expected/model_1-solution000003.solution +tests/exhaustive/basic/setOfSet03/expected/model_1-solution000004.solution +tests/exhaustive/basic/setOfSet03/expected/model_1-solution000005.solution +tests/exhaustive/basic/setOfSet03/expected/model_1-solution000006.solution +tests/exhaustive/basic/setOfSet03/expected/model_1.eprime +tests/exhaustive/basic/setOfSet03/expected/model_2-solution000001.solution +tests/exhaustive/basic/setOfSet03/expected/model_2-solution000002.solution +tests/exhaustive/basic/setOfSet03/expected/model_2-solution000003.solution +tests/exhaustive/basic/setOfSet03/expected/model_2-solution000004.solution +tests/exhaustive/basic/setOfSet03/expected/model_2-solution000005.solution +tests/exhaustive/basic/setOfSet03/expected/model_2-solution000006.solution +tests/exhaustive/basic/setOfSet03/expected/model_2.eprime +tests/exhaustive/basic/setOfSet03/setOfSet03.essence +tests/exhaustive/basic/setOfSet04/expected-time.txt +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_1_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_2_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_3_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_1_4_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_1_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_2_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_3_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_2_4_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_1_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_2_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_3_4.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_3_4_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_1_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_2_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_1.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_2.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_3_3.eprime +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000002.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000003.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000004.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000005.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000006.solution +tests/exhaustive/basic/setOfSet04/expected/model_4_4_4.eprime +tests/exhaustive/basic/setOfSet04/setOfSet04.essence +tests/exhaustive/basic/set_card_00/expected-time.txt +tests/exhaustive/basic/set_card_00/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_1_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_1_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_1_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_2_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_2_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_2_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_2_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_2_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_2_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_2_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_2_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_3_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_3_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_3_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_3_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_3_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_3_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_3_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_3_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_3_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_4_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_4_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_4_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_4_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_4_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_4_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_1_4_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_1_4_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_1_4_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_1_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_1_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_1_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_1_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_1_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_1_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_1_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_1_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_2_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_2_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_2_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_3_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_3_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_3_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_3_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_3_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_3_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_3_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_3_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_3_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_4_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_4_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_4_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_4_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_4_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_4_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_2_4_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_2_4_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_2_4_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_1_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_1_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_1_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_1_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_1_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_1_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_1_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_1_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_1_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_2_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_2_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_2_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_2_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_2_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_2_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_2_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_2_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_2_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_3_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_3_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_3_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_3_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_3_4.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_4_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_4_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_4_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_4_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_4_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_4_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_3_4_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_3_4_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_3_4_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_1_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_1_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_1_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_1_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_1_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_1_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_1_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_1_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_1_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_2_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_2_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_2_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_2_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_2_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_2_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_2_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_2_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_2_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_3_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_3_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_3_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_3_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_3_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_3_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_3_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_3_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_3_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_4_1-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_1-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_1.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_4_2-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_2-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_2.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_4_3-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_3-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_3.eprime +tests/exhaustive/basic/set_card_00/expected/model_4_4_4-solution000001.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_4-solution000002.solution +tests/exhaustive/basic/set_card_00/expected/model_4_4_4.eprime +tests/exhaustive/basic/set_card_00/set_card_00.essence +tests/exhaustive/basic/set_card_01/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/set_card_01/expected/model_1_1_1.eprime +tests/exhaustive/basic/set_card_01/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/set_card_01/expected/model_1_1_2.eprime +tests/exhaustive/basic/set_card_01/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/set_card_01/expected/model_1_2_1.eprime +tests/exhaustive/basic/set_card_01/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/set_card_01/expected/model_2_1_1.eprime +tests/exhaustive/basic/set_card_01/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/set_card_01/expected/model_2_2_1.eprime +tests/exhaustive/basic/set_card_01/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/set_card_01/expected/model_2_2_2.eprime +tests/exhaustive/basic/set_card_01/set_card_01.essence +tests/exhaustive/basic/set_card_02/expected/model_1_1_1-solution000001.solution +tests/exhaustive/basic/set_card_02/expected/model_1_1_1.eprime +tests/exhaustive/basic/set_card_02/expected/model_1_1_2-solution000001.solution +tests/exhaustive/basic/set_card_02/expected/model_1_1_2.eprime +tests/exhaustive/basic/set_card_02/expected/model_1_2_1-solution000001.solution +tests/exhaustive/basic/set_card_02/expected/model_1_2_1.eprime +tests/exhaustive/basic/set_card_02/expected/model_2_1_1-solution000001.solution +tests/exhaustive/basic/set_card_02/expected/model_2_1_1.eprime +tests/exhaustive/basic/set_card_02/expected/model_2_2_1-solution000001.solution +tests/exhaustive/basic/set_card_02/expected/model_2_2_1.eprime +tests/exhaustive/basic/set_card_02/expected/model_2_2_2-solution000001.solution +tests/exhaustive/basic/set_card_02/expected/model_2_2_2.eprime +tests/exhaustive/basic/set_card_02/set_card_02.essence +tests/exhaustive/basic/slice01/expected/model-solution000001.solution +tests/exhaustive/basic/slice01/expected/model.eprime +tests/exhaustive/basic/slice01/slice01.essence +tests/exhaustive/basic/toSet_comprehension/expected-time.txt +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000004.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_1.eprime +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000004.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_2.eprime +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000004.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_3.eprime +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000001.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000002.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000003.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000004.solution +tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5.eprime-param +tests/exhaustive/basic/toSet_comprehension/expected/model_4.eprime +tests/exhaustive/basic/toSet_comprehension/n4.param +tests/exhaustive/basic/toSet_comprehension/n5.param +tests/exhaustive/basic/toSet_comprehension/test.essence +tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000001.solution +tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000002.solution +tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000003.solution +tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000004.solution +tests/exhaustive/basic/tuple01_bool_int/expected/model.eprime +tests/exhaustive/basic/tuple01_bool_int/tuple01_bool_int.essence +tests/exhaustive/basic/tuple02_nested/expected/model-solution000001.solution +tests/exhaustive/basic/tuple02_nested/expected/model-solution000002.solution +tests/exhaustive/basic/tuple02_nested/expected/model-solution000003.solution +tests/exhaustive/basic/tuple02_nested/expected/model-solution000004.solution +tests/exhaustive/basic/tuple02_nested/expected/model.eprime +tests/exhaustive/basic/tuple02_nested/tuple02_nested.essence +tests/exhaustive/basic/tuple03_literal/expected/model-solution000001.solution +tests/exhaustive/basic/tuple03_literal/expected/model.eprime +tests/exhaustive/basic/tuple03_literal/tuple03_literal.essence +tests/exhaustive/basic/typed01/expected-time.txt +tests/exhaustive/basic/typed01/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_1_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_1_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_2_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_2_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_3_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_3_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_1_4_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_1_4_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_1_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_1_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_2_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_2_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_3_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_3_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_2_4_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_2_4_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_1_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_1_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_2_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_2_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_3_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_3_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_3_4_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_3_4_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_1_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_1_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_2_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_2_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_3_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_3_4_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_1_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_1_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_1_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_1_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_1_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_2_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_2_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_2_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_2_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_2_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_3_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_3_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_3_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_3_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_3_4.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_4_1-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_1-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_1-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_1.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_4_2-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_2-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_2-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_2.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_4_3-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_3-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_3-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_3.eprime +tests/exhaustive/basic/typed01/expected/model_4_4_4_4-solution000001.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_4-solution000002.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_4-solution000003.solution +tests/exhaustive/basic/typed01/expected/model_4_4_4_4.eprime +tests/exhaustive/basic/typed01/typed01.essence +tests/exhaustive/basic/undefinedness_01/expected/model-solution000001.solution +tests/exhaustive/basic/undefinedness_01/expected/model.eprime +tests/exhaustive/basic/undefinedness_01/undefinedness_01.essence +tests/exhaustive/basic/undefinedness_02/expected/model-solution000001.solution +tests/exhaustive/basic/undefinedness_02/expected/model.eprime +tests/exhaustive/basic/undefinedness_02/undefinedness_02.essence +tests/exhaustive/basic/undefinedness_03/expected/model.eprime +tests/exhaustive/basic/undefinedness_03/undefinedness_03.essence +tests/exhaustive/basic/undefinedness_04/expected/model-n_is_0.eprime-param +tests/exhaustive/basic/undefinedness_04/expected/model.eprime +tests/exhaustive/basic/undefinedness_04/n_is_0.param +tests/exhaustive/basic/undefinedness_04/undefinedness_04.essence +tests/exhaustive/basic/undefinedness_05/expected/model-solution000001.solution +tests/exhaustive/basic/undefinedness_05/expected/model.eprime +tests/exhaustive/basic/undefinedness_05/undef.essence +tests/exhaustive/basic/undefinedness_06/expected/model-n1-solution000001.solution +tests/exhaustive/basic/undefinedness_06/expected/model-n1.eprime-param +tests/exhaustive/basic/undefinedness_06/expected/model-n4-solution000001.solution +tests/exhaustive/basic/undefinedness_06/expected/model-n4.eprime-param +tests/exhaustive/basic/undefinedness_06/expected/model.eprime +tests/exhaustive/basic/undefinedness_06/n1.param +tests/exhaustive/basic/undefinedness_06/n4.param +tests/exhaustive/basic/undefinedness_06/undef.essence +tests/exhaustive/basic/underscore/expected/model-solution000001.solution +tests/exhaustive/basic/underscore/expected/model-solution000002.solution +tests/exhaustive/basic/underscore/expected/model.eprime +tests/exhaustive/basic/underscore/underscore.essence +tests/exhaustive/basic/unnamed01/expected/model-n2-solution000001.solution +tests/exhaustive/basic/unnamed01/expected/model-n2-solution000002.solution +tests/exhaustive/basic/unnamed01/expected/model-n2.eprime-param +tests/exhaustive/basic/unnamed01/expected/model-n3-solution000001.solution +tests/exhaustive/basic/unnamed01/expected/model-n3-solution000002.solution +tests/exhaustive/basic/unnamed01/expected/model-n3-solution000003.solution +tests/exhaustive/basic/unnamed01/expected/model-n3.eprime-param +tests/exhaustive/basic/unnamed01/expected/model.eprime +tests/exhaustive/basic/unnamed01/n2.param +tests/exhaustive/basic/unnamed01/n3.param +tests/exhaustive/basic/unnamed01/unnamed01.essence +tests/exhaustive/basic/variant00/expected/model-solution000001.solution +tests/exhaustive/basic/variant00/expected/model.eprime +tests/exhaustive/basic/variant00/variant00.essence +tests/exhaustive/basic/variant01/expected/model_1-solution000001.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000002.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000003.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000004.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000005.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000006.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000007.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000008.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000009.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000010.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000011.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000012.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000013.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000014.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000015.solution +tests/exhaustive/basic/variant01/expected/model_1-solution000016.solution +tests/exhaustive/basic/variant01/expected/model_1.eprime +tests/exhaustive/basic/variant01/expected/model_2-solution000001.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000002.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000003.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000004.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000005.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000006.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000007.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000008.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000009.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000010.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000011.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000012.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000013.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000014.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000015.solution +tests/exhaustive/basic/variant01/expected/model_2-solution000016.solution +tests/exhaustive/basic/variant01/expected/model_2.eprime +tests/exhaustive/basic/variant01/variant01.essence +tests/exhaustive/basic/variant02/expected/model-solution000001.solution +tests/exhaustive/basic/variant02/expected/model-solution000002.solution +tests/exhaustive/basic/variant02/expected/model.eprime +tests/exhaustive/basic/variant02/variant02.essence +tests/exhaustive/issues/102/expected-time.txt +tests/exhaustive/issues/102/expected/model-solution000001.solution +tests/exhaustive/issues/102/expected/model.eprime +tests/exhaustive/issues/102/wb.essence +tests/exhaustive/issues/166/166.essence +tests/exhaustive/issues/166/expected-time.txt +tests/exhaustive/issues/166/expected/model_1_1-solution000001.solution +tests/exhaustive/issues/166/expected/model_1_1.eprime +tests/exhaustive/issues/166/expected/model_1_2-solution000001.solution +tests/exhaustive/issues/166/expected/model_1_2.eprime +tests/exhaustive/issues/166/expected/model_1_3-solution000001.solution +tests/exhaustive/issues/166/expected/model_1_3.eprime +tests/exhaustive/issues/166/expected/model_1_4-solution000001.solution +tests/exhaustive/issues/166/expected/model_1_4.eprime +tests/exhaustive/issues/166/expected/model_2_1-solution000001.solution +tests/exhaustive/issues/166/expected/model_2_1.eprime +tests/exhaustive/issues/166/expected/model_2_2-solution000001.solution +tests/exhaustive/issues/166/expected/model_2_2.eprime +tests/exhaustive/issues/166/expected/model_2_3-solution000001.solution +tests/exhaustive/issues/166/expected/model_2_3.eprime +tests/exhaustive/issues/166/expected/model_2_4-solution000001.solution +tests/exhaustive/issues/166/expected/model_2_4.eprime +tests/exhaustive/issues/166/expected/model_3_1-solution000001.solution +tests/exhaustive/issues/166/expected/model_3_1.eprime +tests/exhaustive/issues/166/expected/model_3_2-solution000001.solution +tests/exhaustive/issues/166/expected/model_3_2.eprime +tests/exhaustive/issues/166/expected/model_3_3-solution000001.solution +tests/exhaustive/issues/166/expected/model_3_3.eprime +tests/exhaustive/issues/166/expected/model_3_4-solution000001.solution +tests/exhaustive/issues/166/expected/model_3_4.eprime +tests/exhaustive/issues/166/expected/model_4_1-solution000001.solution +tests/exhaustive/issues/166/expected/model_4_1.eprime +tests/exhaustive/issues/166/expected/model_4_2-solution000001.solution +tests/exhaustive/issues/166/expected/model_4_2.eprime +tests/exhaustive/issues/166/expected/model_4_3-solution000001.solution +tests/exhaustive/issues/166/expected/model_4_3.eprime +tests/exhaustive/issues/166/expected/model_4_4-solution000001.solution +tests/exhaustive/issues/166/expected/model_4_4.eprime +tests/exhaustive/issues/168/168.essence +tests/exhaustive/issues/168/expected/model-p-solution000001.solution +tests/exhaustive/issues/168/expected/model-p-solution000002.solution +tests/exhaustive/issues/168/expected/model-p-solution000003.solution +tests/exhaustive/issues/168/expected/model-p.eprime-param +tests/exhaustive/issues/168/expected/model.eprime +tests/exhaustive/issues/168/p.param +tests/exhaustive/issues/182/182.essence +tests/exhaustive/issues/182/expected/model-solution000001.solution +tests/exhaustive/issues/182/expected/model-solution000002.solution +tests/exhaustive/issues/182/expected/model-solution000003.solution +tests/exhaustive/issues/182/expected/model-solution000004.solution +tests/exhaustive/issues/182/expected/model-solution000005.solution +tests/exhaustive/issues/182/expected/model-solution000006.solution +tests/exhaustive/issues/182/expected/model-solution000007.solution +tests/exhaustive/issues/182/expected/model-solution000008.solution +tests/exhaustive/issues/182/expected/model-solution000009.solution +tests/exhaustive/issues/182/expected/model-solution000010.solution +tests/exhaustive/issues/182/expected/model-solution000011.solution +tests/exhaustive/issues/182/expected/model-solution000012.solution +tests/exhaustive/issues/182/expected/model-solution000013.solution +tests/exhaustive/issues/182/expected/model-solution000014.solution +tests/exhaustive/issues/182/expected/model-solution000015.solution +tests/exhaustive/issues/182/expected/model.eprime +tests/exhaustive/issues/199/_old_issues_198.essence +tests/exhaustive/issues/199/expected/model-solution000001.solution +tests/exhaustive/issues/199/expected/model-solution000002.solution +tests/exhaustive/issues/199/expected/model-solution000003.solution +tests/exhaustive/issues/199/expected/model-solution000004.solution +tests/exhaustive/issues/199/expected/model-solution000005.solution +tests/exhaustive/issues/199/expected/model-solution000006.solution +tests/exhaustive/issues/199/expected/model.eprime +tests/exhaustive/issues/200/200.essence +tests/exhaustive/issues/200/expected/model_1_1.eprime +tests/exhaustive/issues/200/expected/model_1_2.eprime +tests/exhaustive/issues/200/expected/model_2_1.eprime +tests/exhaustive/issues/200/expected/model_2_2.eprime +tests/exhaustive/issues/212/1.param +tests/exhaustive/issues/212/212.essence +tests/exhaustive/issues/212/expected-time.txt +tests/exhaustive/issues/212/expected/model_1_1-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_1_1-1.eprime-param +tests/exhaustive/issues/212/expected/model_1_1.eprime +tests/exhaustive/issues/212/expected/model_1_2-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_1_2-1.eprime-param +tests/exhaustive/issues/212/expected/model_1_2.eprime +tests/exhaustive/issues/212/expected/model_1_3-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_1_3-1.eprime-param +tests/exhaustive/issues/212/expected/model_1_3.eprime +tests/exhaustive/issues/212/expected/model_1_4-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_1_4-1.eprime-param +tests/exhaustive/issues/212/expected/model_1_4.eprime +tests/exhaustive/issues/212/expected/model_2_1-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_2_1-1.eprime-param +tests/exhaustive/issues/212/expected/model_2_1.eprime +tests/exhaustive/issues/212/expected/model_2_2-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_2_2-1.eprime-param +tests/exhaustive/issues/212/expected/model_2_2.eprime +tests/exhaustive/issues/212/expected/model_2_3-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_2_3-1.eprime-param +tests/exhaustive/issues/212/expected/model_2_3.eprime +tests/exhaustive/issues/212/expected/model_2_4-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_2_4-1.eprime-param +tests/exhaustive/issues/212/expected/model_2_4.eprime +tests/exhaustive/issues/212/expected/model_3_1-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_3_1-1.eprime-param +tests/exhaustive/issues/212/expected/model_3_1.eprime +tests/exhaustive/issues/212/expected/model_3_2-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_3_2-1.eprime-param +tests/exhaustive/issues/212/expected/model_3_2.eprime +tests/exhaustive/issues/212/expected/model_3_3-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_3_3-1.eprime-param +tests/exhaustive/issues/212/expected/model_3_3.eprime +tests/exhaustive/issues/212/expected/model_3_4-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_3_4-1.eprime-param +tests/exhaustive/issues/212/expected/model_3_4.eprime +tests/exhaustive/issues/212/expected/model_4_1-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_4_1-1.eprime-param +tests/exhaustive/issues/212/expected/model_4_1.eprime +tests/exhaustive/issues/212/expected/model_4_2-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_4_2-1.eprime-param +tests/exhaustive/issues/212/expected/model_4_2.eprime +tests/exhaustive/issues/212/expected/model_4_3-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_4_3-1.eprime-param +tests/exhaustive/issues/212/expected/model_4_3.eprime +tests/exhaustive/issues/212/expected/model_4_4-1-solution000001.solution +tests/exhaustive/issues/212/expected/model_4_4-1.eprime-param +tests/exhaustive/issues/212/expected/model_4_4.eprime +tests/exhaustive/issues/213/2.param +tests/exhaustive/issues/213/213.essence +tests/exhaustive/issues/213/expected/model-2-solution000001.solution +tests/exhaustive/issues/213/expected/model-2-solution000002.solution +tests/exhaustive/issues/213/expected/model-2.eprime-param +tests/exhaustive/issues/213/expected/model.eprime +tests/exhaustive/issues/222/222.essence +tests/exhaustive/issues/222/expected/model-solution000001.solution +tests/exhaustive/issues/222/expected/model-solution000002.solution +tests/exhaustive/issues/222/expected/model-solution000003.solution +tests/exhaustive/issues/222/expected/model-solution000004.solution +tests/exhaustive/issues/222/expected/model.eprime +tests/exhaustive/issues/229/1.param +tests/exhaustive/issues/229/229.essence +tests/exhaustive/issues/229/expected/model-1-solution000001.solution +tests/exhaustive/issues/229/expected/model-1.eprime-param +tests/exhaustive/issues/229/expected/model.eprime +tests/exhaustive/issues/233/expected/model-solution000001.solution +tests/exhaustive/issues/233/expected/model-solution000002.solution +tests/exhaustive/issues/233/expected/model-solution000003.solution +tests/exhaustive/issues/233/expected/model-solution000004.solution +tests/exhaustive/issues/233/expected/model-solution000005.solution +tests/exhaustive/issues/233/expected/model-solution000006.solution +tests/exhaustive/issues/233/expected/model-solution000007.solution +tests/exhaustive/issues/233/expected/model-solution000008.solution +tests/exhaustive/issues/233/expected/model.eprime +tests/exhaustive/issues/233/minuspow.essence +tests/exhaustive/issues/236/1_2.param +tests/exhaustive/issues/236/2_4.param +tests/exhaustive/issues/236/expected/model-1_2-solution000001.solution +tests/exhaustive/issues/236/expected/model-1_2-solution000002.solution +tests/exhaustive/issues/236/expected/model-1_2.eprime-param +tests/exhaustive/issues/236/expected/model-2_4-solution000001.solution +tests/exhaustive/issues/236/expected/model-2_4-solution000002.solution +tests/exhaustive/issues/236/expected/model-2_4.eprime-param +tests/exhaustive/issues/236/expected/model.eprime +tests/exhaustive/issues/236/langfords.essence +tests/exhaustive/issues/261/_old_issues_260.essence +tests/exhaustive/issues/261/expected/model_1-p1.eprime-param +tests/exhaustive/issues/261/expected/model_1-p2.eprime-param +tests/exhaustive/issues/261/expected/model_1-p3-solution000001.solution +tests/exhaustive/issues/261/expected/model_1-p3-solution000002.solution +tests/exhaustive/issues/261/expected/model_1-p3-solution000003.solution +tests/exhaustive/issues/261/expected/model_1-p3-solution000004.solution +tests/exhaustive/issues/261/expected/model_1-p3-solution000005.solution +tests/exhaustive/issues/261/expected/model_1-p3-solution000006.solution +tests/exhaustive/issues/261/expected/model_1-p3.eprime-param +tests/exhaustive/issues/261/expected/model_1.eprime +tests/exhaustive/issues/261/expected/model_2-p1.eprime-param +tests/exhaustive/issues/261/expected/model_2-p2.eprime-param +tests/exhaustive/issues/261/expected/model_2-p3-solution000001.solution +tests/exhaustive/issues/261/expected/model_2-p3-solution000002.solution +tests/exhaustive/issues/261/expected/model_2-p3-solution000003.solution +tests/exhaustive/issues/261/expected/model_2-p3-solution000004.solution +tests/exhaustive/issues/261/expected/model_2-p3-solution000005.solution +tests/exhaustive/issues/261/expected/model_2-p3-solution000006.solution +tests/exhaustive/issues/261/expected/model_2-p3.eprime-param +tests/exhaustive/issues/261/expected/model_2.eprime +tests/exhaustive/issues/261/p1.param +tests/exhaustive/issues/261/p2.param +tests/exhaustive/issues/261/p3.param +tests/exhaustive/issues/263/_old_issues_262.essence +tests/exhaustive/issues/263/expected/model-p2-solution000001.solution +tests/exhaustive/issues/263/expected/model-p2.eprime-param +tests/exhaustive/issues/263/expected/model.eprime +tests/exhaustive/issues/263/p2.param +tests/exhaustive/issues/266_bools/_old_issues_265.essence +tests/exhaustive/issues/266_bools/expected/model-p1-solution000001.solution +tests/exhaustive/issues/266_bools/expected/model-p1.eprime-param +tests/exhaustive/issues/266_bools/expected/model.eprime +tests/exhaustive/issues/266_bools/p1.param +tests/exhaustive/issues/266_ints/_old_issues_265_ints.essence +tests/exhaustive/issues/266_ints/expected/model_1_1-p1-solution000001.solution +tests/exhaustive/issues/266_ints/expected/model_1_1-p1.eprime-param +tests/exhaustive/issues/266_ints/expected/model_1_1.eprime +tests/exhaustive/issues/266_ints/expected/model_1_2-p1-solution000001.solution +tests/exhaustive/issues/266_ints/expected/model_1_2-p1.eprime-param +tests/exhaustive/issues/266_ints/expected/model_1_2.eprime +tests/exhaustive/issues/266_ints/expected/model_2_1-p1-solution000001.solution +tests/exhaustive/issues/266_ints/expected/model_2_1-p1.eprime-param +tests/exhaustive/issues/266_ints/expected/model_2_1.eprime +tests/exhaustive/issues/266_ints/expected/model_2_2-p1-solution000001.solution +tests/exhaustive/issues/266_ints/expected/model_2_2-p1.eprime-param +tests/exhaustive/issues/266_ints/expected/model_2_2.eprime +tests/exhaustive/issues/266_ints/p1.param +tests/exhaustive/issues/268/_old_issues_267.essence +tests/exhaustive/issues/268/expected/model_1_1-solution000001.solution +tests/exhaustive/issues/268/expected/model_1_1-solution000002.solution +tests/exhaustive/issues/268/expected/model_1_1-solution000003.solution +tests/exhaustive/issues/268/expected/model_1_1-solution000004.solution +tests/exhaustive/issues/268/expected/model_1_1.eprime +tests/exhaustive/issues/268/expected/model_1_2-solution000001.solution +tests/exhaustive/issues/268/expected/model_1_2-solution000002.solution +tests/exhaustive/issues/268/expected/model_1_2-solution000003.solution +tests/exhaustive/issues/268/expected/model_1_2-solution000004.solution +tests/exhaustive/issues/268/expected/model_1_2.eprime +tests/exhaustive/issues/268/expected/model_2_1-solution000001.solution +tests/exhaustive/issues/268/expected/model_2_1-solution000002.solution +tests/exhaustive/issues/268/expected/model_2_1-solution000003.solution +tests/exhaustive/issues/268/expected/model_2_1-solution000004.solution +tests/exhaustive/issues/268/expected/model_2_1.eprime +tests/exhaustive/issues/268/expected/model_2_2-solution000001.solution +tests/exhaustive/issues/268/expected/model_2_2-solution000002.solution +tests/exhaustive/issues/268/expected/model_2_2-solution000003.solution +tests/exhaustive/issues/268/expected/model_2_2-solution000004.solution +tests/exhaustive/issues/268/expected/model_2_2.eprime +tests/exhaustive/issues/286/_issue_15.essence +tests/exhaustive/issues/286/expected-time.txt +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_1_1-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_1_1-p1.eprime-param +tests/exhaustive/issues/286/expected/model_1_1.eprime +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_1_2-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_1_2-p1.eprime-param +tests/exhaustive/issues/286/expected/model_1_2.eprime +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_1_3-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_1_3-p1.eprime-param +tests/exhaustive/issues/286/expected/model_1_3.eprime +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_1_4-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_1_4-p1.eprime-param +tests/exhaustive/issues/286/expected/model_1_4.eprime +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_2_1-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_2_1-p1.eprime-param +tests/exhaustive/issues/286/expected/model_2_1.eprime +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_2_2-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_2_2-p1.eprime-param +tests/exhaustive/issues/286/expected/model_2_2.eprime +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_2_3-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_2_3-p1.eprime-param +tests/exhaustive/issues/286/expected/model_2_3.eprime +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_2_4-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_2_4-p1.eprime-param +tests/exhaustive/issues/286/expected/model_2_4.eprime +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_3_1-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_3_1-p1.eprime-param +tests/exhaustive/issues/286/expected/model_3_1.eprime +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_3_2-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_3_2-p1.eprime-param +tests/exhaustive/issues/286/expected/model_3_2.eprime +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_3_3-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_3_3-p1.eprime-param +tests/exhaustive/issues/286/expected/model_3_3.eprime +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_3_4-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_3_4-p1.eprime-param +tests/exhaustive/issues/286/expected/model_3_4.eprime +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_4_1-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_4_1-p1.eprime-param +tests/exhaustive/issues/286/expected/model_4_1.eprime +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_4_2-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_4_2-p1.eprime-param +tests/exhaustive/issues/286/expected/model_4_2.eprime +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_4_3-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_4_3-p1.eprime-param +tests/exhaustive/issues/286/expected/model_4_3.eprime +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000001.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000002.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000003.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000004.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000005.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000006.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000007.solution +tests/exhaustive/issues/286/expected/model_4_4-p1-solution000008.solution +tests/exhaustive/issues/286/expected/model_4_4-p1.eprime-param +tests/exhaustive/issues/286/expected/model_4_4.eprime +tests/exhaustive/issues/286/p1.param +tests/exhaustive/issues/309/_issue_38.essence +tests/exhaustive/issues/309/expected/model-solution000001.solution +tests/exhaustive/issues/309/expected/model.eprime +tests/exhaustive/issues/335_1/_issue_64_1.essence +tests/exhaustive/issues/335_1/expected/model-p1-solution000001.solution +tests/exhaustive/issues/335_1/expected/model-p1.eprime-param +tests/exhaustive/issues/335_1/expected/model-p2-solution000001.solution +tests/exhaustive/issues/335_1/expected/model-p2.eprime-param +tests/exhaustive/issues/335_1/expected/model.eprime +tests/exhaustive/issues/335_1/p1.param +tests/exhaustive/issues/335_1/p2.param +tests/exhaustive/issues/335_2/expected/model-p-solution000001.solution +tests/exhaustive/issues/335_2/expected/model-p.eprime-param +tests/exhaustive/issues/335_2/expected/model.eprime +tests/exhaustive/issues/335_2/p.param +tests/exhaustive/issues/335_2/sonet.essence +tests/exhaustive/issues/336/expected/model-p-solution000001.solution +tests/exhaustive/issues/336/expected/model-p.eprime-param +tests/exhaustive/issues/336/expected/model.eprime +tests/exhaustive/issues/336/p.param +tests/exhaustive/issues/336/steel.essence +tests/exhaustive/issues/352/given/expected/model-p1-solution000001.solution +tests/exhaustive/issues/352/given/expected/model-p1.eprime-param +tests/exhaustive/issues/352/given/expected/model.eprime +tests/exhaustive/issues/352/given/given.essence +tests/exhaustive/issues/352/given/p1.param +tests/exhaustive/issues/354/expected/model.eprime +tests/exhaustive/issues/354/exponent.essence +tests/exhaustive/issues/362/362.essence +tests/exhaustive/issues/362/expected/model-solution000001.solution +tests/exhaustive/issues/362/expected/model.eprime +tests/exhaustive/issues/368/368.essence +tests/exhaustive/issues/368/expected/model-p-solution000001.solution +tests/exhaustive/issues/368/expected/model-p.eprime-param +tests/exhaustive/issues/368/expected/model.eprime +tests/exhaustive/issues/368/p.param +tests/exhaustive/issues/373/373.essence +tests/exhaustive/issues/373/expected/model-solution000001.solution +tests/exhaustive/issues/373/expected/model.eprime +tests/exhaustive/issues/382/382.essence +tests/exhaustive/issues/382/expected/model-solution000001.solution +tests/exhaustive/issues/382/expected/model-solution000002.solution +tests/exhaustive/issues/382/expected/model.eprime +tests/exhaustive/issues/391/391.essence +tests/exhaustive/issues/391/expected/model-p-solution000001.solution +tests/exhaustive/issues/391/expected/model-p-solution000002.solution +tests/exhaustive/issues/391/expected/model-p.eprime-param +tests/exhaustive/issues/391/expected/model.eprime +tests/exhaustive/issues/391/p.param +tests/exhaustive/issues/433/433.essence +tests/exhaustive/issues/433/expected/model_1_1_1-solution000001.solution +tests/exhaustive/issues/433/expected/model_1_1_1.eprime +tests/exhaustive/issues/433/expected/model_1_1_2-solution000001.solution +tests/exhaustive/issues/433/expected/model_1_1_2.eprime +tests/exhaustive/issues/433/expected/model_1_2_1-solution000001.solution +tests/exhaustive/issues/433/expected/model_1_2_1.eprime +tests/exhaustive/issues/433/expected/model_2_1_1-solution000001.solution +tests/exhaustive/issues/433/expected/model_2_1_1.eprime +tests/exhaustive/issues/433/expected/model_2_2_1-solution000001.solution +tests/exhaustive/issues/433/expected/model_2_2_1.eprime +tests/exhaustive/issues/433/expected/model_2_2_2-solution000001.solution +tests/exhaustive/issues/433/expected/model_2_2_2.eprime +tests/exhaustive/issues/436/436.essence +tests/exhaustive/issues/436/e.param +tests/exhaustive/issues/436/expected/model-e-solution000001.solution +tests/exhaustive/issues/436/expected/model-e.eprime-param +tests/exhaustive/issues/436/expected/model.eprime +tests/exhaustive/issues/441/441.essence +tests/exhaustive/issues/441/expected/model-solution000001.solution +tests/exhaustive/issues/441/expected/model.eprime +tests/exhaustive/mildly_interesting/cyclic_graph/cyc1.param +tests/exhaustive/mildly_interesting/cyclic_graph/cyc2.param +tests/exhaustive/mildly_interesting/cyclic_graph/cyclic_graph.essence +tests/exhaustive/mildly_interesting/cyclic_graph/expected-time.txt +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc1-solution000001.solution +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc1.eprime-param +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc2-solution000001.solution +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc2.eprime-param +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-non-solution000001.solution +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-non.eprime-param +tests/exhaustive/mildly_interesting/cyclic_graph/expected/model.eprime +tests/exhaustive/mildly_interesting/cyclic_graph/non.param +tests/exhaustive/mildly_interesting/gchq_2016/expected-time.txt +tests/exhaustive/mildly_interesting/gchq_2016/expected/model-inst-solution000001.solution +tests/exhaustive/mildly_interesting/gchq_2016/expected/model-inst.eprime-param +tests/exhaustive/mildly_interesting/gchq_2016/expected/model.eprime +tests/exhaustive/mildly_interesting/gchq_2016/gchq.essence +tests/exhaustive/mildly_interesting/gchq_2016/inst.param +tests/exhaustive/mildly_interesting/subsetSum/expected-time.txt +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p1-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p1.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p2-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p2-solution000002.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p2.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1.eprime +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p1-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p1.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p2-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p2-solution000002.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p2.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2.eprime +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p1-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p1.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p2-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p2-solution000002.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p2.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1.eprime +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p1-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p1.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p2-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p2-solution000002.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p2.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1.eprime +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p1-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p1.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p2-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p2-solution000002.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p2.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1.eprime +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p1-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p1.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p2-solution000001.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p2-solution000002.solution +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p2.eprime-param +tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2.eprime +tests/exhaustive/mildly_interesting/subsetSum/p1.param +tests/exhaustive/mildly_interesting/subsetSum/p2.param +tests/exhaustive/mildly_interesting/subsetSum/subsetSum.essence +tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_1-solution000001.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_1-solution000002.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_1.eprime +tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_2-solution000001.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_2-solution000002.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_2.eprime +tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_1-solution000001.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_1-solution000002.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_1.eprime +tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_2-solution000001.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_2-solution000002.solution +tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_2.eprime +tests/exhaustive/mildly_interesting/xkcd287/xkcd287.essence +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected-time.txt +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000007.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000008.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000009.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000010.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000011.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000012.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000013.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000014.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000015.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000016.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000017.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000018.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000019.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000020.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000021.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000022.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000023.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000024.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000025.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000026.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000027.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000028.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000029.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000030.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000031.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000032.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000033.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000034.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000035.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000036.solution +tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model.eprime +tests/exhaustive/tildeOrd/tildeOrd_function_01/tildeOrd_function_01.essence +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected-time.txt +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_mset_01/tildeOrd_mset_01.essence +tests/exhaustive/tildeOrd/tildeOrd_partition_01/additional-arguments.txt +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected-time.txt +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_4-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_4.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_4-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_4.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_4-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_4.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_3-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_3.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_4-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_4.eprime +tests/exhaustive/tildeOrd/tildeOrd_partition_01/tildeOrd_partition01.essence +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected-time.txt +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000007.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000008.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000009.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000010.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000011.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000012.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000013.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000014.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000015.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000016.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000017.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000018.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000019.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000020.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000021.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000022.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000023.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000024.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000025.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000026.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000027.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000028.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000029.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000030.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000031.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000032.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000033.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000034.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000035.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000036.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000037.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000038.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000039.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000040.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000041.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000042.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000043.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000044.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000045.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000046.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000047.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000048.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000049.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000050.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000051.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000052.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000053.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000054.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000055.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000056.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000057.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000058.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000059.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000060.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000061.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000062.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000063.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000064.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000065.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000066.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000067.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000068.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000069.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000070.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000071.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000072.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000073.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000074.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000075.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000076.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000077.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000078.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000079.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000080.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000081.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000082.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000083.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000084.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000085.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000086.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000087.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000088.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000089.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000090.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000091.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000092.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000093.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000094.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000095.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000096.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000097.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000098.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000099.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000100.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000101.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000102.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000103.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000104.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000105.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000106.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000107.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000108.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000109.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000110.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000111.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000112.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000113.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000114.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000115.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000116.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000117.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000118.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000119.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000120.solution +tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model.eprime +tests/exhaustive/tildeOrd/tildeOrd_relation_01/tildeOrd_relation_01.essence +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected-time.txt +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000001.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000002.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000003.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000004.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000005.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000006.solution +tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2.eprime +tests/exhaustive/tildeOrd/tildeOrd_set_01/tildeOrd_set_01.essence +tests/parse_print/README.md +tests/parse_print/acceptOutput.sh +tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/007a2218db6f96b1069561e17b3198fb.eprime.essence +tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/model.expected.json +tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/stdout.expected +tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/00becdadf865e1668c0d5917a1c7e988.essence +tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/model.expected.json +tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/stdout.expected +tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/00c93ca5de9edf4765d4a3db4f26a13b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/model.expected.json +tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/stdout.expected +tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/00f3f6e00d6aaa0c44f7a7bfaeabf301.eprime.essence +tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/model.expected.json +tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/stdout.expected +tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected +tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/0155ed23298044f98c24b049e9f674d5.essence +tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/model.expected.json +tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/stdout.expected +tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/016e7609f3aa273a2a9d8f851cda23b0.eprime.essence +tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/model.expected.json +tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/stdout.expected +tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/01a3688574d726ff7368c0b8e640be02.essence +tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/model.expected.json +tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/stdout.expected +tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/021ccd3de28fccf2cc4b495fdba30109.essence +tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/model.expected.json +tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/stdout.expected +tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/0259a42fad990d5498c3d9c6c199da94.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/model.expected.json +tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/stdout.expected +tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/0264be56cbed0b31969c94d730d856a7.essence +tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/02a5303be013b97d8241ff52e4c93499.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/model.expected.json +tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/stdout.expected +tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/02c3aa1d8caffbb46bfd62c52ace0e3e.solution.essence +tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/model.expected.json +tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/stdout.expected +tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/03336ac6e1e3f3c00e3feb6957358811.eprime.essence +tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/model.expected.json +tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/stdout.expected +tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/033e7117d1cbfb11af319112434a43c4.essence +tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/model.expected.json +tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/stdout.expected +tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/0360b7add8f8f957bcca54a56c5cae9c.eprime.essence +tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/model.expected.json +tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/stdout.expected +tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/0380e49407e31794a0b2dd8a573308eb.essence +tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/model.expected.json +tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/stdout.expected +tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/03959476e48f296a9ba7589337ba980d.essence +tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/model.expected.json +tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/stdout.expected +tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/039a29d0d4631598657b8b2611a05cf6.eprime.essence +tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/model.expected.json +tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/stdout.expected +tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/03e9b7dea0376c9fae09687f25f3c8d4.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/model.expected.json +tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/stdout.expected +tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/03fa5e0fb1010e34c88e5d085c726276.eprime.essence +tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/model.expected.json +tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/stdout.expected +tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected +tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/03ff6c27828b6e1887413bd4d0ed9f38.essence +tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/model.expected.json +tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/stdout.expected +tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/045555e7bef90702ef51f7c87bdc67e8.essence +tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/04747f0c54d6be6d41109f6968f5d8de.essence +tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/model.expected.json +tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/stdout.expected +tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/0474d7b3e0fc1f9e80683bed58112545.essence +tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/model.expected.json +tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/stdout.expected +tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/0475bec5e477e09755c930ee9cb1e77c.essence +tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/model.expected.json +tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/stdout.expected +tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/050ad75061d29ef27db160ad376241d6.eprime.essence +tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/model.expected.json +tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/stdout.expected +tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/typecheck.expected +tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/053601c1257a61ff56823b814f88e436.essence +tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/model.expected.json +tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/stdout.expected +tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/05aae0de4708472b6282e13a9e58bb3d.eprime.essence +tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/model.expected.json +tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/stdout.expected +tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/05e320f8ca32d2f2b177c94e9726b3cc.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/model.expected.json +tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/stdout.expected +tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/0632e804c201340757931f64f9587edb.eprime.essence +tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/model.expected.json +tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/stdout.expected +tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/06541d8a69c61a87fd068728a83ff345.eprime.essence +tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/model.expected.json +tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/stdout.expected +tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/066c17b72e812917f52f48dbd28b117d.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/model.expected.json +tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/stdout.expected +tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/0690143a007f37b92ca7029e5fde5945.param.essence +tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/model.expected.json +tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/stdout.expected +tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/06af2d456d70394d86a8f427da584a37.eprime.essence +tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/model.expected.json +tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/stdout.expected +tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected +tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/06bb092495b7a73ae357f41fd4e80545.essence +tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/model.expected.json +tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/stdout.expected +tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/06d74bb8bba2981d95e94d23c192bc87.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/model.expected.json +tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/stdout.expected +tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/06dace5aadd7cf91ed01dc91bfb2e7cd.essence +tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/model.expected.json +tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/stdout.expected +tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/06fce89389eaa7612382f7de2e6dad65.essence +tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/model.expected.json +tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/stdout.expected +tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/070857f26f3d80044277fc95c9981781.essence +tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/model.expected.json +tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/stdout.expected +tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/0740ecd60d44fbc0953daed81067709f.essence +tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/model.expected.json +tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/stdout.expected +tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/07462500024634d4acbf73dd0983dc6a.essence +tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/model.expected.json +tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/stdout.expected +tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/074ccc54476152ac02322672f43fbf1a.essence +tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/model.expected.json +tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/stdout.expected +tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/074ea9fbacd659cc463b376a2772bf13.essence +tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/model.expected.json +tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/stdout.expected +tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/075527221a657e78d6f1c0a6a335371f.eprime.essence +tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/model.expected.json +tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/stdout.expected +tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/0768a92397557ea2888ecf73fb6e055d.essence +tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/model.expected.json +tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/stdout.expected +tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/076e091e7edae3a96b247ca22c261501.eprime.essence +tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/model.expected.json +tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/stdout.expected +tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/07981afd6731fa941b2cf66c663da9d7.essence +tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/079c0d8d0a3ed063ab9c1d3d131afd14.essence +tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/model.expected.json +tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/stdout.expected +tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/07ccf22dda5e5cd7bc5859d6a401c03b.essence +tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/model.expected.json +tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/stdout.expected +tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/07e375a767ad55521e22d0265a6d24cb.essence +tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/model.expected.json +tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/stdout.expected +tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/08029c83a2abc0a4e98cbbf0a9a9a347.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/model.expected.json +tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/stdout.expected +tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/0803a6fdd3744357ffa70483fe5deccf.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/model.expected.json +tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/stdout.expected +tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/083fa3749c456a0e2b9ad8f1da77be70.param.essence +tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/model.expected.json +tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/stdout.expected +tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/084959e428c16c5485c7775b20480e40.eprime.essence +tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/model.expected.json +tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/stdout.expected +tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/typecheck.expected +tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/089427b807ae2e05bb8e2512153035ee.eprime.essence +tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/model.expected.json +tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/stdout.expected +tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/typecheck.expected +tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/0896777a9c9ec7a2944d17b0f832af27.eprime.essence +tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/model.expected.json +tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/stdout.expected +tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/typecheck.expected +tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/08bd587a797e6ddb39bd8c64d0fba266.eprime.essence +tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/model.expected.json +tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/stdout.expected +tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/0919f28f3d8bd04dcd2c87324b3b522b.essence +tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/model.expected.json +tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/stdout.expected +tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/0925a634b21e50be5bdb48c638b16daf.essence +tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/model.expected.json +tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/stdout.expected +tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/092fa9099eabbebe49ccdbe7aa221899.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/model.expected.json +tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/stdout.expected +tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/09421d66ce386f99a6901d89dfd34524.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/model.expected.json +tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/stdout.expected +tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/0994fae329ddb38862941034298722b6.essence +tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/model.expected.json +tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/stdout.expected +tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/09a49f240282fdecfa5af091729c5286.essence +tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/model.expected.json +tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/stdout.expected +tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/09ac2051b1e1a54e1b7a3b051b78bcd3.essence +tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/model.expected.json +tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/stdout.expected +tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/0a4c5d1f2a6f82e1a72b0732362906b6.eprime.essence +tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/model.expected.json +tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/stdout.expected +tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/typecheck.expected +tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/0a660c9dc8b5bd092e20366d83999c79.eprime.essence +tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/model.expected.json +tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/stdout.expected +tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/0a758b1be1256dd86b8bdf8a61478641.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/model.expected.json +tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/stdout.expected +tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/0aadcc45dd750d57e64b53ef485f4f4c.param.essence +tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/model.expected.json +tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/stdout.expected +tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/0ac27d5763cae0514c10af9c389af127.essence +tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/model.expected.json +tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/stdout.expected +tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/0ad8f28def383f1fc962a54c34ab1889.eprime.essence +tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/model.expected.json +tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/stdout.expected +tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/0ae78831341ee9110d855dbcb3f31a79.essence +tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/model.expected.json +tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/stdout.expected +tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/0aeec4358f391008e582adce57fbc61b.eprime.essence +tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/model.expected.json +tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/stdout.expected +tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/0af834366fe107643dbc2b243c7517fb.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/model.expected.json +tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/stdout.expected +tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/0b52e52938a256e58e895b782c1e683f.eprime.essence +tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/model.expected.json +tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/stdout.expected +tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/0b621881d60dee823364b01fd40f9769.eprime.essence +tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/model.expected.json +tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/stdout.expected +tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/0b9c64fada86488ac3024b53ef27cb08.essence +tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/model.expected.json +tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/stdout.expected +tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/0bd1fe14c9f8f1a362b0ea04d01e01d7.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/0bedd75963d26fd9b9e62b65f97c8aca.eprime.essence +tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/model.expected.json +tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/stdout.expected +tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/0c00a0c0bbf8b7bc44081ab08cdaf350.essence +tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/model.expected.json +tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/stdout.expected +tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/0c01f39b639fb7ced4c0bab3bd2bafda.essence +tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/model.expected.json +tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/stdout.expected +tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/0c20348d77091f47ec24a50fe7470612.param.essence +tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/model.expected.json +tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/stdout.expected +tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/0c658c87b2dccdfb865141a6f5f6ff28.essence +tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/model.expected.json +tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/stdout.expected +tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/0c96216ee08ab936ef4f94f08ff71dfe.eprime.essence +tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/model.expected.json +tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/stdout.expected +tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/0c9c015c4746f7640b730e0721cab58e.essence +tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/model.expected.json +tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/stdout.expected +tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/0cad08c5a7a5756492aa63fef3d9d17a.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/model.expected.json +tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/stdout.expected +tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/0cc229a553645189bafef737f9fbf3e1.essence +tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/0cccb290abf55e6b39410c2047810443.essence +tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/model.expected.json +tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/stdout.expected +tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/0d281ee0a9f58fff63f45f8f69b891d0.eprime.essence +tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/model.expected.json +tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/stdout.expected +tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/typecheck.expected +tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/0d330c525342e10bf0f84ec1bc0ca717.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/model.expected.json +tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/stdout.expected +tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/0d57246ca2b2deb63c1aa6a5fc286fa2.eprime.essence +tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/model.expected.json +tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/stdout.expected +tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/0d5833fba9e60ef0afe2b72ec4f531b6.essence +tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/model.expected.json +tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/stdout.expected +tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/0d757bbc1bf600cc00cccc23dd0dbabb.eprime.essence +tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/model.expected.json +tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/stdout.expected +tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/0d866300fcdf5df83d8893e36dcccb7e.eprime.essence +tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/model.expected.json +tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/stdout.expected +tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/0dbfb0f638226cf7e364c76a3798a70c.eprime.essence +tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/model.expected.json +tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/stdout.expected +tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/0e06715ce07872986e298d19cbeec669.essence +tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/model.expected.json +tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/stdout.expected +tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/0e772b3db5ba04ad8475bffb414dd5c5.essence +tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/model.expected.json +tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/stdout.expected +tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/0e971f829a5cc4cdbade3dba72218850.param.essence +tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/model.expected.json +tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/stdout.expected +tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/0ed115e4ee3afb7cae4c8f89695c5fdd.eprime.essence +tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/model.expected.json +tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/stdout.expected +tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/typecheck.expected +tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/0f19026c66d84ffd7756ab917f5fd63b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/model.expected.json +tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/stdout.expected +tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/0f5007250906426012eb6d31cde3ced4.essence +tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/model.expected.json +tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/stdout.expected +tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/0f7be718664287a43c17484e7d9700a8.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/model.expected.json +tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/stdout.expected +tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/0f8881773ddd74408625e0a099d727f2.essence +tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/model.expected.json +tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/stdout.expected +tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/0f9d1d3f64cf8a8ca5bc17c26cddd57c.eprime.essence +tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/model.expected.json +tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/stdout.expected +tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/0fd5fe93ff8e642e8d0e612b7d9c9128.param.essence +tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/model.expected.json +tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/stdout.expected +tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/0fdee1fae5a38b16267d42b6c9b61bf3.eprime.essence +tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/model.expected.json +tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/stdout.expected +tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/1076b971d7d8705dc501cda8fdd64d1e.essence +tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/model.expected.json +tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/stdout.expected +tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/10842546df041836d584225b50305c9e.eprime.essence +tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/model.expected.json +tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/stdout.expected +tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/10c99281fb90ea99297131629d79951b.eprime.essence +tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/model.expected.json +tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/stdout.expected +tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/10ee9f7ba50dfd3e0bdcc8ad341640d3.eprime.essence +tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/model.expected.json +tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/stdout.expected +tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/typecheck.expected +tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/113dc767ea8a8a8eecaf29ccd9225fd5.essence +tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/model.expected.json +tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/stdout.expected +tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/114ddabab88b636d4986cf3ebfa7a669.essence +tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/model.expected.json +tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/stdout.expected +tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/1161723f0b235e969e15d44ebe624bd7.eprime.essence +tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/model.expected.json +tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/stdout.expected +tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/1163dc506fb63909d056f8a72b791525.param.essence +tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/model.expected.json +tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/stdout.expected +tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/116bd6767525b8e40249c29ddfd29a89.eprime.essence +tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/model.expected.json +tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/stdout.expected +tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/11753bcdac8d3d40e9e8bdc76724e751.essence +tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/model.expected.json +tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/stdout.expected +tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/118db58b5c3d6bda6c3a3cf86dad8ce4.eprime.essence +tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/model.expected.json +tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/stdout.expected +tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/1191a8fe91feb6b1ae455420e223bf6e.eprime.essence +tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/model.expected.json +tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/stdout.expected +tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/11b26443eae52a9cfd2a5bff8cf05584.essence +tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/model.expected.json +tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/stdout.expected +tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/11dba4c0713a4dcb2984fe6c6920ddd9.essence +tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/model.expected.json +tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/stdout.expected +tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/11fa8fe8913ee7ee1f081d95b6063a79.eprime.essence +tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/model.expected.json +tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/stdout.expected +tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/120a84aa329880477a4406a117b64f80.essence +tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/model.expected.json +tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/stdout.expected +tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/1221facde25a185cca2874ad862470c6.eprime.essence +tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/model.expected.json +tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/stdout.expected +tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/125fd9801f7026ac0fa6994e988b5fa1.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/model.expected.json +tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/stdout.expected +tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/1291155001a2b89117838f7032c4ab5e.eprime.essence +tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/model.expected.json +tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/stdout.expected +tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/12a26212ed2df2f0e3f50bc0482c8a00.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/model.expected.json +tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/stdout.expected +tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/12c6764f3c578badfe13d0f23b70d7f8.essence +tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/model.expected.json +tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/stdout.expected +tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/12c7a4d3cd1215d8cc58cbc32df46f67.essence +tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/model.expected.json +tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/stdout.expected +tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/12e7888da09101377ca1b913f2c9a4e1.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/13130017359cbf52ad8828ef62a3cbc7.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/model.expected.json +tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/stdout.expected +tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/133e28ad190db7648f33ec2059536160.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/model.expected.json +tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/stdout.expected +tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/typecheck.expected +tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/13700d10e259531c00b3ea61a5a5222e.eprime.essence +tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/model.expected.json +tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/stdout.expected +tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/139f9520357e237c8f0d1489daa512e8.eprime.essence +tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/typecheck.expected +tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/13b0ebaf89e84d142f13573d217cbf3e.essence +tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/model.expected.json +tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/stdout.expected +tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/13eda547bb0b8ccccb4b8cc348f66d91.essence +tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/model.expected.json +tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected +tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/1406dd256e259c3a3cdf3491514d5582.essence +tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/model.expected.json +tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/stdout.expected +tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/140fedc8e27d8ab36291cabdb559e4f9.essence +tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/model.expected.json +tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/stdout.expected +tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/1424c6a3f9e90a484eb4c3bf0b9c955c.eprime.essence +tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/model.expected.json +tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/stdout.expected +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected +tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/1452fe35ebcfc58b9e931281b561c063.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/model.expected.json +tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/stdout.expected +tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/1453aade27b19262c1d8f7ed3ed1f338.eprime.essence +tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/model.expected.json +tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/stdout.expected +tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/14af9ffdb4766ee9282e4fd1c911d0af.solution.essence +tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/model.expected.json +tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/stdout.expected +tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/14df2d01d66f6af162ca46eaec94a0b3.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/model.expected.json +tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/stdout.expected +tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/1563c6f8e22f942162293f1b693a40dc.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/model.expected.json +tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/stdout.expected +tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/15916e89942607cd189f87dbe1a6552b.eprime.essence +tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/model.expected.json +tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/stdout.expected +tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected +tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/15dd0fcd1eb5e61ce1542f4c402efb24.essence +tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/model.expected.json +tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/stdout.expected +tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/15e1dc2db1941b7d1260d538875b123c.essence +tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/model.expected.json +tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/stdout.expected +tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/164923d945fc6b906d47491810f5ced0.essence +tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/model.expected.json +tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/stdout.expected +tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/168ad762cd3c4082865928d62f9353ef.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/16aa3dcc852ae03bf23b5ae7a4992f5d.essence +tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/model.expected.json +tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/stdout.expected +tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/16ca06648eec73b69aa709f229b91d2a.essence +tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/model.expected.json +tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/stdout.expected +tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/16fd8e97c063710963e8c810fe6d2065.eprime.essence +tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/model.expected.json +tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/stdout.expected +tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/170f86c11e713e23467198c2e2669cbd.essence +tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/model.expected.json +tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/stdout.expected +tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/1751869087ec45c65da9335dec93113d.eprime.essence +tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/model.expected.json +tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/stdout.expected +tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/176498a86f4f6aa56d13e84f835917e5.eprime.essence +tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/model.expected.json +tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/stdout.expected +tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/typecheck.expected +tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/1798bcfa6ad9e714b74ba5bc6d6ee29f.eprime.essence +tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/model.expected.json +tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/stdout.expected +tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/180d7672cb7d537c63efd16a3a532538.essence +tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/model.expected.json +tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/stdout.expected +tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/183ea55a9258e18d69a7b15d4f823c67.essence +tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/model.expected.json +tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/stdout.expected +tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/186bb4606d62808dd6e2822b2656632e.essence +tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/model.expected.json +tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/stdout.expected +tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/188d7225b206376219282a15ea98bac9.solution.essence +tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/model.expected.json +tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/stdout.expected +tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/18ac1fd8e4b3b77ce9495cbec2ed5ebb.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/model.expected.json +tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/stdout.expected +tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/18bf9a38ee59e4bcaebd478b9f980662.eprime.essence +tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/model.expected.json +tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/stdout.expected +tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/typecheck.expected +tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/18d2935f6d52dff23b827d77299071c3.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/model.expected.json +tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/stdout.expected +tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/1920a6bb2dcadc43b598f6c3a9603236.eprime.essence +tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/model.expected.json +tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/stdout.expected +tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/1934d72addb773493b0a745089dcfcb5.eprime.essence +tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/model.expected.json +tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/stdout.expected +tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/193b59cb1d0a923e59fe2ef78df9864e.essence +tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/model.expected.json +tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/stdout.expected +tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/1950a34566222ab7172290554c9f8905.essence +tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/model.expected.json +tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/stdout.expected +tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/19714c452f09e52c3e87329c7be6c781.eprime.essence +tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/model.expected.json +tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/stdout.expected +tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/1990c76f1882ff7413c5cc43059b78fe.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/19a95dc40bdd55fa709e39952798729e.essence +tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/model.expected.json +tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/stdout.expected +tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/19d1064ef4c8d198598abfefdf3256bf.essence +tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/model.expected.json +tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/stdout.expected +tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/1a187aeb382549fa2e585baabb219dfc.essence +tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/model.expected.json +tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/stdout.expected +tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/1a4f723156644e60a38ec0e325765e17.essence +tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/model.expected.json +tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/stdout.expected +tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/1a74e085d474d94e75d0b67e14b3dc55.essence +tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/model.expected.json +tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/stdout.expected +tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/1a969256eca371d1564ac6ad94eb6d41.essence +tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/model.expected.json +tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/stdout.expected +tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/1abb07c9ef975b96bf575bfbe8f442b5.eprime.essence +tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/model.expected.json +tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/stdout.expected +tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/typecheck.expected +tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/1af98fd7990664bf2b97a91da53ca098.essence +tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/model.expected.json +tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/stdout.expected +tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/1b18244524b60fc69009f17d0221b5a5.eprime.essence +tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/model.expected.json +tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/stdout.expected +tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/1b6c1179b1a92bd88edaeed5c5bfb398.eprime.essence +tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/model.expected.json +tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/stdout.expected +tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/1ba7bf4085ce352d5ed369f68409a4fc.essence +tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/model.expected.json +tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/stdout.expected +tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/1ba964336829ef6ac8b9e2aabd3aca98.essence +tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/model.expected.json +tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/stdout.expected +tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/1bcbd3752f5aa0035b2cfc8af246772f.essence +tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/model.expected.json +tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/stdout.expected +tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/1beae32c0cb2a99dc50a9e2b4465cfad.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/model.expected.json +tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/stdout.expected +tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/1c42766c9daae67c81a785f36b3546e8.eprime.essence +tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/typecheck.expected +tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7.essence +tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/1cc10a8b3112922d6196037d563706a2.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/model.expected.json +tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/stdout.expected +tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/1cc14f70f3fd8130affee799d5120a35.eprime.essence +tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/model.expected.json +tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/stdout.expected +tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/1cd562165f0706928e25084fc1a9e78d.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/model.expected.json +tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/stdout.expected +tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/1cd5a62f400692a5b85a18e80af82ab6.essence +tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/model.expected.json +tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/stdout.expected +tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/1cf3a95fce83f1c149da1709b032664f.essence +tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/model.expected.json +tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/stdout.expected +tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/1d271b0b60ae2e3474a67901cdcc8030.essence +tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/model.expected.json +tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/stdout.expected +tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/1d3d858ddd88a4a03de0614d73e6ad47.eprime.essence +tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/model.expected.json +tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/stdout.expected +tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/1d82ff9bf3543fa3bb751d09c3d2f55a.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/model.expected.json +tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/stdout.expected +tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/1db390590fecb4c5a938f3dfbaf3d4fe.essence +tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/1dec07ace23b77f34d3cc74026ca13cc.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/model.expected.json +tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/stdout.expected +tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/1e24a75f48bb605b136de436729d97e4.eprime.essence +tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/model.expected.json +tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/stdout.expected +tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/1e3c2ea5eb1b0a1eb092e59c73e21e65.eprime.essence +tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/model.expected.json +tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/stdout.expected +tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/1e9a9285f7d67b725602beae7d53730a.eprime.essence +tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/model.expected.json +tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/stdout.expected +tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/1ee0285168847690ddaad9da70751095.eprime.essence +tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/model.expected.json +tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/stdout.expected +tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/typecheck.expected +tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/1efbb4d6bcec1259f2d76475d8afd94c.essence +tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/model.expected.json +tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/stdout.expected +tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/1f06ad8f5f3af2f71f4f0c51ebd57143.eprime.essence +tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/model.expected.json +tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/stdout.expected +tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/1f7ccc0b17cc2f7840f65b31f2c17f05.eprime.essence +tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/model.expected.json +tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/stdout.expected +tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/1ff1d401284fe32b6639121ce47b3995.essence +tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/model.expected.json +tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/stdout.expected +tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/20033235278db80e48685c68146b29e1.eprime.essence +tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/200d78834a42ebeb6f12a80d41000004.eprime.essence +tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/model.expected.json +tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/stdout.expected +tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/typecheck.expected +tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/2014ff2f904414bb2471250b0da1a297.eprime.essence +tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/model.expected.json +tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/stdout.expected +tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/202ee87d3a92ce3781d914239e091097.eprime.essence +tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/model.expected.json +tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/stdout.expected +tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/20320e49c559f105460436e6d7d8a1a7.essence +tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/208ec24add8f7b331f0829f7296b04c7.eprime.essence +tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/model.expected.json +tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/stdout.expected +tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/typecheck.expected +tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/209a9f520d1bcf559a4786b8e19af490.essence +tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/model.expected.json +tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/stdout.expected +tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/20a87ed854619dfbc1f01b026e5db67b.essence +tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/model.expected.json +tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/stdout.expected +tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/20cd5c06ef131fd1e956636bd3674eab.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/model.expected.json +tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/stdout.expected +tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/20d50690b43d273ec5f6d147b81dcc6a.eprime.essence +tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/model.expected.json +tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/stdout.expected +tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/2126dcb9f7010a648e265451e068956e.eprime.essence +tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/model.expected.json +tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/stdout.expected +tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/214884d4c5fdd90ec55a3b9ce63e1fcb.essence +tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/model.expected.json +tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/stdout.expected +tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/215a06c72d89bae1df79e244d678777b.essence +tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/model.expected.json +tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/stdout.expected +tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/215cdd562fcbb2db9e1f17a8ebf9f4aa.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/model.expected.json +tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/stdout.expected +tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/218bac9b68dc4b63fe9a56e00eccb05d.essence +tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/model.expected.json +tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/stdout.expected +tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/21be920dffbaacd7e2b6b06b72cb75c0.essence +tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/model.expected.json +tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/stdout.expected +tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/22163685d87afbc145bc90463cad981b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/model.expected.json +tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/stdout.expected +tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/223d20931c36c3d4a55f5caf3e7564c6.essence +tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/model.expected.json +tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/stdout.expected +tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/22477309ce0401a8d76f05db531a8477.eprime.essence +tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/model.expected.json +tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/stdout.expected +tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected +tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/22699b3de15c5a4e88c1280a03a21bf2.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/model.expected.json +tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/stdout.expected +tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/227cfa94a3ad9346cb712cd351e4430c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/model.expected.json +tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/stdout.expected +tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/22a07994eba0be1abf0548df84328b0b.essence +tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/model.expected.json +tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/stdout.expected +tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/22e00fd813567d097f185ffe48d25405.essence +tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/model.expected.json +tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/stdout.expected +tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/22e79240911812510abe6f658999a682.essence +tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/model.expected.json +tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/stdout.expected +tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/231d88eeb42f490d20cc4a0ad92598a0.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/model.expected.json +tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/stdout.expected +tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/236900528ff2e3b09f2ed67c70fca23a.solution.essence +tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/model.expected.json +tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/stdout.expected +tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/23bad3eae7b82e1742600d53802770fd.eprime.essence +tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/model.expected.json +tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/stdout.expected +tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/typecheck.expected +tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/23e62b64c5943a34984dd988a2cbf643.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/model.expected.json +tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/stdout.expected +tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/typecheck.expected +tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/23f59fd02b1d9c3816b417a8727e418c.eprime.essence +tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/model.expected.json +tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/stdout.expected +tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/244286cc2dd03e6c340ffdd9321b5fe7.essence +tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/model.expected.json +tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/stdout.expected +tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/248c887518286002b0579d1615279b51.essence +tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/model.expected.json +tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/stdout.expected +tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/24cfea547a363a6a1cc5a0a32bafb139.essence +tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/model.expected.json +tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/stdout.expected +tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/256afa47464e2a7d839a0636d335714b.eprime.essence +tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/model.expected.json +tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/stdout.expected +tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/typecheck.expected +tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/25c731b81cdfba9a1930f6d921e9fc53.essence +tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/model.expected.json +tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/stdout.expected +tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/25dea2c84343f1fb62940c93170003b6.essence +tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/model.expected.json +tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/stdout.expected +tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/26130490f798a38f76f8a8f262a2d580.essence +tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/model.expected.json +tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/stdout.expected +tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/2616f49a05149925625ef0cfc389d39d.essence +tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/model.expected.json +tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/stdout.expected +tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/267e4c02702f032d831c2bfc66efbf69.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/model.expected.json +tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/stdout.expected +tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/2695f2a6d656aaeb483f6daccc9be82e.solution.essence +tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/model.expected.json +tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/stdout.expected +tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/26dded8ab8def8b4a6b52bf204ce84cb.essence +tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/model.expected.json +tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/stdout.expected +tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/26e61daabf3a56aa76626323f893ecdf.essence +tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/model.expected.json +tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/stdout.expected +tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/271129bfe3dc022817fb1fc98d1e4d0e.eprime.essence +tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/model.expected.json +tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/stdout.expected +tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/274393cdbcac9f3c51b82f0a0b399337.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/model.expected.json +tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/stdout.expected +tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/274676d6fa88ececffc2c98527414e51.essence +tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/model.expected.json +tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/stdout.expected +tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/27751403de10fefc991154fbb6c3f49a.essence +tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/model.expected.json +tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/stdout.expected +tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/280eb734981fa1f0b346703c1bba454e.essence +tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/model.expected.json +tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/stdout.expected +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected +tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/2835cf8d0df29e21336c9c33319cc86f.essence +tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/model.expected.json +tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/stdout.expected +tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/286dbf175e6155dc1128296f827efac7.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/model.expected.json +tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/stdout.expected +tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/2885de1be0c03479fc478aa6b6530488.essence +tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/model.expected.json +tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/stdout.expected +tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/28a2610455b6ca94984fa755c0d52d10.essence +tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/model.expected.json +tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/stdout.expected +tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/28d57f1390d80ea32a301bbb2a3b9b0c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/model.expected.json +tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/stdout.expected +tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/28f120542d453f2cbf15d3bfab27db39.essence +tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/model.expected.json +tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/stdout.expected +tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/290739011e12e610230d80d971fabb30.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/model.expected.json +tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/stdout.expected +tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/2910579caa938519c953fccd48611fee.eprime.essence +tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/model.expected.json +tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/stdout.expected +tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/2931d8c17365e4f7d93c5215f540866f.eprime.essence +tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/model.expected.json +tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/stdout.expected +tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/2956857a22d9d2330490c41c8b5a4142.essence +tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/model.expected.json +tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/stdout.expected +tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/295854f4230fa755cbb4cb009d709f41.essence +tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/model.expected.json +tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/stdout.expected +tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/29a7a43c3a0b3215a4d95c077acd7dbb.param.essence +tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/model.expected.json +tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/stdout.expected +tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/29d3e117bad5d1b803ac394d408bae00.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/model.expected.json +tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/stdout.expected +tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/29d792e7abc6c92b11ccc1d7c38d0115.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/model.expected.json +tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/stdout.expected +tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/29df720249f3d8f260f956c798d99130.essence +tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/model.expected.json +tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/stdout.expected +tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/2a33caf2e89e26f6159e0cdc2cb9295a.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/model.expected.json +tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/stdout.expected +tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/2a9a716bc12b6582b04e4755977c7cd1.essence +tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/model.expected.json +tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/stdout.expected +tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/2aa2903816b702397e1e91a209041078.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/model.expected.json +tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/stdout.expected +tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/2abab26b761b711b383086f57689adc5.eprime.essence +tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/model.expected.json +tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/stdout.expected +tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected +tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/2ace48adfbcb46a388e1477947575ad1.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/model.expected.json +tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/stdout.expected +tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/2b13a16f904708b301f055247df10317.essence +tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/model.expected.json +tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/stdout.expected +tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/2b2e0dbeb429e6c181ea07d40a5be562.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/model.expected.json +tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/stdout.expected +tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/2b44f45e2835003c9493d53c7d0bce3c.solution.essence +tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/model.expected.json +tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/stdout.expected +tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/2b93c88cac468cf8763b8ae9400f129b.param.essence +tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/model.expected.json +tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/stdout.expected +tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/2ba20be39a7083fcaf0429a5caff6f38.eprime.essence +tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/model.expected.json +tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/stdout.expected +tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/2bbd1982f26a7d5246ced1dd6540d26e.eprime.essence +tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/model.expected.json +tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/stdout.expected +tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/2bf8e4253a94be54961863e701c8ffcb.essence +tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/model.expected.json +tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/stdout.expected +tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/2bff2266baf0a3ae0392de70d0401ccb.essence +tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/model.expected.json +tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/stdout.expected +tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/2c0b8c3b47aaa96a6b45785659d54fb6.essence +tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/model.expected.json +tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/stdout.expected +tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/2c66ae20ba104065bc0b14b9b0eb8e2c.eprime.essence +tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/model.expected.json +tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/stdout.expected +tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/2c742d849b8dba095be529f30258c776.eprime.essence +tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/model.expected.json +tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/stdout.expected +tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/2c846a528fd3ad070b1e71f1019cbca2.essence +tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/model.expected.json +tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/stdout.expected +tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/2cb879c833748cef779f84df872b0d71.eprime.essence +tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/model.expected.json +tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/stdout.expected +tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected +tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/2d9db50cec26e6c04c8774aa5009784e.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/model.expected.json +tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/stdout.expected +tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/2dd4d3457ed3dbc49c35657e796f93cd.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/model.expected.json +tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/stdout.expected +tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/2de136cea37f8c7c6c2dbce3ad7bfe52.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/model.expected.json +tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/stdout.expected +tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/2e2ad8fe1fae6676863edda2c078d2f2.eprime.essence +tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/model.expected.json +tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/stdout.expected +tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/2e43201f0aa8f9929f80b0120d9079ec.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/2ed6c1a74ab623d07ac433d04ecc445b.essence +tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/model.expected.json +tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/stdout.expected +tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/2f9ae530589fb178e8010506c8b1cd19.eprime.essence +tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/model.expected.json +tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/stdout.expected +tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/2fd1cf57932b12ef3d73f4af22aae142.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/model.expected.json +tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/stdout.expected +tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/2fdd1fe71fbea3100295ce989ffb06c1.essence +tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/model.expected.json +tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/stdout.expected +tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/2fedddbce618e737d97ee1f14cd19b0e.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/model.expected.json +tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/stdout.expected +tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/300902ac80dc424a40dc0a1972aadd07.eprime.essence +tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/model.expected.json +tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/stdout.expected +tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/3009726d0f8cf721799c1fbcaa0832f4.eprime.essence +tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/model.expected.json +tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/stdout.expected +tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/3028bd497e070409b07f06f6358eddaf.essence +tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/model.expected.json +tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/stdout.expected +tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/307ee3c7b82295b342954958580d321e.eprime.essence +tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/model.expected.json +tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/stdout.expected +tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/3092be0de62c362cd1c49042c585105f.eprime.essence +tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/model.expected.json +tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/stdout.expected +tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/30b305e0e87e640981fb5cad77d6869e.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/model.expected.json +tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/stdout.expected +tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/30cae7ed2fd84c58fd597a84edc6d04a.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/model.expected.json +tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/stdout.expected +tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/30f85c027c537ca7218acc2a52c96059.solution.essence +tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/model.expected.json +tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/stdout.expected +tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/311e53dc2d7c804fb9e0cfc1f43c37bf.eprime.essence +tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/model.expected.json +tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/stdout.expected +tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/314f8686aea5bfb35c4e5ad216d32f41.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/model.expected.json +tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/stdout.expected +tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/31541f8fbc7f16af462bb853b23b0a8b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/model.expected.json +tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/stdout.expected +tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/31626cff6d7b6ac63912726cdcd2e942.essence +tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/model.expected.json +tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/stdout.expected +tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/317b3394b1cff127ea38f233dda04a30.essence +tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/model.expected.json +tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/stdout.expected +tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/31f64ce050e6687e0af4fa4475b7e8b5.essence +tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/model.expected.json +tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/stdout.expected +tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/31f683d305b86f1023d4853cf84d6901.eprime.essence +tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/model.expected.json +tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/stdout.expected +tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/31ff3b11d8cf1b8998506f6c1933055c.eprime.essence +tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/model.expected.json +tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/stdout.expected +tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/32359fa6e824152fabe774a5f32c5caf.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/model.expected.json +tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/stdout.expected +tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/324bc97b10d8b4c59f3cd741afe3ea96.essence +tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/model.expected.json +tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/stdout.expected +tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/3251aed0fcb8fca4e92b7f6316d5aa1d.eprime.essence +tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/model.expected.json +tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/stdout.expected +tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/327977f393264ccb96efe5c4bae0368d.essence +tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/model.expected.json +tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/stdout.expected +tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/3286a11865622f212644d3eb65e0cb8d.essence +tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/model.expected.json +tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/stdout.expected +tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/32ba15f900d2899e277de2884b82db33.eprime.essence +tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/model.expected.json +tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/stdout.expected +tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/32dcb1f6e9ea6cffcddc831a9b09fe09.essence +tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/model.expected.json +tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/stdout.expected +tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/32e72d1f75d8bcb92f9685b706dc29c1.eprime.essence +tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/model.expected.json +tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/stdout.expected +tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/32f8563c6daa93f905b86ab15f412aa7.eprime.essence +tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/model.expected.json +tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/stdout.expected +tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/331484cef605f21f09c5f0303aa4b8a7.eprime.essence +tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/33b13b1c09e9caeee8805e2238560dcd.essence +tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/model.expected.json +tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/stdout.expected +tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/33b374caf91a36a3c3213f6735ffeb85.essence +tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/model.expected.json +tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/stdout.expected +tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/33ba178ba6a9c91283f2a1ebff4de2d9.essence +tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/model.expected.json +tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/stdout.expected +tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/340440b2048fca719a123048916b4c0e.essence +tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/model.expected.json +tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/stdout.expected +tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/34552e2be8dd2ea63930ffe4b5a015aa.eprime.essence +tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/model.expected.json +tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/stdout.expected +tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/345e8c1f7d7fbae43f48e4dd720d30e4.essence +tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/model.expected.json +tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/stdout.expected +tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/348dfb9cf626c62078be604c05c39de8.eprime.essence +tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/model.expected.json +tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/stdout.expected +tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/34a62bd32f9408027fd6b08b1f3b3c33.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/model.expected.json +tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/stdout.expected +tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/34ba91b9fc9c3567839da59111a3300a.essence +tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/model.expected.json +tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/stdout.expected +tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/34c6e2d47930e12182aef2c13629be9c.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/model.expected.json +tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/stdout.expected +tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/34efe399d190ea2b129f8a3c0e7a0e52.eprime.essence +tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/model.expected.json +tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/stdout.expected +tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/typecheck.expected +tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/34fc4f9c32a9f14d7d086719d5902ee3.essence +tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/model.expected.json +tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/stdout.expected +tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/353657731bc5ab2f967052fd60274d90.essence +tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/model.expected.json +tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/stdout.expected +tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/35a9b9aabd733bd1da92dcfbbafbb0e0.eprime.essence +tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/model.expected.json +tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/stdout.expected +tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected +tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/35aec2a8434e0ae0a0041beca9f1d91e.eprime.essence +tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/model.expected.json +tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/stdout.expected +tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/35bd3096c398059a5f4e2e9de6159866.eprime.essence +tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/model.expected.json +tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/stdout.expected +tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/35c3fe42a5badc499fcbc769a6de8539.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/model.expected.json +tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/stdout.expected +tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/35f715228097d8ae8a9aed126b91f95f.param.essence +tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/model.expected.json +tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/stdout.expected +tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/35f9786ccf16b43d20308a9a4807a45c.eprime.essence +tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/model.expected.json +tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/stdout.expected +tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/35fe1e08f59ed5b8086e4677c7d196af.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/model.expected.json +tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/stdout.expected +tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/360166fcf3210cf2cc730698c7561f1a.eprime.essence +tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/model.expected.json +tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/stdout.expected +tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/3620a44b9d1882d1b8d68ebb7c2e267b.eprime.essence +tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/model.expected.json +tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/stdout.expected +tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/362d7066f8d61d2894dbeb701e6c0a79.eprime.essence +tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/model.expected.json +tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/stdout.expected +tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/363b608789b363a35fa18f1321551fc1.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/model.expected.json +tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/stdout.expected +tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/3661b2ed8d197feac2c9199dccc20ccf.solution.essence +tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/model.expected.json +tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/stdout.expected +tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/36ab55fa4f0b19d12f8af4797eda170f.essence +tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/model.expected.json +tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/stdout.expected +tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/36adf65748e3aabfd49290654b8b9ec2.eprime.essence +tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/model.expected.json +tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/stdout.expected +tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected +tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/37465a47958e062b2b7afd0001a0e9a1.essence +tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/model.expected.json +tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/stdout.expected +tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/374c1f815c417d97011dfa8c5cfa42f9.essence +tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/model.expected.json +tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/stdout.expected +tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/37b6d848c391d03c123e6e8c55e6b822.eprime.essence +tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/model.expected.json +tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/stdout.expected +tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/3844dbb1b6850a1f2659adb2d65a9887.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/model.expected.json +tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/stdout.expected +tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/3891079bd93693be99228d609690482f.essence +tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/model.expected.json +tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/stdout.expected +tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/3897df283e1b6b72cd399738fe807325.eprime.essence +tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/model.expected.json +tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/stdout.expected +tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/38d20eb994d28a44c574330747169cea.essence +tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/model.expected.json +tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/stdout.expected +tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/38d6f8fb97319ab03c05b9e98291e58c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/model.expected.json +tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/stdout.expected +tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/38d76c6cc0890964b8e6839987b595de.eprime.essence +tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/model.expected.json +tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/stdout.expected +tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/38e8f152255ddac04761d9c123c19756.solution.essence +tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/model.expected.json +tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/stdout.expected +tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/3904efc3f4f108940913260dbf388ed1.essence +tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/model.expected.json +tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/stdout.expected +tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/395f72e8642ea81704866e6c9ed64dd5.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/model.expected.json +tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/stdout.expected +tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/397465fb16d2fc9e85dcbbfc2508037c.solution.essence +tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/model.expected.json +tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/stdout.expected +tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/39936b90fd0cf508557865456d964b8b.eprime.essence +tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/model.expected.json +tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/stdout.expected +tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/typecheck.expected +tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/399b8bc4443e15daa66f9294ca5a959e.essence +tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/model.expected.json +tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/stdout.expected +tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/39a705752a0c5e219408facaeb5079d9.eprime.essence +tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/model.expected.json +tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/stdout.expected +tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/39cf126d4994f21cb4a1cb613458de1f.essence +tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/model.expected.json +tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/stdout.expected +tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/39e356310d9f6de4a1e96c3f82063bd4.essence +tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/model.expected.json +tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/stdout.expected +tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/39fc0816e0aea89208c87fa4d39edf4d.essence +tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/model.expected.json +tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/stdout.expected +tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/3a2cc7ae07080388a90a2e45e94e5c40.essence +tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/model.expected.json +tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/stdout.expected +tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/3afc39ce199d39888004db7e3f6f55e6.eprime.essence +tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/model.expected.json +tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/stdout.expected +tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/3b3c5921839ebaedc01d5140662b9f8d.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/model.expected.json +tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/stdout.expected +tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/3b5e1803eab57ae500a891f3bfadce58.eprime.essence +tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/model.expected.json +tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/stdout.expected +tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/3b6775a4761d96a1d2c44a9934563cee.eprime.essence +tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/model.expected.json +tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/stdout.expected +tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/3bb0d8267dc5acd19cceb43e17c91b79.essence +tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/model.expected.json +tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/stdout.expected +tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/3c226880c8b7557df44d9031c788ff5c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/model.expected.json +tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/stdout.expected +tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/3c2e9d276b9b049dd831530f48da9a2c.eprime.essence +tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/model.expected.json +tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/stdout.expected +tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/3c8c349d4ef7de43a374d30e7a1f9b71.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/model.expected.json +tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/stdout.expected +tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/3c8ca696589fa5c50ce0679acfd8e97f.essence +tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/model.expected.json +tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/stdout.expected +tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/3c9559b98b49ae4783c2ca23c6780149.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/model.expected.json +tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/stdout.expected +tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/3c998931c0705d3b120802c50d6d76b4.essence +tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/model.expected.json +tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/stdout.expected +tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/3cb1bc8910cd0ae751a62eb282647541.essence +tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/model.expected.json +tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/stdout.expected +tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/3cbe0039a34abb5da3530357feb79c1d.essence +tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/model.expected.json +tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/stdout.expected +tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/3cc911ee89eb40d0d5e49b63286e8f7f.eprime.essence +tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/model.expected.json +tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/stdout.expected +tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/3ccc464fd5fa06fd1d7c047ba437a92c.solution.essence +tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/stdout.expected +tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/3ce3ca1e14adb90d865016fe581a6fa8.eprime.essence +tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/stdout.expected +tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/3ced36091929fe0596bba739e95077aa.eprime.essence +tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/stdout.expected +tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/3d3417b2f5188bb06d8802ca2dbab9bb.param.essence +tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/model.expected.json +tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/stdout.expected +tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/3d535f0ac7272986482b759dae43c292.eprime.essence +tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/model.expected.json +tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/stdout.expected +tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/3dc53410c6bdd9d368e9342d92f683d9.essence +tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/model.expected.json +tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/stdout.expected +tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/3e000aaf4ff46e620886654cb453b7ae.essence +tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/model.expected.json +tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/stdout.expected +tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/3e5896b5c4650dcc57c87c2d473b6bbb.eprime.essence +tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/model.expected.json +tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/stdout.expected +tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/3e713ec9592f369b613a3f3acaff0329.essence +tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/model.expected.json +tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/stdout.expected +tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/3e88c59ec65a416f21f9fe3d5374b360.solution.essence +tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/model.expected.json +tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/stdout.expected +tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/3e8d8447ffcd9d0c6b448dab890c71d5.param.essence +tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/model.expected.json +tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/stdout.expected +tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/3ebedad4456cf9db17a8b7870815735e.essence +tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/stdout.expected +tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/3ec03da1ddc427cf36261757e735114e.eprime.essence +tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/stdout.expected +tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/3ed90481a522d19bb9667ea6ef908196.eprime.essence +tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/stdout.expected +tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/3edef0a7a6a503ffe358debbd0b1d4c9.essence +tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/model.expected.json +tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/stdout.expected +tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/3f2d75fc3d948ca4fd97523766f3659f.essence +tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/model.expected.json +tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/stdout.expected +tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/3f3f809a0502b5a643d88e7059acb08e.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/model.expected.json +tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/stdout.expected +tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/3f487c8189ea7cd34b26c9482423c22f.eprime.essence +tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/model.expected.json +tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/stdout.expected +tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/3ff2fa2c4687912a41ba397eadbb6e6e.eprime.essence +tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/model.expected.json +tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/stdout.expected +tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/400c154b98432fd6d40a20b60e33a820.essence +tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/model.expected.json +tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/stdout.expected +tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/401bc79800219f35bb8383806585ae12.essence +tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/model.expected.json +tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/stdout.expected +tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/401d7215ed575a743ec2b4542af4e08d.essence +tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/model.expected.json +tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/stdout.expected +tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/402d679b6bfcd0370633ca1d17ad1f94.eprime.essence +tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/model.expected.json +tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/stdout.expected +tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/406db1c9f1d0b024a8ba6de04ada1fa2.eprime.essence +tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/model.expected.json +tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/stdout.expected +tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/40c777188c96f06f23b379634df5be19.essence +tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/model.expected.json +tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/stdout.expected +tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/40ce6cdb722c1098a95e3150cf28137a.eprime.essence +tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/model.expected.json +tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/stdout.expected +tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/40df86985a668247ccc7d4d4ca3f4f6c.eprime.essence +tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/model.expected.json +tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/stdout.expected +tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/419d808eaf5ba4da3a7cb3ed4cd717e8.essence +tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/420a979c68397e28748b9281ea454667.essence +tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/model.expected.json +tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/stdout.expected +tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/42277f8d532c4833bbdd3ec4b99809ef.essence +tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/4280cfb278486b51961b41fb8309b68d.eprime.essence +tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/model.expected.json +tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/stdout.expected +tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/42c5a23fafc955d441461af4184f86f2.eprime.essence +tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/model.expected.json +tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/stdout.expected +tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/typecheck.expected +tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/42f3b14e92ea11714f134e31ec39664c.essence +tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/model.expected.json +tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/stdout.expected +tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/42f8b49ddcf29717d4fbf4161c5438d1.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/model.expected.json +tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/stdout.expected +tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/434c784a35b841f5f825ff3ec5fbff68.eprime.essence +tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/model.expected.json +tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/stdout.expected +tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/typecheck.expected +tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/437b8f966aef896f8c9f11690aa1c1a7.param.essence +tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/439f472f0064355bae4b1cc168a4fad9.essence +tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/model.expected.json +tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/stdout.expected +tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/4413940d37bfd7e78e7ee7017ab3b954.eprime.essence +tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/model.expected.json +tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/stdout.expected +tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/44278034dfc02f37c01fe14e572e7434.essence +tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/model.expected.json +tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/stdout.expected +tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/4448f802c81ddef89ede84d1923faf38.eprime.essence +tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/model.expected.json +tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/stdout.expected +tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/444f84074522a17b89cf4e24e859558a.eprime.essence +tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/model.expected.json +tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/stdout.expected +tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/445128f3edb059f50edbb2b0be22c084.param.essence +tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/model.expected.json +tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/stdout.expected +tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/4478aad769a350699ccf94c692327d2e.essence +tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/model.expected.json +tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/stdout.expected +tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/4479e3c0d499cca941766ab5b8a254a7.solution.essence +tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/448ca65d24a3d7c8e7ddac7447a7aacf.essence +tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/model.expected.json +tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/stdout.expected +tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/4495d6e1e94abd6d991861099b9dd715.essence +tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/model.expected.json +tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/stdout.expected +tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/44dd846c20ee4eb39d7cc4a19408a0ae.eprime.essence +tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/model.expected.json +tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/stdout.expected +tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/450c78ccf2a2a0f76ab7c88d108a8547.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/model.expected.json +tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/stdout.expected +tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/453d009a271e94e412374f1510693b71.essence +tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/model.expected.json +tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/stdout.expected +tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/453d7019c56c6e4fd720fcc8f83142de.eprime.essence +tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/model.expected.json +tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/stdout.expected +tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/45ab0a8a38b8a16d1afe4a4b4bffef04.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/model.expected.json +tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/stdout.expected +tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/45f397b2827824d973913a780b447600.essence +tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/model.expected.json +tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/stdout.expected +tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/4611a3e5fa92325652ce5b14da03d0af.essence +tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/model.expected.json +tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/stdout.expected +tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/461bdf3c29b2f09b541034b080952550.eprime.essence +tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/model.expected.json +tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/stdout.expected +tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/typecheck.expected +tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/463c263b7ca3948dadc72aac12f03675.essence +tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/model.expected.json +tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/stdout.expected +tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/46479321fee8a3387f42558b39b364cc.eprime.essence +tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/model.expected.json +tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/stdout.expected +tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/46590714def95df207999f7e2c6daee7.eprime.essence +tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/model.expected.json +tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/stdout.expected +tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/46b46a629f553e06a23cce0cb0ab3fc7.eprime.essence +tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/model.expected.json +tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/stdout.expected +tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/46e7df2eefd532655b09da4ed435de1e.essence +tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/model.expected.json +tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/stdout.expected +tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/476b6f0c19f97c01c719897ca9420946.essence +tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/model.expected.json +tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/stdout.expected +tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/4797634599665df7e1204de1282c4e2e.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/model.expected.json +tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/stdout.expected +tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/480a96cb2363505372a90a8e73812109.essence +tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/model.expected.json +tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/stdout.expected +tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/4849ece40e3375108283d1ad3cfecc90.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/model.expected.json +tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/stdout.expected +tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/485f1c0edb95678792083be90034ac0a.essence +tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/model.expected.json +tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/stdout.expected +tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/48929a67dab909763280169f5d4632b9.eprime.essence +tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/model.expected.json +tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/stdout.expected +tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/48faac38ade4e0680ba7f0e26fc7d315.eprime.essence +tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/model.expected.json +tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/stdout.expected +tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/typecheck.expected +tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/490436b325ecf3283f80d59f69c60dc6.eprime.essence +tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/model.expected.json +tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/stdout.expected +tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/typecheck.expected +tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/49049fb9a0e241dbf48a77f5ec9f7259.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/model.expected.json +tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/stdout.expected +tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/493197c9c0b2cab08bada7379e567229.essence +tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/model.expected.json +tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/stdout.expected +tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/499e079eb49364e5f37956fbd5635887.eprime.essence +tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/model.expected.json +tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/stdout.expected +tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected +tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/49c4bb2084ae145c951d6e363a90ea9f.eprime.essence +tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/model.expected.json +tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/stdout.expected +tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/49c6df33edfc97e3f0f7b81aa6940880.eprime.essence +tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/model.expected.json +tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/stdout.expected +tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/49f9216e32129544a9ed08e08bff59a2.eprime.essence +tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/model.expected.json +tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/stdout.expected +tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/4a256fa8ed1c07ea2ef405dff5b700b9.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/model.expected.json +tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/stdout.expected +tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/4a598ea5ec7744cc20c3a53601371daf.eprime.essence +tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/model.expected.json +tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/stdout.expected +tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected +tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/4aac419ab95021d586ca0c4be3595a8a.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/model.expected.json +tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/stdout.expected +tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/4aba79f85e75b7880783738a0de5456f.eprime.essence +tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/model.expected.json +tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/stdout.expected +tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/4b22c4a968c8f76789b1164fda122364.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/model.expected.json +tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/stdout.expected +tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/4b23607e697a7b33b7855bb9e6d8e164.eprime.essence +tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/model.expected.json +tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/stdout.expected +tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/4b3868c917f7a169d375b457cbe72888.eprime.essence +tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/model.expected.json +tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/stdout.expected +tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/4b3aee17579d9410527145df9332fdb6.solution.essence +tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/model.expected.json +tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/stdout.expected +tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/4bbb005a1c711470b24b1ce32927347e.essence +tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/model.expected.json +tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/stdout.expected +tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/4bdd3c3b94bf57ed6b5ded25a849af9c.essence +tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/model.expected.json +tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/stdout.expected +tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/4be21fd12a8819847cbd51dea1e370a3.eprime.essence +tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/model.expected.json +tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/stdout.expected +tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/typecheck.expected +tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/4bf6f94d3db529f4501cb0a0799a2145.essence +tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/model.expected.json +tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/stdout.expected +tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/4c2f1f690c7a08a46f98c9c20ae39638.essence +tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/model.expected.json +tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/stdout.expected +tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/4c42c6054e5582e78e2da66a04690fb4.eprime.essence +tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/model.expected.json +tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/stdout.expected +tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/4c5b25d1ff6d063a890465017499de2f.essence +tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/model.expected.json +tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/stdout.expected +tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/4ca14af7de2b5f1fd0489e76314fbafa.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/model.expected.json +tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/stdout.expected +tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/4cef7ec664c5dca44df9e841fc36d16c.eprime.essence +tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/model.expected.json +tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/stdout.expected +tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/4d092618251bbf48216dc1749454802c.eprime.essence +tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/model.expected.json +tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/stdout.expected +tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/4dc66fe54b35bc9bc0cacbfe377f4dc6.eprime.essence +tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/model.expected.json +tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected +tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/4debc13b7368939beb13d0408f1225f5.essence +tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/model.expected.json +tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/stdout.expected +tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/4e9dd6bac212dc98d3103b73e3c2971e.essence +tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/model.expected.json +tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/stdout.expected +tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/4ea83cdfbcaf661ef1707eb376d12dcb.essence +tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/model.expected.json +tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/stdout.expected +tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/4eb62bd911a26eca2c663622b9db8469.param.essence +tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/model.expected.json +tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/stdout.expected +tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/4ed20803dce83fac172cae8761501a39.param.essence +tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/model.expected.json +tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/stdout.expected +tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/4f12b3362c3cd09cf3afc0015b65969e.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/model.expected.json +tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/stdout.expected +tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/4f86b4baca491f2992bb7713e7da0980.essence +tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/model.expected.json +tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/stdout.expected +tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/4f9ae4ffb009a3b226c8414061bd362f.eprime.essence +tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/model.expected.json +tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/stdout.expected +tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/4fb5fb2fc16946670ca1e42f6fcaee7c.eprime.essence +tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/model.expected.json +tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/stdout.expected +tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/4fca9263ae2d80342c52533f211a8f16.eprime.essence +tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/model.expected.json +tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/stdout.expected +tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/typecheck.expected +tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/4feb5c171fc58c1f25b21ccf17e9df5e.eprime.essence +tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/model.expected.json +tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/stdout.expected +tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/503586c1bb7c6d7d42be1f332267d916.eprime.essence +tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/model.expected.json +tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/stdout.expected +tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/typecheck.expected +tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/5066c398855444982cf41c9d767fd995.eprime.essence +tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/model.expected.json +tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/stdout.expected +tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/5068bddda9fe656697ec6de2579580db.essence +tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/model.expected.json +tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/stdout.expected +tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/5071a0ba341e7dfd170dd3d834b37ced.param.essence +tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/model.expected.json +tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/stdout.expected +tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/507d3282342387e2401ac58873811295.essence +tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/model.expected.json +tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/stdout.expected +tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/5087e6d4b27308f7844b160d11a537c2.eprime.essence +tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/model.expected.json +tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/stdout.expected +tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/50c2a6964d0e24c53ade257ecdd50985.essence +tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/model.expected.json +tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/stdout.expected +tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/50c803ed8a3cba6387b21144fd06afd5.essence +tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/model.expected.json +tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/stdout.expected +tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/50d5d20326959ce7f9250b33c9f80597.essence +tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/model.expected.json +tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/stdout.expected +tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/51086d5147895ed3eb905ccab398c7a2.essence +tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/model.expected.json +tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/stdout.expected +tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/51679a7b584354bb97f16e9f40d5c604.essence +tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/model.expected.json +tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/stdout.expected +tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/51e87619f2aa1a2aba11584b2edc8fd9.essence +tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/model.expected.json +tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/stdout.expected +tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/51ee9aa6c23d7a75bc27e57047c67667.eprime.essence +tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/model.expected.json +tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/stdout.expected +tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/5217aa24b09e91520ae4fd364ce14998.eprime.essence +tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/model.expected.json +tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/stdout.expected +tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/528ddbc341b292a9c60ce82719e299d2.essence +tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/model.expected.json +tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/stdout.expected +tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/533e2929b56244f23bae34632bac20e2.essence +tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/model.expected.json +tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/stdout.expected +tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/5389d8ae83d9b2260e7c5697c481970a.eprime.essence +tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/model.expected.json +tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/stdout.expected +tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/5399a212ea0b032f74966bdfe0e21709.eprime.essence +tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/model.expected.json +tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/stdout.expected +tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/53a426862ebb79d1768a6c0143a8831c.essence +tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/model.expected.json +tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/stdout.expected +tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/54357c603c8679029250e83ada7fca15.eprime.essence +tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/model.expected.json +tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/stdout.expected +tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/546e81cb258d27b8a874bdb1a0e2ef4c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/model.expected.json +tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/stdout.expected +tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/54b15fec24b105ed64b8e7bdeab74aec.essence +tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/model.expected.json +tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/stdout.expected +tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/54c995d240bca20d3853847acef38f4b.eprime.essence +tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/model.expected.json +tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/stdout.expected +tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected +tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/54f9669a1c9a729e3efa54d239531f1a.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/model.expected.json +tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/stdout.expected +tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/5537b34a9991a0fb4580102062c0b795.eprime.essence +tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/model.expected.json +tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/stdout.expected +tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/55ea8b3eb2eb1d64b5891c7c6770c5f7.eprime.essence +tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/model.expected.json +tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/stdout.expected +tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/560907760e8e19ae82dc37742bf181c1.eprime.essence +tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/model.expected.json +tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/stdout.expected +tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/564d2dac2114c350d82e1b204830a24e.essence +tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/model.expected.json +tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/stdout.expected +tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/565e64e802e2d5fe99e575a769a10f46.essence +tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/model.expected.json +tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/stdout.expected +tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/56bb219affa56fa8585b7d93b5d7957b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/model.expected.json +tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/stdout.expected +tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/56caa7ac2e7e4db76cc6c77bfd6b7019.essence +tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/model.expected.json +tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/stdout.expected +tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/5730851ebaf12a1212be46cc5a31235d.eprime.essence +tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/model.expected.json +tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/stdout.expected +tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/57fc63d1aa86555fc3580b95a7e0f8e9.essence +tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/model.expected.json +tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/stdout.expected +tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/58541e43cb8ad8a5c8be02bd79e21388.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/model.expected.json +tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/stdout.expected +tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/585c3cd2c560b3bce7f2c56c1b01d872.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/model.expected.json +tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/stdout.expected +tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/5880afcb8365cb9b7a90046a06c71c13.essence +tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/model.expected.json +tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/stdout.expected +tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/58e06280779d0562fb1094312a7ed65d.essence +tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/model.expected.json +tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/stdout.expected +tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/58e8a336185df542da6352134ce073d4.essence +tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/model.expected.json +tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/stdout.expected +tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/5934985e5f2b49680f9a1dd0d56f49ab.essence +tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/model.expected.json +tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/stdout.expected +tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/59c1d6b946041340649c24aa89a02a0a.essence +tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/model.expected.json +tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/stdout.expected +tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/59d832cec1caf1aaab7c58d776dd173e.essence +tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/model.expected.json +tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/stdout.expected +tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/59d9cb4ee0fd320c7b9a572310b4dc73.eprime.essence +tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/model.expected.json +tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/stdout.expected +tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/59f23e211645b15aafeb12d2a6804f75.eprime.essence +tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/model.expected.json +tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/stdout.expected +tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/5a20e5a83d18556a657c16d0e73d4702.essence +tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/model.expected.json +tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/stdout.expected +tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/5a2a920a38b4d4dedbef4582735c169f.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/model.expected.json +tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/stdout.expected +tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/5a3fabbfd4d8f7b5df04e250d4d2ac22.essence +tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/model.expected.json +tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/stdout.expected +tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/5a647ecc82bd6f30beb9891a30a9c3c7.eprime.essence +tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/model.expected.json +tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/stdout.expected +tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/5ac784c961498ebdd283a0fa62f11cf8.eprime.essence +tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/model.expected.json +tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/stdout.expected +tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/5afbd7bb16cd84e2166aad26c94e8563.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/model.expected.json +tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/5b1166277b057fe1599ef59c9575a016.essence +tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/5b45ba9bcc7c039c1299a896718993b6.essence +tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/5b50bb04aeb6d29b7833ddfaee9a7a06.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/5b55d99d2def282044ece58ea0c19348.essence +tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/5b75877073445fbe5c7984032644993e.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/5b7f553219b00b0d37cfc5bec0f2eaf6.eprime.essence +tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/stdout.expected +tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/5b917841fe72a502d046936ee40d1a65.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/model.expected.json +tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/stdout.expected +tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/5bb701ec00d09ccb13b5093812bd3842.eprime.essence +tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/model.expected.json +tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/stdout.expected +tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/5bc221bd0def5b302052fefcaae35403.eprime.essence +tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/model.expected.json +tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/stdout.expected +tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/typecheck.expected +tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/5bedf79d883f837a72f49f78eb9a267c.essence +tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/model.expected.json +tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/stdout.expected +tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/5c05f9d9fdff466f29cbe3e931304e9a.eprime.essence +tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/model.expected.json +tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/stdout.expected +tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/5c956e151d6c442acec91f46a0a4ba90.essence +tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/model.expected.json +tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/stdout.expected +tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/5cfc3c0f1cdd912aca8ac526cf3a7102.eprime.essence +tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/model.expected.json +tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/stdout.expected +tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/typecheck.expected +tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/5d7cff7a4e6a7b0e44acde6c41c210f5.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/model.expected.json +tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/stdout.expected +tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/5d9f6f1e5070e570488660a8d6079808.essence +tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/model.expected.json +tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/stdout.expected +tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/5da782cc37e87dc8ca237cf375beda92.eprime.essence +tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/model.expected.json +tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/stdout.expected +tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/5daa6180d595ca2238af28c4920e2345.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/model.expected.json +tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/stdout.expected +tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/5dc1915a42a7971f38d4c1efd8fac962.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/model.expected.json +tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/stdout.expected +tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/5df0ac9ae39fb7bfbf5f990f89cd23d5.eprime.essence +tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/model.expected.json +tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/stdout.expected +tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/5e209eef6a0309295e424afe63deb3b3.essence +tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/model.expected.json +tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/stdout.expected +tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/5e518b6bd904bec61aee47caffd90b28.essence +tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/model.expected.json +tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/stdout.expected +tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/5e9b16aaf3fb5a3fe0d6773d78fbc7ac.essence +tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/model.expected.json +tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/stdout.expected +tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/5ef166b15726a7b8be067fd722a0b762.essence +tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/model.expected.json +tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/stdout.expected +tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/5f831cd0b29482ae5fd8b986c279f34c.solution.essence +tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/model.expected.json +tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/stdout.expected +tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/5f8abcfb913c155e5fcf9aad1689ee48.eprime.essence +tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/model.expected.json +tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/stdout.expected +tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/5fa74d2946d0a37ececba0815c38476a.essence +tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/model.expected.json +tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/stdout.expected +tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/5fdb0e91805fa1a4a97ef0e9d9cb2b45.essence +tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/model.expected.json +tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/stdout.expected +tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/602d25f9a2041d1ebf4d4db9b3edc86e.essence +tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/model.expected.json +tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/stdout.expected +tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/603465a931823cf8433459de2d015883.eprime.essence +tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/model.expected.json +tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/stdout.expected +tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/604b6c20eee4ffd4f5166d275bfb2f99.essence +tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/model.expected.json +tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected +tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/60a914e18367fd0c2b4e281da008535e.eprime.essence +tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/model.expected.json +tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/stdout.expected +tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/60e6055ae747adf7736e2f5421d6557d.essence +tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/model.expected.json +tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/stdout.expected +tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/612a3b4f1e02d37d3c58b3ade9b248ef.essence +tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/61319fb9ab3ab592319d92b204c2bdfc.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/model.expected.json +tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/stdout.expected +tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/6222ba236852756e97296d6b0d5a7591.essence +tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/model.expected.json +tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/stdout.expected +tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/622990dcaff380b2b2386b0fd2938eaf.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/model.expected.json +tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/stdout.expected +tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/62594a1eb17519e35762e15ecb426543.essence +tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/model.expected.json +tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/stdout.expected +tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/627441aa1b7360baab198889cfca4427.essence +tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/model.expected.json +tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/stdout.expected +tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/627b55153f0eb551d73d1737841126b3.essence +tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/model.expected.json +tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/stdout.expected +tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/62b0458cc52011021227c9aa3001eaa2.eprime.essence +tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/model.expected.json +tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/stdout.expected +tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/62efe6787e7be32b6775a9054b5e7a90.eprime.essence +tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/model.expected.json +tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/stdout.expected +tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/typecheck.expected +tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/635138d6d04d99c29540660d96fadd90.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/model.expected.json +tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/stdout.expected +tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/635d068c0ed6bbf9ed532bcb7160ca5b.eprime.essence +tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/model.expected.json +tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/stdout.expected +tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/639426681f0939ff32581b49c1ed3446.eprime.essence +tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/model.expected.json +tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/stdout.expected +tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/6399ac65746238face19a4940122f300.essence +tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/model.expected.json +tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/stdout.expected +tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/639c945efab0ddc3cd257f342bd30d93.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/model.expected.json +tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/stdout.expected +tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/63bd888f30c6401cb53c1608c61be98f.eprime.essence +tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/model.expected.json +tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/stdout.expected +tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/63d2ce5ca79ec1ac946795d91b4a8c5c.essence +tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/model.expected.json +tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/stdout.expected +tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/63e6f12512faa654f77596ca09876cee.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/model.expected.json +tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/stdout.expected +tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/63f088cc502f3fbe5df99a31333bc2d3.essence +tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/model.expected.json +tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/stdout.expected +tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/64093bd494040e20b22c48c13361293d.essence +tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/model.expected.json +tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/stdout.expected +tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/647f57337d2730de29c992b43a041f89.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/model.expected.json +tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/stdout.expected +tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/64a80784861e9a2ea3acac19a9d5c43c.essence +tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/model.expected.json +tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/stdout.expected +tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/64fe7f7aaa89030d34bdb621e5deb747.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/model.expected.json +tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/stdout.expected +tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/650f60c017f90e0781f3478942261393.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/model.expected.json +tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/stdout.expected +tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/660818affc709c300fd6fe6489297ffd.eprime.essence +tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/model.expected.json +tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/stdout.expected +tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/6638a47bc0e4d1bf3de50a61b2d87868.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/model.expected.json +tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/stdout.expected +tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/6694ad082ff9961793c0c9c0a36196e4.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/model.expected.json +tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/stdout.expected +tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/66a184c301820c299d5a74f6b3d89566.essence +tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/model.expected.json +tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/stdout.expected +tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/66b37dcf91ac4c0988042c2b82c88561.eprime.essence +tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/model.expected.json +tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/stdout.expected +tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/66d8aabc637186ce37a17a8dcbc75b08.essence +tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/model.expected.json +tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/stdout.expected +tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/66da4175d592bc87c723993f7b709ba1.eprime.essence +tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/model.expected.json +tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/stdout.expected +tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/674b4722ae6d5a9ebe222221c6361cad.eprime.essence +tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/model.expected.json +tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/stdout.expected +tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/674f24d155119e8e111584cc92a47dee.eprime.essence +tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/model.expected.json +tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/stdout.expected +tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/typecheck.expected +tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/6759663e9944fadec8876ff64502e5ec.essence +tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/67856b9617d62beaf659a45708f21210.eprime.essence +tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/model.expected.json +tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/stdout.expected +tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/67f44eb9dafad2f5eafc179a153aa3c1.essence +tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/model.expected.json +tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/stdout.expected +tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/6816e93188da042831d6849d9fc88b51.eprime.essence +tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/model.expected.json +tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/stdout.expected +tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/typecheck.expected +tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/6819114bc3238cf5d2e085babaf65c92.essence +tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/model.expected.json +tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/stdout.expected +tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/6845c468147ab1df800fddde373c1e17.eprime.essence +tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/model.expected.json +tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/stdout.expected +tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/684c3d333688466aecbdaa587d524dfb.param.essence +tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/model.expected.json +tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/stdout.expected +tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/688d9c5f26c404975d660fcdd262858c.eprime.essence +tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/model.expected.json +tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/stdout.expected +tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/689b4574753caf426e48593872d8f4f2.essence +tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/model.expected.json +tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/stdout.expected +tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/689bbf501ca871dda34a71cddb06f9ec.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/68b25c7b142e7cf4257a8afe431e62b3.eprime.essence +tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/model.expected.json +tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/stdout.expected +tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/68b3c16a7cec0ae650d9545654c9aaa4.essence +tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/model.expected.json +tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/stdout.expected +tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/691ac05a17a4ad3b5dbac1fcf411c508.essence +tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/model.expected.json +tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/stdout.expected +tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/6920b205676413cff5a8ac0ba3ac9a39.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/model.expected.json +tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/stdout.expected +tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/695eea09aa21c14f80244f9c0f413304.essence +tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/model.expected.json +tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/stdout.expected +tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/697d6075ff1fdb76ea099fde1b20d219.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/model.expected.json +tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/stdout.expected +tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/69b57a8e7b3674ec24bd03b8e1cd8d6d.essence +tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/model.expected.json +tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/stdout.expected +tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/6a1444bd8e76a391728a3070075e95e9.essence +tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/model.expected.json +tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/stdout.expected +tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/6a21218d02d6066c0c13c2fd8dc23887.essence +tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/model.expected.json +tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/stdout.expected +tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/6a2d0701e4cf5c4d8f6cf1dc7e15f399.essence +tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/model.expected.json +tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/stdout.expected +tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/6a571fe9e071ce201a1a010b2237b5d5.essence +tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/model.expected.json +tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/stdout.expected +tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/6a88588bba462ebffae74647c144c4d7.essence +tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/6a9bddeca50534905aea04bbef9e17da.essence +tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/model.expected.json +tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/stdout.expected +tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/6aaa07e106687606e6ebd677288f44b1.essence +tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/model.expected.json +tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/stdout.expected +tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/6ac8c752d3e4fe9a39a4baa9b01ed4f2.essence +tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/model.expected.json +tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/stdout.expected +tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/6aca6179aec2e811a574cc8f9b2170e5.eprime.essence +tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/model.expected.json +tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/stdout.expected +tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/6aca6588ab888f9c3965cb703a7ffa87.eprime.essence +tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/model.expected.json +tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/stdout.expected +tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/typecheck.expected +tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/6adcceb830a2022acb620de53d953b28.eprime.essence +tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/model.expected.json +tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/stdout.expected +tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/6b8f8102f9c4e16ff066114f1f3aef54.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/model.expected.json +tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/stdout.expected +tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/6ba176ef566bd4d3ad1fc9b1c02c19e9.essence +tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/model.expected.json +tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/stdout.expected +tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/6cc29e070559e3617c321eddb0aa52a0.param.essence +tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/model.expected.json +tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/stdout.expected +tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/6cdbc847bba12ef88f6f6f3d68d75303.essence +tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/model.expected.json +tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/stdout.expected +tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/6d234926de4bf3efc85ef76d53a68827.eprime.essence +tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/model.expected.json +tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/stdout.expected +tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/6d2a055078d3ff9364d6a4715bbcce63.eprime.essence +tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/model.expected.json +tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/stdout.expected +tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/6dcb3352ec6b88c10d4d37072cb09475.eprime.essence +tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/model.expected.json +tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/stdout.expected +tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/typecheck.expected +tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/6e4f8f01946d51553fd4dc681c55d7ff.essence +tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/model.expected.json +tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/stdout.expected +tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/6e635e7e739e4a42e9752e4776b800ee.eprime.essence +tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/model.expected.json +tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/stdout.expected +tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/6e78775adcfd98bd61ddfa72523d20d7.eprime.essence +tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/6f115e6ceb931de245d1914a7238a5e1.eprime.essence +tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/6f43d623f1679861f011b13015bcd6cd.essence +tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/model.expected.json +tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/stdout.expected +tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/6fc55695fcddbc4d1d3987132d8eb399.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/model.expected.json +tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/stdout.expected +tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/701fa2a79a8effc3937e7e1f27e33cf9.essence +tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/model.expected.json +tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/stdout.expected +tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/706fff3f20bd3286c124f76cf527bf2f.essence +tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/model.expected.json +tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/stdout.expected +tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/70707c28efe6141f1c5f70cb86a86ffa.eprime.essence +tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/model.expected.json +tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/stdout.expected +tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected +tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/70729b148e4e70ab38cb319e8c952730.eprime.essence +tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/model.expected.json +tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/stdout.expected +tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/707465611baa4844701cb24902023acc.eprime.essence +tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/model.expected.json +tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/stdout.expected +tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/typecheck.expected +tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/71370392c8a48233ee7eeea22af6b66e.essence +tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/model.expected.json +tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/stdout.expected +tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/71439ab95a4f5bfdf808f3cadccccb9e.essence +tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/model.expected.json +tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/stdout.expected +tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/7144f5c387b1b12ae8d726b47ca182dd.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/model.expected.json +tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/stdout.expected +tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/7149b33b5941efcd677dc5be977c5cff.essence +tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/model.expected.json +tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/stdout.expected +tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/714eeec76271bcead5de810358d98126.essence +tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/model.expected.json +tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/stdout.expected +tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/71d975d219ae56f829f74cbbc19ad650.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/model.expected.json +tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/stdout.expected +tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/7213f3123fb0a3602859e59d90198141.essence +tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/model.expected.json +tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/stdout.expected +tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/7293e2d2559bf143bf5751458000ca82.essence +tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/model.expected.json +tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/stdout.expected +tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/72a4957a94bebd6accb42ca3ef8e093e.essence +tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/model.expected.json +tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/stdout.expected +tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/72c5af0569e0319ae3ae80ed1ad65571.essence +tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/model.expected.json +tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/stdout.expected +tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/72d3842a90204ee73d7b599e3ece97b4.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/model.expected.json +tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/stdout.expected +tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/72e12e9f11258447393672b2d965a468.eprime.essence +tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/model.expected.json +tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/stdout.expected +tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/73298c7aeac2e916b0f3f2572d18ee3f.essence +tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/model.expected.json +tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/stdout.expected +tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/7340afcb10985a0a7ab0d48bfe3ce39a.essence +tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/model.expected.json +tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/stdout.expected +tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/73472b413e1c687c0430a8719e4f016b.eprime.essence +tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/model.expected.json +tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/stdout.expected +tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/73595304cbda134ee926997219f68122.eprime.essence +tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/model.expected.json +tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/stdout.expected +tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected +tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/735fc273602e4ede28251a2e88511bf1.essence +tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/model.expected.json +tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/stdout.expected +tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/73f1b7785f39dea6270c8c6e2799c366.essence +tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/model.expected.json +tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/stdout.expected +tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/741c831781c1130b77698ac0a8e39bac.param.essence +tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/model.expected.json +tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/stdout.expected +tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/7521087d0ca259f38d548880fda61315.essence +tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/model.expected.json +tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/stdout.expected +tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/75765f88c1f182bd9535af1c33aa8320.eprime.essence +tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/model.expected.json +tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/stdout.expected +tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/75849537a38dfc9993231bf6095cb2e6.param.essence +tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/model.expected.json +tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/stdout.expected +tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/76042410b22d06836ef6e74d900d2918.essence +tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/model.expected.json +tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/stdout.expected +tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/760f3eb874e49940dccaca7853a6663a.eprime.essence +tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/model.expected.json +tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/stdout.expected +tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/7624576246e8c3059ba24ec2d12a8e49.essence +tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/model.expected.json +tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/stdout.expected +tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/76b69ff02964226987ee8e85c69b99f0.essence +tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/model.expected.json +tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/stdout.expected +tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/76e95ca7345ad8108828e20d9116d317.eprime.essence +tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/model.expected.json +tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/stdout.expected +tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/77bf93b23c2e5269471d3e07d2d0eff3.eprime.essence +tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/model.expected.json +tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/stdout.expected +tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected +tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/77f9a472db5de2e67ee40dfe0dff40a8.essence +tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/model.expected.json +tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/stdout.expected +tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/7813ae28e21e6cf03109291d165d4647.eprime.essence +tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/model.expected.json +tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/stdout.expected +tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected +tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/783809db2f9c9e395e52e9a135e6fbdc.param.essence +tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/model.expected.json +tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/stdout.expected +tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/783b2b5ef26440959d2b9eea8cac7602.eprime.essence +tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/model.expected.json +tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/stdout.expected +tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/typecheck.expected +tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/7842b5f4c7ad574e4dd5e285a6512004.eprime.essence +tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/model.expected.json +tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/stdout.expected +tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/788102a4292eb30458166a213f53d06b.eprime.essence +tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/model.expected.json +tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/stdout.expected +tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/78b91b8a1c7e8c7268c5674ea86dfa6f.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/model.expected.json +tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/stdout.expected +tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/7916e2376c2f7a027a1836f83d31e41f.eprime.essence +tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/model.expected.json +tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/stdout.expected +tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/7931697aa48ff1cee580a300b58b56dd.essence +tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/model.expected.json +tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/stdout.expected +tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/7957f0317999099b511813bff7f666d9.essence +tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/model.expected.json +tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/stdout.expected +tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/796a75de14301706781198a596a0f82f.essence +tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/model.expected.json +tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/stdout.expected +tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/7a1374784817a61dd7d0ab09fc3ed1f5.eprime.essence +tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/model.expected.json +tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/stdout.expected +tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/7a6edcced80722524f0bff6778d815a0.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/model.expected.json +tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/stdout.expected +tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/7a9eee2cf8d977a2f9cba8a6f6f29ddb.essence +tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/model.expected.json +tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/stdout.expected +tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/7abab402c3c635d1a5ed251e23346b9d.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/model.expected.json +tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/stdout.expected +tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/7af19291f31c57f450d1584f932a5bd2.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/model.expected.json +tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/stdout.expected +tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/7b072d8dc31f10792c4942630f4c90a2.essence +tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/model.expected.json +tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/stdout.expected +tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/7b0c8abe457f0fb2a4ff0e27c5acc7ef.eprime.essence +tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/typecheck.expected +tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/7b43b4a26dc012bc58edd762a212c306.eprime.essence +tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/model.expected.json +tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/stdout.expected +tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/7b5e1f92bb5d4a7807d1d23d112cd92d.eprime.essence +tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/model.expected.json +tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/stdout.expected +tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/7b66f514f938f081c62636b617d585e6.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/model.expected.json +tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/stdout.expected +tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/7b9c2cef26b449a08d972bf3b5f521b6.essence +tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/model.expected.json +tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/stdout.expected +tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/7bca9feb74e0d19616174e344ec7ed3f.eprime.essence +tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/model.expected.json +tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/stdout.expected +tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/7bf6ecd55c1648855b112f6e20c8a371.solution.essence +tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/model.expected.json +tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/stdout.expected +tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/7c370e25be12481ac743d5937d979cab.essence +tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/model.expected.json +tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/stdout.expected +tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/7c756ce0724280ed59c97a84dd82e7c0.essence +tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/model.expected.json +tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/stdout.expected +tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/7c7f91f16a7fef369fe0a0bc90496df7.eprime.essence +tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/model.expected.json +tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/stdout.expected +tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/7c9328a9df7d3971ebc02d3a5d032831.eprime.essence +tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/model.expected.json +tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/stdout.expected +tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/7cb449bd3f6d99ec10799ce32deb058c.essence +tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/model.expected.json +tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/stdout.expected +tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/7cc8838035af5627767687a2a0dd2023.eprime.essence +tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/model.expected.json +tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/stdout.expected +tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/7cd8ae8cad72f99cbc828752bb1ac779.eprime.essence +tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/model.expected.json +tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/stdout.expected +tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/7ced3deed438dc0d1abf978eefd25a73.essence +tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/model.expected.json +tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/stdout.expected +tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/7d51a8ed37eefbc3671568f26b3ae864.eprime.essence +tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/model.expected.json +tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/stdout.expected +tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/7db9a3d9ee627d332a146e54d5412c2a.essence +tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/model.expected.json +tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/stdout.expected +tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/7e32221a2aa518579c4cbca35995bad7.essence +tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/model.expected.json +tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/stdout.expected +tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/7e379263b7076cf01287d6b3b627c2d6.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/model.expected.json +tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/stdout.expected +tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/7e3fcaa59bbfbe569b009320dc601838.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/model.expected.json +tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/stdout.expected +tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/7e5af3ac9a29055da76bfcb22c29525b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/model.expected.json +tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/stdout.expected +tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/7ec84a5eb1ae188fa85813dd512686a4.essence +tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/model.expected.json +tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/stdout.expected +tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/7eeaf2347f1bf8b83db5d0b7c15483e6.eprime.essence +tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/model.expected.json +tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/stdout.expected +tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected +tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/7f266b6dbe432f711cc93c3c3134d1f6.param.essence +tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/model.expected.json +tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/stdout.expected +tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/7f29f662e63c9cbeb7ef949471076baf.essence +tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/model.expected.json +tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/stdout.expected +tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/7f5dcefd7bf9747fd024609b49219e09.essence +tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/model.expected.json +tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/stdout.expected +tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/7f9216e93251e34cc26833867e932b73.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/model.expected.json +tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/stdout.expected +tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/7fc019c5d2aa866d1e64841472c50e95.essence +tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/model.expected.json +tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/stdout.expected +tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/7fe2fcf2a860ff56a8cce5c04d1de189.eprime.essence +tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/model.expected.json +tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/stdout.expected +tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected +tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/8020e4ffd83f6ff3cd5314eb173c7c4f.essence +tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/model.expected.json +tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/stdout.expected +tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/8031e98607d45acd28638158da5f736b.essence +tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/model.expected.json +tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/stdout.expected +tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/803365043841034f75b79d281852dca3.eprime.essence +tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/model.expected.json +tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/stdout.expected +tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/8041caf40ae2bfc01f9c38fb844e65dc.essence +tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/model.expected.json +tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/stdout.expected +tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/804e99a6d72e62f05440f42a891aea92.essence +tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/model.expected.json +tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/stdout.expected +tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/8086e31b5dffcbcc49d6b8d9ea848d81.solution.essence +tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/model.expected.json +tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/stdout.expected +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected +tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/808ee9e11be2db00173b3b5015b974c7.essence +tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/model.expected.json +tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/stdout.expected +tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/80d1aafbf701603221876e8a8338fc92.eprime.essence +tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/model.expected.json +tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/stdout.expected +tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/80f5cf8b4f3d2bde79f24aff19381265.eprime.essence +tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/model.expected.json +tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/stdout.expected +tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/typecheck.expected +tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/80facdc32f9ebbcd2cdde891eaee8074.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/model.expected.json +tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/stdout.expected +tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/818ec086c054d27d412fd647960ada42.eprime.essence +tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/model.expected.json +tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/stdout.expected +tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/8197eca2918662b12cc62050e0a7a042.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/model.expected.json +tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/stdout.expected +tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence +tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/typecheck.expected +tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/820f5feaa0b5969b6ee656fc5d24fe1d.eprime.essence +tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/model.expected.json +tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/stdout.expected +tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/82204c450b52c775ee8976d551212a46.essence +tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/model.expected.json +tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/stdout.expected +tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/827f1d4ebd57ab718caa032cc8b297fc.eprime.essence +tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/model.expected.json +tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/stdout.expected +tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/typecheck.expected +tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/82bfeece5b79e08184cc8749d9df8e38.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/model.expected.json +tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/stdout.expected +tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/82fe9e8a0156acab6ba50f4cc3b3af01.param.essence +tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/model.expected.json +tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/stdout.expected +tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/8367e8de71de185d6acf3e859e23a37b.eprime.essence +tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/model.expected.json +tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/stdout.expected +tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/83aa247156640416d52e2c458a03de71.essence +tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/model.expected.json +tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/stdout.expected +tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/83e79dafff20cf8bb9bbf4e0e4da6ed2.eprime.essence +tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/model.expected.json +tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/stdout.expected +tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected +tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/841ed02320da61b19ba7f29d3547a734.essence +tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/model.expected.json +tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/stdout.expected +tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/843a2e9d983a6dacd46917b47c2bb64c.essence +tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/model.expected.json +tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/stdout.expected +tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/8446c84e9772883e9b089836df280ea0.essence +tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/model.expected.json +tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/stdout.expected +tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/845ca743dc0cab4127aa2ddb7b06c706.essence +tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/model.expected.json +tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/stdout.expected +tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/846c6659d7512b713d169b2b99b66b1c.essence +tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/model.expected.json +tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/stdout.expected +tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/848ce262a35f2e94cdbab80b8f227640.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/model.expected.json +tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/stdout.expected +tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/84c8be86e209af5b5ab3e1db3bbc0ca9.eprime.essence +tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/model.expected.json +tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/stdout.expected +tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/84cf4a0dfc2ad853d530a5a9c9d9cce3.essence +tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/model.expected.json +tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/stdout.expected +tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/84d7057dd52ef23efabb8abd969d826a.solution.essence +tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/model.expected.json +tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/stdout.expected +tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/84e2ac06d5257472f3b6d1cc3abbe977.essence +tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/model.expected.json +tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/stdout.expected +tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/84f87112eab6b17142e5b14caae5774c.essence +tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/model.expected.json +tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/stdout.expected +tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/851192d3d7c1ec86c1869bb52c0f6640.eprime.essence +tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/model.expected.json +tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/stdout.expected +tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/typecheck.expected +tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/855dae2be3de835a4f981a6d9ee2cd1a.essence +tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/model.expected.json +tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/stdout.expected +tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/85aa2391985aebf2d902133b0eac8aa1.solution.essence +tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/model.expected.json +tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/stdout.expected +tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/85b8db7be2f6abe894214a12a3d2b71d.eprime.essence +tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/model.expected.json +tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/stdout.expected +tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/862c0589559fb341ccb5ad1d924f1b9c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/model.expected.json +tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/stdout.expected +tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/86302603127c6befda9307b173096b8d.eprime.essence +tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/model.expected.json +tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/stdout.expected +tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/8660afc281dcc05d0e23c96d6f6bed05.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/model.expected.json +tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/stdout.expected +tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/866a1bd5f8b062c2d25978ee5e72de29.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/model.expected.json +tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/stdout.expected +tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/8694ff3ac1162a541f4c7c314ae002e7.eprime.essence +tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/model.expected.json +tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/stdout.expected +tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/86dad1e03f12a85fe28f594548912cc9.eprime.essence +tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/model.expected.json +tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/stdout.expected +tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/877d629f542f55f0f97157cd8c1654fe.eprime.essence +tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected +tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/878b93190b5a24acce17d2a97e8cc7af.solution.essence +tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/model.expected.json +tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/stdout.expected +tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/87d64817d9031ce1ce57748338fd3be3.essence +tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/model.expected.json +tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/stdout.expected +tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/882edd879ad2f01823f68560740819fe.essence +tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/88443db0c7030dc3235b70084b331e12.essence +tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/model.expected.json +tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/stdout.expected +tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/88d16dd01ce393e846b3b9c187ec3e9d.essence +tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/model.expected.json +tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/stdout.expected +tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/88fb8c6b9616da911eaa4532629f05d7.eprime.essence +tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/typecheck.expected +tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/890bfc7260b9693bee3681fdd772c9d9.essence +tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/model.expected.json +tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/stdout.expected +tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/892ec3692f0f67c7ad6c4526f89adc16.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/model.expected.json +tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/stdout.expected +tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/8937cb3d6ee40ef8da27a428c4a612e0.essence +tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/model.expected.json +tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/stdout.expected +tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/8952206f0aaf01adc569795bd19ce4b0.essence +tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/model.expected.json +tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/stdout.expected +tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/895563db093bc77bacce9d4985c342da.eprime.essence +tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/model.expected.json +tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/stdout.expected +tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/typecheck.expected +tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/89ca579e7ee4e23e24eeca23d3114140.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/model.expected.json +tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/stdout.expected +tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/89d2147bf114d8dd9a90e093dc5af5c2.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/model.expected.json +tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/stdout.expected +tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/89f7d427253b927c806aa29971b41345.eprime.essence +tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/model.expected.json +tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/stdout.expected +tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/8a008fe73eaeed9aac0a4eb3373ac800.eprime.essence +tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/model.expected.json +tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/stdout.expected +tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/8a27347b2dd2e2b9609a3c469d6ad778.essence +tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/model.expected.json +tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/stdout.expected +tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/8a3540d56a402b0fc31a413179deca54.essence +tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/model.expected.json +tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/stdout.expected +tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/8a55b0279e21655cce9abfb6113ff43b.essence +tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/model.expected.json +tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/stdout.expected +tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/8a5e7fc807d28b304de719433d2cdbe5.essence +tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/model.expected.json +tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/stdout.expected +tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/8a800a7287fc2d812a65ade22d37cf24.essence +tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/model.expected.json +tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/stdout.expected +tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/8aa2647e6f93da5463593460b8f3b511.eprime.essence +tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/model.expected.json +tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/stdout.expected +tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/8aa81485456e83c2f3c31bf0124d95e4.essence +tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/model.expected.json +tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/stdout.expected +tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/8abb65ebdd36ca8f84ec49174151b12d.essence +tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/model.expected.json +tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/stdout.expected +tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/8b18b9af68196441a501019b9212cb97.eprime.essence +tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/model.expected.json +tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/stdout.expected +tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/8b42943e4abff9ae0fb2d1449fb076e8.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/8b50e6822575f3de1074c27e466f1189.eprime.essence +tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/model.expected.json +tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/stdout.expected +tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/8c0bcfe9b50c5da384fe5264b05fe32f.essence +tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/model.expected.json +tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected +tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/8c29a5ce12d82bfce1dbb019db60c9ca.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/model.expected.json +tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/stdout.expected +tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/8c6249e4d3029b23653b7f2c74259b87.eprime.essence +tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/model.expected.json +tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/stdout.expected +tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected +tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/8c73957439e2f9438a9d273a2caaed0f.essence +tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/model.expected.json +tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/stdout.expected +tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/8cf86ce733dc743db476cc53aad4d6dc.essence +tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/model.expected.json +tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/stdout.expected +tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/8d1b8189b396c995301b7af280621470.essence +tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/model.expected.json +tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/stdout.expected +tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/8d24bbf635ac91ecf06f51548f733735.eprime.essence +tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/model.expected.json +tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/stdout.expected +tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected +tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/8d47dfa1129d0d9a0970aa6e38e36998.eprime.essence +tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/model.expected.json +tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/stdout.expected +tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/8d7e54f03c2611e7fa2bfa11714fef12.eprime.essence +tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/model.expected.json +tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/stdout.expected +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected +tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/8dc861607d33f49777a45579a6462e0c.essence +tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/model.expected.json +tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/stdout.expected +tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/8dd925d930329defff30de69da88eda8.essence +tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/model.expected.json +tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/stdout.expected +tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/8e0c1d7db5c270376e3d631b35db4339.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/model.expected.json +tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/stdout.expected +tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/8e57797389036cafd59682f3b212615f.eprime.essence +tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/model.expected.json +tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/stdout.expected +tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/8e5d66a2f3f055cde6e272b30fdcf933.essence +tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/model.expected.json +tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/stdout.expected +tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/8e60d4f6e3658efdc211aa5fc057619e.essence +tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/model.expected.json +tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/stdout.expected +tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/8e7aea1c1a683206e6a897c6ad5d8bd3.eprime.essence +tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/model.expected.json +tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/stdout.expected +tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/typecheck.expected +tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/8e93ce71508f064beff9a26d88d989ce.essence +tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/model.expected.json +tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/stdout.expected +tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/8ec00ef169857742e7874fe54717f1cf.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/model.expected.json +tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/stdout.expected +tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/8ed5ce0a29d96b4df6f636dbdad1e2fd.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/model.expected.json +tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/stdout.expected +tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/8ed64e4aee1ec8f5d11bdce8b0794770.essence +tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/model.expected.json +tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/stdout.expected +tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/8f501dda2021fc3c7c4e001157f1e6e6.eprime.essence +tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/model.expected.json +tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/stdout.expected +tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/typecheck.expected +tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/8f6e9e6d64f63ef25db9d4aa4e113bb0.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/model.expected.json +tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/stdout.expected +tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/8f796d2c2807c6ea530b07b82c77bd83.param.essence +tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/model.expected.json +tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/stdout.expected +tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/8fa1dbe2b5061280fa287b09746834ee.eprime.essence +tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/model.expected.json +tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/stdout.expected +tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/90299a9f0a7a69f3c96b6cbd3af60a79.essence +tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/model.expected.json +tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/stdout.expected +tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/90320206b02563fde63fe692179aedbe.eprime.essence +tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/model.expected.json +tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/stdout.expected +tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/90955ca420084f220878f52c9a1671bc.eprime.essence +tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/model.expected.json +tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/stdout.expected +tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/typecheck.expected +tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/90a9448a74952ba0cece6a7b1b7947fa.essence +tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/model.expected.json +tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/stdout.expected +tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/90d639a3b2f496a9abac113456848d5a.essence +tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/model.expected.json +tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/stdout.expected +tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/90ea9088b0aa25fc33a1a86535fac68f.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/model.expected.json +tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/stdout.expected +tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/90f2c8e9f3458e147cb1f50d16c3e4cb.eprime.essence +tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/model.expected.json +tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/stdout.expected +tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/91c188d85dd94a4944c93eedd6dd286e.essence +tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/model.expected.json +tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/stdout.expected +tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/92153839be64245ef4416df291ac3aba.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/model.expected.json +tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/stdout.expected +tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/92598f5f307ca7499686cc4dbed50824.eprime.essence +tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/model.expected.json +tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/stdout.expected +tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/92612015e4c8034476c0db682d3319c4.param.essence +tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/model.expected.json +tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/stdout.expected +tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/92bafdce8551adecaa5412f757cbd639.essence +tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/model.expected.json +tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/stdout.expected +tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/92deb88ede01f166a1c4af2f4120555d.eprime.essence +tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/model.expected.json +tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/stdout.expected +tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/92e662998492b98daa5a6a0332603ea2.eprime.essence +tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/model.expected.json +tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/stdout.expected +tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/931175e0768cf1f6a21f204355b8dca5.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/model.expected.json +tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/stdout.expected +tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/93252b0ebfbeb644ae73b8a784adc4e1.eprime.essence +tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/93284da4a4bcb0b65f9af4e148349956.eprime.essence +tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/model.expected.json +tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/stdout.expected +tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/9333c5df4a82f75bde6f2e3ec63382e3.essence +tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/model.expected.json +tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/stdout.expected +tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/9336968c84835480f78834ee1d9335b5.essence +tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/model.expected.json +tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/stdout.expected +tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/933c4b5f18128e59bd2fc5d3bf73960b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/model.expected.json +tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/stdout.expected +tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/9378c4a717a68960aa405ca27d538fc9.essence +tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/model.expected.json +tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/stdout.expected +tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/9391796d63e7e046757dd85404c97910.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/model.expected.json +tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/stdout.expected +tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/93bf76b55dc3b1fc1580ca8a747b70ef.essence +tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/93d0856761e66a52053d96ec3afd88a4.essence +tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/model.expected.json +tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/stdout.expected +tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/93e2a922d768e544f792248d1ead5798.essence +tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/model.expected.json +tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/stdout.expected +tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/93f65b5f85c9951f025b767bd3272208.essence +tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/model.expected.json +tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/stdout.expected +tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/9463f4f2bd81e9b00e18ecab501331f0.eprime.essence +tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/model.expected.json +tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/stdout.expected +tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/947baf2a6b9f590eb910d978843c670b.essence +tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/model.expected.json +tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/stdout.expected +tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/94d0161fbef6b271aae867644ec230fa.essence +tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/model.expected.json +tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/stdout.expected +tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/94df0cbb4b067b4913084c2c0ba39c25.essence +tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/model.expected.json +tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/stdout.expected +tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/950926788ae00620bf3eefe8cfa83b48.eprime.essence +tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/model.expected.json +tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/stdout.expected +tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/951d3c18901f9994c032518bb08cd59c.eprime.essence +tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/model.expected.json +tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/stdout.expected +tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/952e8615c6da932c1bd0255f5ee021c2.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/model.expected.json +tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/stdout.expected +tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/9541bd67eea6db5dafd1082634c24ba1.essence +tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/model.expected.json +tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/stdout.expected +tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/95673ede51a7abf39744fbcc1b3524b5.eprime.essence +tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/model.expected.json +tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/stdout.expected +tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/9571ad4d3d6860b62276decba16314f0.essence +tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/model.expected.json +tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/stdout.expected +tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/95e96e71787b541a0f9137e42797a5b2.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/model.expected.json +tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/stdout.expected +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected +tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/9660baf70b06d52075a8c2c29fbccbdb.essence +tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/model.expected.json +tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/stdout.expected +tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/96a453cc18a685f8389fec2d8a6eb138.eprime.essence +tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/model.expected.json +tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/stdout.expected +tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/96ad37a360894f0ccc0818f5e2dbb60f.essence +tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/model.expected.json +tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/stdout.expected +tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/96bccf0f520f5724107edb2af79bd637.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/model.expected.json +tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/stdout.expected +tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/96e89498179d3a93c6dd71000a72ce7e.param.essence +tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/model.expected.json +tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/stdout.expected +tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/973d5a1ff0a13310b0134abb50f0c2cc.essence +tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/model.expected.json +tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/stdout.expected +tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/9766d2cb8dbc532f788d40e27b2a738f.essence +tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/model.expected.json +tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/stdout.expected +tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/979854a979c1d69c3dc6653f5b2db319.eprime.essence +tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/model.expected.json +tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/stdout.expected +tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/typecheck.expected +tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/97d0365bab1f9d009ff4f0f62ab42f0d.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/model.expected.json +tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/stdout.expected +tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/9816fff64d3f46d274f2cc35141b8ddc.essence +tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/model.expected.json +tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/stdout.expected +tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/981f70500ed5d05980523114811892f7.essence +tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/model.expected.json +tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/stdout.expected +tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/982574e0185269f9c521d81bf777839c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/model.expected.json +tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/stdout.expected +tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/982885c091c3f3c10bce2fa43eb09375.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/model.expected.json +tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/stdout.expected +tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/984898fa40ed0ba9c50bb8cb67c7e661.essence +tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/model.expected.json +tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/stdout.expected +tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/9877d3e1f5e58a3bc09e37824cc5f794.essence +tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/model.expected.json +tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/stdout.expected +tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/987a6b11bf61527428e95276264dba7c.eprime.essence +tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/model.expected.json +tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/stdout.expected +tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/98f60d7ecdbc83c732111b4c2c19e2dc.eprime.essence +tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/model.expected.json +tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/stdout.expected +tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/98faadf71151c98f3ba7890f3cfc5561.essence +tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/model.expected.json +tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/stdout.expected +tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/99442f27f0d2939b7caf49f63779f513.eprime.essence +tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/model.expected.json +tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/stdout.expected +tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/996e0c697e30345a03bba1030123498b.eprime.essence +tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/model.expected.json +tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/stdout.expected +tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/99a8aa88b94cf878a9e7a415212c082b.essence +tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/model.expected.json +tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/stdout.expected +tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/99b35c7862469001642e139275eb67cb.eprime.essence +tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/model.expected.json +tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/stdout.expected +tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/99f6c9d65ed814c4e6f72bf949826fa2.essence +tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/model.expected.json +tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/stdout.expected +tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/9a0d61ffdcb4d471c71fcb70f6ff1232.eprime.essence +tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/model.expected.json +tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/stdout.expected +tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/9a180dd7ae58ead0dd9e267df03321f7.eprime.essence +tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/model.expected.json +tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/stdout.expected +tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/9a33ed76a93af659745eb6902c7df5c0.param.essence +tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/model.expected.json +tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/stdout.expected +tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/9a5f6f309a87af93404d72cb159b5840.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/model.expected.json +tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/stdout.expected +tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/9a784d81d10dc8cccf9dbabf48a8e990.eprime.essence +tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/model.expected.json +tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/stdout.expected +tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/9aa81bc2d667ea8cadebe72fdd563c6d.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/model.expected.json +tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/stdout.expected +tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/9abdea7380788d3969dc2640d22d213c.essence +tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/model.expected.json +tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/stdout.expected +tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/9ac3f75c1e13c0710509398532042647.eprime.essence +tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/model.expected.json +tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/stdout.expected +tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected +tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/9b049f77e2989f8c2025310e51bad76d.eprime.essence +tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/model.expected.json +tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/stdout.expected +tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/9b2afc7268f96473c48caf6d3e206c31.essence +tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/model.expected.json +tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/stdout.expected +tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/9b469468a3b10432c0ce1da021333952.eprime.essence +tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/model.expected.json +tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/stdout.expected +tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/9b6f03d616fd958ec69f8362abfb00ac.essence +tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/model.expected.json +tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/stdout.expected +tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/9bdd1358d3bedcf3d0604f276779b66d.essence +tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/model.expected.json +tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/stdout.expected +tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/9bfb780b3c2fba75e53ab3203cef9279.eprime.essence +tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/model.expected.json +tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/stdout.expected +tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/9c03010bd51a771189cd5536a18e2f04.essence +tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/model.expected.json +tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/stdout.expected +tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/9c55294c0d3d31ba76c9c8253bef3ef8.eprime.essence +tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/model.expected.json +tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/stdout.expected +tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/9c56771bea5197295b15462aa78ce28f.essence +tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/model.expected.json +tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected +tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/9c7ac59a352b59446be92d9724945913.solution.essence +tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/model.expected.json +tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/stdout.expected +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected +tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/9cfb8ee2ea896efcddeebeccd5bd3711.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/model.expected.json +tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/stdout.expected +tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/9cfc0004cabea5af2bcd505f97913bb5.essence +tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/model.expected.json +tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/stdout.expected +tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/9d2f4e849e1c8f3e7bbf4f44c6947e20.eprime.essence +tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/model.expected.json +tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/stdout.expected +tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/9d370387c39185b72ed108acdcd412a1.essence +tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/model.expected.json +tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/stdout.expected +tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/9d3ffe596365f3f356cdf3eb7e785b83.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/model.expected.json +tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/stdout.expected +tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/9d9440d946dd0a2494f8ad0ef44d90e4.eprime.essence +tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/model.expected.json +tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/stdout.expected +tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/9db7329469e0dba0d9dff49a5d1e2300.essence +tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/model.expected.json +tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/stdout.expected +tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/9dd9794292570f18cb58bd2b90e52231.essence +tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/model.expected.json +tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/stdout.expected +tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/9df60a32943a5971a4f694bb26aa11f1.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/model.expected.json +tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/stdout.expected +tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/9e34c2ed21636c2c3c7277b6275cbc4f.essence +tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/model.expected.json +tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/stdout.expected +tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/9e3ca1b1b59b0e6c2982f941233bf696.essence +tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/model.expected.json +tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/stdout.expected +tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/9e4b1361b32c613b5fa1e221ec3357f1.param.essence +tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/model.expected.json +tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/stdout.expected +tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/9e52878539b138a1df6958f490b94b7c.eprime.essence +tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/model.expected.json +tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/stdout.expected +tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/9e73f0e3f8f1ac3a815081e0dfa1ccfb.essence +tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/model.expected.json +tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/stdout.expected +tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/9e7c9dedada85ad3e072da5d7534bade.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/model.expected.json +tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/stdout.expected +tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/9ea54b487a734e53316eba53dd16f268.eprime.essence +tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/model.expected.json +tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/stdout.expected +tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/9ebbff2eda9f9a53a0eccf5b2d2076d4.essence +tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/model.expected.json +tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/stdout.expected +tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/9f0da0c4289dcd010e92c8ab6d50b07a.eprime.essence +tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/model.expected.json +tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/stdout.expected +tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/9f9192f87a87bd8c7eab6605ea8d2ebb.essence +tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/model.expected.json +tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/stdout.expected +tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/9fb3812b9de68be7a7c5ff4a238f69a8.eprime.essence +tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/model.expected.json +tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/stdout.expected +tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/a006f0c1cb66bd72725cad95f144015b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/model.expected.json +tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/stdout.expected +tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/a01046ebd775365cd4802f377ea06422.eprime.essence +tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/model.expected.json +tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/stdout.expected +tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/a016b613a468fa41c3e0957ca9205227.eprime.essence +tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/model.expected.json +tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/stdout.expected +tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/a03ddc28b5f272001ba23db986726a9f.eprime.essence +tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/model.expected.json +tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/stdout.expected +tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/a077e78a13138544db622fefb4945e9a.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/model.expected.json +tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/stdout.expected +tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/a09afb2228f7343e721bc5c01bdd1fa3.essence +tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/model.expected.json +tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/stdout.expected +tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/a09b27e60c42a3e4ab0c27e3826dfc25.eprime.essence +tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/model.expected.json +tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/stdout.expected +tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/a0ad07b97e1685ca2e2c111457133e90.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/model.expected.json +tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/stdout.expected +tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/a0c6405918b286ca82e020a2b7d7cf00.solution.essence +tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/model.expected.json +tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/stdout.expected +tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/a0d073a0e024ef76a14be2b252c46325.essence +tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/model.expected.json +tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/stdout.expected +tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/a0e4b0ea439a18784bdc4b76134e741d.eprime.essence +tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/model.expected.json +tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/stdout.expected +tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/a10653f603b57480444e59a7f67a1eea.eprime.essence +tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/model.expected.json +tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/stdout.expected +tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/a113fdda7fda4e683db04122e85f1eb9.essence +tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/model.expected.json +tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/stdout.expected +tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/a132548e1417c097233240500dd08b47.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/model.expected.json +tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/stdout.expected +tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/a1336f3b52422c5f8f9979ad8fc8a7db.param.essence +tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/model.expected.json +tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/stdout.expected +tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/a13dddfa9c8fe9b026f0f80ebd5885ab.eprime.essence +tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/model.expected.json +tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/stdout.expected +tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/a14b88c5adc5536184d37af5a6f188ca.essence +tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/model.expected.json +tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/stdout.expected +tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/a213c8d1ec823b6cb728b74b40ba7301.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/model.expected.json +tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/stdout.expected +tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/a24146deb495305d4ee888ff7800707f.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/model.expected.json +tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/stdout.expected +tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/a25d226dacf7592fa4ccf76608329331.eprime.essence +tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/model.expected.json +tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/stdout.expected +tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/a26aea264556a8f0fdfe45a35db6fa4e.solution.essence +tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/model.expected.json +tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/stdout.expected +tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/a278490eff4c7aaa3efb73ab7cb5a355.eprime.essence +tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/model.expected.json +tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/stdout.expected +tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/a29843ebaa6b51bea21d033d0410646e.eprime.essence +tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/model.expected.json +tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/stdout.expected +tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/a2b7f35d86498ed90d54066bf3f451bc.essence +tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/model.expected.json +tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/stdout.expected +tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/a2d859e9768309b9821313f15f257203.eprime.essence +tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/model.expected.json +tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/stdout.expected +tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/a2d869e1257b1c53d062dbc8e2d442fd.eprime.essence +tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/model.expected.json +tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/stdout.expected +tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/a2f78265400c2125ffba87791599091b.eprime.essence +tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/model.expected.json +tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/stdout.expected +tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/a3388cc4ac0391c01bd28ce12f011bfd.eprime.essence +tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/model.expected.json +tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/stdout.expected +tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/a34a221ea024f629caf135e945eee35b.eprime.essence +tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/model.expected.json +tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/stdout.expected +tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/a34c8275c1d9524a08d2ec1d329ed35a.eprime.essence +tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/model.expected.json +tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/stdout.expected +tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/a363b2628f65efb0290c8d10d2a18ac4.eprime.essence +tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/model.expected.json +tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/stdout.expected +tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/a370966830e4e6e3d5c258cbed1908e2.eprime.essence +tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/model.expected.json +tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/stdout.expected +tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/a39552e9ed1bd8481c8c6a692b9a507c.eprime.essence +tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/model.expected.json +tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/stdout.expected +tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/a3a075358b168ec8d79e31f8ed43961d.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/model.expected.json +tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/stdout.expected +tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/a3a54bbf04a27937aac3bddfe7019f21.param.essence +tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/model.expected.json +tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/stdout.expected +tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/a3c32ac7b68b7056569b3146a0d5c486.essence +tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/model.expected.json +tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/stdout.expected +tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/a3e9b4abdd60d8b8426ee3a7e2e72475.essence +tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/model.expected.json +tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/stdout.expected +tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/a40bc6a0417f684847d2d44f886c6d61.eprime.essence +tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/model.expected.json +tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/stdout.expected +tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/a46f0f8380128f04446402757318c1d6.essence +tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/model.expected.json +tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/stdout.expected +tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/a46f951200e57005f4e9c8830866edcc.essence +tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/model.expected.json +tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/stdout.expected +tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/a4dfe434c651645a3287054935685825.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/model.expected.json +tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/stdout.expected +tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/a4fa08d673ebb8bbb06a5bc9c1f39441.essence +tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/model.expected.json +tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/stdout.expected +tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/a4fa1c3afc021a129ec5dd233c4c10b5.eprime.essence +tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/model.expected.json +tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/stdout.expected +tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/a53a6a9dd9196d0a14ae3b4b0e39913b.essence +tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/model.expected.json +tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/stdout.expected +tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/a569624863aa273c01c6312a624723f1.eprime.essence +tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/model.expected.json +tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/stdout.expected +tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/a59a038c1f2344f80d84a30997a193f5.eprime.essence +tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/model.expected.json +tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/stdout.expected +tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/a5a8dc4db8f4987615f65dcca82955c7.essence +tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/model.expected.json +tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/stdout.expected +tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/a5da41200401440fbed34793aaf4a1f9.eprime.essence +tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/model.expected.json +tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/stdout.expected +tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/a5f89c8745074bbbd432690c47cee7e7.eprime.essence +tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/model.expected.json +tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/stdout.expected +tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/a5f97387c646309f28161687f8ce5e52.eprime.essence +tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/model.expected.json +tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/stdout.expected +tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/a60598f23c2356a85d0b426465bbaa62.eprime.essence +tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/model.expected.json +tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/stdout.expected +tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/a606a391852e05ddc52386ed6a6287cb.eprime.essence +tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/model.expected.json +tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/stdout.expected +tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/a67c3735f80066994faf7b6478cef1df.param.essence +tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/model.expected.json +tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/stdout.expected +tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/a6e121cacb3fcfc3686d158963d59199.eprime.essence +tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/model.expected.json +tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/stdout.expected +tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/a722dbeaf9763e8403948d210db0f009.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/model.expected.json +tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/stdout.expected +tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/a73db0d516a2bfe1cf37eb14273c17a5.essence +tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/model.expected.json +tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/stdout.expected +tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/a747a06b8ce4f18eaabdc79af95c005f.eprime.essence +tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/model.expected.json +tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/stdout.expected +tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/a79dda05fbffc4c52468a642a8a59634.essence +tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/model.expected.json +tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/stdout.expected +tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/a81bfd36585a1f3dfd83ad20da897574.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/model.expected.json +tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/stdout.expected +tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/a82bac554f50cdeaf2990a7c87c196fb.essence +tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/model.expected.json +tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/stdout.expected +tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/a8486d142ceb5bd28d6916b002b65e9b.essence +tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/model.expected.json +tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/stdout.expected +tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/a86a19acd180fa620be92f72da196137.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/model.expected.json +tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/stdout.expected +tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/a8c33551d82efabd5dc8fbd1da9bdb76.essence +tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/model.expected.json +tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/stdout.expected +tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/a911a0725625ec718adf4897ee006d78.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/model.expected.json +tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/stdout.expected +tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/a92907ef0f1df1943e88b8ff2c0a4106.eprime.essence +tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/model.expected.json +tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/stdout.expected +tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/typecheck.expected +tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/a9833bb1a05cbe195b2b712eb3adc0f3.eprime.essence +tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/model.expected.json +tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/stdout.expected +tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/a9ab77b84c21743c54e1a69abe25a1ae.eprime.essence +tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/model.expected.json +tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/stdout.expected +tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/a9bbb84eaa63096107c5b5288303bbd3.essence +tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/model.expected.json +tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/stdout.expected +tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/a9f733d77ae148fd1c421bcca2786218.essence +tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/model.expected.json +tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/stdout.expected +tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/aa4cf640ebbecdf31f14815829763e60.eprime.essence +tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/model.expected.json +tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/stdout.expected +tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/aa79c19e3b821dc7ba06b81ea70d4da1.eprime.essence +tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/model.expected.json +tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/stdout.expected +tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/aa87f4ba05d4f8ceb28dda2ecced003a.essence +tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/model.expected.json +tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/stdout.expected +tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/aaf7524e7d2478b2902702a5c750d45f.essence +tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/model.expected.json +tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/stdout.expected +tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/ab03a32d2ffe82b9a97e9bcb41d8db5a.essence +tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/model.expected.json +tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/stdout.expected +tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/ab3498b5367b4b4179da2809e7fcc628.essence +tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/model.expected.json +tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/stdout.expected +tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/ab53a48ee2d60f33403a71653c51811c.eprime.essence +tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/model.expected.json +tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/stdout.expected +tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/ab828d5a7f3d31d42bf66810cab3da9b.eprime.essence +tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/model.expected.json +tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/stdout.expected +tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/aba70bb3bf8b25a63968e36b7aa1469a.param.essence +tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/model.expected.json +tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/stdout.expected +tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/ac0be820dc594e22c0314df67936b437.eprime.essence +tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/model.expected.json +tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/stdout.expected +tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/ac198413eefefcc5bb8b961355337676.essence +tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/model.expected.json +tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/stdout.expected +tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/ac3c843495fdbdb21291451d275c05f4.eprime.essence +tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/model.expected.json +tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/stdout.expected +tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/ac5a804e41cec04dc88e787c39746687.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/model.expected.json +tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/stdout.expected +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected +tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/ac8a100b38e71fa08961b590ea591dfb.essence +tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/model.expected.json +tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/stdout.expected +tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/ac9289759eeeed046f3665ecaa69e92c.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/model.expected.json +tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/stdout.expected +tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/aca7d331e72e81eea496eaf092cd07d7.eprime.essence +tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/acc9dd7a9d879b3fd0f4154f5ec49c81.essence +tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/model.expected.json +tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/stdout.expected +tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/ace83ec31d76d447765ce42172cffaa6.solution.essence +tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/model.expected.json +tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/ad451cf4f5c4d4aa6453166bc1fb9637.essence +tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/model.expected.json +tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/ad58de7a6f4b8961d21962c5c1339af3.eprime.essence +tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/model.expected.json +tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/ad5f741657701738770c818541d371d1.eprime.essence +tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/model.expected.json +tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/ad613a17f3cee2196b552d3d7248765d.eprime.essence +tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/model.expected.json +tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/ad926564e9b2c6eba0277bc567b8144a.essence +tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/model.expected.json +tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/ad9688a81f740706aa94689fca7a305e.eprime.essence +tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/model.expected.json +tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/stdout.expected +tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/addd14e8dfc91037ec8c416bcefe5a6f.eprime.essence +tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/model.expected.json +tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/stdout.expected +tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/adf148d3c9b24578da2d82722b1cdd5a.eprime.essence +tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/model.expected.json +tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/stdout.expected +tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/ae18a4a435dc69d385d04a00db890160.eprime.essence +tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/model.expected.json +tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/stdout.expected +tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/ae3239ef6502388c67dff54e9dd38369.essence +tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/model.expected.json +tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/stdout.expected +tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/aea4619a9a5a0fd8a902c55ccdfcf159.eprime.essence +tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/model.expected.json +tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/stdout.expected +tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/aed13960e31378529c240b2392950a53.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/model.expected.json +tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/stdout.expected +tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/typecheck.expected +tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/af199adef0798e59971e84e21cc598ef.essence +tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/af743e3117ee7bb4e2b1e8c57f50c92b.essence +tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/model.expected.json +tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/stdout.expected +tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/af8b7ba49f3da7b43601534cea6c9a52.eprime.essence +tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/model.expected.json +tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/stdout.expected +tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/typecheck.expected +tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/afc735a10b56337b796738ed1c69dcff.essence +tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/model.expected.json +tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/stdout.expected +tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/afe897fe5856ec3cfae35ecc75a2b689.param.essence +tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/model.expected.json +tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/stdout.expected +tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/aff37a614c45b7cbfad99c7e884ab813.essence +tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/model.expected.json +tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/stdout.expected +tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/b016ae2a33a178f9661233f5107ff40d.eprime.essence +tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/model.expected.json +tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/stdout.expected +tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/b04682273e3c787e3dc790f31278124c.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/model.expected.json +tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/stdout.expected +tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/b0a268a2089046a016a0a03d1a709e79.eprime.essence +tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/model.expected.json +tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/stdout.expected +tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/b0a86f8190115820c0473cbe11e9d73b.eprime.essence +tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/model.expected.json +tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/stdout.expected +tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/b0c22716eda56b873b42d632dd725701.eprime.essence +tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/model.expected.json +tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/stdout.expected +tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/b1ded79047d5b8161604945e8d89cb42.essence +tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/model.expected.json +tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/stdout.expected +tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/b20a88a48ca68397fb84abb1ffdfbb20.eprime.essence +tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/model.expected.json +tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/stdout.expected +tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/b2167f75554417bcd37f5b11571ce7fc.eprime.essence +tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/model.expected.json +tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/stdout.expected +tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/b23bd23d747514f05deb05092adcbc3d.essence +tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/model.expected.json +tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/stdout.expected +tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/b2607644339c60b7dc33caa86ffa9dd2.eprime.essence +tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/model.expected.json +tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/stdout.expected +tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/b292d71c864427f2522d80399b0e16c4.essence +tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/model.expected.json +tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/stdout.expected +tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/b2addf138a556b6b21ac6d4585825828.essence +tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/model.expected.json +tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/stdout.expected +tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/b2c5b1865f75280212cbde17b6203d21.essence +tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/model.expected.json +tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/stdout.expected +tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/b38ec6d36aff0c916226635561cbd1a6.essence +tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/model.expected.json +tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/stdout.expected +tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/b3bf8939659c445bd732414fbe57ccf7.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/model.expected.json +tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/stdout.expected +tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/b3d03314511a8876a66d524dd0240cdb.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/model.expected.json +tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/stdout.expected +tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/b3e5efec04851a6556b23a0d4a9f50d0.eprime.essence +tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/model.expected.json +tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/stdout.expected +tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/b4242fa95f76260bd55ae4b62785ca8a.eprime.essence +tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/model.expected.json +tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/stdout.expected +tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/b427cac47c65e49ff32c22d2b3e8c19b.eprime.essence +tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/model.expected.json +tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/stdout.expected +tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/b45554d61a3d984d22739b92a39fbf9a.essence +tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/model.expected.json +tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/stdout.expected +tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/b4620a7bf97886729d0c139c741b474f.essence +tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/model.expected.json +tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/stdout.expected +tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/b464ffefb1b910de2383cdd4db034de4.essence +tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/model.expected.json +tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/stdout.expected +tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/b4a0864bbf55cf63ffd8e703e5ef7d5c.essence +tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/model.expected.json +tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/stdout.expected +tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/b4d111eb9e87b80bd5a5b4fdcb14fe54.essence +tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/model.expected.json +tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/stdout.expected +tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/b585a56df7b92c03073077c213cf70e4.essence +tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/model.expected.json +tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/stdout.expected +tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/b5a0336d0a0a8aeb65a6dd3effbbe1c3.essence +tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/model.expected.json +tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/stdout.expected +tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/b5c7ee358b6a6607d61c3429066bef38.eprime.essence +tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/model.expected.json +tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/stdout.expected +tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/b60ebd8c197f6819c061027cb80758ce.solution.essence +tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/model.expected.json +tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/stdout.expected +tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/b621a47f67ebf92dab65e3f36a65aeb0.eprime.essence +tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/model.expected.json +tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/stdout.expected +tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/b66e7da196a60e38bb95fbadfe03228a.eprime.essence +tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/model.expected.json +tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/stdout.expected +tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/b6716decf75eddda33df3ec06f7cc400.eprime.essence +tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/model.expected.json +tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/stdout.expected +tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/b68d49c8a5e7d08c87edf866544ee453.essence +tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/model.expected.json +tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/stdout.expected +tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/b68ea8a7e4351cdfc4b3b75bb6582893.eprime.essence +tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/model.expected.json +tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/stdout.expected +tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/b6af969b2b536ddf5cfae45210fa4165.param.essence +tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/model.expected.json +tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/stdout.expected +tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/b71c00715ba61ced0f86e3bc43166f35.eprime.essence +tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/model.expected.json +tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/stdout.expected +tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/b7689a502ec829c7763e77d9691b1327.essence +tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/model.expected.json +tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/stdout.expected +tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/b79ccd977e609a75497edf1ccf2ee937.essence +tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/model.expected.json +tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/stdout.expected +tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/b79d93a39401f5435ba6a518c8db0821.essence +tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/model.expected.json +tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/stdout.expected +tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/b7a753117dec70ec2c63efe8fcc47a65.solution.essence +tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/model.expected.json +tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/stdout.expected +tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/b7c7cd774fa35b4a548be2e3bd6033fc.essence +tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/model.expected.json +tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/stdout.expected +tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/b7ca13696cd34ed7006ef9dfac6d66ff.eprime.essence +tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/model.expected.json +tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/stdout.expected +tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/b7eff6ada58015f7994346e5ca41950c.eprime.essence +tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/model.expected.json +tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/stdout.expected +tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/b813f1982cff69612c9bec6020316b25.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/model.expected.json +tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/stdout.expected +tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/b82f142660089e621dc2e46af3650725.eprime.essence +tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/model.expected.json +tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/stdout.expected +tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/b83445d4bf1480adfef310882eb92fd4.essence +tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/model.expected.json +tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/stdout.expected +tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/b9053d156faa845a9b26778d6c852ced.param.essence +tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/model.expected.json +tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/stdout.expected +tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/b90fa3069c597d89a13b7f5db3466c81.essence +tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/model.expected.json +tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/stdout.expected +tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/b91aacd4bc92fd5c7323e78a2f9a9d2f.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/model.expected.json +tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/stdout.expected +tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/b95be16193c0617ac3f6fa8338bbfcaf.essence +tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/model.expected.json +tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/stdout.expected +tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/b97231328d01c59346c93171844928df.eprime.essence +tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/model.expected.json +tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/stdout.expected +tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected +tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/b99de7a99ed72b99faa90220b64f2f6b.essence +tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/model.expected.json +tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/stdout.expected +tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/b9abca4e0521f3fe860da1ab68d0fce3.essence +tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/model.expected.json +tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/stdout.expected +tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/b9e91ae9cdc74dfc72c64709c85041a7.essence +tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/ba11676f6e3d1b08c11d9371a6d371e1.eprime.essence +tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/ba2c7cadd697f7536313eecd1899bb28.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/model.expected.json +tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/stdout.expected +tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/ba57bded992c27570523330a6638fae2.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/model.expected.json +tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/stdout.expected +tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/ba67a75dc5e5f426156762bf669abcf5.eprime.essence +tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/model.expected.json +tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/stdout.expected +tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/bab3e1df6fdf4a2f82163db838994be4.essence +tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/model.expected.json +tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/stdout.expected +tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/bb13903b879fbc18e1d9d64cf0289190.essence +tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/model.expected.json +tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/stdout.expected +tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/bb2014ae94421f243112c038ddf96494.solution.essence +tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/model.expected.json +tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/stdout.expected +tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/bb61866f0f2e5c9384276ae0396b5513.essence +tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/model.expected.json +tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/stdout.expected +tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/bb926ba62f74a7445396970a0346c2a9.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/model.expected.json +tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/stdout.expected +tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/bbb14bf74d24cecfbb010388b777932e.essence +tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/model.expected.json +tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/stdout.expected +tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/bbb388ac3c8c38fc6fb2b259f3443a62.eprime.essence +tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/model.expected.json +tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/stdout.expected +tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/bbbac65e63fb9a20f50aa192f3d4510b.essence +tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/model.expected.json +tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/stdout.expected +tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/bbc5fd6f103aa00c642cd8a16f0fcd2a.essence +tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/model.expected.json +tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/stdout.expected +tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/bbe3f66a50742afbb33589d94d014b78.eprime.essence +tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/model.expected.json +tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/stdout.expected +tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/typecheck.expected +tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/bc07b283263666f921684988965bd90f.essence +tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/model.expected.json +tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/stdout.expected +tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/bc45b8d80af7b0427721713bfe2f97c3.essence +tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/model.expected.json +tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/stdout.expected +tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/bca160ac0038e5fbfbd71c81006de2ce.eprime.essence +tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/model.expected.json +tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/stdout.expected +tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/bcb28e847b7fd22b500fc68f328c2269.essence +tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/model.expected.json +tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/stdout.expected +tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/bcc1e37cd9ab1417ffa962e137f9b284.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/model.expected.json +tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/bd131b4d8998f764796aa1bbae756992.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/bd1f8fe6088b9a887cdc202885ad4150.eprime.essence +tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/bd30521aace879d601572ed605ffcf25.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/bd3e7688a995691fc7143ffda5bba96e.eprime.essence +tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/bd478332e179f9f0af76f10aa42d8e7b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/bd4e616b6582a4aa4aa22828874ddf4b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/stdout.expected +tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/bd7cfa0f099b440c1f12276d281df610.eprime.essence +tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/model.expected.json +tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/stdout.expected +tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/bdcbe56f6a549ac3bd7c9bae5bb2d511.essence +tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/model.expected.json +tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/stdout.expected +tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/be0de29426929bc0929e105a90307e5b.essence +tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/model.expected.json +tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/stdout.expected +tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/be5b5a644521be5b55c6a12c503cad3a.eprime.essence +tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/model.expected.json +tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/stdout.expected +tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/be61eda358af1c064b10fb0f1fb64c96.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/model.expected.json +tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/stdout.expected +tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/be94e853947c3d3fa51c7eab4ce862b3.param.essence +tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/model.expected.json +tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/stdout.expected +tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/be9f5b19948f28f905022b77223c3be2.essence +tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/model.expected.json +tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/stdout.expected +tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/bf260ebe2c81e12c93948051b93d11da.essence +tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/model.expected.json +tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/stdout.expected +tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/bf63b3e171567b8deefb648d5e8f7daf.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/model.expected.json +tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/stdout.expected +tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/bf760e520ac0c9fc6e4392ca9d2c8f27.essence +tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/model.expected.json +tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/stdout.expected +tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/bf7d4eb316fa86bd43389c69e2572be2.eprime.essence +tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/model.expected.json +tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/stdout.expected +tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/bf81fbe51a3238b216bc40f436eddee5.essence +tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/model.expected.json +tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/stdout.expected +tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/bf8cf5b1b970cbcd41992ad1412d1675.essence +tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/model.expected.json +tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/stdout.expected +tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/bfa891f78900273d2685d432e5de7efa.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/model.expected.json +tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/stdout.expected +tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/bfa9376df55a92d81e3d6ada44f900e8.solution.essence +tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/bfad9d7d69b1676ba04137649a362c8a.essence +tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/model.expected.json +tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/stdout.expected +tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/bfd00aba95070795c7a808361a3c495d.eprime.essence +tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/model.expected.json +tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/stdout.expected +tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/c012b856025e2c580aa6d09abc8a939b.eprime.essence +tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/model.expected.json +tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/stdout.expected +tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/c06eacfedc11cfea2b681414cb3f1ee0.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/model.expected.json +tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/stdout.expected +tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/c0929bb90fee827dde819c6dacffe4c0.eprime.essence +tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/model.expected.json +tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/stdout.expected +tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/c094ffd2e9d36397bff8e96fd44884d1.eprime.essence +tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/model.expected.json +tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/stdout.expected +tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/c09db9fd3028ee0633eaff8bd7644cb6.eprime.essence +tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/model.expected.json +tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/stdout.expected +tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/c120a9cd6dd0f5f002a4cda9613481d1.eprime.essence +tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/model.expected.json +tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/stdout.expected +tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/c1f6795e92c4ed7b8d90f26f64edff16.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/model.expected.json +tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/stdout.expected +tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/c23f30dfa58f7135e9c61ff93975c98d.eprime.essence +tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/model.expected.json +tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/stdout.expected +tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/c25359bbfc6b0d4d348e9a7c9593afb3.essence +tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/model.expected.json +tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/stdout.expected +tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/c2d39618c48aa2cf04741165bf25582e.essence +tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/model.expected.json +tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/stdout.expected +tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/c308cb4305e31ab207f2141469b12fb5.essence +tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/model.expected.json +tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/stdout.expected +tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/c31ab0d299c5fac897401f5a372e078a.eprime.essence +tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/model.expected.json +tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/stdout.expected +tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/c330245024f1d54f5c43c277805b9fdf.param.essence +tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/model.expected.json +tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/stdout.expected +tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/c333656a35aba68d8062d212c421d88e.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/model.expected.json +tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/stdout.expected +tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/c35882af6abc63358c2bab1e851bd680.essence +tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/model.expected.json +tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/stdout.expected +tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/c3841e1877c34e8e5bfd1c1837d307e1.eprime.essence +tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/model.expected.json +tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/stdout.expected +tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/c39921c8a0b5837e3801fd57cb76fdc8.essence +tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/model.expected.json +tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/stdout.expected +tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/c423e819384eec3bed63a038add27ca6.eprime.essence +tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/model.expected.json +tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/stdout.expected +tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/c460ed31b8197fde698b2890cf38015f.essence +tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/model.expected.json +tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/stdout.expected +tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/c5272f0460d36d154f10770be9088fa4.eprime.essence +tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/model.expected.json +tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/stdout.expected +tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/c539dc840839e54f8d3d5ca53104102f.eprime.essence +tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/model.expected.json +tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/stdout.expected +tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/c549a9cc335032709f6ddf549bea7671.essence +tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/model.expected.json +tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/stdout.expected +tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/c565bb47d72f56a38090dab8d99b7d5d.eprime.essence +tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/model.expected.json +tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/stdout.expected +tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/c56795206adea7f4fedd8a14e92b89a7.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/c646db3b98dae1b357b763e33c0c6cfb.eprime.essence +tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/model.expected.json +tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/stdout.expected +tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/c6723915d52f32f79d0d95b0c45b5690.eprime.essence +tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/model.expected.json +tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/stdout.expected +tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/c688731bea55e5a8af305c16384da5b8.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/model.expected.json +tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/stdout.expected +tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/c6ca31c282cb623a0bd6d0ce51630721.eprime.essence +tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/model.expected.json +tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/stdout.expected +tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/c6f07fc1b59d5295892164e99ab6b192.eprime.essence +tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/model.expected.json +tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/stdout.expected +tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/c6f1aead53d40454b7d12ecb7a129adb.eprime.essence +tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/model.expected.json +tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/stdout.expected +tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/c7081572bfc6c6db3d45afd912301c67.essence +tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/model.expected.json +tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/stdout.expected +tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/c7212c02f8b6793b8264a84f7c5d918a.essence +tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/model.expected.json +tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/stdout.expected +tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence +tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/model.expected.json +tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stdout.expected +tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/c7701a368d5b05a93fcea0618dfe80ae.essence +tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/model.expected.json +tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/stdout.expected +tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/c7a05c6406dc0bf72a24b7344bf05115.eprime.essence +tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/model.expected.json +tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/stdout.expected +tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/c7bab02871b463a4b24d6530e2009c74.eprime.essence +tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/model.expected.json +tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/stdout.expected +tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/c863e1aefc22489efd92991f527ae5a2.eprime.essence +tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/model.expected.json +tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/stdout.expected +tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/c87b10e4d0646bf5a1cccde450c77342.essence +tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/model.expected.json +tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/stdout.expected +tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/c89bdec4acf5b8c9aaaa53cb0cb59f7d.eprime.essence +tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/model.expected.json +tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/stdout.expected +tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/c8cbbeb91436bc3cbb6db533e1de1c9f.eprime.essence +tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/model.expected.json +tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/stdout.expected +tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/c8cc670b809293626467998d149a92ca.essence +tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/model.expected.json +tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/stdout.expected +tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/c90fe79b4b3c5feeb47e5ba79e72b0e5.param.essence +tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/model.expected.json +tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/stdout.expected +tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/c93ff154e91b9bb6635c22be3ae7ecfa.eprime.essence +tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/model.expected.json +tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/stdout.expected +tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/c94c721e03e88dc01a16fa9b0b3b7431.essence +tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/model.expected.json +tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/stdout.expected +tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/c96d788458c4c7e3247f608a018776aa.eprime.essence +tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/model.expected.json +tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/stdout.expected +tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/c99ba20043c63432d9487a23ff54c113.eprime.essence +tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/model.expected.json +tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/stdout.expected +tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/c9a33c7dcd76afe05345be3216bcfe9b.essence +tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/model.expected.json +tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/stdout.expected +tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/c9b7a310cade3d7fdb27589ad8a3e3fe.eprime.essence +tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/c9e1cd7a71dc9c900ce717378a2e7326.eprime.essence +tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/model.expected.json +tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/stdout.expected +tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/typecheck.expected +tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/c9f3f4ce7f1422c36af5e8b4bbd4255a.essence +tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/model.expected.json +tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/stdout.expected +tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/ca6d3bbc350e094480efac50bdc26694.param.essence +tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/model.expected.json +tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/stdout.expected +tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/caaa1454e10014cfe14a7700ed41272b.eprime.essence +tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/model.expected.json +tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/stdout.expected +tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/cad537c995fb03554a83b3fb49b715bc.eprime.essence +tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/model.expected.json +tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/stdout.expected +tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/typecheck.expected +tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/cb56531cbb4df9698d8f0cf00d0944f3.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/model.expected.json +tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/stdout.expected +tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/cb74150a8c73ed6ff0be9fe51e42d794.eprime.essence +tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/model.expected.json +tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/stdout.expected +tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/cb7b739e25b3fe249ffabcd46210a7a4.essence +tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/model.expected.json +tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/stdout.expected +tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/cbabd362a21657745073ef1a34fb2f97.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/model.expected.json +tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/stdout.expected +tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/cbbb526650a66d168ab009f76b41ac7e.essence +tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/model.expected.json +tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/stdout.expected +tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/cbc4f7ec129e0d6b2868f35a8835828b.param.essence +tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/model.expected.json +tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/stdout.expected +tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/cbd987a72d6fcc160ca0c276b2ad0594.essence +tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/model.expected.json +tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/stdout.expected +tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/cbf9663144fdb0a944c8c9eb9276186f.essence +tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/model.expected.json +tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/stdout.expected +tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/cc2192ed7f68debf33abcbf2de08eff2.essence +tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/model.expected.json +tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/stdout.expected +tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/cc228e7aa4bdec711a971946c1ab0816.essence +tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/model.expected.json +tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/stdout.expected +tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/cc2e944db81bd1d2cbbe89830450aef4.essence +tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/model.expected.json +tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/stdout.expected +tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/cc34727d6328f78dd681783e5b094162.eprime.essence +tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/model.expected.json +tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/stdout.expected +tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/typecheck.expected +tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/cca22afe2ff559a314ecd14c2296b387.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/model.expected.json +tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/stdout.expected +tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/cd11163441a1534d06cf64e8f168fcac.essence +tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/model.expected.json +tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/stdout.expected +tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/cd4e9ca8ff5e1d257d6d078aa15002c2.eprime.essence +tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/model.expected.json +tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/stdout.expected +tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/cd703d198a7caa0ed1cc30dfc71b5293.essence +tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/model.expected.json +tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/stdout.expected +tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/cd82b726b9bc042bf11078723d7ddebf.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/model.expected.json +tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/stdout.expected +tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/cdb90fb872844fc0f220512280d64db4.essence +tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/model.expected.json +tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/stdout.expected +tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/cdbd05170298b1bd1aa7a45f454e3d63.eprime.essence +tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/model.expected.json +tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/stdout.expected +tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/cdd2cde0e8a96682225ea6ac1be2037d.eprime.essence +tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/model.expected.json +tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/stdout.expected +tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/cde1afcab624b8f5cf6026d76a182b03.eprime.essence +tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/model.expected.json +tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/stdout.expected +tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/cdfa715a0ae81a4cb3d42e7ca4e9b8af.essence +tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/model.expected.json +tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/stdout.expected +tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/cdfefc24c895f36d5ec7846039f0b859.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/model.expected.json +tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/stdout.expected +tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/cea26bcbcd27151494695b5d2cd176d1.essence +tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/model.expected.json +tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/stdout.expected +tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/ceede496d7adf47c26a9d01220b317c0.essence +tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/model.expected.json +tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/stdout.expected +tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/cef118dc017b24a21dfb5a88c529eda9.eprime.essence +tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/model.expected.json +tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/stdout.expected +tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/cf4c4a53d3ab9c4732e322aef0177215.essence +tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/model.expected.json +tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/stdout.expected +tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/cf86537a6fa95a340a00e5b6b22afff9.essence +tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/model.expected.json +tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/stdout.expected +tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/cfa5de1e898ada0ab6eb52584e9a9b7c.essence +tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/model.expected.json +tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/stdout.expected +tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/cff0ab3b52e4246f757238b11b8fe82b.eprime.essence +tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/model.expected.json +tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/stdout.expected +tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/d0394edeb6136c30f61b15986636f05e.eprime.essence +tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/model.expected.json +tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/stdout.expected +tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/d0705cf9aeea70d0112cd8cf1ad2fc28.essence +tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/model.expected.json +tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/stdout.expected +tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/d0d3714bca19279a25ffad6fe8ff6b1a.essence +tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/model.expected.json +tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/stdout.expected +tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/d0dd7887605ab4505721457d3924e8e2.eprime.essence +tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/model.expected.json +tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/stdout.expected +tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/d196536263bceb21a881742553628980.eprime.essence +tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/model.expected.json +tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/stdout.expected +tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/d1d8b39a61df04a2f4fd44e4df6c05e9.essence +tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/model.expected.json +tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/stdout.expected +tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/d1f9f5646ad02f51e81ccd962c936011.eprime.essence +tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/model.expected.json +tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/stdout.expected +tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/d1ffc6dc30ae73ba44e3f9c55d3e1636.eprime.essence +tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/model.expected.json +tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/stdout.expected +tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/d208285ba6d6405a34832d73dc232057.essence +tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/model.expected.json +tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/stdout.expected +tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/d20ff5e630ee919f1fcc726ea14f1e21.eprime.essence +tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/model.expected.json +tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/stdout.expected +tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected +tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/d2d3c576ca58a9c8a00c79ff7099cf80.eprime.essence +tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/model.expected.json +tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/stdout.expected +tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/d2d4b6dd1eb76f25c117fe82249925fb.eprime.essence +tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/model.expected.json +tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/stdout.expected +tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/d2f262de61496ad07219546d13f3cedd.eprime.essence +tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/model.expected.json +tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/stdout.expected +tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/d3655944a04ded091e0721479cd791dd.eprime.essence +tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/model.expected.json +tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/stdout.expected +tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/d3909eeb253333c473b61058dd67f690.eprime.essence +tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/model.expected.json +tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/stdout.expected +tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/d3a54dbb8b939655a1a6e6c929c4d1ef.eprime.essence +tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/model.expected.json +tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/stdout.expected +tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/d3c29831ec8d5ce670af7b87ace0f0c6.param.essence +tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/model.expected.json +tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/stdout.expected +tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/d40ffe1ce2def4f80c820d417c7c0ef7.essence +tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/model.expected.json +tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/stdout.expected +tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/d42368812350b5837938b26c3b121fde.essence +tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/model.expected.json +tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/stdout.expected +tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/d45d2b678a76683b5b19379b69f7d2f7.essence +tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/model.expected.json +tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/stdout.expected +tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/d4cbd9476c638f58ea42456b67ec17c2.eprime.essence +tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/model.expected.json +tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/stdout.expected +tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/d4f50d7d88e9c968c1e69e2c88508bc9.essence +tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/model.expected.json +tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/stdout.expected +tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/d548102740c166c94c1585976df85834.eprime.essence +tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/model.expected.json +tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/stdout.expected +tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected +tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/d563cbf2c040240a470a21faf1f336cb.eprime.essence +tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/model.expected.json +tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/stdout.expected +tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/typecheck.expected +tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/d58aaa071ca86ec814d84096e26fa6d6.eprime.essence +tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/model.expected.json +tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/stdout.expected +tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/d5934d344621e95bfb757cd4fe12b3f9.essence +tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/model.expected.json +tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/stdout.expected +tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/d5c4f9fd5e009e4efaeda02b5577fa3c.essence +tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/model.expected.json +tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/stdout.expected +tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/d5f6742f1236a8cc8b59fcce2604fcf0.eprime.essence +tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/model.expected.json +tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/stdout.expected +tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/d60b24319fab7ae0818780057329fe3c.eprime.essence +tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/model.expected.json +tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/stdout.expected +tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/d6126c026677dbe18227570b51c9ba40.eprime.essence +tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/model.expected.json +tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/stdout.expected +tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/d630b8886b00763ff5fdcba6b0acdfad.essence +tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/model.expected.json +tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/stdout.expected +tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/d6433d786cf5b2c2d5d4f84e13ebbeff.essence +tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/model.expected.json +tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/stdout.expected +tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/d6b3494aaacb9f588de0875051f0040c.eprime.essence +tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/model.expected.json +tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/stdout.expected +tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/d6df3f33a48f4c110d5f35a0d6649a10.solution.essence +tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/model.expected.json +tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/stdout.expected +tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/d6e6abaa4508ba4e8f498b547cb7b484.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/model.expected.json +tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/stdout.expected +tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/d712140e47b1aced2902ff8b63805eaf.essence +tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/model.expected.json +tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/stdout.expected +tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/d72e3ef20e4e6ce59aac43b9bdadb680.essence +tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/model.expected.json +tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/stdout.expected +tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/d7480be9792039d938131bb1cf2e5396.essence +tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/model.expected.json +tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/stdout.expected +tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/d75b01e01b11eb07e4bc4fbd71ce3b5e.eprime.essence +tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/model.expected.json +tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/stdout.expected +tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/d77d039eded33b2161c11a3e2582ff8b.eprime.essence +tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/model.expected.json +tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/stdout.expected +tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/d7c44baa298084f75524e68994d7f48d.eprime.essence +tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/model.expected.json +tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/stdout.expected +tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/d7d816b10a6f459ed78f1bd604bca06f.eprime.essence +tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/model.expected.json +tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/stdout.expected +tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/d840bf570b5591c94e3744e977db18c9.essence +tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/model.expected.json +tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/stdout.expected +tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/d89a06ed8f4ec8185046a435ad85ca8c.eprime.essence +tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/model.expected.json +tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/stdout.expected +tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/d8eb6baba24eaa3fd9db1695871e9a02.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/model.expected.json +tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/stdout.expected +tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/d908114cc84df4098382dc169c3d33d2.param.essence +tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/model.expected.json +tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/stdout.expected +tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/d90cedcab21d181b33a89f6dce2a9d92.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/model.expected.json +tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/stdout.expected +tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/d92076e69308eb50f5eb562d89a97d2e.eprime.essence +tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/model.expected.json +tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/stdout.expected +tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/d943fb912926ca72b165e37a50117f0b.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/model.expected.json +tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/stdout.expected +tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/d949e29f0824109241310a096cc10722.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/model.expected.json +tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/stdout.expected +tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/d98e4c46386fe1cb7c5878769a04cad6.eprime.essence +tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/model.expected.json +tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/stdout.expected +tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/d9b7bc6ac6d954267d819c0f76d17a98.eprime.essence +tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/model.expected.json +tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/stdout.expected +tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/d9d7484d2c3845cb2dfb71b35a280914.essence +tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/model.expected.json +tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/stdout.expected +tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/d9e130069d7226626220415e5374f4d8.eprime.essence +tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/model.expected.json +tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/stdout.expected +tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/da2dd87b9830b0d92b6148601757e71f.eprime.essence +tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/model.expected.json +tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/stdout.expected +tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/da3454572e4f3dd1b2d1e78940b0f0fe.eprime.essence +tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/da883f3c7ed0cdb26f8c84c1fffa5c86.eprime.essence +tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/model.expected.json +tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/stdout.expected +tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/da973f85880a36c6073f00b808f88b6a.essence +tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/model.expected.json +tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/stdout.expected +tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/daa42b8b7081f9119fb8929638de497c.essence +tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/model.expected.json +tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/stdout.expected +tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/dab9f5202b2b1070b876ac9463bfb41d.eprime.essence +tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/model.expected.json +tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/stdout.expected +tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/dad7b9b0bdd9e288f1dc3b19ec96c213.eprime.essence +tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/model.expected.json +tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/stdout.expected +tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/typecheck.expected +tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/db116ac9b252e8eb75103d22161db099.eprime.essence +tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/model.expected.json +tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/stdout.expected +tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/db16c0f1b3325f600e8e589ed559de53.eprime.essence +tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/model.expected.json +tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/stdout.expected +tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/dbc08914b7c5505e1136cc21ac9d5125.eprime.essence +tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/model.expected.json +tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/stdout.expected +tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/dbf9ff4b4f3e79b96504ed12188ad2fa.essence +tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/model.expected.json +tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/stdout.expected +tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/dc23eb30711c692381b05041b160b972.essence +tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/model.expected.json +tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/stdout.expected +tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/dc313d314ac3d4882ffeb1b18c98895e.eprime.essence +tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/model.expected.json +tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/stdout.expected +tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/dc672cdd8a4df36b49833dc8762a79bd.essence +tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/model.expected.json +tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/stdout.expected +tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/dd2404135067bc1bf50c79709a678888.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/model.expected.json +tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/stdout.expected +tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/dd53f8032612f41cf818d2fd9f86229c.essence +tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/model.expected.json +tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/stdout.expected +tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/dd69d43592ee50c25398c0d09f0db6ec.essence +tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/ddc59e161a729c98406b1fdbadcf1931.eprime.essence +tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/model.expected.json +tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/stdout.expected +tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/dde8c80f0b2d3b76d21ae3c49f3f56c1.essence +tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/model.expected.json +tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/stdout.expected +tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/de1153ba8992148669da05f4713891ff.eprime.essence +tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/model.expected.json +tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/stdout.expected +tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/de41745f2cd146147d539b8b2a4fe97f.essence +tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/model.expected.json +tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/stdout.expected +tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/de4b9074bdc6984c3245f04df15c8c96.essence +tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/model.expected.json +tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/stdout.expected +tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/de829bda6aed51d91ed168dcaa7d3283.essence +tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/model.expected.json +tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/stdout.expected +tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/de9716a7ff65a1574f48f0b1858be3bd.eprime.essence +tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/model.expected.json +tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/stdout.expected +tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected +tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/de98c56929c67f420c29fa2f74d46c69.eprime.essence +tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/model.expected.json +tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/stdout.expected +tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/dec056eee47fd05a251225b16b62ab64.eprime.essence +tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/model.expected.json +tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/stdout.expected +tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/typecheck.expected +tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/dec8399568996e2cac2a2f4e6eab94f7.eprime.essence +tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/model.expected.json +tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/stdout.expected +tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/deceb37952fa992b20b6038107ef1c91.eprime.essence +tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/model.expected.json +tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/stdout.expected +tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/dee8cacb2b0d2d2e4e260e919675594d.essence +tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/model.expected.json +tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/stdout.expected +tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/df221c6ed757b169b367cde70ca01740.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/model.expected.json +tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/stdout.expected +tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/df25e8e6fa4509621aa00858c52537f3.essence +tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/model.expected.json +tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/stdout.expected +tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/df2c273b94d39520c80a1bd97d7f3a5b.eprime.essence +tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/model.expected.json +tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/stdout.expected +tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/df7f516a0aca4383de3282063aada958.param.essence +tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/model.expected.json +tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/stdout.expected +tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/dfa5468062e090930fa12617870524da.eprime.essence +tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/model.expected.json +tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/stdout.expected +tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/e02f77cea3324e91d885d1f3fe504cd4.eprime.essence +tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/model.expected.json +tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/stdout.expected +tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/e070168566c16231cc6322ee38e1ac49.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/model.expected.json +tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/stdout.expected +tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/e0bb089c7844a06fba3ed1abd7cb6608.eprime.essence +tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/model.expected.json +tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/stdout.expected +tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/e1044649abbc9d8d84153f49c31608fa.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/model.expected.json +tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/stdout.expected +tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/e1095300fed2e22ccb27b795ebbace46.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/model.expected.json +tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/stdout.expected +tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/e111e9686fc1e2309b88378ea20b03b7.essence +tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/model.expected.json +tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/stdout.expected +tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/e1294b8c2c5314f98240221178785764.essence +tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/model.expected.json +tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/stdout.expected +tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/e13c11158e6c85d45ce49409c9cd8ceb.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/model.expected.json +tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/stdout.expected +tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/e14d717d203fa10fcdf72b541c14ba80.essence +tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/model.expected.json +tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/stdout.expected +tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/e1aecd4c14589221e87e2ec00b232d51.eprime.essence +tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/model.expected.json +tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/stdout.expected +tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/e1cd26d93bc21f5125614f06e04fe307.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/model.expected.json +tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/stdout.expected +tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/e1ffc88979eb73efb8ee6166eff8ad49.essence +tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/model.expected.json +tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/stdout.expected +tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/e21cd7b0f710515a79d787945d809a81.eprime.essence +tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/model.expected.json +tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/stdout.expected +tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/e23b30b15d31c2b5b4eadd501c0770ec.eprime.essence +tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/e284f026466fe24b24af370e324ed842.eprime.essence +tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/model.expected.json +tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/stdout.expected +tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/e29c0260c4c2c194df9bfcb06e99a6d0.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/model.expected.json +tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/stdout.expected +tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/e2f22e0ba5654302502f31d32b39e260.eprime.essence +tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/model.expected.json +tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/stdout.expected +tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/e31e8258961a4a8fa32e4eb491491bdc.eprime.essence +tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/model.expected.json +tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/stdout.expected +tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/e33c5a4b1eca296873386a312774d872.essence +tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/model.expected.json +tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/stdout.expected +tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/e34605b6797826c4331b589705613f02.essence +tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/model.expected.json +tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/stdout.expected +tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/e365ceb4dac67b8e61a50d68a2af7285.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/model.expected.json +tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/stdout.expected +tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/e382656008ccf8727fd5e055cf6debfa.essence +tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/model.expected.json +tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/stdout.expected +tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/e38dc481ce407a6a1f53e6580e562bef.essence +tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/model.expected.json +tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/stdout.expected +tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/e3a244e0c1531a789b3b2b6ea6dce563.essence +tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/model.expected.json +tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/stdout.expected +tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/e3a6177402630530eb98e2268949540f.eprime.essence +tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/model.expected.json +tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/stdout.expected +tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/e3bc51416538b2caf00e19e5640c44e2.eprime.essence +tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/model.expected.json +tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/stdout.expected +tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/e3f9560663238de1da11e96346429b1e.essence +tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/model.expected.json +tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/stdout.expected +tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/e409a673a76b4471de16f12370c89c4b.essence +tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/model.expected.json +tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/stdout.expected +tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/e411c4ea45ae7f66786a093af8dd679e.essence +tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/model.expected.json +tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/stdout.expected +tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/e4bdea8fa38ec88f12183229003d0816.essence +tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/model.expected.json +tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/stdout.expected +tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/e4efb5b7c5d268bf08ca728bba8f9a3a.essence +tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/model.expected.json +tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/stdout.expected +tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/e50b067fb90fe11172cb0610514ccd39.eprime.essence +tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/model.expected.json +tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/stdout.expected +tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/e51b695dbd433af6cd1f71e5e1c83b01.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/model.expected.json +tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/stdout.expected +tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/e52709f55be1d4b847f34e24378fde01.eprime.essence +tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/model.expected.json +tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/stdout.expected +tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/e579ee476594ce184db0bd4a70bd44f6.essence +tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/model.expected.json +tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/stdout.expected +tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/e5c113460990fde26723d11aa27cbea5.eprime.essence +tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/model.expected.json +tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/stdout.expected +tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/e5ef686faac39c34b542eec223509aa8.eprime.essence +tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/model.expected.json +tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/stdout.expected +tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/e5f4a75a9e27bf4ccf95b4be8aa047b9.essence +tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/model.expected.json +tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/stdout.expected +tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/e637e7d01e5d483d8840ac29a760548c.eprime.essence +tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/model.expected.json +tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/stdout.expected +tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/e64befa0b6da3e1c9f30faf22b2449df.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/model.expected.json +tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/stdout.expected +tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/e65878a75f8a723504c5189d62b6f391.eprime.essence +tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/model.expected.json +tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/stdout.expected +tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/e6b42a5e4f082c16f763685001476c97.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/model.expected.json +tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/stdout.expected +tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/e6cb9c836b54fafe792680c969f86e0c.essence +tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/model.expected.json +tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/stdout.expected +tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/e6d35b55e35082d3fa2dd4068f7ebfdf.eprime.essence +tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/model.expected.json +tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/stdout.expected +tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/e6e4b876fba7437dd65fd67c136855f9.essence +tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/model.expected.json +tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/stdout.expected +tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/e73f7a7c31a8573f1ed7d8d617123c57.essence +tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/model.expected.json +tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/stdout.expected +tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/e7a6d29d4285dcfdd7daddc00be2c882.eprime.essence +tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/model.expected.json +tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/stdout.expected +tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/e7f89fcbcdbd0a79caefef0e87678c8d.eprime.essence +tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/model.expected.json +tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/stdout.expected +tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/e800461807962940370a2085b2b69d2d.eprime.essence +tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/model.expected.json +tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/stdout.expected +tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/e82a67e0fdd3e0139246615decdcd5c5.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/model.expected.json +tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/stdout.expected +tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/e840a5670518b4972194e3436761ec3d.essence +tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/model.expected.json +tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/stdout.expected +tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/e87d232f06188474ec6e722aa7e64525.solution.essence +tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/model.expected.json +tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/stdout.expected +tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/e8b367599a5f7fcb2e355134b78bc13f.essence +tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/model.expected.json +tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/stdout.expected +tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/e8c88ac8a94a5384bada05774e023b0c.essence +tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/model.expected.json +tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/stdout.expected +tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/e8d5dccfc3d9f7b3ee51ca0a76946dd8.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/model.expected.json +tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/stdout.expected +tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/e8f228bf132523400052fdfd6c5de67c.essence +tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/model.expected.json +tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/stdout.expected +tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/e91966578f72192934799d4557e48802.essence +tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/model.expected.json +tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/stdout.expected +tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/e91bac96af4d1f0fc2a422fc0e662a73.essence +tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/model.expected.json +tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/stdout.expected +tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/e938482d4eff3413375a9a4f1f09648c.eprime.essence +tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/model.expected.json +tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/stdout.expected +tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/e94042e71ae4aca4b2dcbe6a1c03eeb5.eprime.essence +tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/model.expected.json +tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/stdout.expected +tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/e945a36e0d23b836d582e691732a717d.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/model.expected.json +tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/stdout.expected +tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/e94f81e31dce6a8efb7cdffe25cc7a9a.eprime.essence +tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/model.expected.json +tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/stdout.expected +tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/typecheck.expected +tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/e9929aa72d7832a4623e7b816a2e9af2.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/model.expected.json +tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/stdout.expected +tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/e9d7c8d883f5971d53a58ee5183b4c11.essence +tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/model.expected.json +tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/stdout.expected +tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/ea5025564f1fcb5c1c2588afb4483b8e.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/model.expected.json +tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/stdout.expected +tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/ea79865a51efdd02842ffb6654cfb7e5.essence +tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/model.expected.json +tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/stdout.expected +tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/eaa45321fa09e5ac7b722523a615feba.eprime.essence +tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/model.expected.json +tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/stdout.expected +tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/eae2dc34bf5517b3a4070ef1714f089a.eprime.essence +tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/model.expected.json +tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/stdout.expected +tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/eb0e88cd958943e2e87a5ade86710827.essence +tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/model.expected.json +tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/stdout.expected +tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/eb22d7172ced999f8568dccf4a1a3d94.eprime.essence +tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/model.expected.json +tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/stdout.expected +tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/typecheck.expected +tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/eb5e229a3045349ef118229f11ede50b.eprime.essence +tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/model.expected.json +tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/stdout.expected +tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/eb60aacef45f3261fb8764a8c2d339a9.essence +tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/model.expected.json +tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/stdout.expected +tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/eb76f41475438c3ed398cb3e2dbd5b6b.essence +tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/model.expected.json +tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/stdout.expected +tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/ebd771c5c81dac1c206f28e4d3eaa737.essence +tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/model.expected.json +tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/stdout.expected +tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/ebee2b95d0090aad677f2fbfcf9e0274.essence +tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/model.expected.json +tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/stdout.expected +tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/ebf05e849ab1490bdd5852d44db646c8.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/model.expected.json +tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/stdout.expected +tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/ec1a6f796ecb53ab8b847c313c165256.essence +tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/model.expected.json +tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/stdout.expected +tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/ec9aed752e5eeb363b644516fc85dd8f.eprime.essence +tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/model.expected.json +tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/stdout.expected +tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/ecd0956ed566db30a05226812f9a24c2.eprime.essence +tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/model.expected.json +tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/stdout.expected +tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/ece12ae05e35cb440db8d49bdd6a83b8.essence +tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/model.expected.json +tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/stdout.expected +tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/ed0e6ab88e79cb8c6c179357811e4b33.eprime.essence +tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/model.expected.json +tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/stdout.expected +tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/ed2ddcbb96d234e4f4dd7147965b47fc.essence +tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/model.expected.json +tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/stdout.expected +tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/ed3c0907a796850d638f57e4004efc44.essence +tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/model.expected.json +tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/stdout.expected +tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/ed529213e4789b79a6929c96d89b6eb2.eprime.essence +tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/model.expected.json +tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/stdout.expected +tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/ed6e2ac3457110fd811f7f6066338883.eprime.essence +tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/model.expected.json +tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/stdout.expected +tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/ede82ece37232fcdcff220a71e6c4336.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/model.expected.json +tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/stdout.expected +tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/edeee104245da0f75d4b86e7146e073f.eprime.essence +tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/model.expected.json +tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/stdout.expected +tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/ee0f4f29b6fcae0b8a1a80540fff7469.eprime.essence +tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/model.expected.json +tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/stdout.expected +tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/ee3e8d0c49be4d87a16584a000657a1f.eprime.essence +tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/model.expected.json +tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/stdout.expected +tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/ee41686a3922fcd3e8d19cfa965b0277.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/model.expected.json +tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/stdout.expected +tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/ee779538eab812cac235345d906f97a0.solution.essence +tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/model.expected.json +tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/stdout.expected +tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/ee82afd2cd6a746ecf89368b7b1bc6f3.eprime.essence +tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/model.expected.json +tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/stdout.expected +tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/eea850512090333fd6ac248e3474adfe.eprime.essence +tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/model.expected.json +tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/stdout.expected +tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/eea88321d1ee362a31dd52ddf4ec6f75.essence +tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/model.expected.json +tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/stdout.expected +tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/eebf57c0e408c9d7b113317d714541bf.eprime.essence +tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/model.expected.json +tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/stdout.expected +tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/typecheck.expected +tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/eed1a2fb0387d257448ddfccff4bd5f5.essence +tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/model.expected.json +tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/stdout.expected +tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/eee79bab97319cb6a1cfb2a945bcc1a6.eprime.essence +tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/model.expected.json +tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/stdout.expected +tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/ef1db2a31177900e3baf4331a5942ac8.essence +tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/model.expected.json +tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/stdout.expected +tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/ef336eba26eb0a9a90de40b18d840b84.eprime.essence +tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/model.expected.json +tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/stdout.expected +tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/ef422b238d7533811a8ed2445009e19c.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/model.expected.json +tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/stdout.expected +tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/ef443db8cd28e24e1a6d7a75548c1de0.eprime.essence +tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/model.expected.json +tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/stdout.expected +tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/ef47512eb208c3dc333c0f019cdd3b41.essence +tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/model.expected.json +tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/stdout.expected +tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/ef483210845a518a24793add7f479305.eprime.essence +tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/model.expected.json +tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/stdout.expected +tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/f01773dda299c7dcb2eaf99eff9bf075.essence +tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/model.expected.json +tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/stdout.expected +tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/f019c5cdd99099f33d53cf9be0031c0b.essence +tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/model.expected.json +tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/stdout.expected +tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/f01fdac91e838e2203abc5cc7899830c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/model.expected.json +tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/stdout.expected +tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/f04824a85432120b11d2c0f024940b08.eprime.essence +tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/model.expected.json +tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/stdout.expected +tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/f08df3b51ad479d28a8ea0a94707f70c.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/model.expected.json +tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/stdout.expected +tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/f08f3252ac868467a41c8c6d7f0bd425.eprime.essence +tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/model.expected.json +tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/stdout.expected +tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/f0a8b4dc9eb64ca83b84026196a58e07.essence +tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/model.expected.json +tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/stdout.expected +tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/f0da1b32d64901550697edd2a56acbb1.essence +tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/model.expected.json +tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/stdout.expected +tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/f0fc2fcf48b2784adbc82bebe8debe1d.eprime.essence +tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/model.expected.json +tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/stdout.expected +tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/f11a6d1a6b6ea819dc5ab8227c9c909d.essence +tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/model.expected.json +tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/stdout.expected +tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/f17b4b0018354dbb3657f42a48ff8c38.essence +tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/model.expected.json +tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/stdout.expected +tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/f1fd537fecc6c852b01a571e701d7e59.eprime.essence +tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/model.expected.json +tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/stdout.expected +tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/f243bccb3b210797782c1c047cbf7643.essence +tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/model.expected.json +tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/stdout.expected +tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/f2555ccbaf900e06880e7a06e4d54635.eprime.essence +tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/model.expected.json +tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/stdout.expected +tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/f2b5914faa565573231cd3ddd7e5704c.essence +tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/model.expected.json +tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/stdout.expected +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected +tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/f2e7d31ce6e0939bd05b0cb55c362a05.essence +tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/model.expected.json +tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/stdout.expected +tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/f2f725a26126338e19e3f08ef990f1da.eprime.essence +tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/model.expected.json +tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/stdout.expected +tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/f3366597baeed3d35bc64e12142e5d36.essence +tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/model.expected.json +tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/stdout.expected +tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/f3b4b055e266a994218c9c7c4772d7db.eprime.essence +tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/model.expected.json +tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/stdout.expected +tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/f41a286594c108909b183b37074c3e76.eprime.essence +tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/model.expected.json +tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/stdout.expected +tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/f42851729ee7b455bb9015d9c3e76513.eprime.essence +tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/model.expected.json +tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/stdout.expected +tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/f45d87813af8ef0ba7934476365e42b5.essence +tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/model.expected.json +tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/stdout.expected +tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/f47023c53362e918879df887cd577aad.essence +tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/model.expected.json +tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/stdout.expected +tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/f4db5a8548a15052f8da491f1a84ecbe.eprime.essence +tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/model.expected.json +tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/stdout.expected +tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/f5650f709d784157b7cac1ee24385d89.essence +tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/model.expected.json +tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/stdout.expected +tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/f57b04b76b4d073350370fd57711d175.solution.essence +tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/model.expected.json +tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/stdout.expected +tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/f57b3d11bf42b1452c009a9c008864fd.eprime.essence +tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/model.expected.json +tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/stdout.expected +tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/f5827ae829a0622e323234a0dda7c6a7.essence +tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/f5a3242772b8cd94e91769f8879256da.essence +tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/model.expected.json +tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/stdout.expected +tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/f5b84f33ec9ad582d7a93d92c0e8cba7.essence +tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/model.expected.json +tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/stdout.expected +tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/f5e0dd3dd1ecaf45dc4127467fcbd4dd.eprime.essence +tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/model.expected.json +tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/stdout.expected +tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/f62f9ea8b0746be5eaea19e9cede8737.essence +tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/model.expected.json +tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/stdout.expected +tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/f631685d83ae9335bfaa14ec9c45af5a.essence +tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/model.expected.json +tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/stdout.expected +tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/f6423154493aba2f92069b620dc65a81.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/model.expected.json +tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/stdout.expected +tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/f64a23f20f4b5987c912ace009afe7fa.param.essence +tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/model.expected.json +tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/stdout.expected +tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/f6964545525c08e038e50dbb7491e10f.eprime.essence +tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/model.expected.json +tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/stdout.expected +tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/f6f3227d62d29091577943cbcc8b7b7f.eprime.essence +tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/model.expected.json +tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/stdout.expected +tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/f6f7c303c2a2778d821d72c0850eac44.eprime.essence +tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/model.expected.json +tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/stdout.expected +tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/f744bd6464f77eed6047d49b3ab882d7.eprime-param.essence +tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/model.expected.json +tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/stdout.expected +tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/f76691ed63ac07df5afa89ebd0185bfc.essence +tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/model.expected.json +tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/f7735ba844b813417ce561c482cb8646.essence +tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/model.expected.json +tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/f7b45af6add056ea2e2175a1570992d2.essence +tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/model.expected.json +tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/f7c8ae4c852309475656603fd5f504ec.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/model.expected.json +tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/f7ca7b1d6cc6e70633f755ff96d8e503.eprime.essence +tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/model.expected.json +tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/f7e0e3cd39f57231ef5045587906ea06.essence +tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/model.expected.json +tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/f7faf3149f0cc222402ea4da0e2865f1.eprime.essence +tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/model.expected.json +tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/stdout.expected +tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/f82a4527f67eca4c2d17cab8c2c8925c.eprime.essence +tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/model.expected.json +tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/stdout.expected +tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/typecheck.expected +tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/f8544bf93a9335fb77cbf5bfacf6e962.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/model.expected.json +tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/stdout.expected +tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/f8551d2ded7dfbb7f4fc2fefcfe32146.essence +tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/model.expected.json +tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/stdout.expected +tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/f8fee1e382cb8c8e9f5b9a3ebea35fb9.essence +tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/model.expected.json +tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/stdout.expected +tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/f98271d6100357f37b1ed437cd031c73.essence +tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/model.expected.json +tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/stdout.expected +tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/f99a15c6848a54572cf2de6cb08a28a7.essence +tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/model.expected.json +tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/stdout.expected +tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/f9a76a3a228ae3fd65dcf7c0e2d89cdf.param.essence +tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/model.expected.json +tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/stdout.expected +tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/f9d485560d6cb58f7ee08ec9126031d2.essence +tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/model.expected.json +tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/stdout.expected +tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/f9d78cef087ed11d5d6a829969836193.essence +tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/model.expected.json +tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/stdout.expected +tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/fa438291f1596214e9904d9d6f8d6d2f.essence +tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/model.expected.json +tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/stdout.expected +tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/fa49a38ca4d09bdd3747fb2d64454682.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/model.expected.json +tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/stdout.expected +tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/fa781d63daf055c90275ea7edc79ec2d.eprime.essence +tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/model.expected.json +tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/stdout.expected +tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/fa79e79e1ecec248182967b52cc2b211.essence +tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/model.expected.json +tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/stdout.expected +tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/fbc3ef48d14e02ea27959c4d1eb1cd89.essence +tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/model.expected.json +tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/stdout.expected +tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/fbfe220f5450d8f205a3e3e9ec02f054.eprime.essence +tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/model.expected.json +tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/stdout.expected +tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/fc3b7a0fb6d208b6d517245174d48f1d.eprime.essence +tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/model.expected.json +tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/stdout.expected +tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/fc6449f2b4958962d63cffad0c3fa8bc.eprime.essence +tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/model.expected.json +tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/stdout.expected +tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/fc809d43c1d22b53118425514b8db93c.essence +tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/model.expected.json +tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/stdout.expected +tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/fcd0c80113acf558e792eecf20ab9b66.eprime-solution.essence +tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/model.expected.json +tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/stdout.expected +tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/fcd37dc5d1ffb7d6a0d6bb54244f1be9.eprime.essence +tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/model.expected.json +tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/stdout.expected +tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/fcda2c5f3d64e89af9ad58a5cc80d2ba.eprime.essence +tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/model.expected.json +tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/stdout.expected +tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/fd01009e3310a4fd69199a796116c7c6.eprime.essence +tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/model.expected.json +tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/stdout.expected +tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/fd678aa87d9bd31e9a7b2c15ba98bf45.eprime.essence +tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/model.expected.json +tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/stdout.expected +tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/fd7b6f7ecedac668274924e6b8b11ac0.solution.essence +tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/model.expected.json +tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/fe212de553740bfdc730e0a8d309134b.solution.essence +tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/fe305e153612d5a71fc20d4fa69a948e.eprime.essence +tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/fe69fefccf202453d52ce4d1db22e655.essence +tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/fe774ea400594cb14dd3fa5110d42c82.essence +tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/fe7777e1ad2badafc794d13da8eddcf4.eprime.essence +tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/typecheck.expected +tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/fe94536b17f67b32662685867f8081e2.eprime.essence +tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/stdout.expected +tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/fe9faaf55302fb0443c460ecf2f7d426.solution.essence +tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/model.expected.json +tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/stdout.expected +tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/fec2abdead2802a7ba6dedf110d62af8.essence +tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/model.expected.json +tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/stdout.expected +tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/feed8f610e58923dd317fd57dfee37e8.essence +tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/model.expected.json +tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/ff12462023888e1e691c92627d7a1c53.essence +tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/ff226931c79ca27e68e71f211b4aa84e.eprime.essence +tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/typecheck.expected +tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/ff24366e88f4086c0e1b6a272319c4cf.essence +tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/ff245493fc8f9f5cb71ace3838fe38ce.eprime.essence +tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/ff52b10be7a6ca5288aab35423d864fe.solution.essence +tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/ff5a4c2b2d4b2d7988a7eb5334e625ac.essence +tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/ff8b241d52c3ebd4d986c5218030d318.essence +tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/stdout.expected +tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/ff9d4f6eb338fa49d2628bab60bf48ac.eprime.essence +tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/model.expected.json +tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/stdout.expected +tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/ffb32a0c4fd02d6181ed0120a2781cb4.essence +tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/model.expected.json +tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/stdout.expected +tests/parse_print/autogen-bilals-fixed/import.sh +tests/parse_print/autogen/289~1435114959_70/model.expected.json +tests/parse_print/autogen/289~1435114959_70/spec.essence +tests/parse_print/autogen/289~1435114959_70/stdout.expected +tests/parse_print/autogen/289~1435114959_70/typecheck.expected +tests/parse_print/autogen/315~1435148451_38/model.expected.json +tests/parse_print/autogen/315~1435148451_38/spec.essence +tests/parse_print/autogen/315~1435148451_38/stdout.expected +tests/parse_print/autogen/315~1435148451_38/typecheck.expected +tests/parse_print/autogen/316~final/model.expected.json +tests/parse_print/autogen/316~final/spec.essence +tests/parse_print/autogen/316~final/stdout.expected +tests/parse_print/autogen/316~final/typecheck.expected +tests/parse_print/autogen/317~1435132020_93/model.expected.json +tests/parse_print/autogen/317~1435132020_93/spec.essence +tests/parse_print/autogen/317~1435132020_93/stdout.expected +tests/parse_print/autogen/317~1435132020_93/typecheck.expected +tests/parse_print/autogen/318~final/model.expected.json +tests/parse_print/autogen/318~final/spec.essence +tests/parse_print/autogen/318~final/stdout.expected +tests/parse_print/autogen/318~final/typecheck.expected +tests/parse_print/autogen/319~1435138340_66/model.expected.json +tests/parse_print/autogen/319~1435138340_66/spec.essence +tests/parse_print/autogen/319~1435138340_66/stdout.expected +tests/parse_print/autogen/319~1435138340_66/typecheck.expected +tests/parse_print/autogen/320~final/model.expected.json +tests/parse_print/autogen/320~final/spec.essence +tests/parse_print/autogen/320~final/stdout.expected +tests/parse_print/autogen/320~final/typecheck.expected +tests/parse_print/autogen/321~1435140010_44/model.expected.json +tests/parse_print/autogen/321~1435140010_44/spec.essence +tests/parse_print/autogen/321~1435140010_44/stdout.expected +tests/parse_print/autogen/321~1435140010_44/typecheck.expected +tests/parse_print/autogen/322~final/model.expected.json +tests/parse_print/autogen/322~final/spec.essence +tests/parse_print/autogen/322~final/stdout.expected +tests/parse_print/autogen/322~final/typecheck.expected +tests/parse_print/autogen/325~1435147026_26/model.expected.json +tests/parse_print/autogen/325~1435147026_26/spec.essence +tests/parse_print/autogen/325~1435147026_26/stdout.expected +tests/parse_print/autogen/325~1435147026_26/typecheck.expected +tests/parse_print/autogen/326~final/model.expected.json +tests/parse_print/autogen/326~final/spec.essence +tests/parse_print/autogen/326~final/stdout.expected +tests/parse_print/autogen/326~final/typecheck.expected +tests/parse_print/autogen/345~1435141546_33/model.expected.json +tests/parse_print/autogen/345~1435141546_33/spec.essence +tests/parse_print/autogen/345~1435141546_33/stdout.expected +tests/parse_print/autogen/345~1435141546_33/typecheck.expected +tests/parse_print/autogen/396~1435169954_27/model.expected.json +tests/parse_print/autogen/396~1435169954_27/spec.essence +tests/parse_print/autogen/396~1435169954_27/stdout.expected +tests/parse_print/autogen/396~1435169954_27/typecheck.expected +tests/parse_print/autogen/398~1435194081_33/model.expected.json +tests/parse_print/autogen/398~1435194081_33/spec.essence +tests/parse_print/autogen/398~1435194081_33/stdout.expected +tests/parse_print/autogen/398~1435194081_33/typecheck.expected +tests/parse_print/autogen/427~1435209539_80/model.expected.json +tests/parse_print/autogen/427~1435209539_80/spec.essence +tests/parse_print/autogen/427~1435209539_80/stdout.expected +tests/parse_print/autogen/427~1435209539_80/typecheck.expected +tests/parse_print/autogen/441~1435208191_85/model.expected.json +tests/parse_print/autogen/441~1435208191_85/spec.essence +tests/parse_print/autogen/441~1435208191_85/stdout.expected +tests/parse_print/autogen/441~1435208191_85/typecheck.expected +tests/parse_print/autogen/442~final/model.expected.json +tests/parse_print/autogen/442~final/spec.essence +tests/parse_print/autogen/442~final/stdout.expected +tests/parse_print/autogen/442~final/typecheck.expected +tests/parse_print/autogen/445~1435212982_68/model.expected.json +tests/parse_print/autogen/445~1435212982_68/spec.essence +tests/parse_print/autogen/445~1435212982_68/stdout.expected +tests/parse_print/autogen/445~1435212982_68/typecheck.expected +tests/parse_print/autogen/446~final/model.expected.json +tests/parse_print/autogen/446~final/spec.essence +tests/parse_print/autogen/446~final/stdout.expected +tests/parse_print/autogen/446~final/typecheck.expected +tests/parse_print/autogen/447~1435213364_36/model.expected.json +tests/parse_print/autogen/447~1435213364_36/spec.essence +tests/parse_print/autogen/447~1435213364_36/stdout.expected +tests/parse_print/autogen/447~1435213364_36/typecheck.expected +tests/parse_print/autogen/448~final/model.expected.json +tests/parse_print/autogen/448~final/spec.essence +tests/parse_print/autogen/448~final/stdout.expected +tests/parse_print/autogen/448~final/typecheck.expected +tests/parse_print/autogen/460~1435196486_42/model.expected.json +tests/parse_print/autogen/460~1435196486_42/spec.essence +tests/parse_print/autogen/460~1435196486_42/stdout.expected +tests/parse_print/autogen/460~1435196486_42/typecheck.expected +tests/parse_print/autogen/558~1435585187_20/model.expected.json +tests/parse_print/autogen/558~1435585187_20/spec.essence +tests/parse_print/autogen/558~1435585187_20/stdout.expected +tests/parse_print/autogen/558~1435585187_20/typecheck.expected +tests/parse_print/autogen/560~1436548014_12/model.expected.json +tests/parse_print/autogen/560~1436548014_12/spec.essence +tests/parse_print/autogen/560~1436548014_12/stdout.expected +tests/parse_print/autogen/560~1436548014_12/typecheck.expected +tests/parse_print/autogen/561~final/model.expected.json +tests/parse_print/autogen/561~final/spec.essence +tests/parse_print/autogen/561~final/stdout.expected +tests/parse_print/autogen/561~final/typecheck.expected +tests/parse_print/autogen/562~1436556139_51/model.expected.json +tests/parse_print/autogen/562~1436556139_51/spec.essence +tests/parse_print/autogen/562~1436556139_51/stdout.expected +tests/parse_print/autogen/562~1436556139_51/typecheck.expected +tests/parse_print/autogen/563~final/model.expected.json +tests/parse_print/autogen/563~final/spec.essence +tests/parse_print/autogen/563~final/stdout.expected +tests/parse_print/autogen/563~final/typecheck.expected +tests/parse_print/autogen/605~1436581770_45/model.expected.json +tests/parse_print/autogen/605~1436581770_45/spec.essence +tests/parse_print/autogen/605~1436581770_45/stdout.expected +tests/parse_print/autogen/605~1436581770_45/typecheck.expected +tests/parse_print/autogen/613~1436580506_52/model.expected.json +tests/parse_print/autogen/613~1436580506_52/spec.essence +tests/parse_print/autogen/613~1436580506_52/stdout.expected +tests/parse_print/autogen/613~1436580506_52/typecheck.expected +tests/parse_print/autogen/614~final/model.expected.json +tests/parse_print/autogen/614~final/spec.essence +tests/parse_print/autogen/614~final/stdout.expected +tests/parse_print/autogen/614~final/typecheck.expected +tests/parse_print/autogen/615~1436587408_39/model.expected.json +tests/parse_print/autogen/615~1436587408_39/spec.essence +tests/parse_print/autogen/615~1436587408_39/stdout.expected +tests/parse_print/autogen/615~1436587408_39/typecheck.expected +tests/parse_print/autogen/616~final/model.expected.json +tests/parse_print/autogen/616~final/spec.essence +tests/parse_print/autogen/616~final/stdout.expected +tests/parse_print/autogen/616~final/typecheck.expected +tests/parse_print/autogen/628~final/model.expected.json +tests/parse_print/autogen/628~final/spec.essence +tests/parse_print/autogen/628~final/stdout.expected +tests/parse_print/autogen/628~final/typecheck.expected +tests/parse_print/autogen/633~final/model.expected.json +tests/parse_print/autogen/633~final/spec.essence +tests/parse_print/autogen/633~final/stdout.expected +tests/parse_print/autogen/633~final/typecheck.expected +tests/parse_print/autogen/637~final/model.expected.json +tests/parse_print/autogen/637~final/spec.essence +tests/parse_print/autogen/637~final/stdout.expected +tests/parse_print/autogen/637~final/typecheck.expected +tests/parse_print/autogen/646~final/model.expected.json +tests/parse_print/autogen/646~final/spec.essence +tests/parse_print/autogen/646~final/stdout.expected +tests/parse_print/autogen/646~final/typecheck.expected +tests/parse_print/autogen/653~final/model.expected.json +tests/parse_print/autogen/653~final/spec.essence +tests/parse_print/autogen/653~final/stdout.expected +tests/parse_print/autogen/653~final/typecheck.expected +tests/parse_print/autogen/678~final/model.expected.json +tests/parse_print/autogen/678~final/spec.essence +tests/parse_print/autogen/678~final/stdout.expected +tests/parse_print/autogen/678~final/typecheck.expected +tests/parse_print/autogen/730~1439082038_16/model.expected.json +tests/parse_print/autogen/730~1439082038_16/spec.essence +tests/parse_print/autogen/730~1439082038_16/stdout.expected +tests/parse_print/autogen/730~1439082038_16/typecheck.expected +tests/parse_print/autogen/731~final/model.expected.json +tests/parse_print/autogen/731~final/spec.essence +tests/parse_print/autogen/731~final/stdout.expected +tests/parse_print/autogen/731~final/typecheck.expected +tests/parse_print/autogen/768~1439583525_36/model.expected.json +tests/parse_print/autogen/768~1439583525_36/spec.essence +tests/parse_print/autogen/768~1439583525_36/stdout.expected +tests/parse_print/autogen/768~1439583525_36/typecheck.expected +tests/parse_print/autogen/769~final/model.expected.json +tests/parse_print/autogen/769~final/spec.essence +tests/parse_print/autogen/769~final/stdout.expected +tests/parse_print/autogen/769~final/typecheck.expected +tests/parse_print/basic/typeErrorInDecl/model.expected.json +tests/parse_print/basic/typeErrorInDecl/stdout.expected +tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence +tests/parse_print/basic/typeErrorInDecl/typecheck.expected +tests/parse_print/heuristic/heuristic_conflict/heuristic_conflict.essence +tests/parse_print/heuristic/heuristic_conflict/model.expected.json +tests/parse_print/heuristic/heuristic_conflict/stdout.expected +tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence +tests/parse_print/heuristic/heuristic_magic/model.expected.json +tests/parse_print/heuristic/heuristic_magic/stdout.expected +tests/parse_print/heuristic/heuristic_magic/typecheck.expected +tests/parse_print/heuristic/heuristic_sdf/heuristic_sdf.essence +tests/parse_print/heuristic/heuristic_sdf/model.expected.json +tests/parse_print/heuristic/heuristic_sdf/stdout.expected +tests/parse_print/heuristic/heuristic_srf/heuristic_srf.essence +tests/parse_print/heuristic/heuristic_srf/model.expected.json +tests/parse_print/heuristic/heuristic_srf/stdout.expected +tests/parse_print/heuristic/heuristic_static/heuristic_static.essence +tests/parse_print/heuristic/heuristic_static/model.expected.json +tests/parse_print/heuristic/heuristic_static/stdout.expected +tests/parse_print/issues/130/130.essence +tests/parse_print/issues/130/model.expected.json +tests/parse_print/issues/130/stdout.expected +tests/parse_print/issues/130/typecheck.expected +tests/parse_print/issues/133/1/133_1.essence +tests/parse_print/issues/133/1/stderr.expected +tests/parse_print/issues/133/2/133_2.essence +tests/parse_print/issues/133/2/stderr.expected +tests/parse_print/issues/133/3/133_3.essence +tests/parse_print/issues/133/3/stderr.expected +tests/parse_print/issues/133/4/133_4.essence +tests/parse_print/issues/133/4/model.expected.json +tests/parse_print/issues/133/4/stdout.expected +tests/parse_print/issues/207/207.essence +tests/parse_print/issues/207/model.expected.json +tests/parse_print/issues/207/stdout.expected +tests/parse_print/issues/207/typecheck.expected +tests/parse_print/issues/352/find/find.essence +tests/parse_print/issues/352/find/model.expected.json +tests/parse_print/issues/352/find/stdout.expected +tests/parse_print/issues/352/find/typecheck.expected +tests/parse_print/issues/361/1/361_1.essence +tests/parse_print/issues/361/1/model.expected.json +tests/parse_print/issues/361/1/stdout.expected +tests/parse_print/issues/361/1/typecheck.expected +tests/parse_print/issues/361/2/361_2.essence +tests/parse_print/issues/361/2/stderr.expected +tests/parse_print/issues/363/1/363_1.essence +tests/parse_print/issues/363/1/stderr.expected +tests/parse_print/issues/363/2/363_2.essence +tests/parse_print/issues/363/2/stderr.expected +tests/parse_print/issues/425/1/425.essence +tests/parse_print/issues/425/1/stderr.expected +tests/parse_print/issues/425/2/425.essence +tests/parse_print/issues/425/2/stderr.expected +tests/parse_print/parsing01/parsing01.essence +tests/parse_print/parsing01/stderr.expected +tests/parse_print/parsing02/model.expected.json +tests/parse_print/parsing02/parsing02.essence +tests/parse_print/parsing02/stdout.expected +tests/parse_print/parsing03_nonassoc/nonassoc.essence +tests/parse_print/parsing03_nonassoc/stderr.expected +tests/parse_print/random_perturb/README.md +tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence +tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected +tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence +tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected +tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence +tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected +tests/parse_print/random_perturb/enum_liberated/change-04/change-04.essence +tests/parse_print/random_perturb/enum_liberated/change-04/model.expected.json +tests/parse_print/random_perturb/enum_liberated/change-04/stdout.expected +tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence +tests/parse_print/random_perturb/enum_liberated/change-05/model.expected.json +tests/parse_print/random_perturb/enum_liberated/change-05/stdout.expected +tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected +tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence +tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected +tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence +tests/parse_print/random_perturb/enum_liberated/change-07/model.expected.json +tests/parse_print/random_perturb/enum_liberated/change-07/stdout.expected +tests/parse_print/random_perturb/enum_liberated/change-07/typecheck.expected +tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence +tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected +tests/parse_print/random_perturb/enum_liberated/change-09/change-09.essence +tests/parse_print/random_perturb/enum_liberated/change-09/model.expected.json +tests/parse_print/random_perturb/enum_liberated/change-09/stdout.expected +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence +tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence +tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence +tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence +tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence +tests/parse_print/random_perturb/enum_liberated/delete-04/model.expected.json +tests/parse_print/random_perturb/enum_liberated/delete-04/stdout.expected +tests/parse_print/random_perturb/enum_liberated/delete-04/typecheck.expected +tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence +tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence +tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence +tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence +tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence +tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence +tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected +tests/parse_print/random_perturb/enum_liberated/enum_liberated.essence +tests/parse_print/random_perturb/enum_liberated/model.expected.json +tests/parse_print/random_perturb/enum_liberated/stdout.expected +tests/parse_print/random_perturb/gen.hs +tests/parse_print/random_perturb/new.sh +tests/parse_print/random_perturb/set01/change-01/change-01.essence +tests/parse_print/random_perturb/set01/change-01/model.expected.json +tests/parse_print/random_perturb/set01/change-01/stdout.expected +tests/parse_print/random_perturb/set01/change-02/change-02.essence +tests/parse_print/random_perturb/set01/change-02/stderr.expected +tests/parse_print/random_perturb/set01/change-03/change-03.essence +tests/parse_print/random_perturb/set01/change-03/stderr.expected +tests/parse_print/random_perturb/set01/change-04/change-04.essence +tests/parse_print/random_perturb/set01/change-04/stderr.expected +tests/parse_print/random_perturb/set01/change-05/change-05.essence +tests/parse_print/random_perturb/set01/change-05/stderr.expected +tests/parse_print/random_perturb/set01/change-06/change-06.essence +tests/parse_print/random_perturb/set01/change-06/stderr.expected +tests/parse_print/random_perturb/set01/change-07/change-07.essence +tests/parse_print/random_perturb/set01/change-07/stderr.expected +tests/parse_print/random_perturb/set01/change-08/change-08.essence +tests/parse_print/random_perturb/set01/change-08/stderr.expected +tests/parse_print/random_perturb/set01/change-09/change-09.essence +tests/parse_print/random_perturb/set01/change-09/stderr.expected +tests/parse_print/random_perturb/set01/change-10/change-10.essence +tests/parse_print/random_perturb/set01/change-10/stderr.expected +tests/parse_print/random_perturb/set01/delete-01/delete-01.essence +tests/parse_print/random_perturb/set01/delete-01/stderr.expected +tests/parse_print/random_perturb/set01/delete-02/delete-02.essence +tests/parse_print/random_perturb/set01/delete-02/stderr.expected +tests/parse_print/random_perturb/set01/delete-03/delete-03.essence +tests/parse_print/random_perturb/set01/delete-03/stderr.expected +tests/parse_print/random_perturb/set01/delete-04/delete-04.essence +tests/parse_print/random_perturb/set01/delete-04/stderr.expected +tests/parse_print/random_perturb/set01/delete-05/delete-05.essence +tests/parse_print/random_perturb/set01/delete-05/stderr.expected +tests/parse_print/random_perturb/set01/delete-06/delete-06.essence +tests/parse_print/random_perturb/set01/delete-06/stderr.expected +tests/parse_print/random_perturb/set01/delete-07/delete-07.essence +tests/parse_print/random_perturb/set01/delete-07/stderr.expected +tests/parse_print/random_perturb/set01/delete-08/delete-08.essence +tests/parse_print/random_perturb/set01/delete-08/stderr.expected +tests/parse_print/random_perturb/set01/delete-09/delete-09.essence +tests/parse_print/random_perturb/set01/delete-09/stderr.expected +tests/parse_print/random_perturb/set01/delete-10/delete-10.essence +tests/parse_print/random_perturb/set01/delete-10/stderr.expected +tests/parse_print/random_perturb/set01/model.expected.json +tests/parse_print/random_perturb/set01/set01.essence +tests/parse_print/random_perturb/set01/stdout.expected +tests/parse_print/syntax_test/branching/branching.essence +tests/parse_print/syntax_test/branching/model.expected.json +tests/parse_print/syntax_test/branching/stdout.expected +tests/parse_print/syntax_test/declarations/enums/givens/givens.essence +tests/parse_print/syntax_test/declarations/enums/givens/model.expected.json +tests/parse_print/syntax_test/declarations/enums/givens/stdout.expected +tests/parse_print/syntax_test/declarations/enums/lettings/lettings.essence +tests/parse_print/syntax_test/declarations/enums/lettings/model.expected.json +tests/parse_print/syntax_test/declarations/enums/lettings/stdout.expected +tests/parse_print/syntax_test/declarations/enums/lettings/typecheck.expected +tests/parse_print/syntax_test/declarations/finds/finds.essence +tests/parse_print/syntax_test/declarations/finds/model.expected.json +tests/parse_print/syntax_test/declarations/finds/stdout.expected +tests/parse_print/syntax_test/declarations/givens/givens.essence +tests/parse_print/syntax_test/declarations/givens/model.expected.json +tests/parse_print/syntax_test/declarations/givens/stdout.expected +tests/parse_print/syntax_test/declarations/lettings/domain/lettings.essence +tests/parse_print/syntax_test/declarations/lettings/domain/model.expected.json +tests/parse_print/syntax_test/declarations/lettings/domain/stdout.expected +tests/parse_print/syntax_test/declarations/lettings/expression/lettings.essence +tests/parse_print/syntax_test/declarations/lettings/expression/model.expected.json +tests/parse_print/syntax_test/declarations/lettings/expression/stdout.expected +tests/parse_print/syntax_test/declarations/unnamed/model.expected.json +tests/parse_print/syntax_test/declarations/unnamed/stdout.expected +tests/parse_print/syntax_test/declarations/unnamed/unnamed.essence +tests/parse_print/syntax_test/domains/bool/bool.essence +tests/parse_print/syntax_test/domains/bool/model.expected.json +tests/parse_print/syntax_test/domains/bool/stdout.expected +tests/parse_print/syntax_test/domains/enum/enum.essence +tests/parse_print/syntax_test/domains/enum/model.expected.json +tests/parse_print/syntax_test/domains/enum/stdout.expected +tests/parse_print/syntax_test/domains/function/function.essence +tests/parse_print/syntax_test/domains/function/model.expected.json +tests/parse_print/syntax_test/domains/function/stdout.expected +tests/parse_print/syntax_test/domains/int/int.essence +tests/parse_print/syntax_test/domains/int/model.expected.json +tests/parse_print/syntax_test/domains/int/stdout.expected +tests/parse_print/syntax_test/domains/matrix/matrix.essence +tests/parse_print/syntax_test/domains/matrix/model.expected.json +tests/parse_print/syntax_test/domains/matrix/stdout.expected +tests/parse_print/syntax_test/domains/mset/model.expected.json +tests/parse_print/syntax_test/domains/mset/mset.essence +tests/parse_print/syntax_test/domains/mset/stdout.expected +tests/parse_print/syntax_test/domains/mset/typecheck.expected +tests/parse_print/syntax_test/domains/partition/model.expected.json +tests/parse_print/syntax_test/domains/partition/partition.essence +tests/parse_print/syntax_test/domains/partition/stdout.expected +tests/parse_print/syntax_test/domains/record/model.expected.json +tests/parse_print/syntax_test/domains/record/record.essence +tests/parse_print/syntax_test/domains/record/stdout.expected +tests/parse_print/syntax_test/domains/relation/model.expected.json +tests/parse_print/syntax_test/domains/relation/relation.essence +tests/parse_print/syntax_test/domains/relation/stdout.expected +tests/parse_print/syntax_test/domains/sequence/model.expected.json +tests/parse_print/syntax_test/domains/sequence/sequence.essence +tests/parse_print/syntax_test/domains/sequence/stdout.expected +tests/parse_print/syntax_test/domains/sequence/typecheck.expected +tests/parse_print/syntax_test/domains/set/model.expected.json +tests/parse_print/syntax_test/domains/set/set.essence +tests/parse_print/syntax_test/domains/set/stdout.expected +tests/parse_print/syntax_test/domains/tuple/model.expected.json +tests/parse_print/syntax_test/domains/tuple/stdout.expected +tests/parse_print/syntax_test/domains/tuple/tuple.essence +tests/parse_print/syntax_test/domains/unnamed/model.expected.json +tests/parse_print/syntax_test/domains/unnamed/stdout.expected +tests/parse_print/syntax_test/domains/unnamed/unnamed.essence +tests/parse_print/syntax_test/domains/variant/model.expected.json +tests/parse_print/syntax_test/domains/variant/stdout.expected +tests/parse_print/syntax_test/domains/variant/variant.essence +tests/parse_print/syntax_test/expressions/comprehensions/comprehension.essence +tests/parse_print/syntax_test/expressions/comprehensions/model.expected.json +tests/parse_print/syntax_test/expressions/comprehensions/stdout.expected +tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected +tests/parse_print/syntax_test/expressions/literals/literals.essence +tests/parse_print/syntax_test/expressions/literals/model.expected.json +tests/parse_print/syntax_test/expressions/literals/stdout.expected +tests/parse_print/syntax_test/expressions/literals/typecheck.expected +tests/parse_print/syntax_test/expressions/operators/model.expected.json +tests/parse_print/syntax_test/expressions/operators/operators.essence +tests/parse_print/syntax_test/expressions/operators/stdout.expected +tests/parse_print/syntax_test/expressions/operators/typecheck.expected +tests/parse_print/syntax_test/expressions/quantifications/model.expected.json +tests/parse_print/syntax_test/expressions/quantifications/qunatifications.essence +tests/parse_print/syntax_test/expressions/quantifications/stdout.expected +tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected diff --git a/tests/genAllFiles.sh b/tests/genAllFiles.sh new file mode 100644 index 0000000000..d5f9d04db2 --- /dev/null +++ b/tests/genAllFiles.sh @@ -0,0 +1,2 @@ +#!/bin/bash +git ls-tree --full-tree --name-only -r HEAD > allfiles.txt \ No newline at end of file From c4be2d79b805a5b36245a6891906c09b3c9814cc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 28 Nov 2022 15:20:20 +0000 Subject: [PATCH 103/378] Fixed parser being intolerant --- conjure-cp.cabal | 2 +- src/Conjure/Language/AST/ASTParser.hs | 133 +++++++++++++++----------- src/Conjure/Language/AST/Helpers.hs | 13 ++- src/Conjure/Language/Parser.hs | 3 +- src/Conjure/UI/ErrorDisplay.hs | 2 +- 5 files changed, 92 insertions(+), 61 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 3f79c91581..e9bf45c37d 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -273,7 +273,7 @@ Library , integer-gmp -- >= 4.1.1 because of sepEndBy bugfixes -- < 5 because megaparsec-5 is backwards incompatible - , megaparsec ^>= 9.2.2 + , megaparsec ^>= 9.3.0 , mtl , parallel-io , pipes diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 351c4dcefb..58024a5eea 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -23,15 +23,17 @@ import Language.Haskell.TH.PprLib (rparen) import Conjure.Language.Attributes (allAttributLexemes) import Data.Sequence (Seq) import Text.PrettyPrint.HughesPJ (text) +import Text.Megaparsec.Debug (dbg) data ParserError = ParserError Doc deriving (Show) runASTParser :: Parser a -> ETokenStream -> Either ParserError a -runASTParser p str = case runParser p "Parser" str of - Left peb -> Left $ ParserError . text $ errorBundlePretty peb - Right res -> Right res +runASTParser p str = + case runParser (evalStateT p def) "parser" str of + Left peb -> Left $ ParserError . text $ errorBundlePretty peb + Right res -> Right res parseProgram :: Parser ProgramTree parseProgram = do @@ -52,7 +54,7 @@ parseTopLevels :: Parser [StatementNode] parseTopLevels = manyTill parseTopLevel pEnding parseTopLevel :: Parser StatementNode -parseTopLevel = +parseTopLevel = do parseDeclaration <|> parseBranching @@ -78,7 +80,7 @@ parseBranching = do parseSuchThat :: Parser StatementNode -parseSuchThat = do +parseSuchThat = do lSuch <- need L_such lThat <- want L_that exprs <- commaList1 parseExpression @@ -188,10 +190,19 @@ pEnding = do --------------------------------------- +guardExpressionOverlap :: Parser () +guardExpressionOverlap = do + off <- getOffset + lastOffset <- gets lastMissingExpOffset + -- traceC $ "DME query:" ++ show off ++ "," ++ show lastOffset + guard $ off > lastOffset + -- traceC $ "DME used:" ++ show off + modify (\x->x{lastMissingExpOffset=off}) + parseExpression :: Parser ExpressionNode -parseExpression = - parseOperator - <|> parseAtomicExpression +parseExpression = do + (parseOperator) + <|> (parseAtomicExpression) <|> (MissingExpressionNode <$> makeMissing (L_Missing "expression")) parseExpressionStrict :: Parser ExpressionNode -- can fail parseExpressionStrict = do @@ -204,17 +215,18 @@ parseAtomicExpression :: Parser ExpressionNode parseAtomicExpression = do try $ choice - [ - parseSpecialCase - , Literal <$> parseLiteral - , parseFunction - , parseAttributeAsConstraint - , IdentifierNode <$> parseIdentifierStrict - , MetaVarExpr <$> parseMetaVar - , ParenExpression <$> parseParenExpression parensPair - , AbsExpression <$> parseAbsExpression - , QuantificationExpr <$> parseQuantificationStatement - , DomainExpression <$> parseDomainExpression + [ + parseSpecialCase + , Literal <$> parseLiteral + , parseFunction + , parseAttributeAsConstraint + , IdentifierNode <$> parseIdentifierStrict + , MetaVarExpr <$> parseMetaVar + , ParenExpression <$> parseParenExpression parensPair + , AbsExpression <$> parseAbsExpression + , QuantificationExpr <$> parseQuantificationStatement + , DomainExpression <$> parseDomainExpression + , guardExpressionOverlap >> MissingExpressionNode <$> (makeMissing $ L_Missing "Expr") ] @@ -467,7 +479,7 @@ parseComprehensionCondition = do -- Current implementation is hacky parseOperator :: Parser ExpressionNode -parseOperator = try (makeExprParser parseAtomicExpressionAndFixes operatorTable "Expression") +parseOperator = try (makeExprParser parseAtomicExpressionAndFixes operatorTable "Expression") parseFunction :: Parser ExpressionNode parseFunction = try $ do @@ -490,7 +502,7 @@ parseAttributeAsConstraint = do parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) -parsePostfixOp = do +parsePostfixOp = do op <- try $ choice @@ -552,7 +564,7 @@ parseAtomicExpressionAndFixes = try $ do return $ foldr1 (.) (reverse fs) withPrefix x = try x <|> do f <- prefixes; i <- x; return $ f i withPostfix x = do i <- x; guard $ not $ isMissing i ; mf <- optional postfixes; return $ fromMaybe id mf i - withPrefix (withPostfix parseAtomicExpression) "expression" + withPrefix (withPostfix parseAtomicExpression) "expression" parsePrefixes :: Parser (ExpressionNode -> ExpressionNode) @@ -656,7 +668,7 @@ parseMatrix = do lMatrix <- need L_matrix lIndexed <- want L_indexed lBy <- want L_by - let indexByNode = case (lIndexed,lBy) of + let indexByNode = case (lIndexed,lBy) of (MissingToken _,MissingToken _) -> Nothing _ -> Just (IndexedByNode lIndexed lBy) members <- squareBracketList $ commaList parseDomain @@ -735,7 +747,7 @@ parseNameDomain = do name <- parseIdentifier lColon <- want L_Colon domain <- parseDomain - let definedDomain = case (lColon,domain) of + let definedDomain = case (lColon,domain) of (a,b) | isMissing a && isMissing b -> Nothing (a,b) -> Just (a,b) return $ NameDomainNode name definedDomain @@ -806,7 +818,7 @@ example s = do putStrLn $ "reformed" putStrLn $ concatMap reform ets let stream = ETokenStream txt ets - case runParser parseProgram "" stream of + case runParser (evalStateT parseProgram def) "parser" stream of Left peb -> putStrLn "Parser error: " >> (putStrLn $ errorBundlePretty peb) Right pt -> do putStrLn $show pt @@ -822,33 +834,44 @@ exampleFile p = do Just s -> example s return () - -parsePrint :: String -> IO () -parsePrint text = do - toks <- parseAndRevalidate (pack text) eLex (concatMap reform) text - case toks of - Left (a,b)-> do - putStrLn "Lexer wasn't reversible" - showDiff a b - Right ets -> putStrLn "Lexer success" >> do - tree <- parseAndRevalidate (ETokenStream (pack text) ets) parseProgram (\v -> reformList (flatten v :: Seq ETok) ) text - case tree of - Left (a,b) -> do - putStrLn "Parser wasn't reversible:" - showDiff a b - Right _ -> putStrLn "Success" - where - showDiff a b = do - putStrLn "got vvvvvvvvv" - putStrLn a - putStrLn "expected vvvvvvvvv" - putStrLn b - - -parseAndRevalidate ::(VisualStream a,TraversableStream a,Stream a,Show b) => a -> ParsecT Void a Identity b -> (b -> String) -> String -> IO (Either (String,String) b) -parseAndRevalidate src p f ref = do - case runParser p "" src of - Left _ -> do - putStrLn "Parse error" - parseTest p src >> empty - Right res -> return (if f res == ref then Right res else Left (f res,ref)) \ No newline at end of file +contextRegion :: String -> Parser a -> Parser a +contextRegion l m = do + prev <- gets context + modify (\x->x{context=l:prev}) + r <- m + modify (\x->x{context=prev}) + return r + +traceC :: String -> Parser () +traceC msg = do + ctx <- gets context + traceM $ intercalate "." (reverse ctx) ++ msg +-- parsePrint :: String -> IO () +-- parsePrint text = do +-- toks <- parseAndRevalidate (pack text) eLex (concatMap reform) text +-- case toks of +-- Left (a,b)-> do +-- putStrLn "Lexer wasn't reversible" +-- showDiff a b +-- Right ets -> putStrLn "Lexer success" >> do +-- tree <- parseAndRevalidate (ETokenStream (pack text) ets) parseProgram (\v -> reformList (flatten v :: Seq ETok) ) text +-- case tree of +-- Left (a,b) -> do +-- putStrLn "Parser wasn't reversible:" +-- showDiff a b +-- Right _ -> putStrLn "Success" +-- where +-- showDiff a b = do +-- putStrLn "got vvvvvvvvv" +-- putStrLn a +-- putStrLn "expected vvvvvvvvv" +-- putStrLn b + + +-- parseAndRevalidate ::(VisualStream a,TraversableStream a,Stream a,Show b) => a -> ParsecT Void a (StateT ParserState Identity) b -> (b -> String) -> String -> IO (Either (String,String) b) +-- parseAndRevalidate src p f ref = do +-- case evalState (runParserT p "" src) def of +-- Left _ -> do +-- putStrLn "Parse error" +-- parseTest p src >> empty +-- Right res -> return (if f res == ref then Right res else Left (f res,ref)) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index a9ecf33b1d..236d50dc83 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -7,9 +7,16 @@ import Conjure.Prelude hiding (many) import qualified Data.Set as Set import Data.Void import Text.Megaparsec - -type Parser = Parsec Void ETokenStream - +import Text.Megaparsec.Debug (MonadParsecDbg(dbg)) + +type Parser = StateT ParserState (Parsec Void ETokenStream) +data ParserState = ParserState { + lastMissingExpOffset::Int, + context :: [String] +} + deriving Show +instance Default ParserState where + def = ParserState 0 [] eSymbol :: Lexeme -> Parser ETok eSymbol lx = token test Set.empty "Symbol " ++ show lx where diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 39f4f10903..efea901c05 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -50,9 +50,10 @@ import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) import Text.PrettyPrint (text) import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) +import Conjure.Language.AST.Helpers (ParserState) -type Pipeline a b = (Parsec Void ETokenStream a,a -> V.ValidatorS b,Bool) +type Pipeline a b = ( (StateT ParserState (Parsec Void ETokenStream)) a ,a -> V.ValidatorS b,Bool) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 1e54dc61f9..6a4803abd6 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -97,7 +97,7 @@ val s = do let lexed = parseMaybe eLex txt let stream = ETokenStream txt $ fromMaybe other lexed -- parseTest parseProgram stream - let progStruct = runParser parseProgram "TEST" stream + let progStruct = (runParser (evalStateT parseProgram def) "TEST" stream) case progStruct of Left _ -> putStrLn "error" From dc10de49da0316eb4816b58708efa909fd78b563 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 28 Nov 2022 15:40:17 +0000 Subject: [PATCH 104/378] Added handling of non-text files to tests --- src/Conjure/Prelude.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index e0ec2419d9..b0b39cf78d 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -138,7 +138,7 @@ import Data.Foldable as X ( Foldable, mapM_, forM_, sequence_, fold, foldMap import Data.Traversable as X ( Traversable, mapM, forM, sequence ) import System.IO as X ( FilePath, IO, putStr, putStrLn, print, writeFile, appendFile, getLine ) -import System.IO.Error ( isDoesNotExistError ) +import System.IO.Error ( isDoesNotExistError, isUserError, ioeGetErrorType ) import Control.Exception as X ( catch, throwIO, SomeException ) import Data.Proxy as X ( Proxy(..) ) @@ -227,6 +227,7 @@ import System.TimeIt as X ( timeIt, timeItNamed ) import Debug.Trace as X ( trace, traceM ) import Data.Void (Void) +import GHC.IO.Exception (IOErrorType(InvalidArgument)) tracing :: Show a => String -> a -> a @@ -602,8 +603,9 @@ readFileIfExists :: FilePath -> IO (Maybe String) readFileIfExists f = (Just <$> readFile f) `catch` handleExists where handleExists e + | ioeGetErrorType e == InvalidArgument = return Nothing -- handle non-text files gracefully | isDoesNotExistError e = return Nothing - | otherwise = throwIO e + | otherwise = trace (show e) $ throwIO e removeDirectoryIfExists :: FilePath -> IO () removeDirectoryIfExists f = removeDirectoryRecursive f `catch` handleExists From 5a30da431a6111aacf946029b5f7f41f8602472e Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 29 Nov 2022 14:58:14 +0000 Subject: [PATCH 105/378] Adding names to symbol regions --- src/Conjure/Language/Validator.hs | 86 +++++++++++++++++++------------ 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 2c281b4a4e..6c8c340f2b 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -160,14 +160,15 @@ data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion data RegionInfo = RegionInfo { rRegion :: DiagnosticRegion, rType :: Type, + rText :: Text, rDeclaration :: DeclarationType } deriving Show -mkDeclaration :: DiagnosticRegion -> Typed a -> RegionInfo -mkDeclaration r (Typed t _) = RegionInfo r t Definition +mkDeclaration :: DiagnosticRegion -> Text -> Typed a -> RegionInfo +mkDeclaration r n (Typed t _) = RegionInfo r t n Definition -mkLiteral :: DiagnosticRegion -> Typed a -> RegionInfo -mkLiteral r (Typed t _) = RegionInfo r t LiteralDecl +mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo +mkLiteral r n (Typed t _) = RegionInfo r t n LiteralDecl data ValidatorState = ValidatorState { @@ -308,7 +309,7 @@ validateHeuristicStatement lt exp = do checkSymbols [lt] h <- case exp of IdentifierNode nn@(NameNode (RealToken _ (ETok{lexeme=(LIdentifier nm)}))) -> do - if nm `elem` validHeuristics then + if nm `elem` validHeuristics then return $ pure [SearchHeuristic (Name nm)] else invalid $ symbolRegion nn (SemanticError $ T.concat ["Invalid heuristic " , nm , " Expected one of: ", (pack $ show validHeuristics )]) @@ -321,7 +322,7 @@ tCondition (Typed TypeAny _) = pure () tCondition (Typed TypeBool _) = pure () tCondition (Typed (TypeMatrix _ TypeBool) _) = pure () tCondition (Typed (TypeList TypeBool) _) = pure () -tCondition t = contextTypeError $ ComplexTypeError "Bool or [Bool]" $ typeOf_ t +tCondition t = contextTypeError $ ComplexTypeError "Bool or [Bool]" $ typeOf_ t validateWhereStatement :: WhereStatementNode -> ValidatorS [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do @@ -379,7 +380,7 @@ validateGiven (GivenStatementNode idents l1 domain) = checkSymbols [l1] names <- validateNameList idents (dType, dom) <- typeSplit <$> validateDomain domain - let declarations = map (flip mkDeclaration (Typed TypeAny 1) . fst) names + let declarations = [(mkDeclaration r n (Typed dType 1)) | (r, Name n) <- names] mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x,(r,False,dType)) ) names return $ [ FindOrGiven Given nm dom|(_,nm) <- names ] @@ -397,6 +398,7 @@ validateFind (FindStatementNode names colon domain) = do names' <- validateNameList names (dType, dom) <- typeSplit <$> validateDomain domain mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' + mapM_ addRegion [(mkDeclaration r n (Typed dType 1)) | (r, Name n) <- names'] return $ [ FindOrGiven Find nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> ValidatorS [Declaration] @@ -411,31 +413,33 @@ validateLettingAssignment names (LettingExpr en) = do expr <- validateExpression en setContextFrom en let (t,e) = typeSplit expr - let declarations = map (\(r,_)->mkDeclaration r expr) names + let declarations = [mkDeclaration r n (Typed t 1) |(r, Name n) <- names] mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names return $ [Letting n e | (_,n) <- names] validateLettingAssignment names (LettingDomain lt dn) = do checkSymbols [lt] (tDomain,domain) <- typeSplit <$> validateDomain dn - let declarations = map (\(r,_)->mkDeclaration r (Typed tDomain ())) names + let declarations = [ mkDeclaration r n (Typed tDomain ()) |(r, Name n) <- names] mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names return $ [Letting n (Domain domain)| (_,n) <- names] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do checkSymbols [l1, l2, l3] members <- validateList_ validateName enames - mapM_ - (\(r,n) -> do - let nameMap = zip members ([1..] :: [Int]) - let Name n' = n --TODO fix me - let tVal = TypeInt $ TagEnum n' - addRegion $ RegionInfo {rRegion=r, rType=tVal, rDeclaration=Ref r} - void $ putSymbol (n,(r,True,tVal)) - mapM_ ( - \(x,i) -> putSymbol (x,(r,False,tVal)) - ) nameMap - ) names + sequence_ + [ + (do + let nameMap = zip members ([1..] :: [Int]) + let tVal = TypeInt $ TagEnum n + addRegion $ RegionInfo {rRegion=r, rText=n, rType=tVal, rDeclaration=Ref r} + void $ putSymbol (Name n,(r,True,tVal)) + mapM_ ( + \(x,i) -> putSymbol (x,(r,False,tVal)) + ) nameMap + ) + |(r, Name n) <- names + ] return $ [LettingDomainDefnEnum n members| (_,n) <- names] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do checkSymbols [l1, l2, l3, l4] @@ -542,6 +546,7 @@ validateDomain dm = case dm of validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateEnumRange name ranges = do Just name' <- validateIdentifier name + _ <- resolveReference (symbolRegion name,Name name') a <- getSymbol name' case a of Just (_,True,t) -> do @@ -923,11 +928,12 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ return $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do - checkSymbols [lt] + checkSymbols [lt] --TODO sets only ps <- sequenceElems pats exp <- validateExpression en let (t,e) = typeSplit exp - apats <- unifyPatterns t ps + pt <- projectionType (symbolRegion en) t + apats <- unifyPatterns pt ps return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (e)) | pat <- apats] -- x in exp validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do @@ -943,7 +949,8 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ checkSymbols [l1] ps <- sequenceElems pats (dType,dom') <- typeSplit <$> validateDomain dom - apats <- unifyPatterns dType ps + pt <- projectionTypeDomain (symbolRegion dom) dType + apats <- unifyPatterns pt ps return [ Generator $ GenDomainNoRepr pat dom'| pat <- apats] @@ -987,7 +994,7 @@ validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expres validateOperatorExpression (PrefixOpNode lt expr) = do Just op <- validateSymbol lt setContextFrom expr - let (refT) = case op of + let (refT) = case op of L_Minus -> tInt L_ExclamationMark -> TypeBool _ -> bug . text $ "Unknown prefix op " ++ show op @@ -1097,7 +1104,7 @@ validateIndexingOrSlicing exp range = do return $ Typed mType $ Op $ MkOpSlicing (OpSlicing m i j) validateRecordMemberIndex :: [(Name,Type)] -> ExpressionNode -> ValidatorS (Type,Expression) -validateRecordMemberIndex ns (IdentifierNode nn) = do +validateRecordMemberIndex ns (IdentifierNode nn) = do n <- validateName nn let t = lookup n ns ty <- case t of @@ -1109,14 +1116,14 @@ validateRecordMemberIndex ns (IdentifierNode nn) = do return TypeAny return $ (ty,Reference n Nothing) validateRecordMemberIndex ns (MissingExpressionNode nn) = do - raiseError $ symbolRegion nn + raiseError $ symbolRegion nn WithReplacements (SemanticError "Expected member of record/variant ") [x | (Name x,_) <- ns] return (TypeAny,fallback "bad Index") validateRecordMemberIndex ns en = do - g <- validateExpression en - let msg = T.concat + g <- validateExpression en + let msg = T.concat [ "Expected one of ", T.intercalate "," [x | (Name x,_) <- ns], @@ -1324,7 +1331,8 @@ validateComprehensionBody (CompBodyCondition en) = do validateComprehensionBody (CompBodyDomain apn l1 dom) = do checkSymbols [l1] (td,domain) <- typeSplit <$> validateDomain dom - pats <- validateSequence_ (flip unifyPattern td . Just) apn + td' <- projectionTypeDomain (symbolRegion dom) td + pats <- validateSequence_ (flip unifyPattern td' . Just) apn return $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] -- x <- expr @@ -1351,11 +1359,23 @@ projectionType r t = case t of TypeList ty -> return ty TypeSet ty -> return ty TypeMSet ty -> return ty - TypeSequence ty -> return ty + TypeSequence ty -> return $ TypeTuple [tInt,ty] + TypeRelation ts -> return $ TypeTuple ts + TypeFunction fr to -> return $ TypeTuple [fr,to] + _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny +projectionTypeDomain :: DiagnosticRegion -> Type -> ValidatorS Type +projectionTypeDomain r t = case t of --TODO check and do properly + TypeAny -> return TypeAny + TypeTuple tys -> return t + TypeMatrix i ty -> return ty + TypeInt t -> return $ TypeInt t + TypeList ty -> return ty + TypeSet ty -> return ty + TypeMSet ty -> return ty + TypeSequence ty -> return $ TypeTuple [tInt,ty] TypeRelation ts -> return $ TypeTuple ts TypeFunction fr to -> return $ TypeTuple [fr,to] _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny - mkAbstractLiteral :: AbstractLiteral Expression -> Expression mkAbstractLiteral x = case e2c (AbstractLiteral x) of Nothing -> AbstractLiteral x @@ -1591,7 +1611,7 @@ resolveReference (r,Name n) = do case c of Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return TypeAny Just (reg,_,t) -> do - addRegion (RegionInfo {rRegion=r, rType=t, rDeclaration=Ref reg}) + addRegion (RegionInfo {rRegion=r,rText=n, rType=t, rDeclaration=Ref reg}) return t resolveReference _ = return TypeAny @@ -1645,7 +1665,7 @@ unifyPattern (Just (AbstractIdentifier nn)) t = do -- traceM $ show n ++ ":" ++ show t --REVIEW don't put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,t)) - addRegion (RegionInfo (symbolRegion nn) t Definition) + addRegion (RegionInfo (symbolRegion nn) t n Definition) return $ Single $ Name n unifyPattern (Just(AbstractMetaVar lt)) _ = do From 32a2f0a872844a2141fcb5e52d1031c86d0d42b9 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 29 Nov 2022 16:20:35 +0000 Subject: [PATCH 106/378] Adding semantic tokens --- src/Conjure/Language/Validator.hs | 208 ++++++++++++++++++------------ 1 file changed, 124 insertions(+), 84 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 6c8c340f2b..86eb419d6e 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -48,13 +48,33 @@ import Control.Monad.Except (runExcept) import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Applicative import Conjure.Language.Expression.OpTypes (binOpType) -import Control.Exception (evaluate) import Conjure.Language.AdHoc ((:<)(project)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Text.PrettyPrint (text) - +data TaggedToken + = TtType ETok + | TtClass ETok + | TtEnum ETok + | TtStruct ETok + | TtParameter ETok + | TtVariable ETok + | TtProperty ETok + | TtEnumMember ETok + | TtEvent ETok + | TtFunction ETok + | TtMethod ETok + | TtMacro ETok + | TtKeyword ETok + | TtModifier ETok + | TtComment ETok + | TtString ETok + | TtNumber ETok + | TtRegexp ETok + | TtOperator ETok + | TtOther Text ETok + deriving Show class WithRegion a where @@ -170,11 +190,22 @@ mkDeclaration r n (Typed t _) = RegionInfo r t n Definition mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo mkLiteral r n (Typed t _) = RegionInfo r t n LiteralDecl +--Infix symbol validation and tagging +isA :: LToken -> (ETok -> TaggedToken) -> ValidatorS () +isA a b= validateSymbol a >> flagToken a b + +are :: [LToken] -> (ETok -> TaggedToken) -> ValidatorS () +are a b = mapM_ (`isA` b) a + +flagToken :: LToken -> (ETok -> TaggedToken) -> ValidatorS () +flagToken (RealToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}->x{symbolCategories=c t : sc}) +flagToken _ _ = return () data ValidatorState = ValidatorState { typeChecking :: Bool, regionInfo :: [RegionInfo], symbolTable :: SymbolTable, + symbolCategories ::[TaggedToken], currentContext :: DiagnosticRegion } deriving Show @@ -182,6 +213,7 @@ instance Default ValidatorState where def = ValidatorState { typeChecking = True, regionInfo=[], + symbolCategories=[], symbolTable=M.empty, currentContext=GlobalRegion } @@ -277,7 +309,7 @@ validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3 validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do setContextFrom lv let NameNode nt = n - checkSymbols [l1] + l1 `isA` TtKeyword name <- validateIdentifier n unless (maybe False isValidLanguageName name) (raiseError $symbolRegion n SyntaxError "Not a valid language name") nums <- catMaybes <$> validateSequence_ getNum v @@ -306,7 +338,7 @@ validateStatement (UnexpectedToken lt) = return [] <* (invalid $ lt TokenErr validateHeuristicStatement :: LToken -> ExpressionNode -> ValidatorS [Statement] validateHeuristicStatement lt exp = do let validHeuristics = ["static", "sdf", "conflict", "srf", "ldf", "wdeg", "domoverwdeg"] - checkSymbols [lt] + lt `isA` TtKeyword h <- case exp of IdentifierNode nn@(NameNode (RealToken _ (ETok{lexeme=(LIdentifier nm)}))) -> do if nm `elem` validHeuristics then @@ -326,23 +358,24 @@ tCondition t = contextTypeError $ ComplexTypeError "Bool or [Bool]" $ typeOf_ t validateWhereStatement :: WhereStatementNode -> ValidatorS [Statement] validateWhereStatement (WhereStatementNode l1 exprs) = do - checkSymbols [l1] + l1 `isA` TtKeyword ws <- Where <$> validateSequence_ (\x -> do setContextFrom x; validateExpression x ?=> tCondition) exprs return [ws] validateObjectiveStatement :: ObjectiveStatementNode -> ValidatorS [Statement] validateObjectiveStatement (ObjectiveMin lt en) = do - checkSymbols [lt] + lt `isA` TtKeyword exp <- validateExpression en return [Objective Minimising $ untype exp] validateObjectiveStatement (ObjectiveMax lt en) =do - checkSymbols [lt] + lt `isA` TtKeyword exp <- validateExpression en return [Objective Maximising $ untype exp] validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do - checkSymbols [l1, l2] + l1`isA` TtKeyword + l2`isA` TtKeyword exprs' <- validateSequence validateExpression exprs bools <- mapM (\(a,b)->do setContext a; return b ?=> tCondition) exprs' let bool_exprs = bools @@ -350,9 +383,10 @@ validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do - checkSymbols [l1, l2] + l1 `isA` TtKeyword + l2 `isA` TtKeyword branchings <-catMaybes <$> validateList_ (f2n validateBranchingParts) sts - return $ [SearchOrder branchings] + return [SearchOrder branchings] where validateBranchingParts :: ExpressionNode -> ValidatorS SearchOrder validateBranchingParts (IdentifierNode nn) = do @@ -365,9 +399,9 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do validateDeclarationStatement :: DeclarationStatementNode -> ValidatorS [Statement] validateDeclarationStatement stmt = do stmt' <- case stmt of - FindStatement l1 fs -> checkSymbols [l1] >> validateStatementSeq validateFind fs - GivenStatement l1 gs -> checkSymbols [l1] >> validateStatementSeq validateGiven gs - LettingStatement l1 ls -> checkSymbols [l1] >> validateStatementSeq validateLetting ls + FindStatement l1 fs -> l1 `isA` TtKeyword >> validateStatementSeq validateFind fs + GivenStatement l1 gs -> l1 `isA` TtKeyword >> validateStatementSeq validateGiven gs + LettingStatement l1 ls -> l1 `isA` TtKeyword >> validateStatementSeq validateLetting ls return $ Declaration <$> stmt' where validateStatementSeq v l= do @@ -377,16 +411,16 @@ validateDeclarationStatement stmt = do validateGiven :: GivenStatementNode -> ValidatorS [Declaration] validateGiven (GivenStatementNode idents l1 domain) = do - checkSymbols [l1] + checkSymbols [l1] -- Colon names <- validateNameList idents (dType, dom) <- typeSplit <$> validateDomain domain - let declarations = [(mkDeclaration r n (Typed dType 1)) | (r, Name n) <- names] + let declarations = [(mkDeclaration r n (Typed dType ())) | (r, Name n) <- names] mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x,(r,False,dType)) ) names return $ [ FindOrGiven Given nm dom|(_,nm) <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do - checkSymbols [l1, l2, l3] + [l1, l2, l3] `are` TtKeyword --new Type enum names <- validateNameList se let eType = TypeEnum mapM_ (\(r,x) -> putSymbol (x,(r,True,eType x) )) names @@ -394,7 +428,7 @@ validateGiven (GivenEnumNode se l1 l2 l3) = validateFind :: FindStatementNode -> ValidatorS [Declaration] validateFind (FindStatementNode names colon domain) = do - checkSymbols [colon] + checkSymbols [colon] --colon names' <- validateNameList names (dType, dom) <- typeSplit <$> validateDomain domain mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' @@ -404,7 +438,7 @@ validateFind (FindStatementNode names colon domain) = do validateLetting :: LettingStatementNode -> ValidatorS [Declaration] -- Letting [names] be validateLetting (LettingStatementNode names l1 assign) = do - checkSymbols [l1] + l1 `isA` TtKeyword names' <- validateNameList names validateLettingAssignment names' assign @@ -418,15 +452,17 @@ validateLettingAssignment names (LettingExpr en) = do mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names return $ [Letting n e | (_,n) <- names] validateLettingAssignment names (LettingDomain lt dn) = do - checkSymbols [lt] + lt `isA` TtModifier --TODO classify (tDomain,domain) <- typeSplit <$> validateDomain dn let declarations = [ mkDeclaration r n (Typed tDomain ()) |(r, Name n) <- names] mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names return $ [Letting n (Domain domain)| (_,n) <- names] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do - checkSymbols [l1, l2, l3] - members <- validateList_ validateName enames + [l1, l2, l3] `are` TtKeyword + memberNames <- catMaybes <$> listElems enames + [n | NameNode n <- memberNames] `are` TtEnumMember + members <- mapM validateName memberNames sequence_ [ (do @@ -442,7 +478,7 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do ] return $ [LettingDomainDefnEnum n members| (_,n) <- names] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do - checkSymbols [l1, l2, l3, l4] + [l1, l2, l3, l4] `are` TtKeyword --TODO keywords size <- do setContextFrom szExp validateExpression szExp ?=> exactly tInt @@ -509,19 +545,19 @@ validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv BoolDomainNode lt -> (validateSymbol lt >> (return . Typed TypeBool) DomainBool) - RangedIntDomainNode l1 rs -> checkSymbols [l1] >> validateRangedInt rs + RangedIntDomainNode l1 rs -> l1 `isA` TtType >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges ShortTupleDomainNode lst -> validateTupleDomain lst - TupleDomainNode l1 doms -> checkSymbols [l1] >> validateTupleDomain doms - RecordDomainNode l1 ndom -> checkSymbols [l1] >> validateRecordDomain ndom - VariantDomainNode l1 ndom -> checkSymbols [l1] >> validateVariantDomain ndom - MatrixDomainNode l1 m_ib idoms l2 dom -> checkSymbols [l1, l2] >> validateIndexedByNode m_ib >> validateMatrixDomain idoms dom - SetDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSetDomain attrs dom - MSetDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateMSetDomain attrs dom - FunctionDomainNode l1 attrs dom1 l2 dom2 -> checkSymbols [l1, l2] >> validateFunctionDomain attrs dom1 dom2 - SequenceDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validateSequenceDomain attrs dom - RelationDomainNode l1 attrs l2 doms -> checkSymbols [l1, l2] >> validateRelationDomain attrs doms - PartitionDomainNode l1 attrs l2 dom -> checkSymbols [l1, l2] >> validatePartitionDomain attrs dom + TupleDomainNode l1 doms -> l1 `isA` TtType >> validateTupleDomain doms + RecordDomainNode l1 ndom -> l1 `isA` TtType >> validateRecordDomain ndom + VariantDomainNode l1 ndom -> l1 `isA` TtType >> validateVariantDomain ndom + MatrixDomainNode l1 m_ib idoms l2 dom -> l1 `isA` TtType >> l2 `isA` TtKeyword >> validateIndexedByNode m_ib >> validateMatrixDomain idoms dom + SetDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validateSetDomain attrs dom + MSetDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validateMSetDomain attrs dom + FunctionDomainNode l1 attrs dom1 l2 dom2 -> l1 `isA` TtType >> l2 `isA` TtOperator >> validateFunctionDomain attrs dom1 dom2 + SequenceDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validateSequenceDomain attrs dom + RelationDomainNode l1 attrs l2 doms -> [l1, l2] `are` TtType >> validateRelationDomain attrs doms + PartitionDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validatePartitionDomain attrs dom MissingDomainNode lt -> do raiseError $ lt TokenError lt; return $ fallback "Missing Domain" where validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain @@ -652,7 +688,7 @@ validateDomain dm = case dm of validateIndexedByNode :: Maybe IndexedByNode -> ValidatorS () validateIndexedByNode Nothing = return () -validateIndexedByNode (Just (IndexedByNode a b)) = checkSymbols [a,b] +validateIndexedByNode (Just (IndexedByNode a b)) = [a,b] `are` TtKeyword todo :: Text -> Validator a todo s = invalid $ ValidatorDiagnostic GlobalRegion $ Error $ InternalErrorS (append "Not Implemented: " s) @@ -797,17 +833,17 @@ validateAttributeNode vs (NamedAttributeNode t (Just e)) = do validateNamedDomainInVariant :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInVariant (NameDomainNode name m_dom) = do - name' <- validateName name + name' <- validateNameAs TtProperty name domain' <-case m_dom of Nothing -> do return . Typed tInt $ DomainInt TagInt [RangeSingle 0] - Just (l,d) -> do checkSymbols [l]; validateDomain d + Just (l,d) -> do l `isA` TtOperator; validateDomain d return $ (name' , domain') validateNamedDomainInRecord :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInRecord (NameDomainNode name m_dom) = do - name' <- validateName name + name' <- validateNameAs TtProperty name domain' <-case m_dom of - Just (l,d) -> checkSymbols [l] >> validateDomain d + Just (l,d) ->l `isA` TtOperator >> validateDomain d Nothing -> do raiseError $ symbolRegion name SemanticError "Dataless not allowed in record" (return (fallback "Dataless RecordMemeber")) @@ -816,11 +852,11 @@ validateNamedDomainInRecord (NameDomainNode name m_dom) = do validateRange ::Type -> RangeNode -> ValidatorS ((Range Expression)) validateRange t range = case range of SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=> exactly t; return $ RangeSingle ex - OpenRangeNode dots -> do checkSymbols [dots] ; return RangeOpen - RightUnboundedRangeNode e1 dots -> do checkSymbols [dots] ;setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeLowerBounded ex - LeftUnboundedRangeNode dots e1 -> do checkSymbols [dots] ; setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeUpperBounded ex + OpenRangeNode dots -> do dots `isA` TtOther "Ellips" ; return RangeOpen + RightUnboundedRangeNode e1 dots -> do dots `isA` TtOther "Ellips" ;setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeLowerBounded ex + LeftUnboundedRangeNode dots e1 -> do dots `isA` TtOther "Ellips" ; setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeUpperBounded ex BoundedRangeNode e1 dots e2 -> do - _ <- checkSymbols [dots] + dots `isA` TtOther "Ellips" setContextFrom e1 e1' <- validateExpression e1 ?=> exactly t setContextFrom e2 @@ -829,7 +865,7 @@ validateRange t range = case range of validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) validateArrowPair (ArrowPairNode e1 s e2) = do - checkSymbols [s] + s `isA` TtOperator e1' <- validateExpression e1 e2' <- validateExpression e2 return .pure $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) e1' e2' @@ -846,7 +882,7 @@ validateExpression expr = case expr of DomainExpression dex -> validateDomainExpression dex ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp AbsExpression (ParenExpressionNode l1 exp l2) -> do - checkSymbols [l1,l2] + [l1,l2] `are` TtOperator setContextFrom exp exp' <- validateExpression exp ?=> exactly TypeAny return . Typed tInt $ mkOp TwoBarOp [exp'] @@ -858,15 +894,15 @@ validateExpression expr = case expr of validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateAttributeAsConstraint l1 exprs = do - checkSymbols [l1] es <- map untype <$> validateList_ validateExpression exprs do + flagToken l1 TtMethod Just lx <- validateSymbol l1 let n = lookup (Name (lexemeText lx)) allSupportedAttributes r <- case (n,es) of (Just 1 , [e,v]) -> return . pure . Typed TypeBool $ aacBuilder e lx (Just v) (Just 1 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es)) - (Just 0 , [e]) -> return .todoTypeAny . pure $ aacBuilder e lx Nothing + (Just 0 , [e]) -> return . pure . Typed TypeBool $ aacBuilder e lx Nothing (Just 0 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es)) (_,_) -> invalid $ l1 InternalErrorS "Bad AAC" return $ fromMaybe (fallback "bad AAC") r @@ -875,7 +911,7 @@ validateAttributeAsConstraint l1 exprs = do validateSpecialCase :: SpecialCaseNode -> ValidatorS (Typed Expression) validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do - checkSymbols [l1,l2,l3] + checkSymbols [l1,l2,l3] --TODO maybe add tokens Just conds <- validateProgramTree sts let decls = [ Declaration (FindOrGiven LocalFind nm dom) @@ -901,8 +937,9 @@ translateQnName qnName = case qnName of validateQuantificationExpression :: QuantificationExpressionNode -> ValidatorS (Typed Expression) validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = do - checkSymbols [dot] + dot `isA` TtKeyword scoped $ do + flagToken name TtMacro name' <- validateSymbol name over' <- validateQuantificationOver pats over -- patterns <- validateSequence_ validateAbstractPattern pats @@ -928,16 +965,16 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ return $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do - checkSymbols [lt] --TODO sets only + lt `isA` TtOperator --TODO sets only ps <- sequenceElems pats exp <- validateExpression en let (t,e) = typeSplit exp - pt <- projectionType (symbolRegion en) t + pt <- projectionType (symbolRegion en) t apats <- unifyPatterns pt ps return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (e)) | pat <- apats] -- x in exp validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do - checkSymbols [lt] + lt `isA` TtKeyword ps <- sequenceElems pats exp <- validateExpression en let (t,e) = typeSplit exp @@ -946,7 +983,7 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ return [Generator $ GenInExpr pat e|pat <- apats] -- x : domain validateQuantificationOver pats ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do - checkSymbols [l1] + l1 `isA` TtOther "Colon in comprehension" ps <- sequenceElems pats (dType,dom') <- typeSplit <$> validateDomain dom pt <- projectionTypeDomain (symbolRegion dom) dType @@ -964,23 +1001,18 @@ validateMetaVar tok = do validateDomainExpression :: DomainExpressionNode -> ValidatorS (Typed Expression) validateDomainExpression (DomainExpressionNode l1 dom l2) = do - checkSymbols [l1,l2] + [l1,l2] `are` TtOther "Backtick" (tdom,dom') <- typeSplit <$> validateDomain dom return . Typed tdom $ Domain dom' ---TODO fix function types inc lookups etc validateFunctionApplication :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateFunctionApplication name args = do args' <- validateList validateExpression args + flagToken name TtMethod Just name' <- validateSymbol name setContextFrom args validateFuncOp name' args' - -- return . Typed TypeAny $ do - -- let n = name' - -- let a = args' - -- case (n,a) of - -- (L_image,[y,z]) -> Op $ MkOpImage $ OpImage y z - -- _ -> mkOp (FunctionOp n) a + validateIdentifierExpr :: NameNode -> ValidatorS (Typed Expression) @@ -992,7 +1024,8 @@ validateIdentifierExpr name = do --TODO Adress the major hole in the type system current validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do - Just op <- validateSymbol lt + flagToken lt TtOperator + Just op <- validateSymbol lt setContextFrom expr let (refT) = case op of L_Minus -> tInt @@ -1004,6 +1037,7 @@ validateOperatorExpression (PrefixOpNode lt expr) = do validateOperatorExpression (BinaryOpNode lexp op rexp) = do (lType,lExpr) <- typeSplit <$> validateExpression lexp (rType,rExpr) <- typeSplit <$> validateExpression rexp + flagToken op TtOperator Just op' <- validateSymbol op let resultValidator = binOpType op' let resultType = resultValidator lType rType @@ -1014,7 +1048,7 @@ validateOperatorExpression (PostfixOpNode expr pon) = do validatePostfixOp :: PostfixOpNode -> ValidatorS (ExpressionNode -> ValidatorS (Typed Expression)) validatePostfixOp (OpFactorial lt) = do - checkSymbols [lt] + lt `isA` TtOperator setContextFrom lt return $ \exp -> do v <- validateExpression exp ?=> exactly tInt @@ -1062,7 +1096,8 @@ validatePostfixOp (IndexedNode ln) = do validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do - checkSymbols [l1,l2,l3] + l1 `isA` TtOther "Colon in expr" + [l2,l3] `are` TtOther "BackTick" (_,dom') <- typeSplit <$> validateDomain dom t <- case getDType dom' of Just t -> return t @@ -1175,19 +1210,19 @@ validateLiteral litNode = case litNode of BoolLiteral lt -> validateBoolLiteral lt >>= \x -> return $ Typed TypeBool $ Constant x MatrixLiteral mln -> validateMatrixLiteral mln TupleLiteralNode (LongTuple lt xs) -> do - checkSymbols [lt] + lt `isA` TtType validateLiteral (TupleLiteralNodeShort (ShortTuple xs)) TupleLiteralNodeShort (ShortTuple xs) -> do es <- validateExprList_ xs makeTupleLiteral es - RecordLiteral lt ln -> checkSymbols [lt] >> validateRecordLiteral ln - VariantLiteral lt ln -> checkSymbols [lt] >> validateVariantLiteral ln + RecordLiteral lt ln -> lt `isA` TtType >> validateRecordLiteral ln + VariantLiteral lt ln -> lt `isA` TtType >> validateVariantLiteral ln SetLiteral ls -> validateSetLiteral ls - MSetLiteral lt ls -> checkSymbols [lt] >> validateMSetLiteral ls - FunctionLiteral lt ln -> checkSymbols [lt] >> validateFunctionLiteral ln - SequenceLiteral lt ln -> checkSymbols [lt] >> validateSequenceLiteral ln - RelationLiteral lt ln -> checkSymbols [lt] >> validateRelationLiteral ln - PartitionLiteral lt ln -> checkSymbols [lt] >> validatePartitionLiteral ln + MSetLiteral lt ls -> lt `isA` TtType >> validateMSetLiteral ls + FunctionLiteral lt ln -> lt `isA` TtType >> validateFunctionLiteral ln + SequenceLiteral lt ln -> lt `isA` TtType >> validateSequenceLiteral ln + RelationLiteral lt ln -> lt `isA` TtType >> validateRelationLiteral ln + PartitionLiteral lt ln -> lt `isA` TtType >> validatePartitionLiteral ln validateSequenceLiteral :: ListNode ExpressionNode -> ValidatorS (Typed Expression) validateSequenceLiteral x = do @@ -1204,7 +1239,7 @@ validateRelationLiteral ln = do where validateRelationMember :: RelationElemNode -> ValidatorS [Typed Expression] validateRelationMember x = case x of - RelationElemNodeLabeled (LongTuple lt xs) -> checkSymbols [lt] >> validateExprList_ xs + RelationElemNodeLabeled (LongTuple lt xs) -> lt `isA` TtType >> validateExprList_ xs RelationElemNodeShort (ShortTuple xs) -> validateExprList_ xs @@ -1244,7 +1279,7 @@ validateVariantLiteral ln = do validateRecordMember :: RecordMemberNode -> ValidatorS (Name,Typed Expression) validateRecordMember (RecordMemberNode name lEq expr) = do - checkSymbols [lEq] + lEq `isA` TtKeyword name' <- validateName name expr' <- validateExpression expr return ( name' , expr') @@ -1276,7 +1311,7 @@ validateMSetLiteral ls = do validateMatrixLiteral :: MatrixLiteralNode -> ValidatorS (Typed Expression) --Matrix proper validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do - checkSymbols [l1,l2] + [l1,l2] `are` TtOther "SquareBrackets" elems <- validateSequence validateExpression se (t,es) <- typeSplit <$> sameType elems let defaultDomain :: TypedDomain = Typed tInt (mkDomainIntB 1 (fromInt $ genericLength elems)) @@ -1284,18 +1319,18 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do let lit = AbsLitMatrix (untype $ dom) es return $ Typed (TypeMatrix tInt t) $ mkAbstractLiteral lit where - validateOverDomain :: Maybe OverDomainNode -> Validator (TypedDomain) + validateOverDomain :: Maybe OverDomainNode -> Validator TypedDomain validateOverDomain Nothing = return Nothing - validateOverDomain (Just (OverDomainNode l3 dom)) = do checkSymbols [l3]; pure <$> validateDomain dom + validateOverDomain (Just (OverDomainNode l3 dom)) = do l3 `isA` TtOther "Semicolon in matrix"; pure <$> validateDomain dom -- Matrix as comprehension validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do - checkSymbols [l1,l2] + [l1,l2] `are` TtOther "SquareBrackets" case m_dom of Nothing -> return () Just p@(OverDomainNode l3 dom) -> do - checkSymbols [l3] + l3 `isA` TtOther "Semicolon in matrix" void $ validateDomain dom raiseError $ symbolRegion p SemanticError "Index domains are not supported in comprehensions" scoped $ @@ -1317,7 +1352,7 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do validateComprehension :: ComprehensionNode -> ValidatorS [GeneratorOrCondition] validateComprehension (ComprehensionNode l1 body) = do - checkSymbols [l1] + l1 `isA` TtKeyword concat <$> validateSequence_ validateComprehensionBody body validateComprehensionBody :: ComprehensionBodyNode -> ValidatorS [GeneratorOrCondition] @@ -1329,7 +1364,7 @@ validateComprehensionBody (CompBodyCondition en) = do return [Condition $ untype e] --x in dom validateComprehensionBody (CompBodyDomain apn l1 dom) = do - checkSymbols [l1] + l1 `isA` TtKeyword (td,domain) <- typeSplit <$> validateDomain dom td' <- projectionTypeDomain (symbolRegion dom) td pats <- validateSequence_ (flip unifyPattern td' . Just) apn @@ -1337,7 +1372,7 @@ validateComprehensionBody (CompBodyDomain apn l1 dom) = do -- x <- expr validateComprehensionBody (CompBodyGenExpr apn lt en) = do - checkSymbols [lt] + lt `isA` TtKeyword e <- validateExpression en let (t,exp) = typeSplit e t' <- projectionType (symbolRegion en) t @@ -1345,7 +1380,7 @@ validateComprehensionBody (CompBodyGenExpr apn lt en) = do return $ [Generator (GenInExpr pat exp)| pat <- pats] --letting x be validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do - checkSymbols [l1,l2] + [l1,l2] `are` TtKeyword (t,expr) <- typeSplit <$> validateExpression en pat <- unifyPattern (Just nn) t return [ComprehensionLetting pat expr] @@ -1391,7 +1426,7 @@ enforceConstraint p msg = do checkSymbols :: [LToken] -> ValidatorS () -checkSymbols = mapM_ validateSymbol +checkSymbols = mapM_ (\t -> validateSymbol t) --Raise a non structural error (i.e type error) raiseError :: ValidatorDiagnostic -> ValidatorS () @@ -1446,6 +1481,11 @@ validateName name = do n <- validateIdentifier name return $ fromMaybe (fallback "bad Identifier") (Name <$> n) +validateNameAs :: (ETok -> TaggedToken) -> NameNode -> ValidatorS Name +validateNameAs f name@(NameNode n) = do + flagToken n f + validateName name + listToSeq :: ListNode a -> ValidatorS (Sequence a) listToSeq (ListNode l1 s l2) = checkSymbols [l1,l2] >> return s @@ -1677,7 +1717,7 @@ unifyPattern (Just(AbstractPatternTuple m_lt ln)) t = do ps <-sequenceElems sps case m_lt of Nothing -> void $ return () - Just lt -> checkSymbols [lt] + Just lt -> lt `isA` TtType memberTypes <- getMemberTypes t let q = zip ps memberTypes aps <- mapM (uncurry unifyPattern) q From 2f31ea6dc823f0f781da04d4044b9be6836c9dda Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 30 Nov 2022 16:13:20 +0000 Subject: [PATCH 107/378] Semantic token support --- src/Conjure/Language/Validator.hs | 122 ++++++++++++++++++------------ 1 file changed, 73 insertions(+), 49 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 86eb419d6e..71f1b68c23 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -53,27 +53,30 @@ import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Text.PrettyPrint (text) +data TagType + =TtType + |TtClass + |TtEnum + |TtStruct + |TtParameter + |TtVariable + |TtProperty + |TtEnumMember + |TtEvent + |TtFunction + |TtMethod + |TtMacro + |TtKeyword + |TtModifier + |TtComment + |TtString + |TtNumber + |TtRegexp + |TtOperator + |TtOther Text + deriving Show data TaggedToken - = TtType ETok - | TtClass ETok - | TtEnum ETok - | TtStruct ETok - | TtParameter ETok - | TtVariable ETok - | TtProperty ETok - | TtEnumMember ETok - | TtEvent ETok - | TtFunction ETok - | TtMethod ETok - | TtMacro ETok - | TtKeyword ETok - | TtModifier ETok - | TtComment ETok - | TtString ETok - | TtNumber ETok - | TtRegexp ETok - | TtOperator ETok - | TtOther Text ETok + = TaggedToken TagType ETok deriving Show @@ -191,21 +194,34 @@ mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo mkLiteral r n (Typed t _) = RegionInfo r t n LiteralDecl --Infix symbol validation and tagging -isA :: LToken -> (ETok -> TaggedToken) -> ValidatorS () +isA :: LToken -> TagType -> ValidatorS () isA a b= validateSymbol a >> flagToken a b -are :: [LToken] -> (ETok -> TaggedToken) -> ValidatorS () +are :: [LToken] -> TagType -> ValidatorS () are a b = mapM_ (`isA` b) a -flagToken :: LToken -> (ETok -> TaggedToken) -> ValidatorS () -flagToken (RealToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}->x{symbolCategories=c t : sc}) +flagToken :: LToken -> TagType -> ValidatorS () +flagToken (RealToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}->x{symbolCategories= M.insert t (TaggedToken c t) sc}) flagToken _ _ = return () + +tagWithType :: NameNode -> Type -> ValidatorS () +tagWithType (NameNode lt) ty = flagToken lt $ case ty of + TypeEnum _ -> TtEnum + TypeInt (TagEnum _) -> TtEnumMember + TypeInt (TagUnnamed _) -> TtEnumMember + TypeUnnamed _ -> TtEnum + TypeVariant _ -> TtProperty + TypeRecord _ -> TtProperty + TypeFunction _ _ -> TtFunction + TypeSequence _ -> TtFunction + TypeRelation _ -> TtFunction + _ -> TtVariable data ValidatorState = ValidatorState { typeChecking :: Bool, regionInfo :: [RegionInfo], symbolTable :: SymbolTable, - symbolCategories ::[TaggedToken], + symbolCategories ::Map ETok TaggedToken, currentContext :: DiagnosticRegion } deriving Show @@ -213,7 +229,7 @@ instance Default ValidatorState where def = ValidatorState { typeChecking = True, regionInfo=[], - symbolCategories=[], + symbolCategories=M.empty, symbolTable=M.empty, currentContext=GlobalRegion } @@ -390,7 +406,7 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do where validateBranchingParts :: ExpressionNode -> ValidatorS SearchOrder validateBranchingParts (IdentifierNode nn) = do - n <- validateName nn + n <- validateNameAs TtVariable nn return $ BranchingOn n validateBranchingParts exp = do x <- validateExpression exp ?=> exactly TypeAny @@ -412,7 +428,7 @@ validateGiven :: GivenStatementNode -> ValidatorS [Declaration] validateGiven (GivenStatementNode idents l1 domain) = do checkSymbols [l1] -- Colon - names <- validateNameList idents + names <- validateSequence (validateNameAs TtVariable) idents (dType, dom) <- typeSplit <$> validateDomain domain let declarations = [(mkDeclaration r n (Typed dType ())) | (r, Name n) <- names] mapM_ addRegion declarations @@ -421,7 +437,7 @@ validateGiven (GivenStatementNode idents l1 domain) = validateGiven (GivenEnumNode se l1 l2 l3) = do [l1, l2, l3] `are` TtKeyword --new Type enum - names <- validateNameList se + names <- validateSequence (validateNameAs TtEnum) se let eType = TypeEnum mapM_ (\(r,x) -> putSymbol (x,(r,True,eType x) )) names return $ [GivenDomainDefnEnum n | (_,n) <- names] @@ -429,7 +445,7 @@ validateGiven (GivenEnumNode se l1 l2 l3) = validateFind :: FindStatementNode -> ValidatorS [Declaration] validateFind (FindStatementNode names colon domain) = do checkSymbols [colon] --colon - names' <- validateNameList names + names' <- validateSequence (validateNameAs TtVariable) names (dType, dom) <- typeSplit <$> validateDomain domain mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' mapM_ addRegion [(mkDeclaration r n (Typed dType 1)) | (r, Name n) <- names'] @@ -439,30 +455,32 @@ validateLetting :: LettingStatementNode -> ValidatorS [Declaration] -- Letting [names] be validateLetting (LettingStatementNode names l1 assign) = do l1 `isA` TtKeyword - names' <- validateNameList names - validateLettingAssignment names' assign + validateLettingAssignment names assign -validateLettingAssignment :: [RegionTagged Name] -> LettingAssignmentNode -> ValidatorS [Declaration] +validateLettingAssignment :: (Sequence NameNode) -> LettingAssignmentNode -> ValidatorS [Declaration] validateLettingAssignment names (LettingExpr en) = do expr <- validateExpression en setContextFrom en + names' <- validateSequence (validateNameAs TtVariable) names let (t,e) = typeSplit expr - let declarations = [mkDeclaration r n (Typed t 1) |(r, Name n) <- names] + let declarations = [mkDeclaration r n (Typed t 1) |(r, Name n) <- names'] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names - return $ [Letting n e | (_,n) <- names] + mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names' + return $ [Letting n e | (_,n) <- names'] validateLettingAssignment names (LettingDomain lt dn) = do lt `isA` TtModifier --TODO classify (tDomain,domain) <- typeSplit <$> validateDomain dn - let declarations = [ mkDeclaration r n (Typed tDomain ()) |(r, Name n) <- names] + names' <- validateSequence (validateNameAs TtClass) names + let declarations = [ mkDeclaration r n (Typed tDomain ()) |(r, Name n) <- names'] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names - return $ [Letting n (Domain domain)| (_,n) <- names] + mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names' + return $ [Letting n (Domain domain)| (_,n) <- names'] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do [l1, l2, l3] `are` TtKeyword + names' <- validateSequence (validateNameAs TtEnum) names memberNames <- catMaybes <$> listElems enames [n | NameNode n <- memberNames] `are` TtEnumMember - members <- mapM validateName memberNames + members <- mapM (validateNameAs TtEnumMember) memberNames sequence_ [ (do @@ -474,18 +492,19 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do \(x,i) -> putSymbol (x,(r,False,tVal)) ) nameMap ) - |(r, Name n) <- names + |(r, Name n) <- names' ] - return $ [LettingDomainDefnEnum n members| (_,n) <- names] + return $ [LettingDomainDefnEnum n members| (_,n) <- names'] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do [l1, l2, l3, l4] `are` TtKeyword --TODO keywords + names' <- validateSequence (validateNameAs TtEnum) names size <- do setContextFrom szExp validateExpression szExp ?=> exactly tInt let d = TypeUnnamed --TODO delcs - mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names - return $ [LettingDomainDefnUnnamed n size| (_,n) <- names] + mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names' + return $ [LettingDomainDefnUnnamed n size| (_,n) <- names'] -- validate :: Validator a -> Validator (Maybe a) @@ -544,7 +563,7 @@ validateDomainWithRepr dom = do validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv - BoolDomainNode lt -> (validateSymbol lt >> (return . Typed TypeBool) DomainBool) + BoolDomainNode lt -> (lt `isA` TtType >> (return . Typed TypeBool) DomainBool) RangedIntDomainNode l1 rs -> l1 `isA` TtType >> validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges ShortTupleDomainNode lst -> validateTupleDomain lst @@ -815,6 +834,7 @@ validatePartitionAttributes atts = do validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,Maybe Expression) validateAttributeNode vs (NamedAttributeNode t Nothing) = do + flagToken t TtModifier Just name <- validateSymbol t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" @@ -822,6 +842,7 @@ validateAttributeNode vs (NamedAttributeNode t Nothing) = do Just False -> return . pure $ (name , Nothing) validateAttributeNode vs (NamedAttributeNode t (Just e)) = do + flagToken t TtModifier setContextFrom e expr <- validateExpression e ?=> exactly tInt Just name <- validateSymbol t @@ -1019,6 +1040,7 @@ validateIdentifierExpr :: NameNode -> ValidatorS (Typed Expression) validateIdentifierExpr name = do Just n <- validateIdentifier name t <- resolveReference (symbolRegion name,Name n) + tagWithType name t return . Typed t $ Reference (Name n) Nothing --TODO Adress the major hole in the type system current @@ -1140,7 +1162,7 @@ validateIndexingOrSlicing exp range = do validateRecordMemberIndex :: [(Name,Type)] -> ExpressionNode -> ValidatorS (Type,Expression) validateRecordMemberIndex ns (IdentifierNode nn) = do - n <- validateName nn + n <- validateNameAs TtProperty nn let t = lookup n ns ty <- case t of Just ty -> return ty @@ -1445,6 +1467,7 @@ makeTupleLiteral members = do validateIntLiteral :: LToken -> ValidatorS Constant validateIntLiteral t = do + flagToken t TtNumber l <- validateSymbol t case l of Just (LIntLiteral x) -> return $ ConstantInt TagInt x @@ -1452,6 +1475,7 @@ validateIntLiteral t = do validateBoolLiteral :: LToken -> ValidatorS Constant validateBoolLiteral t = do + flagToken t $ TtOther "Boolean" Just l <- validateSymbol t case l of L_true -> return $ ConstantBool True @@ -1481,7 +1505,7 @@ validateName name = do n <- validateIdentifier name return $ fromMaybe (fallback "bad Identifier") (Name <$> n) -validateNameAs :: (ETok -> TaggedToken) -> NameNode -> ValidatorS Name +validateNameAs :: TagType -> NameNode -> ValidatorS Name validateNameAs f name@(NameNode n) = do flagToken n f validateName name @@ -1700,8 +1724,8 @@ unifyPatterns :: Type -> [Maybe AbstractPatternNode] -> ValidatorS [AbstractPatt unifyPatterns t = mapM (flip unifyPattern t) unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern -unifyPattern (Just (AbstractIdentifier nn)) t = do - (Name n) <- validateName nn +unifyPattern (Just (AbstractIdentifier nn@(NameNode lt))) t = do + (Name n) <- validateNameAs TtParameter nn -- traceM $ show n ++ ":" ++ show t --REVIEW don't put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,t)) From 1a2b085435e99d38d8a63a921745d8aa8104a1f3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 30 Nov 2022 17:25:10 +0000 Subject: [PATCH 108/378] Added domain type info --- src/Conjure/Language/Validator.hs | 123 +++++++++++++++++++----------- src/Conjure/UI/ErrorDisplay.hs | 1 + 2 files changed, 81 insertions(+), 43 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 71f1b68c23..405d8240db 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -99,11 +99,28 @@ unregion (_,a) =a data Typed a = Typed Type a deriving Show instance Functor Typed where - fmap f (Typed ty' a) = Typed ty' (f a) + fmap f (Typed k a) = Typed k (f a) -instance TypeOf (Typed a) where - typeOf (Typed t _) = return t +-- instance TypeOf (Typed a) where +-- typeOf (Typed () _) = return t +simple :: Type -> Kind +simple = Kind ValueType + +data Kind = Kind Class Type + deriving (Show,Eq,Ord) + +instance Pretty Kind where + pretty (Kind MemberType t) = "Member of " <> pretty t + pretty (Kind DomainType t) = "Domain: " <> pretty t + pretty (Kind ValueType t) = pretty t +data Class = DomainType | ValueType | MemberType + deriving (Show,Eq,Ord) +instance Pretty Class where + pretty c = case c of + DomainType -> "Domain" + ValueType -> "Value" + MemberType -> "Record/Variant Member" untype :: Typed a -> a untype (Typed _ a) = a @@ -112,11 +129,12 @@ typeOf_ (Typed t _) = t untypeAs :: Type -> Typed a -> ValidatorS a untypeAs r ((Typed t a)) = if let ?typeCheckerMode=StronglyTyped in typeUnify r t - then return a - else contextTypeError (TypeError r t) >> return a + then return a + else contextTypeError (TypeError r t) >> return a type TypeCheck a = Typed a -> ValidatorS () + exactly :: Type -> TypeCheck a exactly t r = void $ untypeAs t r @@ -150,6 +168,7 @@ data ErrorType | UnexpectedArg | TypeError Type Type -- Expected, got | ComplexTypeError Text Type -- Expected, got + | KindError Class Class | InternalError --Used to explicitly tag invalid pattern matches | InternalErrorS Text -- Used for giving detail to bug messages deriving (Show,Eq,Ord) @@ -182,16 +201,16 @@ data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion deriving Show data RegionInfo = RegionInfo { rRegion :: DiagnosticRegion, - rType :: Type, + rType :: Kind, rText :: Text, rDeclaration :: DeclarationType } deriving Show -mkDeclaration :: DiagnosticRegion -> Text -> Typed a -> RegionInfo -mkDeclaration r n (Typed t _) = RegionInfo r t n Definition +mkDeclaration :: DiagnosticRegion -> Text -> Kind -> RegionInfo +mkDeclaration r n (t) = RegionInfo r t n Definition mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo -mkLiteral r n (Typed t _) = RegionInfo r t n LiteralDecl +mkLiteral r n (Typed t _) = RegionInfo r (simple t) n LiteralDecl --Infix symbol validation and tagging isA :: LToken -> TagType -> ValidatorS () @@ -205,8 +224,8 @@ flagToken (RealToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}->x{ flagToken _ _ = return () -tagWithType :: NameNode -> Type -> ValidatorS () -tagWithType (NameNode lt) ty = flagToken lt $ case ty of +tagWithType :: NameNode -> Kind -> ValidatorS () +tagWithType (NameNode lt) (Kind ValueType ty) = flagToken lt $ case ty of TypeEnum _ -> TtEnum TypeInt (TagEnum _) -> TtEnumMember TypeInt (TagUnnamed _) -> TtEnumMember @@ -217,6 +236,9 @@ tagWithType (NameNode lt) ty = flagToken lt $ case ty of TypeSequence _ -> TtFunction TypeRelation _ -> TtFunction _ -> TtVariable +tagWithType (NameNode lt) (Kind DomainType _) = flagToken lt $ TtClass +tagWithType (NameNode lt) (Kind MemberType _) = flagToken lt $ TtProperty + data ValidatorState = ValidatorState { typeChecking :: Bool, regionInfo :: [RegionInfo], @@ -234,7 +256,7 @@ instance Default ValidatorState where currentContext=GlobalRegion } type SymbolTable = (Map Text SymbolTableValue) -type SymbolTableValue = (DiagnosticRegion,Bool,Type) +type SymbolTableValue = (DiagnosticRegion,Bool,Kind) -- instance Show SymbolTableValue where -- show (SType t) = show $ pretty t -- show (SDomain d) = show $ pretty d @@ -430,15 +452,15 @@ validateGiven (GivenStatementNode idents l1 domain) = checkSymbols [l1] -- Colon names <- validateSequence (validateNameAs TtVariable) idents (dType, dom) <- typeSplit <$> validateDomain domain - let declarations = [(mkDeclaration r n (Typed dType ())) | (r, Name n) <- names] + let declarations = [(mkDeclaration r n (simple dType)) | (r, Name n) <- names] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x,(r,False,dType)) ) names + mapM_ (\(r,x) -> putSymbol (x,(r,False,simple dType)) ) names return $ [ FindOrGiven Given nm dom|(_,nm) <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do [l1, l2, l3] `are` TtKeyword --new Type enum names <- validateSequence (validateNameAs TtEnum) se - let eType = TypeEnum + let eType = simple . TypeEnum mapM_ (\(r,x) -> putSymbol (x,(r,True,eType x) )) names return $ [GivenDomainDefnEnum n | (_,n) <- names] @@ -447,8 +469,8 @@ validateFind (FindStatementNode names colon domain) = do checkSymbols [colon] --colon names' <- validateSequence (validateNameAs TtVariable) names (dType, dom) <- typeSplit <$> validateDomain domain - mapM_ (\(r,x) -> putSymbol (x,(r,False,dType) )) names' - mapM_ addRegion [(mkDeclaration r n (Typed dType 1)) | (r, Name n) <- names'] + mapM_ (\(r,x) -> putSymbol (x,(r,False,simple dType) )) names' + mapM_ addRegion [(mkDeclaration r n (simple dType)) | (r, Name n) <- names'] return $ [ FindOrGiven Find nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> ValidatorS [Declaration] @@ -457,23 +479,23 @@ validateLetting (LettingStatementNode names l1 assign) = do l1 `isA` TtKeyword validateLettingAssignment names assign -validateLettingAssignment :: (Sequence NameNode) -> LettingAssignmentNode -> ValidatorS [Declaration] +validateLettingAssignment :: Sequence NameNode -> LettingAssignmentNode -> ValidatorS [Declaration] validateLettingAssignment names (LettingExpr en) = do expr <- validateExpression en setContextFrom en names' <- validateSequence (validateNameAs TtVariable) names let (t,e) = typeSplit expr - let declarations = [mkDeclaration r n (Typed t 1) |(r, Name n) <- names'] + let declarations = [mkDeclaration r n (simple t) |(r, Name n) <- names'] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x, (r,False,t) )) names' + mapM_ (\(r,x) -> putSymbol (x, (r,False,simple t) )) names' return $ [Letting n e | (_,n) <- names'] validateLettingAssignment names (LettingDomain lt dn) = do lt `isA` TtModifier --TODO classify (tDomain,domain) <- typeSplit <$> validateDomain dn names' <- validateSequence (validateNameAs TtClass) names - let declarations = [ mkDeclaration r n (Typed tDomain ()) |(r, Name n) <- names'] + let declarations = [ mkDeclaration r n (Kind DomainType tDomain) |(r, Name n) <- names'] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x, (r,False,tDomain))) names' + mapM_ (\(r,x) -> putSymbol (x, (r,False,Kind DomainType tDomain))) names' return $ [Letting n (Domain domain)| (_,n) <- names'] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do [l1, l2, l3] `are` TtKeyword @@ -486,10 +508,10 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do (do let nameMap = zip members ([1..] :: [Int]) let tVal = TypeInt $ TagEnum n - addRegion $ RegionInfo {rRegion=r, rText=n, rType=tVal, rDeclaration=Ref r} - void $ putSymbol (Name n,(r,True,tVal)) + addRegion $ RegionInfo {rRegion=r, rText=n, rType=simple tVal, rDeclaration=Ref r} + void $ putSymbol (Name n,(r,True,(simple tVal))) mapM_ ( - \(x,i) -> putSymbol (x,(r,False,tVal)) + \(x,i) -> putSymbol (x,(r,False,simple tVal)) ) nameMap ) |(r, Name n) <- names' @@ -501,7 +523,7 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do size <- do setContextFrom szExp validateExpression szExp ?=> exactly tInt - let d = TypeUnnamed + let d = simple . TypeUnnamed --TODO delcs mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names' return $ [LettingDomainDefnUnnamed n size| (_,n) <- names'] @@ -549,7 +571,17 @@ validateSymbol s = _ -> invalid $ ValidatorDiagnostic (getRegion s) $ Error $ TokenError s -- [MissingTokenError ] +getValueType :: Kind -> ValidatorS Type +getValueType (Kind ValueType t) = pure t +getValueType (Kind k _) = do + contextTypeError $ KindError ValueType k + return TypeAny +getDomainType :: Kind -> ValidatorS Type +getDomainType (Kind DomainType t) = pure t +getDomainType (Kind k _) = do + contextTypeError $ KindError DomainType k + return TypeAny type TypedDomain = Typed (Domain () Expression) @@ -600,21 +632,25 @@ validateDomain dm = case dm of validateRangedInt Nothing = return . Typed tInt $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain validateEnumRange name ranges = do + setContextFrom name Just name' <- validateIdentifier name _ <- resolveReference (symbolRegion name,Name name') a <- getSymbol name' case a of Just (_,True,t) -> do + t' <- getValueType t rs <-case ranges of - Just rs -> pure . catMaybes <$> validateList_ (f2n $ validateRange t) rs + Just rs -> pure . catMaybes <$> validateList_ (f2n $ validateRange t') rs Nothing -> return Nothing - return $ Typed t $ DomainEnum (Name name') rs Nothing - Just (_,False,t) -> case ranges of - Nothing -> return . Typed t $ DomainReference (Name name') Nothing - Just rs -> do - void $ validateList_ (f2n (validateRange TypeAny)) rs - raiseError (symbolRegion name SemanticError "range not supported on non enum ranges") - return . Typed t $ DomainReference (Name name') Nothing + return $ Typed t' $ DomainEnum (Name name') rs Nothing + Just (_,False,t) -> do + t' <- getDomainType t + case ranges of + Nothing -> return . Typed t' $ DomainReference (Name name') Nothing + Just rs -> do + void $ validateList_ (f2n (validateRange TypeAny)) rs + raiseError (symbolRegion name SemanticError "range not supported on non enum ranges") + return . Typed t' $ DomainReference (Name name') Nothing Nothing -> return $ fallback "unknown symbol" validateTupleDomain :: ListNode DomainNode -> ValidatorS TypedDomain @@ -628,7 +664,7 @@ validateDomain dm = case dm of let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' --push members let t = TypeRecord ts - mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t))) ds + mapM_ (\(r,(a,_))->putSymbol (a,(r,False,Kind MemberType t))) ds return $ Typed t (DomainRecord (unregion <$> ds)) validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateVariantDomain namedDoms = do @@ -637,7 +673,7 @@ validateDomain dm = case dm of let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' --push members let t = TypeVariant ts - mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t))) ds + mapM_ (\(r,(a,_))->putSymbol (a,(r,False,Kind MemberType t))) ds return $ Typed t (DomainVariant (unregion <$> ds)) validateMatrixDomain :: ListNode DomainNode -> DomainNode -> ValidatorS TypedDomain validateMatrixDomain indexes dom = do @@ -1041,7 +1077,8 @@ validateIdentifierExpr name = do Just n <- validateIdentifier name t <- resolveReference (symbolRegion name,Name n) tagWithType name t - return . Typed t $ Reference (Name n) Nothing + t' <- getValueType t + return . Typed t' $ Reference (Name n) Nothing --TODO Adress the major hole in the type system current validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expression) @@ -1669,15 +1706,15 @@ assertType v ref msg = do tc <- gets typeChecking unless (not tc || t == ref) $ void . contextError $ CustomError msg -resolveReference :: RegionTagged Name -> ValidatorS Type +resolveReference :: RegionTagged Name -> ValidatorS Kind resolveReference (r,Name n) = do c <- getSymbol n case c of - Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return TypeAny + Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return (simple TypeAny) Just (reg,_,t) -> do addRegion (RegionInfo {rRegion=r,rText=n, rType=t, rDeclaration=Ref reg}) return t -resolveReference _ = return TypeAny +resolveReference _ = return $ simple TypeAny sameType :: [RegionTagged (Typed a)] -> ValidatorS (Typed [a]) sameType [] = return $ Typed TypeAny [] @@ -1724,12 +1761,12 @@ unifyPatterns :: Type -> [Maybe AbstractPatternNode] -> ValidatorS [AbstractPatt unifyPatterns t = mapM (flip unifyPattern t) unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern -unifyPattern (Just (AbstractIdentifier nn@(NameNode lt))) t = do +unifyPattern (Just (AbstractIdentifier nn)) t = do (Name n) <- validateNameAs TtParameter nn -- traceM $ show n ++ ":" ++ show t --REVIEW don't put symbol if _ ? - void $ putSymbol (Name n,(symbolRegion nn,False,t)) - addRegion (RegionInfo (symbolRegion nn) t n Definition) + void $ putSymbol (Name n,(symbolRegion nn,False,simple t)) + addRegion (RegionInfo (symbolRegion nn) (simple t) n Definition) return $ Single $ Name n unifyPattern (Just(AbstractMetaVar lt)) _ = do diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 6a4803abd6..eae978afce 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -45,6 +45,7 @@ displayError x = case x of InternalError -> "Pattern match failiure" InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) + KindError a b -> show $ "Tried to use a " <> pretty b <> " where " <> pretty a <> " was expected" showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Text -> String showDiagnosticsForConsole errs text = case runParser (captureErrors errs) "Errors" text of From c407755fef59145667d254ef007dae23ada92b61 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 3 Dec 2022 13:15:50 +0000 Subject: [PATCH 109/378] Domain related fixes --- src/Conjure/Language/AST/ASTParser.hs | 24 +- src/Conjure/Language/AST/Syntax.hs | 20 +- src/Conjure/Language/Lexemes.hs | 3 +- src/Conjure/Language/Lexer.hs | 523 +---------------------- src/Conjure/Language/NewLexer.hs | 70 ++- src/Conjure/Language/Parser.hs | 3 +- src/Conjure/Language/Type.hs | 4 + src/Conjure/Language/Validator.hs | 588 ++++++++++++++++---------- src/Conjure/UI/ErrorDisplay.hs | 3 +- src/test/Conjure/ParserFuzz.hs | 25 +- 10 files changed, 456 insertions(+), 807 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 58024a5eea..c3bac61c99 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -13,7 +13,6 @@ import Conjure.Language.NewLexer import Conjure.Language.Lexemes import Text.Megaparsec -import Data.Text (pack) import Data.Void (Void) import Conjure.Language.AST.Reformer (Flattenable(..)) import Conjure.Language.Expression.Op.Internal.Common @@ -24,6 +23,8 @@ import Conjure.Language.Attributes (allAttributLexemes) import Data.Sequence (Seq) import Text.PrettyPrint.HughesPJ (text) import Text.Megaparsec.Debug (dbg) +import qualified Data.Text.Lazy as L +import qualified Data.Text as T data ParserError = ParserError Doc deriving (Show) @@ -805,26 +806,31 @@ attributesAsLexemes xs = do --------------------------------------- ---EXAMPLES AND TESTING ---- --------------------------------------- +putTextLn :: L.Text -> IO () +putTextLn = putStrLn . L.unpack + example :: String -> IO () example s = do let str = s - let txt = pack str + let txt = T.pack str let lexed = runParser eLex "lexer" txt case lexed of Left peb -> putStrLn "Lexer error:" >> (putStrLn $ errorBundlePretty peb) Right ets -> do - putStrLn "Lexmes" - putStrLn $ show ets + putStrLn $ "Lexed " ++ show ( length ets) ++" symbols" + -- putStrLn $ show . take 100 $ ets putStrLn $ "reformed" - putStrLn $ concatMap reform ets + -- putTextLn $ reformList ets let stream = ETokenStream txt ets case runParser (evalStateT parseProgram def) "parser" stream of - Left peb -> putStrLn "Parser error: " >> (putStrLn $ errorBundlePretty peb) + Left peb -> putStrLn "Parser error: " >> (putStrLn $ "") Right pt -> do - putStrLn $show pt + -- putStrLn $ show pt putStrLn $ "Reforming" - putStrLn $ show $ flatten pt - putStrLn $ reformList $ flatten pt + print $ reformList (flatten pt) == L.fromStrict txt + -- let flat = flatten pt + -- putStrLn $ show $ flat + -- putTextLn $ reformList $ flat exampleFile :: String -> IO () exampleFile p = do diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 0cceb04f19..6a9f515122 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -12,30 +12,26 @@ data LToken = RealToken [ETok] ETok | MissingToken ETok | SkippedToken ETok - deriving (Eq, Ord) + deriving (Eq, Ord,Show) instance Null LToken where isMissing (MissingToken _) = True isMissing _ = False -instance Show LToken where - show (RealToken [] x) = show x - show (RealToken ss x) = "SKIPPED" ++ show ss ++ show x - show (MissingToken x) = "MISSING[" ++ show x ++ "]" - show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" +-- instance Show LToken where +-- show (RealToken [] x) = show x +-- show (RealToken ss x) = "SKIPPED" ++ show ss ++ show x +-- show (MissingToken x) = "MISSING[" ++ show x ++ "]" +-- show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" data ProgramTree = ProgramTree { langVersionInfo :: Maybe LangVersionNode, statements :: [StatementNode], eofToken :: LToken } - + deriving Show data LangVersionNode = LangVersionNode LToken NameNode (Sequence LToken) - -instance Show ProgramTree where - show (ProgramTree lv xs eof) = "ProgramTree \n" ++ - intercalate "\n\n" (map show xs) - ++ "\n\n" ++ show eof + deriving Show data StatementNode = DeclarationStatement DeclarationStatementNode diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 23461dad44..9233cd36ef 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -7,6 +7,7 @@ module Conjure.Language.Lexemes where import Conjure.Prelude import qualified Data.HashMap.Strict as M import qualified Data.Text as T +import qualified Data.Text.Lazy as L data Lexeme = LIntLiteral Integer @@ -502,7 +503,7 @@ lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap , ( L_SpecialCase, "?#") ] -textToLexeme :: T.Text -> Maybe Lexeme +textToLexeme :: Text -> Maybe Lexeme textToLexeme t = M.lookup t mapTextToLexeme mapTextToLexeme :: M.HashMap T.Text Lexeme diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 2a50ead1d6..1a1317cf26 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -8,7 +8,6 @@ module Conjure.Language.Lexer ( Lexeme(..) , LexemePos(..) - , runLexer , textToLexeme , lexemeText , lexemeFace @@ -19,7 +18,7 @@ import Data.Char ( isAlpha, isAlphaNum ) import Data.Void import qualified Data.HashMap.Strict as M import qualified Data.Text as T -import qualified Data.Text.Read as T +import qualified Data.Text.Lazy as L import qualified Text.PrettyPrint as Pr import qualified Text.Megaparsec.Char.Lexer as L import Text.Megaparsec.Char @@ -34,263 +33,6 @@ data LexemePos = LexemePos SourcePos -- source position, just after this lexeme, including whitespace after the lexeme deriving (Show,Eq, Ord) --- data Lexeme --- = LIntLiteral Integer --- | LMissingIntLiteral --helper for missing symbol --- | LIdentifier T.Text --- | LMissingIdentifier --helper for missing symbol --- | LMetaVar T.Text --- | LMissingMetaVar --helper for missing symbol --- -- general --- | L_be --- | L_from --- | L_of --- | L_domain - --- | L_language --- | L_dim --- | L_find --- | L_given --- | L_letting --- | L_where --- | L_such --- | L_that --- | L_minimising --- | L_maximising --- | L_branching --- | L_on --- | L_heuristic - --- -- type: boolean --- | L_bool --- | L_false --- | L_true - --- -- type: integer --- | L_int - --- -- creating a new type --- | L_new --- | L_type --- | L_enum - --- -- type tuple --- | L_tuple - --- -- type record --- | L_record - --- -- type variant --- | L_variant --- | L_active - --- -- type: matrix --- | L_matrix --- | L_indexed --- | L_by - --- -- type set --- | L_set --- | L_size --- | L_minSize --- | L_maxSize - --- -- type: mset --- | L_mset --- | L_minOccur --- | L_maxOccur - --- -- type: function --- | L_function --- | L_total --- | L_partial --- | L_injective --- | L_surjective --- | L_bijective - --- -- type: sequence --- | L_sequence - --- -- type: relation --- | L_relation - --- -- type: partition --- | L_partition --- | L_regular --- | L_partSize --- | L_minPartSize --- | L_maxPartSize --- | L_numParts --- | L_minNumParts --- | L_maxNumParts - --- -- operators, page 21 of the holy paper --- | L_union --- | L_intersect --- | L_subset --- | L_subsetEq --- | L_supset --- | L_supsetEq --- | L_in --- | L_max --- | L_min --- | L_toSet --- | L_toMSet --- | L_toRelation --- | L_defined --- | L_range --- | L_restrict --- | L_image --- | L_imageSet --- | L_preImage --- | L_inverse --- | L_together --- | L_apart --- | L_party --- | L_participants --- | L_parts --- | L_freq --- | L_hist - --- | L_toInt --- | L_makeTable --- | L_table - --- -- global constraints --- | L_allDiff --- | L_alldifferent_except --- | L_gcc --- | L_atleast --- | L_atmost - --- | L_dontCare - --- | L_catchUndef - --- -- matrix only operators --- | L_flatten --- | L_concatenate --- | L_normIndices - --- -- in the rule language --- -- | L_lambda --- -- | L_quantifier --- -- | L_representation - --- -- arithmetic operators - --- | L_Plus -- + -- sum, infix : (int,int) -> int --- | L_Minus -- - -- (subtraction, infix : (int,int) -> int) OR (unary minus : int -> int) --- | L_Times -- * -- multiplication, infix : (int,int) -> int --- | L_Div -- / -- integer division, infix --- | L_Mod -- % -- modulo, infix --- | L_Pow -- ** -- exponentiation, infix : (int,int) -> int --- | L_factorial - --- -- equality - --- | L_Eq -- = -- equals, infix. --- | L_Neq -- != -- not-equals, infix - --- -- comparison - --- | L_Lt -- < -- less-than, infix. --- | L_Leq -- <= -- less-than-or-eq, infix. --- | L_Gt -- > -- greater-than, infix. --- | L_Geq -- >= -- greater-than-or-eq, infix. - --- -- logical operators - --- | L_And -- /\ -- logical-and, infix --- | L_Or -- \/ -- logical-or, infix. --- | L_Imply -- -> -- implication, infix --- | L_Iff -- <-> -- iff, infix. --- -- | L_Not -- ! -- negation, prefix --- | L_ExclamationMark -- for poth L_Factorial and L_ExclamationMark - --- -- the function arrow - --- | L_LongArrow -- --> -- function domains and constants - --- -- in rule language - --- | L_Colon -- : -- has-domain, infix, (expr,domain) -> bool. also does pattern matching. --- | L_DoubleColon -- :: -- has-type, infix, (expr,type) -> bool. also does pattern matching. --- | L_At -- @ -- bubble operator. - --- -- lex operators - --- | L_LexGeq -- >=lex --- | L_LexGt -- >lex --- | L_LexLt -- <=lex --- | L_LexLeq -- T.Text --- lexemeText l = T.pack $ show (lexemeFace l) - --- textToLexeme :: T.Text -> Maybe Lexeme --- textToLexeme t = M.lookup t mapTextToLexeme lexemeFace :: Lexeme -> Pr.Doc lexemeFace L_Newline = "new line" @@ -303,258 +45,7 @@ lexemeFace (LIdentifier i) = Pr.text (T.unpack i) lexemeFace l = case M.lookup l mapLexemeToText of Nothing -> Pr.text (show l) - Just t -> Pr.text (T.unpack t) - -lexemeWidth :: Lexeme -> Int -lexemeWidth L_Carriage = 0 -lexemeWidth L_Tab = 4 -lexemeWidth (LIntLiteral i) = length (show i) -lexemeWidth (LIdentifier i) = T.length i --- lexemeWidth (LComment i) = T.length i -lexemeWidth l = - case lookup l (map swap lexemes) of - Nothing -> 0 - Just t -> T.length t - --- mapTextToLexeme :: M.HashMap T.Text Lexeme --- mapTextToLexeme = M.fromList lexemes - --- mapLexemeToText :: M.HashMap Lexeme T.Text --- mapLexemeToText = M.fromList $ map swap lexemes - --- lexemes :: [(T.Text, Lexeme)] --- lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap --- [ ( L_be , "be" ) --- , ( L_from , "from" ) --- , ( L_of , "of" ) --- , ( L_domain , "domain" ) --- , ( L_language , "language" ) --- , ( L_dim , "dim" ) --- , ( L_find , "find" ) --- , ( L_given , "given" ) --- , ( L_letting , "letting" ) --- , ( L_where , "where" ) --- , ( L_such , "such" ) --- , ( L_that , "that" ) --- , ( L_minimising , "minimising" ) --- , ( L_maximising , "maximising" ) --- , ( L_minimising , "minimizing" ) --- , ( L_maximising , "maximizing" ) --- , ( L_branching , "branching" ) --- , ( L_on , "on" ) --- , ( L_heuristic , "heuristic" ) - --- , ( L_bool, "bool" ) --- , ( L_false, "false" ) --- , ( L_true, "true" ) --- , ( L_int, "int" ) --- , ( L_new, "new" ) --- , ( L_type, "type" ) --- , ( L_enum, "enum" ) --- , ( L_tuple, "tuple" ) --- , ( L_record, "record" ) --- , ( L_variant, "variant" ) --- , ( L_active, "active" ) --- , ( L_matrix, "matrix" ) --- , ( L_indexed, "indexed" ) --- , ( L_by, "by" ) --- , ( L_set, "set" ) --- -- , ( L_size, "size" ) --- -- , ( L_minSize, "minSize" ) --- -- , ( L_maxSize, "maxSize" ) --- , ( L_mset, "mset" ) --- -- , ( L_minOccur, "minOccur" ) --- -- , ( L_maxOccur, "maxOccur" ) --- , ( L_function, "function" ) --- -- , ( L_total, "total" ) --- -- , ( L_partial, "partial" ) --- -- , ( L_injective, "injective" ) --- -- , ( L_surjective, "surjective" ) --- -- , ( L_bijective, "bijective" ) --- , ( L_sequence, "sequence" ) --- , ( L_relation, "relation" ) --- , ( L_partition, "partition" ) --- -- , ( L_regular, "regular" ) --- -- , ( L_partSize, "partSize" ) --- -- , ( L_minPartSize, "minPartSize" ) --- -- , ( L_maxPartSize, "maxPartSize" ) --- -- , ( L_numParts, "numParts" ) --- -- , ( L_minNumParts, "minNumParts" ) --- -- , ( L_maxNumParts, "maxNumParts" ) --- , ( L_union, "union" ) --- , ( L_intersect, "intersect" ) --- , ( L_subset, "subset" ) --- , ( L_subsetEq, "subsetEq" ) --- , ( L_supset, "supset" ) --- , ( L_supsetEq, "supsetEq" ) --- , ( L_in, "in" ) --- , ( L_max, "max" ) --- , ( L_min, "min" ) --- , ( L_toSet, "toSet" ) --- , ( L_toMSet, "toMSet" ) --- , ( L_toRelation, "toRelation" ) --- , ( L_defined, "defined" ) --- , ( L_range, "range" ) --- , ( L_restrict, "restrict" ) --- , ( L_image, "image" ) --- , ( L_imageSet, "imageSet" ) --- , ( L_preImage, "preImage" ) --- , ( L_inverse, "inverse" ) --- , ( L_together, "together" ) --- , ( L_apart, "apart" ) --- , ( L_party, "party" ) --- , ( L_participants, "participants" ) --- , ( L_parts, "parts" ) --- , ( L_freq, "freq" ) --- , ( L_hist, "hist" ) --- , ( L_toInt, "toInt" ) --- , ( L_makeTable, "makeTable" ) --- , ( L_table, "table" ) - --- , ( L_allDiff, "allDiff" ) --- , ( L_alldifferent_except, "alldifferent_except" ) --- , ( L_gcc, "gcc" ) --- , ( L_atleast, "atleast" ) --- , ( L_atmost, "atmost" ) - --- , ( L_dontCare, "dontCare" ) --- , ( L_catchUndef, "catchUndef" ) - --- , ( L_flatten, "flatten" ) --- , ( L_concatenate, "concatenate" ) --- , ( L_normIndices, "normIndices" ) --- -- , ( L_lambda, "lambda" ) --- -- , ( L_quantifier, "quantifier" ) --- -- , ( L_representation, "representation" ) --- , ( L_Plus , "+" ) --- , ( L_Minus , "-" ) --- , ( L_Times , "*" ) --- , ( L_Div , "/" ) --- , ( L_Mod , "%" ) --- , ( L_Pow , "**" ) --- , ( L_factorial , "factorial" ) --- , ( L_Eq , "=" ) --- , ( L_Neq , "!=" ) --- , ( L_Lt , "<" ) --- , ( L_Leq , "<=" ) --- , ( L_Gt , ">" ) --- , ( L_Geq , ">=" ) --- , ( L_And , "/\\" ) --- , ( L_Or , "\\/" ) --- , ( L_Imply , "->" ) --- , ( L_Iff , "<->" ) --- , ( L_ExclamationMark , "!" ) --- , ( L_LongArrow , "-->" ) --- , ( L_Colon , ":" ) --- , ( L_DoubleColon , "::" ) --- , ( L_At , "@" ) --- , ( L_LexGeq , ">=lex" ) --- , ( L_LexGt , ">lex" ) --- , ( L_LexLeq , "<=lex" ) --- , ( L_LexLt , "" ) --- , ( L_CaseSeparator , "***" ) - --- , ( L_HasRepr , "hasRepr" ) --- , ( L_HasType , "hasType" ) --- , ( L_HasDomain , "hasDomain" ) --- , ( L_indices , "indices" ) - --- , ( L_DotLt , ".<" ) --- , ( L_DotLeq , ".<=" ) --- , ( L_DotGt , ".>" ) --- , ( L_DotGeq , ".>=" ) - --- , ( L_TildeLt , "~<" ) --- , ( L_TildeLeq , "~<=" ) --- , ( L_TildeGt , "~>" ) --- , ( L_TildeGeq , "~>=" ) - --- , ( L_LeftArrow , "<-" ) - --- , ( L_subsequence , "subsequence" ) --- , ( L_substring , "substring" ) --- , ( L_powerSet , "powerSet" ) - --- , ( L_pred, "pred" ) --- , ( L_succ, "succ" ) - - --- , ( L_transform, "transform") --- ] - -mapToLexemePos :: ETok -> LexemePos -mapToLexemePos tok = LexemePos lex start end where - (sp,en,_,lex) = offsets tok - start = SourcePos "Test" (mkPos sp ) (mkPos sp) - end = SourcePos "Test" (mkPos en ) (mkPos en) - - - -runLexer :: MonadFailDoc m => T.Text -> m [LexemePos] -runLexer text = do - let x = parseMaybe eLex text - case x of - Just y -> return $ mapToLexemePos <$> y - Nothing -> failDoc "Error" - - - --- runLexer text = do --- ls <- go text --- let lsPaired = calcPos (initialPos "") ls --- return lsPaired --- where --- go t = do --- let results = catMaybes $ tryLexMetaVar t --- : map (tryLex t) lexemes --- ++ [ tryLexIntLiteral t --- , tryLexIden t --- , tryLexQuotedIden t --- , tryLexComment t --- ] --- if T.null t --- then return [] --- else case results of --- [] -> failDoc ("Lexing error:" Pr.<+> Pr.text (T.unpack t)) --- ((rest,lexeme):_) -> (lexeme:) <$> go rest - --- -- attach source positions to lexemes --- -- discard whitespace, but calculate their contribution to source positions --- calcPos :: SourcePos -> [Lexeme] -> [LexemePos] --- calcPos _pos [] = [] --- calcPos pos (this:rest) | isLexemeSpace this -- skip if this one is whitespace --- = calcPos (nextPos pos this) rest -- can only happen at the beginning --- calcPos pos (this:rest) = --- let (restSpaces, restNonSpace) = span isLexemeSpace rest -- eat up all the whitespace after "this" --- pos' = foldl nextPos pos (this:restSpaces) --- in --- if null restNonSpace --- then [LexemePos this pos (nextPos pos this)] -- if this is the last non-whitespace lexeme --- -- do not include the whitespace after it --- else LexemePos this pos pos' : calcPos pos' restNonSpace - --- nextPos :: SourcePos -> Lexeme -> SourcePos --- nextPos pos L_Newline = incSourceLine (setSourceColumn pos 1) 1 --- nextPos pos L_Carriage = pos -- just ignore '\r's --- nextPos pos l = incSourceColumn pos (lexemeWidth l) + Just t -> Pr.text . T.unpack $ t isLexemeSpace :: Lexeme -> Bool isLexemeSpace L_Newline {} = True @@ -574,11 +65,11 @@ tryLex running (face,lexeme) = do _ -> Just (rest, lexeme) else Just (rest, lexeme) -tryLexIntLiteral :: T.Text -> Maybe (T.Text, Lexeme) -tryLexIntLiteral t = - case T.decimal t of - Left _ -> Nothing - Right (x, rest) -> Just (rest, LIntLiteral x) +-- tryLexIntLiteral :: T.Text -> Maybe (T.Text, Lexeme) +-- tryLexIntLiteral t = +-- case T.decimal t of +-- Left _ -> Nothing +-- Right (x, rest) -> Just (rest, LIntLiteral x) emojis :: [Char] diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index bed6b351cc..ccf78948e9 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -7,12 +7,13 @@ module Conjure.Language.NewLexer where import Conjure.Language.Lexemes -import Conjure.Prelude hiding (many, some) +import Conjure.Prelude hiding (many, some,Text) import Data.Char (isAlpha, isAlphaNum) import Data.Void import qualified Data.Text as T - +import qualified Data.Text.Lazy as L +import Data.Text (Text) import Text.Megaparsec hiding (State) import Text.Megaparsec.Char @@ -27,20 +28,20 @@ sourcePos0 :: SourcePos sourcePos0 = SourcePos "" (mkPos 0) (mkPos 0) class Reformable a where - reform :: a -> String + reform :: a -> L.Text instance Reformable ETok where reform e | oTLength (offsets e) == 0 = "" - reform (ETok{capture=cap,trivia=triv}) = concatMap showTrivia triv ++ T.unpack cap + reform (ETok{capture=cap,trivia=triv}) = L.append (L.concat $ map showTrivia triv) (L.fromStrict cap) where - showTrivia :: Trivia -> String + showTrivia :: Trivia -> L.Text showTrivia x = case x of - WhiteSpace txt -> T.unpack txt - LineComment txt -> T.unpack txt - BlockComment txt -> T.unpack txt + WhiteSpace txt -> L.fromStrict txt + LineComment txt -> L.fromStrict txt + BlockComment txt -> L.fromStrict txt -reformList :: Reformable a => Seq a -> String -reformList = concatMap reform +reformList :: (Traversable t ,Reformable a) => t a -> L.Text +reformList = L.concat . map reform . toList emojis :: [Char] emojis = @@ -59,11 +60,11 @@ isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` data Offsets =Offsets {oStart::Int,oTrueStart :: Int,oTLength::Int,oSourcePos::SourcePos} deriving (Show, Eq, Ord) -type Lexer = Parsec Void T.Text +type Lexer = Parsec Void Text --- type Lexer = Parsec Void T.Text ETokenStream +-- type Lexer = Parsec Void Text ETokenStream -data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text +data Trivia = WhiteSpace Text | LineComment Text | BlockComment Text deriving (Show, Eq, Ord) data ETok = ETok @@ -176,7 +177,7 @@ pFallback = do somethingValid :: Lexer () somethingValid = void pTrivia <|> void aLexemeStrict <|> eof -pLexeme :: (T.Text, Lexeme) -> Lexer (Lexeme,Text) +pLexeme :: (Text, Lexeme) -> Lexer (Lexeme,Text) pLexeme (s, l) = do tok <- string s notFollowedBy $ if isIdentifierLetter $ T.last tok then nonIden else empty @@ -250,11 +251,7 @@ instance Stream ETokenStream where buildStream :: [ETok] -> ETokenStream buildStream xs = case NE.nonEmpty xs of Nothing -> ETokenStream "" xs - Just s -> ETokenStream (T.pack $ showTokens pxy s) xs - -instance VisualStream ETokenStream where - showTokens p = concatMap reform - tokensLength p ls = sum $ oTLength . offsets <$> ls + Just s -> ETokenStream (T.pack $ "showTokens pxy s") xs -- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where @@ -279,9 +276,40 @@ instance TraversableStream ETokenStream where [] -> pstateSourcePos (x : _) -> tokenSourcePos x (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) - (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) + (preStr, postStr) = ("NOT SUPPORTED","NOT SUPPORTED") preLine = reverse . takeWhile (/= '\n') . reverse $ preStr - restOfLine = takeWhile (/= '\n') postStr + restOfLine = "" + +instance VisualStream ETokenStream where + showTokens p = L.unpack . reformList + tokensLength p ls = sum $ oTLength . offsets <$> ls + +-- -- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams +-- instance TraversableStream ETokenStream where +-- reachOffset o PosState{..} = +-- ( Just (prefix ++ restOfLine) +-- , PosState +-- { pstateInput = buildStream post +-- , pstateOffset = max pstateOffset o +-- , pstateSourcePos = newSourcePos +-- , pstateTabWidth = pstateTabWidth +-- , pstateLinePrefix = prefix +-- } +-- ) +-- where +-- prefix = +-- if sameLine +-- then pstateLinePrefix ++ preLine +-- else preLine +-- sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos +-- newSourcePos = +-- case post of +-- [] -> pstateSourcePos +-- (x : _) -> tokenSourcePos x +-- (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) +-- (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) +-- preLine = reverse . takeWhile (/= '\n') . reverse $ preStr +-- restOfLine = takeWhile (/= '\n') postStr pxy :: Proxy ETokenStream pxy = Proxy \ No newline at end of file diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index efea901c05..e527bacfd3 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -21,13 +21,12 @@ import Conjure.Language.Domain -- import Conjure.Language.TypeOf -- import Conjure.Language.Expression.Op -- import Conjure.Language.Pretty -import Conjure.Language.Lexer ( Lexeme(..), LexemePos(..), lexemeFace, lexemeText, runLexer ) import qualified Conjure.Language.NewLexer as L -- megaparsec -- megaparsec -- megaparsec -- megaparsec -import Text.Megaparsec ( (), label, token, try, eof, ParsecT,Parsec, runParser, errorBundlePretty) +import Text.Megaparsec (Parsec) -- import Text.Megaparsec.Error ( ParseError(..),ErrorItem, errorOffset ) -- import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn , Pos) -- import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) diff --git a/src/Conjure/Language/Type.hs b/src/Conjure/Language/Type.hs index 76b0e30622..a925a68ef2 100644 --- a/src/Conjure/Language/Type.hs +++ b/src/Conjure/Language/Type.hs @@ -33,7 +33,9 @@ data Type | TypeUnnamed Name | TypeTuple [Type] | TypeRecord [(Name, Type)] + | TypeRecordMember Name [(Name, Type)] | TypeVariant [(Name, Type)] + | TypeVariantMember Name [(Name, Type)] | TypeList Type | TypeMatrix Type Type | TypeSet Type @@ -62,8 +64,10 @@ instance Pretty Type where <> prettyList prParens "," xs pretty (TypeRecord xs) = "record" <+> prettyList prBraces "," [ pretty nm <+> ":" <+> pretty ty | (nm, ty) <- xs ] + pretty (TypeRecordMember n ts) = "member" <+> pretty n <+> "of" <+> pretty (TypeRecord ts) pretty (TypeVariant xs) = "variant" <+> prettyList prBraces "," [ pretty nm <+> ":" <+> pretty ty | (nm, ty) <- xs ] + pretty (TypeVariantMember n ts) = "member" <+> pretty n <+> "of" <+> pretty (TypeVariant ts) pretty (TypeList x) = prBrackets (pretty x) pretty (TypeMatrix index innerNested) = "matrix indexed by" <+> prettyList prBrackets "," indices diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 405d8240db..7b9efb139b 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -52,28 +52,28 @@ import Conjure.Language.AdHoc ((:<)(project)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Text.PrettyPrint (text) - -data TagType - =TtType - |TtClass - |TtEnum - |TtStruct - |TtParameter - |TtVariable - |TtProperty - |TtEnumMember - |TtEvent - |TtFunction - |TtMethod - |TtMacro - |TtKeyword - |TtModifier - |TtComment - |TtString - |TtNumber - |TtRegexp - |TtOperator - |TtOther Text +import qualified Data.Bifunctor + +data TagType + =TtType + |TtNumber + |TtBool + |TtDomain + |TtEnum + |TtEnumMember + |TtRecord + |TtRecordMember + |TtUserFunction + |TtFunction + |TtAttribute + |TtAAC + |TtVariable + |TtKeyword + |TtQuantifier + |TtSubKeyword + |TtOperator + |TtLocal + |TtOther Text deriving Show data TaggedToken = TaggedToken TagType ETok @@ -111,16 +111,15 @@ data Kind = Kind Class Type deriving (Show,Eq,Ord) instance Pretty Kind where - pretty (Kind MemberType t) = "Member of " <> pretty t + -- pretty (Kind MemberType t) = "Member of " <> pretty t pretty (Kind DomainType t) = "Domain: " <> pretty t pretty (Kind ValueType t) = pretty t -data Class = DomainType | ValueType | MemberType +data Class = DomainType | ValueType deriving (Show,Eq,Ord) -instance Pretty Class where +instance Pretty Class where pretty c = case c of DomainType -> "Domain" ValueType -> "Value" - MemberType -> "Record/Variant Member" untype :: Typed a -> a untype (Typed _ a) = a @@ -168,7 +167,7 @@ data ErrorType | UnexpectedArg | TypeError Type Type -- Expected, got | ComplexTypeError Text Type -- Expected, got - | KindError Class Class + | KindError Class Class | InternalError --Used to explicitly tag invalid pattern matches | InternalErrorS Text -- Used for giving detail to bug messages deriving (Show,Eq,Ord) @@ -187,16 +186,6 @@ isError :: ValidatorDiagnostic -> Bool isError (ValidatorDiagnostic _ (Error _)) = True isError _ = False --- data ValidatorDiagnostic --- = TypeError String --- | StateError String --- | SyntaxError String --- | RegionError String -- Add region --- | TokenError LToken --- | TaggedTokenError String LToken --- | IllegalToken LToken -- Should not occur in practice and indicates a logical error somewhere --- | NotImplemented String --- deriving (Show) data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion deriving Show data RegionInfo = RegionInfo { @@ -230,14 +219,22 @@ tagWithType (NameNode lt) (Kind ValueType ty) = flagToken lt $ case ty of TypeInt (TagEnum _) -> TtEnumMember TypeInt (TagUnnamed _) -> TtEnumMember TypeUnnamed _ -> TtEnum - TypeVariant _ -> TtProperty - TypeRecord _ -> TtProperty + TypeVariant _ -> TtRecord + TypeVariantMember {} -> TtRecordMember + TypeRecord _ -> TtRecord + TypeRecordMember {} -> TtRecordMember TypeFunction _ _ -> TtFunction TypeSequence _ -> TtFunction TypeRelation _ -> TtFunction _ -> TtVariable -tagWithType (NameNode lt) (Kind DomainType _) = flagToken lt $ TtClass -tagWithType (NameNode lt) (Kind MemberType _) = flagToken lt $ TtProperty +tagWithType (NameNode lt) (Kind DomainType (TypeEnum{})) = flagToken lt TtEnum +tagWithType (NameNode lt) (Kind DomainType (TypeRecord{})) = flagToken lt TtRecord +tagWithType (NameNode lt) (Kind DomainType (TypeVariant{})) = flagToken lt TtRecord +tagWithType (NameNode lt) (Kind DomainType _) = flagToken lt TtDomain +-- tagWithType (NameNode lt) (Kind MemberType (TypeInt TagEnum {})) = flagToken lt TtEnumMember +-- tagWithType (NameNode lt) (Kind MemberType (TypeRecord{})) = flagToken lt TtRecordMember +-- tagWithType (NameNode lt) (Kind MemberType (TypeVariant{})) = flagToken lt TtRecordMember +-- tagWithType (NameNode lt) (Kind MemberType _) = flagToken lt TtVariable data ValidatorState = ValidatorState { typeChecking :: Bool, @@ -452,15 +449,16 @@ validateGiven (GivenStatementNode idents l1 domain) = checkSymbols [l1] -- Colon names <- validateSequence (validateNameAs TtVariable) idents (dType, dom) <- typeSplit <$> validateDomain domain - let declarations = [(mkDeclaration r n (simple dType)) | (r, Name n) <- names] + let memberType = getDomainMembers dType + let declarations = [(mkDeclaration r n (simple memberType)) | (r, Name n) <- names] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x,(r,False,simple dType)) ) names + mapM_ (\(r,x) -> putSymbol (x,(r,False,simple memberType)) ) names return $ [ FindOrGiven Given nm dom|(_,nm) <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do [l1, l2, l3] `are` TtKeyword --new Type enum names <- validateSequence (validateNameAs TtEnum) se - let eType = simple . TypeEnum + let eType = Kind DomainType . TypeEnum mapM_ (\(r,x) -> putSymbol (x,(r,True,eType x) )) names return $ [GivenDomainDefnEnum n | (_,n) <- names] @@ -469,8 +467,9 @@ validateFind (FindStatementNode names colon domain) = do checkSymbols [colon] --colon names' <- validateSequence (validateNameAs TtVariable) names (dType, dom) <- typeSplit <$> validateDomain domain - mapM_ (\(r,x) -> putSymbol (x,(r,False,simple dType) )) names' - mapM_ addRegion [(mkDeclaration r n (simple dType)) | (r, Name n) <- names'] + let memberType = getDomainMembers dType + mapM_ (\(r,x) -> putSymbol (x,(r,False,simple memberType) )) names' + mapM_ addRegion [(mkDeclaration r n (simple memberType)) | (r, Name n) <- names'] return $ [ FindOrGiven Find nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> ValidatorS [Declaration] @@ -490,9 +489,9 @@ validateLettingAssignment names (LettingExpr en) = do mapM_ (\(r,x) -> putSymbol (x, (r,False,simple t) )) names' return $ [Letting n e | (_,n) <- names'] validateLettingAssignment names (LettingDomain lt dn) = do - lt `isA` TtModifier --TODO classify + lt `isA` TtSubKeyword --TODO classify (tDomain,domain) <- typeSplit <$> validateDomain dn - names' <- validateSequence (validateNameAs TtClass) names + names' <- validateSequence (validateNameAs TtDomain) names let declarations = [ mkDeclaration r n (Kind DomainType tDomain) |(r, Name n) <- names'] mapM_ addRegion declarations mapM_ (\(r,x) -> putSymbol (x, (r,False,Kind DomainType tDomain))) names' @@ -507,14 +506,15 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do [ (do let nameMap = zip members ([1..] :: [Int]) + let dType = Kind DomainType $ TypeEnum name let tVal = TypeInt $ TagEnum n - addRegion $ RegionInfo {rRegion=r, rText=n, rType=simple tVal, rDeclaration=Ref r} - void $ putSymbol (Name n,(r,True,(simple tVal))) + addRegion $ RegionInfo {rRegion=r, rText=n, rType=dType, rDeclaration=Ref r} + void $ putSymbol (Name n,(r,True,dType)) mapM_ ( \(x,i) -> putSymbol (x,(r,False,simple tVal)) ) nameMap ) - |(r, Name n) <- names' + |(r, name@(Name n)) <- names' ] return $ [LettingDomainDefnEnum n members| (_,n) <- names'] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do @@ -523,9 +523,10 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do size <- do setContextFrom szExp validateExpression szExp ?=> exactly tInt - let d = simple . TypeUnnamed + let d = Kind DomainType . TypeUnnamed + mapM_ addRegion [mkDeclaration r n (d $ Name n)|(r,Name n)<- names' ] --TODO delcs - mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names' + mapM_ (\(r,x) -> putSymbol (x,(r,True,d x))) names' return $ [LettingDomainDefnUnnamed n size| (_,n) <- names'] @@ -554,13 +555,7 @@ invalid :: ValidatorDiagnostic -> Validator a invalid err = do raiseError err return Nothing - -- Validator Nothing [err] - --- rg :: String --- rg = case g of --- (Validator x es) -> show (x, es) --- type Checker a = State [ValidatorDiagnostic] (Maybe a) validateSymbol :: LToken -> Validator Lexeme validateSymbol s = @@ -581,7 +576,7 @@ getDomainType :: Kind -> ValidatorS Type getDomainType (Kind DomainType t) = pure t getDomainType (Kind k _) = do contextTypeError $ KindError DomainType k - return TypeAny + return TypeAny type TypedDomain = Typed (Domain () Expression) @@ -631,16 +626,17 @@ validateDomain dm = case dm of return . Typed tInt $ DomainInt TagInt ranges' validateRangedInt Nothing = return . Typed tInt $ DomainInt TagInt [] validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain - validateEnumRange name ranges = do + validateEnumRange name@(NameNode n) ranges = do + flagToken n TtEnum setContextFrom name Just name' <- validateIdentifier name _ <- resolveReference (symbolRegion name,Name name') a <- getSymbol name' case a of Just (_,True,t) -> do - t' <- getValueType t + t' <- getDomainType t rs <-case ranges of - Just rs -> pure . catMaybes <$> validateList_ (f2n $ validateRange t') rs + Just rs -> pure . catMaybes <$> validateList_ (f2n $ validateRange (getDomainMembers t')) rs Nothing -> return Nothing return $ Typed t' $ DomainEnum (Name name') rs Nothing Just (_,False,t) -> do @@ -663,18 +659,18 @@ validateDomain dm = case dm of let lst' = mapMaybe (\(r,m)->(\x->(r,x))<$>m) lst let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' --push members - let t = TypeRecord ts - mapM_ (\(r,(a,_))->putSymbol (a,(r,False,Kind MemberType t))) ds - return $ Typed t (DomainRecord (unregion <$> ds)) + let t n = Kind ValueType $ TypeRecordMember n ts + mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t a))) ds + return $ Typed (TypeRecord ts) (DomainRecord (unregion <$> ds)) validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain validateVariantDomain namedDoms = do lst <- validateList (f2n validateNamedDomainInVariant) namedDoms let lst' = mapMaybe (\(r,m)->(\x->(r,x))<$>m) lst let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' --push members - let t = TypeVariant ts - mapM_ (\(r,(a,_))->putSymbol (a,(r,False,Kind MemberType t))) ds - return $ Typed t (DomainVariant (unregion <$> ds)) + let t n = Kind ValueType $ TypeVariantMember n ts + mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t a))) ds + return $ Typed (TypeVariant ts) (DomainVariant (unregion <$> ds)) validateMatrixDomain :: ListNode DomainNode -> DomainNode -> ValidatorS TypedDomain validateMatrixDomain indexes dom = do idoms <- validateList_ validateDomain indexes @@ -743,7 +739,7 @@ validateDomain dm = case dm of validateIndexedByNode :: Maybe IndexedByNode -> ValidatorS () validateIndexedByNode Nothing = return () -validateIndexedByNode (Just (IndexedByNode a b)) = [a,b] `are` TtKeyword +validateIndexedByNode (Just (IndexedByNode a b)) = [a,b] `are` TtSubKeyword todo :: Text -> Validator a todo s = invalid $ ValidatorDiagnostic GlobalRegion $ Error $ InternalErrorS (append "Not Implemented: " s) @@ -870,7 +866,7 @@ validatePartitionAttributes atts = do validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,Maybe Expression) validateAttributeNode vs (NamedAttributeNode t Nothing) = do - flagToken t TtModifier + flagToken t TtAttribute Just name <- validateSymbol t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" @@ -878,7 +874,7 @@ validateAttributeNode vs (NamedAttributeNode t Nothing) = do Just False -> return . pure $ (name , Nothing) validateAttributeNode vs (NamedAttributeNode t (Just e)) = do - flagToken t TtModifier + flagToken t TtAttribute setContextFrom e expr <- validateExpression e ?=> exactly tInt Just name <- validateSymbol t @@ -890,7 +886,7 @@ validateAttributeNode vs (NamedAttributeNode t (Just e)) = do validateNamedDomainInVariant :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInVariant (NameDomainNode name m_dom) = do - name' <- validateNameAs TtProperty name + name' <- validateNameAs TtRecordMember name domain' <-case m_dom of Nothing -> do return . Typed tInt $ DomainInt TagInt [RangeSingle 0] Just (l,d) -> do l `isA` TtOperator; validateDomain d @@ -898,7 +894,7 @@ validateNamedDomainInVariant (NameDomainNode name m_dom) = do validateNamedDomainInRecord :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInRecord (NameDomainNode name m_dom) = do - name' <- validateNameAs TtProperty name + name' <- validateNameAs TtRecordMember name domain' <-case m_dom of Just (l,d) ->l `isA` TtOperator >> validateDomain d Nothing -> do @@ -948,12 +944,25 @@ validateExpression expr = case expr of SpecialCase scn -> validateSpecialCase scn MissingExpressionNode lt -> do raiseError (lt TokenError lt) ; return (fallback "Missing expression") +validateFlexibleExpression :: ExpressionNode -> ValidatorS (Kind,Expression) +validateFlexibleExpression (IdentifierNode name) = do + Just n <- validateIdentifier name + setContextFrom name + t <- resolveReference (symbolRegion name,Name n) + tagWithType name t + return (t,Reference (Name n) Nothing) +validateFlexibleExpression (DomainExpression den) = do + (dType,d) <- typeSplit <$> validateDomainExpression den + return (Kind DomainType dType,d) +validateFlexibleExpression en = do + (t,expr) <- typeSplit <$> validateExpression en + return (simple t,expr) validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateAttributeAsConstraint l1 exprs = do es <- map untype <$> validateList_ validateExpression exprs do - flagToken l1 TtMethod + flagToken l1 TtAAC Just lx <- validateSymbol l1 let n = lookup (Name (lexemeText lx)) allSupportedAttributes r <- case (n,es) of @@ -996,7 +1005,7 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ do dot `isA` TtKeyword scoped $ do - flagToken name TtMacro + flagToken name TtQuantifier name' <- validateSymbol name over' <- validateQuantificationOver pats over -- patterns <- validateSequence_ validateAbstractPattern pats @@ -1064,8 +1073,8 @@ validateDomainExpression (DomainExpressionNode l1 dom l2) = do validateFunctionApplication :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateFunctionApplication name args = do - args' <- validateList validateExpression args - flagToken name TtMethod + args' <- validateList validateFlexibleExpression args + flagToken name TtFunction Just name' <- validateSymbol name setContextFrom args validateFuncOp name' args' @@ -1075,16 +1084,16 @@ validateFunctionApplication name args = do validateIdentifierExpr :: NameNode -> ValidatorS (Typed Expression) validateIdentifierExpr name = do Just n <- validateIdentifier name + setContextFrom name t <- resolveReference (symbolRegion name,Name n) tagWithType name t t' <- getValueType t return . Typed t' $ Reference (Name n) Nothing ---TODO Adress the major hole in the type system current validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do flagToken lt TtOperator - Just op <- validateSymbol lt + Just op <- validateSymbol lt setContextFrom expr let (refT) = case op of L_Minus -> tInt @@ -1116,13 +1125,13 @@ validatePostfixOp (ApplicationNode args) = do return $ \exp -> do let reg = symbolRegion exp (t,e) <- typeSplit <$> validateExpression exp - args' <- validateList validateExpression args + args' <- validateList (validateExpression>=> \(Typed t' e')->return (simple t',e')) args case t of - TypeFunction _ _ -> validateFuncOp L_image ((reg,Typed t e):args') - TypeSequence _ -> validateFuncOp L_image ((reg,Typed t e):args') + TypeFunction _ _ -> validateFuncOp L_image ((reg,(simple t, e)):args') + TypeSequence _ -> validateFuncOp L_image ((reg,(simple t, e)):args') _ -> do let underscore = Reference "_" Nothing - let ys = [if underscore == v then Nothing else Just x| x@(_,Typed _ v) <- args'] + let ys = [if underscore == v then Nothing else Just (r,Typed t v)| x@(r,(Kind ValueType t,v)) <- args'] iType <- case t of TypeRelation ts -> checkProjectionArgs ts ys _ -> do @@ -1199,7 +1208,7 @@ validateIndexingOrSlicing exp range = do validateRecordMemberIndex :: [(Name,Type)] -> ExpressionNode -> ValidatorS (Type,Expression) validateRecordMemberIndex ns (IdentifierNode nn) = do - n <- validateNameAs TtProperty nn + n <- validateNameAs TtRecordMember nn let t = lookup n ns ty <- case t of Just ty -> return ty @@ -1461,15 +1470,18 @@ projectionTypeDomain :: DiagnosticRegion -> Type -> ValidatorS Type projectionTypeDomain r t = case t of --TODO check and do properly TypeAny -> return TypeAny TypeTuple tys -> return t + TypeBool -> return t TypeMatrix i ty -> return ty TypeInt t -> return $ TypeInt t + TypeEnum (Name n) -> return $ TypeInt $ TagEnum n + TypeUnnamed (Name n) -> return $ TypeInt $ TagUnnamed n TypeList ty -> return ty TypeSet ty -> return ty TypeMSet ty -> return ty TypeSequence ty -> return $ TypeTuple [tInt,ty] TypeRelation ts -> return $ TypeTuple ts TypeFunction fr to -> return $ TypeTuple [fr,to] - _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny + _ -> (raiseTypeError $ r SemanticError (pack $ "Domain of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny mkAbstractLiteral :: AbstractLiteral Expression -> Expression mkAbstractLiteral x = case e2c (AbstractLiteral x) of Nothing -> AbstractLiteral x @@ -1512,7 +1524,7 @@ validateIntLiteral t = do validateBoolLiteral :: LToken -> ValidatorS Constant validateBoolLiteral t = do - flagToken t $ TtOther "Boolean" + flagToken t $ TtBool Just l <- validateSymbol t case l of L_true -> return $ ConstantBool True @@ -1762,7 +1774,7 @@ unifyPatterns t = mapM (flip unifyPattern t) unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do - (Name n) <- validateNameAs TtParameter nn + (Name n) <- validateNameAs TtLocal nn -- traceM $ show n ++ ":" ++ show t --REVIEW don't put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,simple t)) @@ -1825,6 +1837,60 @@ getMemberTypes t = case t of -- empty +getDomainMembers :: Type -> Type +getDomainMembers t = case t of + TypeAny -> t + TypeBool -> t + TypeInt it -> case it of + TagInt -> t + TagEnum _ -> error "Domain should use typeEnum instead" + TagUnnamed _ -> error "Domain should use typeUnamed instead" + TypeEnum n -> TypeInt . TagEnum $ case n of + Name txt -> txt + MachineName {} -> error "This should never be user specified" + NameMetaVar s -> pack s + TypeUnnamed n -> TypeInt . TagUnnamed $ case n of + Name txt -> txt + MachineName {} -> error "This should never be user specified" + NameMetaVar s -> pack s + TypeTuple tys -> TypeTuple $ map getDomainMembers tys + TypeRecord tys -> TypeRecord $ map (second getDomainMembers) tys + TypeVariant tys -> TypeVariant $ map (second getDomainMembers) tys + TypeList ty -> TypeList $ getDomainMembers ty + TypeMatrix ty ty' -> TypeMatrix ty $ getDomainMembers ty' + TypeSet ty -> TypeSet $ getDomainMembers ty + TypeMSet ty -> TypeMSet $ getDomainMembers ty + TypeFunction ty ty' -> TypeFunction (getDomainMembers ty) (getDomainMembers ty') + TypeSequence ty -> TypeSequence $ getDomainMembers ty + TypeRelation tys -> TypeRelation $ map getDomainMembers tys + TypePartition ty -> TypePartition $ getDomainMembers ty + _ -> bug $ "Unknown domain type" <+> pretty t + +getDomainFromValue :: Type -> Type +getDomainFromValue t = case t of + TypeAny -> t + TypeBool -> t + TypeInt it -> case it of + TagInt -> t + TagEnum t -> TypeEnum (Name t) + TagUnnamed t -> TypeUnnamed (Name t) + TypeEnum n -> t + TypeUnnamed n -> t + TypeTuple tys -> TypeTuple $ map getDomainFromValue tys + TypeRecord tys -> TypeRecord $ map (second getDomainFromValue) tys + TypeVariant tys -> TypeVariant $ map (second getDomainFromValue) tys + TypeList ty -> TypeList $ getDomainFromValue ty + TypeMatrix ty ty' -> TypeMatrix ty $ getDomainFromValue ty' + TypeSet ty -> TypeSet $ getDomainFromValue ty + TypeMSet ty -> TypeMSet $ getDomainFromValue ty + TypeFunction ty ty' -> TypeFunction (getDomainFromValue ty) (getDomainFromValue ty') + TypeSequence ty -> TypeSequence $ getDomainFromValue ty + TypeRelation tys -> TypeRelation $ map getDomainFromValue tys + TypePartition ty -> TypePartition $ getDomainFromValue ty + _ -> bug $ "Unknown member type" <+> pretty t + + + data DomainTyped a = DomainTyped DomainType a data DomainSize = Unkown | Infinite | Sized Int @@ -1849,7 +1915,8 @@ instance Fallback Expression where instance (Fallback a) => Fallback (Typed a) where fallback = Typed TypeAny . fallback - +instance (Fallback a) => Fallback (Kind, a) where + fallback msg = (Kind ValueType TypeAny , fallback msg) instance Fallback (Maybe a) where fallback = const Nothing instance Fallback Name where @@ -1871,59 +1938,74 @@ funcOpBuilder l = (functionOps l) (mkOp $ FunctionOp l) -- functionOps l@L_fAnd = (validateArgList [isLogicalContainer],const TypeBool) functionOps :: Lexeme -> ([Expression] -> Expression) -> [Arg] -> ValidatorS (Typed Expression) functionOps l = case l of - L_fAnd -> unFunc isLogicalContainer (pure . const TypeBool) - L_fOr -> unFunc isLogicalContainer (pure . const TypeBool) - L_fXor -> unFunc isLogicalContainer (pure . const TypeBool) - L_Sum -> unFunc sumArgs (pure . const tInt) - L_Product -> unFunc sumArgs (pure . const tInt) - L_true -> unFunc anyType (pure . const TypeBool) - L_toInt -> unFunc (only TypeBool) (pure . const tInt) - L_makeTable -> unFunc (only TypeBool) (pure . const TypeBool) - L_table -> biFunc tableArgs (const2 TypeBool) - L_gcc -> triFunc (each3 listInt) (const3 TypeBool) - L_atleast -> triFunc (each3 listInt) (const3 TypeBool) - L_atmost -> triFunc (each3 listInt) (const3 TypeBool) - L_defined -> unFunc funcSeq funcDomain - L_range -> unFunc funcSeq funcRange + L_fAnd -> unFuncV isLogicalContainer (pure . const TypeBool) + L_fOr -> unFuncV isLogicalContainer (pure . const TypeBool) + L_fXor -> unFuncV isLogicalContainer (pure . const TypeBool) + L_Sum -> unFuncV sumArgs (pure . const tInt) + L_Product -> unFunc (valueOnly sumArgs) (pure . const tInt) + L_true -> unFuncV anyType (pure . const TypeBool) + L_toInt -> unFuncV (only TypeBool) (pure . const tInt) + L_makeTable -> unFuncV (only TypeBool) (pure . const TypeBool) + L_table -> biFuncV tableArgs (const2 TypeBool) + L_gcc -> triFunc (each3 $ valueOnly listInt) (const3 TypeBool) + L_atleast -> triFunc (each3 $ valueOnly listInt) (const3 TypeBool) + L_atmost -> triFunc (each3 $ valueOnly listInt) (const3 TypeBool) + L_defined -> unFuncV funcSeq (fmap TypeSet . funcDomain) + L_range -> unFuncV funcSeq (fmap TypeSet . funcRange) L_restrict -> biFunc restrictArgs restrictTypes - L_allDiff -> unFunc listOrMatrix (const $ pure TypeBool) - L_alldifferent_except -> biFunc (indep listOrMatrix enumerable) (const2 TypeBool) - L_catchUndef -> biFunc unifies (\a b -> pure $ mostDefinedS $ map typeOf_ $ catMaybes [a,b]) + L_allDiff -> unFuncV listOrMatrix (const $ pure TypeBool) + L_alldifferent_except -> biFuncV (indep listOrMatrix enumerable) (const2 TypeBool) + L_catchUndef -> biFuncV unifies (\a b -> pure $ mostDefinedS $ catMaybes [a,b]) L_dontCare -> unFunc anyType (const $ pure TypeBool) - L_toSet -> unFunc toSetArgs typeToSet - L_toMSet -> unFunc toMSetArgs typeToMSet - L_toRelation -> unFunc func typeToRelation + L_toSet -> unFuncV toSetArgs typeToSet + L_toMSet -> unFuncV toMSetArgs typeToMSet + L_toRelation -> unFuncV func typeToRelation L_max -> unFunc minMaxArgs minMaxType L_min -> unFunc minMaxArgs minMaxType - L_image -> biFunc imageArgs (const . funcRange) - L_transform -> biFunc transformArgs (const (typeOf_ <$>)) - L_imageSet -> biFunc imSetArgs (\a -> const $ TypeSet <$> funcRange a) - L_preImage -> biFunc preImageArgs (\a -> const $ TypeSet <$> funcDomain a) - L_inverse -> biFunc inverseArgs (const2 TypeBool) - L_freq -> biFunc freqArgs (const2 tInt) - L_hist -> unFunc histArgs histType - L_parts -> unFunc part partsType - L_together -> biFunc setPartArgs (const2 TypeBool) - L_apart -> biFunc setPartArgs (const2 TypeBool) - L_party -> biFunc partyArgs partyType - L_participants -> unFunc part partInner - L_active -> biFunc activeArgs (const2 TypeBool) - L_pred -> unFunc enumerable enumerableType - L_succ -> unFunc enumerable enumerableType - L_factorial -> unFunc (only tInt) (const $ pure tInt) - L_powerSet -> unFunc set powerSetType - L_concatenate -> unFunc concatArgs concatType + L_image -> biFuncV imageArgs (const . funcRange) + L_transform -> biFuncV transformArgs (const id) + L_imageSet -> biFuncV imSetArgs (\a -> const $ TypeSet <$> funcRange a) + L_preImage -> biFuncV preImageArgs (\a -> const $ TypeSet <$> funcDomain a) + L_inverse -> biFuncV inverseArgs (const2 TypeBool) + L_freq -> biFuncV freqArgs (const2 tInt) + L_hist -> unFuncV histArgs histType + L_parts -> unFuncV part partsType + L_together -> biFuncV setPartArgs (const2 TypeBool) + L_apart -> biFuncV setPartArgs (const2 TypeBool) + L_party -> biFuncV partyArgs partyType + L_participants -> unFuncV part partInner + L_active -> biFuncV activeArgs (const2 TypeBool) + L_pred -> unFuncV enumerable enumerableType + L_succ -> unFuncV enumerable enumerableType + L_factorial -> unFuncV (only tInt) (const $ pure tInt) + L_powerSet -> unFuncV set powerSetType + L_concatenate -> unFuncV concatArgs concatType L_flatten -> \ b a -> case a of - [] -> (unFunc (unaryFlattenArgs) (flattenType Nothing)) b a - [_] -> (unFunc (unaryFlattenArgs) (flattenType Nothing)) b a - _ -> (biFunc (binaryFlattenArgs) (\(getNum->a) -> flattenType a)) (b) a + [] -> unFuncV unaryFlattenArgs (flattenType Nothing) b a + [_] -> unFuncV unaryFlattenArgs (flattenType Nothing) b a + _ -> biFunc (valueOnly2 binaryFlattenArgs) (\v t -> flattenType (getNum v) (typeOnly t)) (b) a _ -> bug $ text $ "Unkown functional operator " ++ show l where + valueOnly :: (SArg -> Validator a) -> Arg -> Validator a + valueOnly f (r,(k,e)) = do + t <- getValueType k + f (r,Typed t e) + valueOnly2 :: (SArg -> SArg -> Validator a) -> Arg -> Arg -> Validator a + valueOnly2 f (r1,(k1,e1)) (r2,(k2,e2)) = do + t1 <- getValueType k1 + t2 <- getValueType k2 + f (r1,Typed t1 e1) (r2,Typed t2 e2) + typeOnly :: Maybe (Kind,Expression) -> Maybe Type + typeOnly (Just (Kind ValueType t,_)) = Just t + typeOnly _ = Nothing + unFuncV a t= unFunc (valueOnly a) (t . typeOnly) + biFuncV :: (SArg -> SArg -> Validator ()) -> (Maybe Type-> Maybe Type -> Maybe Type) -> ([Expression] -> Expression) -> [Arg] -> ValidatorS (Typed Expression) + biFuncV a t = biFunc (valueOnly2 a) (\t1 t2-> t (typeOnly t1) (typeOnly t2)) valid = return $ pure () const2 = const.const . pure const3 = const.const.const . pure - getNum :: Maybe (Typed Expression) -> Maybe Int - getNum (Just(Typed _ x)) = case intOut "" x of + getNum :: Maybe (Kind,Expression) -> Maybe Int + getNum (Just(_, x)) = case intOut "" x of Nothing -> Nothing Just n -> pure $ fromInteger n getNum _ = Nothing @@ -1931,12 +2013,12 @@ functionOps l = case l of anyType = const . return $ Just () - indep :: (Arg -> Validator ()) -> (Arg -> Validator ()) -> (Arg -> Arg -> Validator ()) + indep :: (SArg -> Validator ()) -> (SArg -> Validator ()) -> (SArg -> SArg -> Validator ()) indep f1 f2 a b = do v1 <- f1 a v2 <- f2 b if null $ catMaybes $ [v1,v2] then return $ pure () else return Nothing - binaryFlattenArgs :: Arg -> Arg -> Validator () + binaryFlattenArgs :: SArg -> SArg -> Validator () binaryFlattenArgs (r1,d) b = do off <- case intOut "" (untype d) of Just (fromInteger->a) | a > 0 -> return $ Just a @@ -1945,21 +2027,21 @@ functionOps l = case l of let ref' = foldr id TypeAny ref r <- unifyTypesFailing ref' b return $ if null off || null r then Nothing else Just () - unaryFlattenArgs :: Arg -> Validator () + unaryFlattenArgs :: SArg -> Validator () unaryFlattenArgs (r,typeOf_->(TypeMatrix _ _)) = valid unaryFlattenArgs (r,typeOf_->(TypeList _)) = valid unaryFlattenArgs (r,typeOf_->TypeAny) = valid unaryFlattenArgs (r,typeOf_->t) = invalid $ r ComplexTypeError "List or Matrix " t - concatType :: Maybe (Typed Expression) -> Maybe Type - concatType (fmap typeOf_->Just(TypeMatrix _ (TypeList t))) = Just $ TypeList t - concatType (fmap typeOf_->Just(TypeMatrix _ (TypeMatrix _ t))) = Just $ TypeList t - concatType (fmap typeOf_->Just(TypeList (TypeList t))) = Just $ TypeList t - concatType (fmap typeOf_->Just(TypeList (TypeMatrix _ t))) = Just $ TypeList t + concatType :: Maybe Type -> Maybe Type + concatType (Just(TypeMatrix _ (TypeList t))) = Just $ TypeList t + concatType (Just(TypeMatrix _ (TypeMatrix _ t))) = Just $ TypeList t + concatType (Just(TypeList (TypeList t))) = Just $ TypeList t + concatType (Just(TypeList (TypeMatrix _ t))) = Just $ TypeList t concatType _ = Just $ TypeList TypeAny - concatArgs :: Arg -> Validator () + concatArgs :: SArg -> Validator () concatArgs = binaryFlattenArgs (GlobalRegion,Typed tInt $ Constant $ ConstantInt TagInt 1) - tableArgs :: Arg -> Arg -> Validator () + tableArgs :: SArg -> SArg -> Validator () tableArgs (r1,typeOf_->t1) (r2,typeOf_->t2) = do a <- case t1 of t | isValidInner t -> valid @@ -1980,7 +2062,7 @@ functionOps l = case l of TypeMatrix _ TypeAny -> True _ -> False - toMSetArgs :: Arg -> Validator () + toMSetArgs :: SArg -> Validator () toMSetArgs (r,typeOf_-> a) = case a of TypeAny -> return $ pure () TypeList _ -> return $ pure () @@ -1990,7 +2072,7 @@ functionOps l = case l of TypeFunction {} -> return $ pure () TypeRelation {} -> return $ pure () _ -> invalid $ r ComplexTypeError "Matrix ,list,function,relation,mset,set " a - toSetArgs :: Arg -> Validator () + toSetArgs :: SArg -> Validator () toSetArgs (r,typeOf_-> a) = case a of TypeAny -> return $ pure () TypeList _ -> return $ pure () @@ -1999,13 +2081,13 @@ functionOps l = case l of TypeFunction {} -> return $ pure () TypeRelation {} -> return $ pure () _ -> invalid $ r ComplexTypeError "Matrix ,list,function,relation,mset " a - listOrMatrix :: Arg -> Validator () + listOrMatrix :: SArg -> Validator () listOrMatrix (r,typeOf_-> a) = case a of TypeAny -> return $ pure () TypeList _ -> return $ pure () TypeMatrix {} -> return $ pure () _ -> invalid $ r ComplexTypeError "Matrix or list" a - freqArgs :: Arg -> Arg -> Validator () + freqArgs :: SArg -> SArg -> Validator () freqArgs (r1,a) (r2,b) = do let tb = typeOf_ b let (rt,ti) = case typeOf_ a of @@ -2016,22 +2098,22 @@ functionOps l = case l of b' <- unifyTypesFailing ti (r2,b) return $ if null a' || null b' then Nothing else Just () - unifies :: Arg -> Arg -> Validator () + unifies :: SArg -> SArg -> Validator () unifies a b = do let md = mostDefinedS $ map (typeOf_.unregion) [a,b] a' <- unifyTypesFailing md a b' <- unifyTypesFailing md b return $ if null a' || null b' then Nothing else Just () - func :: Arg -> Validator () + func :: SArg -> Validator () func (_,Typed (TypeFunction _ _) _) = valid func (_,Typed TypeAny _) = valid func (r,Typed t _) = invalid $ r TypeError (TypeFunction TypeAny TypeAny) t - set :: Arg -> Validator Type + set :: SArg -> Validator Type set (_,Typed (TypeSet t) _) = return $ pure t set (_,Typed TypeAny _) = return $ pure TypeAny set (r,Typed t _) = invalid $ r TypeError (TypeSet TypeAny) t - powerSetType (Just (Typed (TypeSet i) _)) = Just $ TypeSet (TypeSet i) + powerSetType (Just ((TypeSet i))) = Just $ TypeSet (TypeSet i) powerSetType _ = Just $ TypeSet $ TypeSet TypeAny only t (r,typeOf_->t')= do setContext r; if t'==TypeAny || t == t' then return $ Just t else invalid $ r TypeError t t' @@ -2039,17 +2121,36 @@ functionOps l = case l of listInt (r,typeOf_->t') = case t' of TypeAny -> return $ Just t' TypeList TypeInt{} -> return $ Just t' - TypeMatrix ty TypeInt{} -> return $ Just t' + TypeMatrix _ TypeInt{} -> return $ Just t' _ -> invalid $ r ComplexTypeError "Matrix or list of int or enum" t' - partInner :: Maybe (Typed Expression) -> Maybe Type - partInner (fmap typeOf_->Just (TypePartition a)) = Just $ TypeSet a + partInner :: Maybe Type -> Maybe Type + partInner (Just (TypePartition a)) = Just $ TypeSet a partInner _ = Just $ TypeSet TypeAny restrictArgs :: Arg -> Arg -> Validator () - restrictArgs (r1,t1) (r2,t2) = valid --TODO - restrictTypes :: Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type - restrictTypes t1 t2 = Nothing --TODO - imSetArgs :: Arg -> Arg -> Validator () + restrictArgs (r1,(k,e)) (r2,(kd,_)) = do + setContext r1 + funcType <- getValueType k + setContext r2 + domType <- getDomainType kd + r <- unifyTypesFailing (TypeFunction domType TypeAny) (r1,Typed funcType e) + valid + restrictTypes :: Maybe (Kind,Expression) -> Maybe (Kind,Expression) -> Maybe Type + restrictTypes (fmap fst -> kv) (fmap fst-> kd) = Just $ TypeFunction from to + where + dType = case kd of + Just (Kind DomainType t) -> getDomainMembers t + _ -> TypeAny + from = case kv of + Just (Kind ValueType (TypeFunction fr _)) | typesUnifyS [dType,fr]-> mostDefinedS [dType,fr] + Just (Kind ValueType (TypeFunction fr _)) -> fr + _ -> mostDefinedS [TypeAny,dType] + to = case kv of + Just (Kind ValueType (TypeFunction _ to')) -> to' + _ -> TypeAny + + + imSetArgs :: SArg -> SArg -> Validator () imSetArgs (r1,a) (r2,b) = do let t = case (typeOf_ a,typeOf_ b) of (TypeFunction i _,tb) -> mostDefinedS [i,tb] @@ -2058,7 +2159,7 @@ functionOps l = case l of a' <- unifyTypesFailing (TypeFunction t TypeAny) (r1,a) b' <- unifyTypesFailing t (r2,b) return $ if null a' || null b' then Nothing else Just () - preImageArgs :: Arg -> Arg -> Validator () + preImageArgs :: SArg -> SArg -> Validator () preImageArgs (r1,a) (r2,b) = do let t = case (typeOf_ a,typeOf_ b) of (TypeFunction _ i,tb) -> mostDefinedS [i,tb] @@ -2068,7 +2169,7 @@ functionOps l = case l of b' <- unifyTypesFailing t (r2,b) return $ if null a' || null b' then Nothing else Just () - partyArgs :: Arg -> Arg -> Validator () + partyArgs :: SArg -> SArg -> Validator () partyArgs (r1,a) (r2,b) = do let t = case (typeOf_ a,typeOf_ b) of (ta,TypePartition tb) -> mostDefinedS [ta,tb] @@ -2077,7 +2178,7 @@ functionOps l = case l of b' <- unifyTypesFailing (TypePartition t) (r2,b) return $ if null a' || null b' then Nothing else Just () - inverseArgs :: Arg -> Arg -> Validator () + inverseArgs :: SArg -> SArg -> Validator () inverseArgs (r1,a) (r2,b) = do let (fi,fo) = case (typeOf_ a,typeOf_ b) of (TypeFunction fi fo,TypeFunction gi go) -> (mostDefinedS [fi,go],mostDefinedS [fo,gi]) @@ -2087,7 +2188,7 @@ functionOps l = case l of a' <- unifyTypesFailing (TypeFunction fi fo) (r1,a) b' <- unifyTypesFailing (TypeFunction fo fi) (r2,b) return $ if null a' || null b' then Nothing else Just () - setPartArgs :: Arg -> Arg -> Validator () + setPartArgs :: SArg -> SArg -> Validator () setPartArgs (r1,a) (r2,b) = do let t = case (typeOf_ a,typeOf_ b) of (TypeSet st,TypePartition pt) -> mostDefinedS [st,pt] @@ -2098,26 +2199,28 @@ functionOps l = case l of b' <- unifyTypesFailing (TypePartition t) (r2,b) return $ if null a' || null b' then Nothing else Just () - partyType :: Maybe (Typed Expression) ->Maybe (Typed Expression) -> Maybe Type + partyType :: Maybe Type ->Maybe Type -> Maybe Type partyType a b = do - let at = case typeOf_ <$> a of + let at = case a of Just (TypePartition t) -> t _ -> TypeAny - let bt = maybe TypeAny typeOf_ b + let bt = fromMaybe TypeAny b return $ TypeSet $ mostDefinedS [at,bt] - partsType :: Maybe (Typed Expression) -> Maybe Type - partsType (fmap typeOf_->Just (TypePartition a)) = Just $ TypeSet $ TypeSet a - partsType (fmap typeOf_->Just TypeAny) = Just $ TypeSet $ TypeSet TypeAny + partsType :: Maybe (Type) -> Maybe Type + partsType (Just (TypePartition a)) = Just $ TypeSet $ TypeSet a + partsType (Just TypeAny) = Just $ TypeSet $ TypeSet TypeAny partsType _ = Nothing + minMaxArgs :: Arg -> Validator () - minMaxArgs (r,(Typed t e)) | Just (dom :: Domain () Expression) <- project e = + minMaxArgs (r,(Kind DomainType t ,e)) = case t of TypeInt TagInt -> valid TypeInt (TagEnum _) -> valid TypeEnum {} -> valid TypeAny -> valid _ -> invalid $ r ComplexTypeError "Domain of int-like or matrix of int-like" t - minMaxArgs (r,Typed t _) = do + minMaxArgs (r,(k ,e)) = do + t <- getValueType k inner <- case t of TypeList tyInner -> return tyInner TypeMatrix _ tyInner -> return tyInner @@ -2131,34 +2234,33 @@ functionOps l = case l of TypeEnum {} -> valid TypeAny -> valid _ -> invalid $ r ComplexTypeError "Domain of int-like or matrix of int-like" t - - minMaxType :: Maybe (Typed Expression) -> Maybe Type - minMaxType (Just (Typed t@(TypeInt _) _)) = Just t - minMaxType (Just (Typed t@(TypeEnum {}) _)) = Just t - minMaxType (Just (Typed (TypeMatrix _ a) v)) = minMaxType (Just (Typed a v)) - minMaxType (Just (Typed (TypeList a) v)) = minMaxType (Just (Typed a v)) - minMaxType (Just (Typed (TypeSet a) v)) = minMaxType (Just (Typed a v)) - minMaxType (Just (Typed (TypeMSet a) v)) = minMaxType (Just (Typed a v)) + minMaxType :: Maybe (Kind,a) -> Maybe Type + minMaxType (Just (Kind DomainType t@(TypeInt{}),_)) = Just t + minMaxType (Just (Kind DomainType (TypeEnum (Name nm)),_)) = Just . TypeInt $ TagEnum nm + minMaxType (Just (Kind ValueType (TypeMatrix _ a),_)) = minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType (TypeList a) ,_)) = minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType (TypeSet a) ,_) )= minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType (TypeMSet a) ,_) )= minMaxType (Just (Kind DomainType a,())) minMaxType _ = Just TypeAny - transformArgs :: Arg -> Arg -> Validator () + transformArgs :: SArg -> SArg -> Validator () transformArgs a b = do return $ pure () - activeArgs :: Arg -> Arg -> Validator () - activeArgs (r,(typeOf_->t@(TypeVariant vs))) b = do - void <$> unifyTypesFailing t b --todo this could be better + activeArgs :: SArg -> SArg -> Validator () activeArgs (r,(typeOf_->TypeAny)) b =valid + activeArgs (r,(typeOf_->t@(TypeVariant vs))) (r2,typeOf_->b) = do + checkRVMember (r,t) (r2,b) activeArgs (r,(typeOf_->t)) b = invalid $ r ComplexTypeError "Variant " t - typeToSet :: Maybe (Typed Expression) -> Maybe Type - typeToSet (Just (typeOf_->t)) = TypeSet <$> tMembers t + typeToSet :: Maybe Type -> Maybe Type + typeToSet (Just t) = TypeSet <$> tMembers t typeToSet _ = Nothing - typeToMSet :: Maybe (Typed Expression) -> Maybe Type - typeToMSet (Just (typeOf_->t)) = TypeMSet <$> tMembers t + typeToMSet :: Maybe Type -> Maybe Type + typeToMSet (Just t) = TypeMSet <$> tMembers t typeToMSet _ = Nothing - typeToRelation :: Maybe (Typed Expression) -> Maybe Type - typeToRelation (Just(typeOf_->(TypeFunction i j))) = Just $ TypeRelation [i,j] - typeToRelation (Just(typeOf_->TypeAny)) = Just $ TypeRelation [TypeAny,TypeAny] + typeToRelation :: Maybe Type -> Maybe Type + typeToRelation (Just(TypeFunction i j)) = Just $ TypeRelation [i,j] + typeToRelation (Just(TypeAny)) = Just $ TypeRelation [TypeAny,TypeAny] typeToRelation _ = Nothing tMembers t = case t of TypeAny -> Just TypeAny @@ -2170,7 +2272,7 @@ functionOps l = case l of TypeRelation tys -> Just $ TypeTuple tys _ -> Nothing - imageArgs :: Arg -> Arg -> Validator () + imageArgs :: SArg -> SArg -> Validator () imageArgs (r1,typeOf_->t1) r2 = do Just from <- case t1 of TypeAny -> return $ Just TypeAny @@ -2180,7 +2282,7 @@ functionOps l = case l of _ <- unifyTypes from r2 return $ pure () - sumArgs :: Arg -> Validator () + sumArgs :: SArg -> Validator () sumArgs (r,typeOf_->t') = do t <- case t' of TypeAny -> return TypeAny @@ -2195,39 +2297,39 @@ functionOps l = case l of TypeAny -> return $ pure () TypeInt TagInt -> return $ pure () _ -> return Nothing <* raiseTypeError (r ComplexTypeError "Integer elements" t) - funcSeq :: Arg -> Validator () + funcSeq :: SArg -> Validator () funcSeq (r,typeOf_->t') = case t' of TypeAny -> return $ pure () TypeSequence _ -> return $ pure () TypeFunction _ _ -> return $ pure () _ -> invalid $ r ComplexTypeError "Function or Sequence" t' - funcDomain :: Maybe (Typed a) -> Maybe Type - funcDomain (Just (typeOf_->(TypeFunction a _))) = Just a - funcDomain (Just (typeOf_->(TypeSequence _))) = Just tInt + funcDomain :: Maybe (Type) -> Maybe Type + funcDomain (Just (TypeFunction a _)) = Just a + funcDomain (Just (TypeSequence _)) = Just tInt funcDomain _ = Just TypeAny - funcRange :: Maybe (Typed a) -> Maybe Type - funcRange (Just (typeOf_->(TypeFunction _ b))) = Just b - funcRange (Just (typeOf_->((TypeSequence b)))) = Just b + funcRange :: Maybe (Type) -> Maybe Type + funcRange (Just (TypeFunction _ b)) = Just b + funcRange (Just ((TypeSequence b))) = Just b funcRange _ = Just TypeAny - part :: Arg -> Validator () + part :: SArg -> Validator () part (r,typeOf_->t) = case t of TypeAny -> valid TypePartition _ -> return $ pure () _ -> invalid $ r TypeError (TypePartition TypeAny) t - histArgs :: Arg -> Validator () + histArgs :: SArg -> Validator () histArgs (r,typeOf_->a) = case a of TypeMSet _ -> return $ pure () TypeList _ -> return $ pure () TypeMatrix _ _ -> return $ pure () TypeAny -> return $ pure () _ -> invalid $ r ComplexTypeError "Matrix, List or MSet" a - histType :: Maybe (Typed Expression) -> Maybe Type - histType (Just (Typed (TypeMSet a) _ )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] - histType (Just (Typed (TypeMatrix _ a) _ )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] - histType (Just (Typed (TypeList a) _ )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] + histType :: Maybe Type -> Maybe Type + histType (Just ( (TypeMSet a) )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] + histType (Just ( (TypeMatrix _ a) )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] + histType (Just ( (TypeList a) )) = Just $ TypeMatrix tInt $ TypeTuple [a,tInt] histType _ = Just $ TypeMatrix tInt $ TypeTuple [TypeAny,tInt] - enumerable :: Arg -> Validator () + enumerable :: SArg -> Validator () enumerable (r,typeOf_->t) = case t of TypeAny -> return $ pure () TypeInt TagUnnamed{} -> invalid $ r CustomError "Anonymous enums are not explictly enumerable" @@ -2235,24 +2337,24 @@ functionOps l = case l of TypeEnum{} -> return $ pure () TypeBool -> return $ pure () _ -> invalid $ r ComplexTypeError "int enum or bool" t - enumerableType :: Maybe (Typed Expression) -> Maybe Type - enumerableType (Just (Typed t@(TypeInt TagInt) _)) = Just t - enumerableType (Just (Typed t@(TypeInt (TagEnum _)) _)) = Just t - enumerableType (Just (Typed t@(TypeEnum{}) _)) = Just t + enumerableType :: Maybe (Type) -> Maybe Type + enumerableType (Just t@(TypeInt TagInt)) = Just t + enumerableType (Just t@(TypeInt (TagEnum _))) = Just t + enumerableType (Just t@(TypeEnum{})) = Just t enumerableType _ = Nothing -flattenType :: Maybe Int -> Maybe (Typed Expression) -> Maybe Type -flattenType (Just n) (Just (Typed a _ )) | n < 0 = Just a -flattenType (Just n) (Just (Typed (TypeList m) e )) = flattenType (Just (n-1)) (Just (Typed m e)) -flattenType (Just n) (Just (Typed (TypeMatrix _ m) e )) = flattenType (Just (n-1)) (Just (Typed m e)) +flattenType :: Maybe Int -> Maybe Type -> Maybe Type +flattenType (Just n) (Just a ) | n < 0 = Just a +flattenType (Just n) (Just (TypeList m) )= flattenType (Just (n-1)) (Just (m)) +flattenType (Just n) (Just (TypeMatrix _ m) )= flattenType (Just (n-1)) (Just (m)) -flattenType Nothing (Just (Typed (TypeMatrix _ m) e )) = flattenType Nothing (Just (Typed m e)) -flattenType Nothing (Just (Typed (TypeList m) e )) = flattenType Nothing (Just (Typed m e)) -flattenType Nothing (Just (Typed TypeAny _)) = Just $ TypeList TypeAny +flattenType Nothing (Just (TypeMatrix _ m)) = flattenType Nothing (Just (m)) +flattenType Nothing (Just (TypeList m)) = flattenType Nothing (Just (m)) +flattenType Nothing (Just (TypeAny)) = Just $ TypeList TypeAny flattenType _ _ = Just $ TypeList TypeAny -validateFuncOp :: Lexeme -> [RegionTagged (Typed Expression)] -> ValidatorS (Typed Expression) +validateFuncOp :: Lexeme -> [RegionTagged (Kind,Expression)] -> ValidatorS (Typed Expression) validateFuncOp l args = do let b = funcOpBuilder l b args @@ -2288,10 +2390,10 @@ isLogicalContainer (r,Typed t e) = do -- setContext region -- void . contextError $ CustomError "Extra Args" -- return False - -type Arg = RegionTagged (Typed Expression) +type SArg = RegionTagged (Typed Expression) +type Arg = RegionTagged (Kind,Expression) unFunc :: (Arg -> Validator a) --Arg validator - -> (Maybe (Typed Expression) -> Maybe Type) --typeEvaluator + -> (Maybe (Kind,Expression) -> Maybe Type) --typeEvaluator -> ([Expression]->Expression) --mkOp or similar -> [Arg] -> ValidatorS (Typed Expression) unFunc argVal t f args = do @@ -2302,18 +2404,18 @@ unFunc argVal t f args = do tc <- gets typeChecking let result = case r of Nothing | tc -> Nothing - _ -> Just $ map (untype . unregion) [x] - return (result,(Just $ unregion x)) + _ -> Just $ map (snd . unregion) [x] + return (result,(Just $ unregion x)) (x:rs) -> do tooManyArgs rs r <- argVal x let result =case r of Nothing -> Nothing - Just _ -> Just $ map (untype . unregion) [x] + Just _ -> Just $ map (snd . unregion) [x] return (result,(Just $ unregion x)) let res = maybe (fallback "Arg Fail Unfunc") f v return $ Typed (fromMaybe TypeAny $ t ts) res -biFunc :: (Arg -> Arg -> Validator a) -> (Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) +biFunc :: (Arg -> Arg -> Validator a) -> (Maybe (Kind,Expression) ->Maybe (Kind,Expression) ->Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) biFunc argVal t f args = do (v,ts) <- case args of [] -> do tooFewArgs 2 0 >> return (Nothing,(Nothing,Nothing)) @@ -2323,38 +2425,38 @@ biFunc argVal t f args = do tc <- gets typeChecking let result = case r of Nothing | tc -> Nothing - _ -> Just $ map (untype . unregion) [x,y] - return (result,(Just (unregion x) , Just (unregion y))) + _ -> Just $ map (snd . unregion) [x,y] + return (result,(Just ( unregion x) , Just ( unregion y))) (x:y:rs) -> do tooManyArgs rs r <- argVal x y let result =case r of Nothing -> Nothing - Just _ -> Just $ map (untype . unregion) [x,y] - return (result,(Just (unregion x) , Just (unregion y))) + Just _ -> Just $ map (snd . unregion) [x,y] + return (result,(Just ( unregion x) , Just ( unregion y))) let res = maybe (fallback "Arg Fail BiFunct") f v return $ Typed (fromMaybe TypeAny $ uncurry t ts) res -triFunc :: (Arg -> Arg -> Arg -> Validator a) -> (Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe (Typed Expression) -> Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) +triFunc :: (Arg -> Arg -> Arg -> Validator a) -> (Maybe (Kind,Expression) ->Maybe (Kind,Expression) ->Maybe (Kind,Expression) ->Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) triFunc argVal t f args = do (v,ts) <- case args of [] -> do tooFewArgs 3 0 >> return (Nothing,(Nothing,Nothing,Nothing)) - [x] -> do tooFewArgs 3 1 >> return (Nothing,(Just $ unregion x,Nothing,Nothing)) - [x,y] -> do tooFewArgs 3 2 >> return (Nothing,(Just $ unregion x,Just $ unregion y,Nothing)) + [x] -> do tooFewArgs 3 1 >> return (Nothing,(Just $ unregion x,Nothing,Nothing)) + [x,y] -> do tooFewArgs 3 2 >> return (Nothing,(Just $ unregion x,Just $ unregion y,Nothing)) [x,y,z] -> do r <- argVal x y z tc <- gets typeChecking let result = case r of Nothing | tc -> Nothing - _ -> Just $ map (untype . unregion) [x,y,z] - return (result,(Just (unregion x) , Just (unregion y), Just (unregion z))) + _ -> Just $ map (snd . unregion) [x,y,z] + return (result,(Just ( unregion x) , Just ( unregion y), Just ( unregion z))) (x:y:z:rs) -> do tooManyArgs rs r <- argVal x y z let result =case r of Nothing -> Nothing - Just _ -> Just $ map (untype . unregion) [x,y,z] - return (result,(Just (unregion x) , Just (unregion y), Just (unregion z))) + Just _ -> Just $ map (snd . unregion) [x,y,z] + return (result,(Just (unregion x) , Just ( unregion y), Just ( unregion z))) let res = maybe (fallback "Arg Fail Tri") f v return $ Typed (fromMaybe TypeAny $ uncurry3 t ts) res where uncurry3 f (a,b,c) = f a b c --todo export from prelude @@ -2365,3 +2467,21 @@ tooFewArgs n i = do tooManyArgs :: [RegionTagged a] -> ValidatorS () tooManyArgs = mapM_ (\x ->do raiseError $ x UnexpectedArg) +checkRVMember :: RegionTagged Type -> RegionTagged Type -> Validator () +checkRVMember (r1,d@(TypeRecord ts)) (r2,r@(TypeRecordMember nm _)) | (null $ lookup nm ts) = do + raiseTypeError $ r2 TypeError (TypeRecordMember (Name "") ts) r + return Nothing +checkRVMember (r1,d@(TypeRecord ts)) (r2,r@(TypeRecordMember nm _)) = return $ pure () +checkRVMember (r1,d@(TypeRecord ts)) (r2,r) = do + raiseTypeError $ r2 TypeError (TypeRecordMember (Name "") ts) r + return Nothing +checkRVMember (r1,d@(TypeVariant ts)) (r2,r@(TypeVariantMember nm _)) | (null $ lookup nm ts) = do + raiseTypeError $ r2 TypeError (TypeRecordMember (Name "") ts) r + return Nothing +checkRVMember (r1,d@(TypeVariant ts)) (r2,r@(TypeVariantMember nm _)) = return $ pure () +checkRVMember (r1,d@(TypeVariant ts)) (r2,r) = do + raiseTypeError $ r2 TypeError (TypeVariantMember (Name "") ts) r + return Nothing +checkRVMember (r1,t) _ = do + raiseTypeError $ r1 TypeError (TypeVariant []) t + return Nothing \ No newline at end of file diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index eae978afce..4455e400cf 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -70,11 +70,12 @@ collapseSkipped ((ValidatorDiagnostic regx ex) :(ValidatorDiagnostic regy ey):rs = collapseSkipped $ ValidatorDiagnostic (catDr regx regy) (Error $ SkippedTokens ) : rs where isSkipped (Error (TokenError (SkippedToken _))) = True + isSkipped (Error SkippedTokens) = True isSkipped _ = False sameLine :: SourcePos -> SourcePos -> Bool sameLine (SourcePos _ l1 _) (SourcePos _ l2 _) = l1 == l2 catDr :: DiagnosticRegion -> DiagnosticRegion -> DiagnosticRegion - catDr (DiagnosticRegion sp _ o l1) (DiagnosticRegion _ en _ l2) = DiagnosticRegion sp en o (l1+l2) + catDr (DiagnosticRegion sp _ o _) (DiagnosticRegion _ en _ _) = DiagnosticRegion sp en o ((unPos (sourceColumn en) - unPos (sourceColumn sp))) catDr _ _ = GlobalRegion collapseSkipped (x:xs) = x : collapseSkipped xs diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 84b49bf5e3..72ae4c5fa3 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -15,7 +15,8 @@ import Test.Tasty.HUnit (assertFailure, testCaseSteps, assertEqual) import Conjure.Language.Parser (runLexerAndParser) import Conjure.Language.AST.ASTParser (runASTParser, parseProgram) import Conjure.Language.NewLexer (runLexer, Reformable (reform), reformList) -import Data.Text as T (pack) +import qualified Data.Text as T (pack, lines) +import qualified Data.Text.Lazy as L import Data.ByteString.Char8(hPutStrLn, pack) import Conjure.Language.AST.Reformer (Flattenable(flatten)) import Data.Algorithm.Diff (getDiff, getGroupedDiff) @@ -28,15 +29,17 @@ tests :: IO TestTree tests = do let baseDir = "tests" allFiles <- readFileIfExists "tests/allfiles.txt" - let allFileList = lines $ fromMaybe "" allFiles - let testCases = map testFile allFileList + let allFileList = lines $ fromMaybe "" allFiles + contents <- mapM readFileIfExists allFileList + let testCases = [testFile fp fd | (fp,Just fd) <-zip allFileList contents,False] return (testGroup "parse_fuzz" testCases) -testFile :: FilePath -> TestTree -testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \step -> do - Just fd <- readFileIfExists fp +testFile :: FilePath -> String -> TestTree +testFile fp fd = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \step -> do step "Lexing" - case runLexer $ T.pack fd of + let usableFileData = concat (take 1000 . lines $ fd) + let fText = T.pack usableFileData + case runLexer $ fText of Left le -> assertFailure $ "Lexer failed in:" ++ fp Right ets -> do step "parsing" @@ -44,10 +47,10 @@ testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \s Left pe -> assertFailure $ "Parser failed in:" ++ fp Right pt -> do step "RoundTripping" - let roundTrip = reformList $ flatten pt - unless (roundTrip == fd) $do - let diff = getGroupedDiff (lines roundTrip) (lines fd) - Data.ByteString.Char8.hPutStrLn stderr $ Data.ByteString.Char8.pack $ "===DIFF: " ++ fd + let roundTrip = L.unpack $ reformList $ flatten pt + unless (roundTrip == usableFileData) $ do + let diff = getGroupedDiff (lines roundTrip) (lines usableFileData) + Data.ByteString.Char8.hPutStrLn stderr $ Data.ByteString.Char8.pack $ "===DIFF: " ++ fp Data.ByteString.Char8.hPutStrLn stderr $ Data.ByteString.Char8.pack $ ppDiff diff Data.ByteString.Char8.hPutStrLn stderr "===------------" assertFailure $ "Failed to rebuild :" ++ fp \ No newline at end of file From 440256bc35c3c38727e0d246a11d08e128062ba8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 3 Dec 2022 18:17:10 +0000 Subject: [PATCH 110/378] More documentation support --- src/Conjure/Language/Validator.hs | 104 +++++++++++++++++------------- src/Conjure/UI/ErrorDisplay.hs | 2 +- 2 files changed, 60 insertions(+), 46 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 7b9efb139b..e446e96f6d 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -4,13 +4,12 @@ module Conjure.Language.Validator where -import Conjure.Language.AST.ASTParser import Conjure.Language.AST.Syntax as S import Conjure.Language.Definition hiding (Typed) import qualified Conjure.Language.Definition as D (Expression(Typed)) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.NewLexer (ETok (ETok, lexeme), ETokenStream (ETokenStream), eLex, sourcePos0, tokenSourcePos, totalLength, tokenStart, trueLength) +import Conjure.Language.NewLexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, reformList) import Conjure.Language.Attributes import Conjure.Prelude @@ -24,35 +23,29 @@ import qualified Data.Map.Strict as M import qualified Data.Set as S import qualified Data.Text as T import Data.Text (pack, unpack, toLower, append) -import Text.Megaparsec - ( SourcePos, mkPos ) +import Text.Megaparsec ( SourcePos, mkPos, unPos ) import Conjure.Language.Expression.Op ( OpSlicing(..), Op(..), OpPowerSet(..), - OpImage(OpImage), mkOp, mkBinOp, Op(MkOpRelationProj, MkOpSlicing, MkOpIndexing), OpRelationProj(OpRelationProj), - OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), OpAnd (OpAnd), + OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), ) import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Text.Megaparsec.Pos (SourcePos(..)) -import Text.Megaparsec (unPos) import Data.Sequence (Seq (..), viewr, ViewR (..)) import Conjure.Language.Pretty (Pretty(pretty)) -import Control.Monad.Except (runExcept) import Conjure.Language.TypeOf (TypeOf(typeOf)) -import Control.Applicative import Conjure.Language.Expression.OpTypes (binOpType) -import Conjure.Language.AdHoc ((:<)(project)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Text.PrettyPrint (text) -import qualified Data.Bifunctor +import qualified Data.Text.Lazy as L data TagType =TtType @@ -186,21 +179,32 @@ isError :: ValidatorDiagnostic -> Bool isError (ValidatorDiagnostic _ (Error _)) = True isError _ = False -data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion +data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion | BuiltIn DocType Text deriving Show +data DocType = OperatorD | FunctionD | KeywordD | TypeD | AttributeD + deriving Show + data RegionInfo = RegionInfo { rRegion :: DiagnosticRegion, - rType :: Kind, + rType :: Maybe Kind, rText :: Text, rDeclaration :: DeclarationType } deriving Show mkDeclaration :: DiagnosticRegion -> Text -> Kind -> RegionInfo -mkDeclaration r n (t) = RegionInfo r t n Definition +mkDeclaration r n (t) = RegionInfo r (Just t) n Definition mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo -mkLiteral r n (Typed t _) = RegionInfo r (simple t) n LiteralDecl - +mkLiteral r n (Typed t _) = RegionInfo r (Just $ simple t) n LiteralDecl + +putDocs :: Flattenable a => DocType -> Text -> a -> ValidatorS () +putDocs t nm r = addRegion $ RegionInfo {rRegion=symbolRegion r, rType=Nothing, rText="", rDeclaration=BuiltIn t nm} +putKeywordDocs :: Flattenable a =>Text ->a -> ValidatorS () +putKeywordDocs = putDocs KeywordD +putTypeDoc :: Flattenable a =>Text ->a -> ValidatorS () +putTypeDoc = putDocs TypeD +putAttrDoc :: Flattenable a =>Text ->a -> ValidatorS () +putAttrDoc = putDocs AttributeD --Infix symbol validation and tagging isA :: LToken -> TagType -> ValidatorS () isA a b= validateSymbol a >> flagToken a b @@ -231,10 +235,7 @@ tagWithType (NameNode lt) (Kind DomainType (TypeEnum{})) = flagToken lt TtEnum tagWithType (NameNode lt) (Kind DomainType (TypeRecord{})) = flagToken lt TtRecord tagWithType (NameNode lt) (Kind DomainType (TypeVariant{})) = flagToken lt TtRecord tagWithType (NameNode lt) (Kind DomainType _) = flagToken lt TtDomain --- tagWithType (NameNode lt) (Kind MemberType (TypeInt TagEnum {})) = flagToken lt TtEnumMember --- tagWithType (NameNode lt) (Kind MemberType (TypeRecord{})) = flagToken lt TtRecordMember --- tagWithType (NameNode lt) (Kind MemberType (TypeVariant{})) = flagToken lt TtRecordMember --- tagWithType (NameNode lt) (Kind MemberType _) = flagToken lt TtVariable + data ValidatorState = ValidatorState { typeChecking :: Bool, @@ -409,8 +410,8 @@ validateObjectiveStatement (ObjectiveMax lt en) =do validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do - l1`isA` TtKeyword - l2`isA` TtKeyword + [l1,l2] `are` TtKeyword + putKeywordDocs "such_that" [l1,l2] exprs' <- validateSequence validateExpression exprs bools <- mapM (\(a,b)->do setContext a; return b ?=> tCondition) exprs' let bool_exprs = bools @@ -418,8 +419,8 @@ validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do - l1 `isA` TtKeyword - l2 `isA` TtKeyword + [l1,l2] `are` TtKeyword + putKeywordDocs "branchin_on" [l1,l2] branchings <-catMaybes <$> validateList_ (f2n validateBranchingParts) sts return [SearchOrder branchings] where @@ -434,9 +435,9 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do validateDeclarationStatement :: DeclarationStatementNode -> ValidatorS [Statement] validateDeclarationStatement stmt = do stmt' <- case stmt of - FindStatement l1 fs -> l1 `isA` TtKeyword >> validateStatementSeq validateFind fs - GivenStatement l1 gs -> l1 `isA` TtKeyword >> validateStatementSeq validateGiven gs - LettingStatement l1 ls -> l1 `isA` TtKeyword >> validateStatementSeq validateLetting ls + FindStatement l1 fs -> l1 `isA` TtKeyword >>putKeywordDocs "find" l1 >> validateStatementSeq validateFind fs + GivenStatement l1 gs -> l1 `isA` TtKeyword >>putKeywordDocs "given" l1 >> validateStatementSeq validateGiven gs + LettingStatement l1 ls -> l1 `isA` TtKeyword >>putKeywordDocs "letting" l1 >> validateStatementSeq validateLetting ls return $ Declaration <$> stmt' where validateStatementSeq v l= do @@ -457,6 +458,7 @@ validateGiven (GivenStatementNode idents l1 domain) = validateGiven (GivenEnumNode se l1 l2 l3) = do [l1, l2, l3] `are` TtKeyword --new Type enum + putKeywordDocs "new_type_enum" [l1, l2, l3] names <- validateSequence (validateNameAs TtEnum) se let eType = Kind DomainType . TypeEnum mapM_ (\(r,x) -> putSymbol (x,(r,True,eType x) )) names @@ -469,13 +471,13 @@ validateFind (FindStatementNode names colon domain) = do (dType, dom) <- typeSplit <$> validateDomain domain let memberType = getDomainMembers dType mapM_ (\(r,x) -> putSymbol (x,(r,False,simple memberType) )) names' - mapM_ addRegion [(mkDeclaration r n (simple memberType)) | (r, Name n) <- names'] + mapM_ addRegion [mkDeclaration r n (simple memberType) | (r, Name n) <- names'] return $ [ FindOrGiven Find nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> ValidatorS [Declaration] -- Letting [names] be validateLetting (LettingStatementNode names l1 assign) = do - l1 `isA` TtKeyword + l1 `isA` TtKeyword --be validateLettingAssignment names assign validateLettingAssignment :: Sequence NameNode -> LettingAssignmentNode -> ValidatorS [Declaration] @@ -490,6 +492,7 @@ validateLettingAssignment names (LettingExpr en) = do return $ [Letting n e | (_,n) <- names'] validateLettingAssignment names (LettingDomain lt dn) = do lt `isA` TtSubKeyword --TODO classify + putKeywordDocs "letting_domain" [lt] (tDomain,domain) <- typeSplit <$> validateDomain dn names' <- validateSequence (validateNameAs TtDomain) names let declarations = [ mkDeclaration r n (Kind DomainType tDomain) |(r, Name n) <- names'] @@ -498,6 +501,7 @@ validateLettingAssignment names (LettingDomain lt dn) = do return $ [Letting n (Domain domain)| (_,n) <- names'] validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do [l1, l2, l3] `are` TtKeyword + putKeywordDocs "new_type_enum" [l1,l2,l3] names' <- validateSequence (validateNameAs TtEnum) names memberNames <- catMaybes <$> listElems enames [n | NameNode n <- memberNames] `are` TtEnumMember @@ -508,7 +512,7 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do let nameMap = zip members ([1..] :: [Int]) let dType = Kind DomainType $ TypeEnum name let tVal = TypeInt $ TagEnum n - addRegion $ RegionInfo {rRegion=r, rText=n, rType=dType, rDeclaration=Ref r} + addRegion $ RegionInfo {rRegion=r, rText=n, rType=Just dType, rDeclaration=Ref r} void $ putSymbol (Name n,(r,True,dType)) mapM_ ( \(x,i) -> putSymbol (x,(r,False,simple tVal)) @@ -519,13 +523,13 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do return $ [LettingDomainDefnEnum n members| (_,n) <- names'] validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do [l1, l2, l3, l4] `are` TtKeyword --TODO keywords + putKeywordDocs "letting_anon" [l1,l2,l3,l4] names' <- validateSequence (validateNameAs TtEnum) names size <- do setContextFrom szExp validateExpression szExp ?=> exactly tInt let d = Kind DomainType . TypeUnnamed mapM_ addRegion [mkDeclaration r n (d $ Name n)|(r,Name n)<- names' ] - --TODO delcs mapM_ (\(r,x) -> putSymbol (x,(r,True,d x))) names' return $ [LettingDomainDefnUnnamed n size| (_,n) <- names'] @@ -868,6 +872,7 @@ validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,M validateAttributeNode vs (NamedAttributeNode t Nothing) = do flagToken t TtAttribute Just name <- validateSymbol t + putAttrDoc (T.pack $ show name) t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" Just True -> invalid $ t CustomError "Argument required" @@ -878,6 +883,7 @@ validateAttributeNode vs (NamedAttributeNode t (Just e)) = do setContextFrom e expr <- validateExpression e ?=> exactly tInt Just name <- validateSymbol t + putAttrDoc (T.pack $ show name) t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" Just False -> invalid $ t SemanticError "attribute %name% does not take an argument" @@ -1020,6 +1026,9 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ body <- validateExpression expr ?=> iType let qBody = Comprehension body (over'++g') let result = Typed rType <$> (mkOp <$> (translateQnName <$> name') <*> pure [qBody]) + case name' of + Just l -> putKeywordDocs (T.pack $ show l) name + Nothing -> pure () return $ fromMaybe (fallback "Quantification error") result where validateQuantificationGuard :: Maybe QuanticationGuard -> ValidatorS [GeneratorOrCondition] @@ -1031,7 +1040,8 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ return $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do - lt `isA` TtOperator --TODO sets only + lt `isA` TtKeyword --TODO sets only + putKeywordDocs "powerset_projection" lt ps <- sequenceElems pats exp <- validateExpression en let (t,e) = typeSplit exp @@ -1076,6 +1086,7 @@ validateFunctionApplication name args = do args' <- validateList validateFlexibleExpression args flagToken name TtFunction Just name' <- validateSymbol name + putDocs FunctionD (lexemeText name') name setContextFrom args validateFuncOp name' args' @@ -1099,6 +1110,7 @@ validateOperatorExpression (PrefixOpNode lt expr) = do L_Minus -> tInt L_ExclamationMark -> TypeBool _ -> bug . text $ "Unknown prefix op " ++ show op + putDocs OperatorD (T.pack $"pre_"++show op) lt expr' <- validateExpression expr ?=> exactly refT return . Typed refT $ mkOp (PrefixOp op) [expr'] --lookup symbol @@ -1109,6 +1121,11 @@ validateOperatorExpression (BinaryOpNode lexp op rexp) = do Just op' <- validateSymbol op let resultValidator = binOpType op' let resultType = resultValidator lType rType + addRegion (RegionInfo { + rRegion=symbolRegion op, + rType=Nothing, + rText=lexemeText op', + rDeclaration=BuiltIn OperatorD (T.pack $ show op')}) return . Typed resultType $ mkBinOp ( pack $ lexemeFace op') (lExpr) (rExpr) validateOperatorExpression (PostfixOpNode expr pon) = do postFixOp <- validatePostfixOp pon @@ -1117,6 +1134,7 @@ validateOperatorExpression (PostfixOpNode expr pon) = do validatePostfixOp :: PostfixOpNode -> ValidatorS (ExpressionNode -> ValidatorS (Typed Expression)) validatePostfixOp (OpFactorial lt) = do lt `isA` TtOperator + putDocs OperatorD ("post_factorial") lt setContextFrom lt return $ \exp -> do v <- validateExpression exp ?=> exactly tInt @@ -1433,6 +1451,7 @@ validateComprehensionBody (CompBodyCondition en) = do --x in dom validateComprehensionBody (CompBodyDomain apn l1 dom) = do l1 `isA` TtKeyword + putKeywordDocs "expr_in_domain_projection" l1 (td,domain) <- typeSplit <$> validateDomain dom td' <- projectionTypeDomain (symbolRegion dom) td pats <- validateSequence_ (flip unifyPattern td' . Just) apn @@ -1441,6 +1460,7 @@ validateComprehensionBody (CompBodyDomain apn l1 dom) = do -- x <- expr validateComprehensionBody (CompBodyGenExpr apn lt en) = do lt `isA` TtKeyword + putKeywordDocs "expr_projection" lt e <- validateExpression en let (t,exp) = typeSplit e t' <- projectionType (symbolRegion en) t @@ -1724,7 +1744,7 @@ resolveReference (r,Name n) = do case c of Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return (simple TypeAny) Just (reg,_,t) -> do - addRegion (RegionInfo {rRegion=r,rText=n, rType=t, rDeclaration=Ref reg}) + addRegion (RegionInfo {rRegion=r,rText=n, rType=Just t, rDeclaration=Ref reg}) return t resolveReference _ = return $ simple TypeAny @@ -1778,7 +1798,7 @@ unifyPattern (Just (AbstractIdentifier nn)) t = do -- traceM $ show n ++ ":" ++ show t --REVIEW don't put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,simple t)) - addRegion (RegionInfo (symbolRegion nn) (simple t) n Definition) + addRegion (RegionInfo (symbolRegion nn) (Just $ simple t) n Definition) return $ Single $ Name n unifyPattern (Just(AbstractMetaVar lt)) _ = do @@ -2412,7 +2432,7 @@ unFunc argVal t f args = do let result =case r of Nothing -> Nothing Just _ -> Just $ map (snd . unregion) [x] - return (result,(Just $ unregion x)) + return (result,Just $ unregion x) let res = maybe (fallback "Arg Fail Unfunc") f v return $ Typed (fromMaybe TypeAny $ t ts) res biFunc :: (Arg -> Arg -> Validator a) -> (Maybe (Kind,Expression) ->Maybe (Kind,Expression) ->Maybe Type) -> ([Expression]->Expression) -> [Arg]-> ValidatorS (Typed Expression) @@ -2468,18 +2488,12 @@ tooManyArgs :: [RegionTagged a] -> ValidatorS () tooManyArgs = mapM_ (\x ->do raiseError $ x UnexpectedArg) checkRVMember :: RegionTagged Type -> RegionTagged Type -> Validator () -checkRVMember (r1,d@(TypeRecord ts)) (r2,r@(TypeRecordMember nm _)) | (null $ lookup nm ts) = do - raiseTypeError $ r2 TypeError (TypeRecordMember (Name "") ts) r - return Nothing -checkRVMember (r1,d@(TypeRecord ts)) (r2,r@(TypeRecordMember nm _)) = return $ pure () -checkRVMember (r1,d@(TypeRecord ts)) (r2,r) = do - raiseTypeError $ r2 TypeError (TypeRecordMember (Name "") ts) r - return Nothing -checkRVMember (r1,d@(TypeVariant ts)) (r2,r@(TypeVariantMember nm _)) | (null $ lookup nm ts) = do +checkRVMember (_,TypeRecord ts) (_,TypeRecordMember nm _) | not . null $ lookup nm ts = return $ pure () +checkRVMember (_,TypeRecord ts) (r2,r) = do raiseTypeError $ r2 TypeError (TypeRecordMember (Name "") ts) r return Nothing -checkRVMember (r1,d@(TypeVariant ts)) (r2,r@(TypeVariantMember nm _)) = return $ pure () -checkRVMember (r1,d@(TypeVariant ts)) (r2,r) = do +checkRVMember (_,TypeVariant ts) (_,TypeVariantMember nm _) | not . null $ lookup nm ts = return $ pure () +checkRVMember (_,TypeVariant ts) (r2,r) = do raiseTypeError $ r2 TypeError (TypeVariantMember (Name "") ts) r return Nothing checkRVMember (r1,t) _ = do diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 4455e400cf..735973c395 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -109,7 +109,7 @@ val s = do print (maybe "" show model) putStrLn $ show vds printSymbolTable $ symbolTable st - -- putStrLn $ show $ (regionInfo st) + putStrLn $ show $ (regionInfo st) putStrLn $ showDiagnosticsForConsole vds txt -- putStrLn $ show qpr From 8731a71d6cfc0e18170b8d89bef0b350fe3bfa4d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 8 Dec 2022 16:21:15 +0000 Subject: [PATCH 111/378] Improved op types, fixed issues wrt global pos --- src/Conjure/Language/AST/ASTParser.hs | 4 +- src/Conjure/Language/Expression/OpTypes.hs | 78 ++-- src/Conjure/Language/NewLexer.hs | 2 +- src/Conjure/Language/Parser.hs | 20 +- src/Conjure/Language/Pretty.hs | 7 +- src/Conjure/Language/Validator.hs | 490 +++++++++++++++------ src/Conjure/UI/ErrorDisplay.hs | 15 +- 7 files changed, 424 insertions(+), 192 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index c3bac61c99..535631a127 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -30,7 +30,7 @@ data ParserError = ParserError Doc deriving (Show) -runASTParser :: Parser a -> ETokenStream -> Either ParserError a +runASTParser ::Flattenable a => Parser a -> ETokenStream -> Either ParserError a runASTParser p str = case runParser (evalStateT p def) "parser" str of Left peb -> Left $ ParserError . text $ errorBundlePretty peb @@ -449,7 +449,7 @@ parseAbstractPattern = do openB <- need L_OpenCurly es <- commaList parseAbstractPattern closeB <- want L_CloseCurly - return $ AbstractPatternMatrix (ListNode openB es closeB) + return $ AbstractPatternSet (ListNode openB es closeB) parseComprehensionCondition :: Parser ComprehensionBodyNode parseComprehensionCondition = do diff --git a/src/Conjure/Language/Expression/OpTypes.hs b/src/Conjure/Language/Expression/OpTypes.hs index 3909327a98..164695c144 100644 --- a/src/Conjure/Language/Expression/OpTypes.hs +++ b/src/Conjure/Language/Expression/OpTypes.hs @@ -15,45 +15,45 @@ rightArgDep f _ = f leftArgDep :: (Type-> Type) -> TypeMapping2 leftArgDep f a _ = f a -binOpType :: Lexeme -> TypeMapping2 -binOpType L_Plus = const id -binOpType L_Minus = const id -binOpType L_Times = const id -binOpType L_Div = constInt -binOpType L_Mod = constInt -binOpType L_Pow = constInt -binOpType L_Eq = constBool -binOpType L_Neq = constBool -binOpType L_Lt = constBool -binOpType L_Leq = constBool -binOpType L_Gt = constBool -binOpType L_Geq = constBool -binOpType L_in = constBool -binOpType L_And = constBool -binOpType L_Or = constBool -binOpType L_Imply = constBool -binOpType L_Iff = constBool -- b b b -binOpType L_subset = constBool -- set mset func rel -binOpType L_subsetEq = constBool -- ^^^ -binOpType L_supset = constBool -- ^^^^ -binOpType L_supsetEq = constBool -- ^^ -binOpType L_subsequence = constBool -- seq - seq -bool -binOpType L_substring = constBool -- seq - seq -bool -binOpType L_intersect = const id -binOpType L_union = const id -binOpType L_LexLt = constBool -binOpType L_LexLeq = constBool -binOpType L_LexGt = constBool -binOpType L_LexGeq = constBool -binOpType L_DotLt = constBool -- same same bool -binOpType L_DotLeq = constBool -binOpType L_DotGt = constBool -binOpType L_DotGeq = constBool -binOpType L_TildeLt = constBool -binOpType L_TildeLeq = constBool -binOpType L_TildeGt = constBool -binOpType L_TildeGeq = constBool -binOpType _ = constantTyped2 TypeAny +-- binOpType :: Lexeme -> TypeMapping2 +-- binOpType L_Plus = const id +-- binOpType L_Minus = const id +-- binOpType L_Times = const id +-- binOpType L_Div = constInt +-- binOpType L_Mod = constInt +-- binOpType L_Pow = constInt +-- binOpType L_Eq = constBool +-- binOpType L_Neq = constBool +-- binOpType L_Lt = constBool +-- binOpType L_Leq = constBool +-- binOpType L_Gt = constBool +-- binOpType L_Geq = constBool +-- binOpType L_in = constBool +-- binOpType L_And = constBool +-- binOpType L_Or = constBool +-- binOpType L_Imply = constBool +-- binOpType L_Iff = constBool -- b b b +-- binOpType L_subset = constBool -- set mset func rel +-- binOpType L_subsetEq = constBool -- ^^^ +-- binOpType L_supset = constBool -- ^^^^ +-- binOpType L_supsetEq = constBool -- ^^ +-- binOpType L_subsequence = constBool -- seq - seq -bool +-- binOpType L_substring = constBool -- seq - seq -bool +-- binOpType L_intersect = const id +-- binOpType L_union = const id +-- binOpType L_LexLt = constBool +-- binOpType L_LexLeq = constBool +-- binOpType L_LexGt = constBool +-- binOpType L_LexGeq = constBool +-- binOpType L_DotLt = constBool -- same same bool +-- binOpType L_DotLeq = constBool +-- binOpType L_DotGt = constBool +-- binOpType L_DotGeq = constBool +-- binOpType L_TildeLt = constBool +-- binOpType L_TildeLeq = constBool +-- binOpType L_TildeGt = constBool +-- binOpType L_TildeGeq = constBool +-- binOpType _ = constantTyped2 TypeAny constInt :: TypeMapping2 constInt = constantTyped2 (TypeInt TagInt) diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index ccf78948e9..218fa98094 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -25,7 +25,7 @@ import qualified Text.Megaparsec as L import Prelude (read) sourcePos0 :: SourcePos -sourcePos0 = SourcePos "" (mkPos 0) (mkPos 0) +sourcePos0 = SourcePos "" (mkPos 1) (mkPos 1) class Reformable a where reform :: a -> L.Text diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index e527bacfd3..26f5610276 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -2,6 +2,7 @@ module Conjure.Language.Parser ( runLexerAndParser + , lexAndParse , parseIO , parseModel , parseTopLevels @@ -9,6 +10,8 @@ module Conjure.Language.Parser , parseDomain , parseDomainWithRepr , Pipeline + , PipelineError(..) + , runPipeline ) where -- conjure @@ -50,19 +53,26 @@ import Text.PrettyPrint (text) import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) import Conjure.Language.AST.Helpers (ParserState) +import qualified Conjure.Language.AST.Helpers as P +import Conjure.Language.AST.Reformer (Flattenable) -type Pipeline a b = ( (StateT ParserState (Parsec Void ETokenStream)) a ,a -> V.ValidatorS b,Bool) +type Pipeline a b = ( (StateT ParserState (Parsec Void ETokenStream)) a ,a -> V.ValidatorS b,Bool) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc deriving (Show) -runPipeline :: Pipeline a b -> Text -> Either PipelineError b +lexAndParse :: Flattenable a => P.Parser a -> Text -> Either PipelineError a +lexAndParse parse t = do + lr <- either (Left . LexErr) Right $ L.runLexer t + either (Left . ParserError ) Right $ runASTParser parse lr + +runPipeline :: Flattenable a =>Pipeline a b -> Text -> Either PipelineError b runPipeline (parse,val,tc) txt = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult - let x = V.runValidator (val parseResult) def{V.typeChecking= tc} + let x = V.runValidator (val parseResult) (V.initialState parseResult){V.typeChecking= tc} case x of (Just m, ds,_) | not $ any V.isError ds -> Right m (_, ves,_) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) @@ -99,7 +109,7 @@ parseModel = (parseProgram,V.strict . V.validateModel,True) -- } -parseIO :: (MonadFailDoc m) => Pipeline i a -> String -> m a +parseIO :: (MonadFailDoc m, Flattenable i) => Pipeline i a -> String -> m a parseIO p s = do case runPipeline p $ T.pack s of Left err -> failDoc $ text $show err @@ -999,7 +1009,7 @@ parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAn -- data ParserState = ParserState { enumDomains :: [Name] } -- type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a -runLexerAndParser :: Pipeline n a -> String -> T.Text -> Either Doc a +runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ show pe) Right a -> Right a diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index fb1f92fa04..8a4ce0b647 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -13,6 +13,7 @@ module Conjure.Language.Pretty , prettyContext , logDebugId , tracingPretty + , prettyT ) where -- conjure @@ -22,7 +23,8 @@ import Conjure.Prelude import Text.Printf ( printf ) -- text -import qualified Data.Text as T ( Text, unpack, length, singleton, concatMap ) +-- text +import qualified Data.Text as T ( Text, unpack, length, singleton, concatMap, pack ) -- pretty import Text.PrettyPrint @@ -171,3 +173,6 @@ logDebugId msg a = logDebug (msg <++> pretty a) >> return a tracingPretty :: Pretty a => Doc -> a -> a tracingPretty s a = trace (renderWide $ "tracing" <+> s <> ": " <++> pretty a) a + +prettyT :: Pretty a => a -> Text +prettyT = T.pack.show.pretty \ No newline at end of file diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index e446e96f6d..c85b0c1d5e 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -9,7 +9,7 @@ import Conjure.Language.Definition hiding (Typed) import qualified Conjure.Language.Definition as D (Expression(Typed)) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.NewLexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, reformList) +import Conjure.Language.NewLexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, reformList, sourcePos0) import Conjure.Language.Attributes import Conjure.Prelude @@ -39,13 +39,13 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Text.Megaparsec.Pos (SourcePos(..)) import Data.Sequence (Seq (..), viewr, ViewR (..)) -import Conjure.Language.Pretty (Pretty(pretty)) +import Conjure.Language.Pretty (Pretty(pretty), prettyT) import Conjure.Language.TypeOf (TypeOf(typeOf)) -import Conjure.Language.Expression.OpTypes (binOpType) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Text.PrettyPrint (text) import qualified Data.Text.Lazy as L +import Data.Aeson.Encoding (bool) data TagType =TtType @@ -105,9 +105,9 @@ data Kind = Kind Class Type instance Pretty Kind where -- pretty (Kind MemberType t) = "Member of " <> pretty t - pretty (Kind DomainType t) = "Domain: " <> pretty t + pretty (Kind DomainType t) = "domain `" <> pretty t <> "`" pretty (Kind ValueType t) = pretty t -data Class = DomainType | ValueType +data Class = DomainType | ValueType deriving (Show,Eq,Ord) instance Pretty Class where pretty c = case c of @@ -179,26 +179,73 @@ isError :: ValidatorDiagnostic -> Bool isError (ValidatorDiagnostic _ (Error _)) = True isError _ = False -data DeclarationType = Definition | LiteralDecl | Ref DiagnosticRegion | BuiltIn DocType Text +data RegionType + = Definition Text Kind + | LiteralDecl Kind + | Ref Text Kind DiagnosticRegion + | Structural StructuralType + | Documentation DocType Text deriving Show data DocType = OperatorD | FunctionD | KeywordD | TypeD | AttributeD deriving Show +data StructuralType + = SSuchThat + | SGiven + | SFind + | SLetting + | SWhere + | SBranching + | SGoal Text + | SEnum Text + | SQuantification Text Kind + | SComprehension Kind + | SGuard + | SGen + | SBody + + deriving Show data RegionInfo = RegionInfo { rRegion :: DiagnosticRegion, - rType :: Maybe Kind, - rText :: Text, - rDeclaration :: DeclarationType + rSubRegion :: Maybe DiagnosticRegion, + rRegionType :: RegionType, + rChildren :: [RegionInfo] } deriving Show mkDeclaration :: DiagnosticRegion -> Text -> Kind -> RegionInfo -mkDeclaration r n (t) = RegionInfo r (Just t) n Definition +mkDeclaration r n (t) = RegionInfo r (Just r) (Definition n t) [] mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo -mkLiteral r n (Typed t _) = RegionInfo r (Just $ simple t) n LiteralDecl +mkLiteral r n (Typed t _) = RegionInfo r (Just r) (LiteralDecl (simple t)) [] + +putReference :: DiagnosticRegion -> Text -> Kind -> DiagnosticRegion -> ValidatorS () +putReference r n t ref = addRegion (RegionInfo r Nothing (Ref n t ref) []) + +holdDeclarations :: ValidatorS a -> ValidatorS (a,[RegionInfo]) +holdDeclarations f = do + prev <- gets regionInfo + modify (\s->s{regionInfo=[]}) + res <- f + decls <- gets regionInfo + modify (\s->s{regionInfo=prev}) + return (res,decls) + +wrapRegion :: (Flattenable a,Flattenable b) => a -> b -> StructuralType -> ValidatorS n -> ValidatorS n +wrapRegion regMain regSel = wrapRegion' (symbolRegion regMain) (symbolRegion regSel) + +wrapRegion' :: DiagnosticRegion -> DiagnosticRegion -> StructuralType -> ValidatorS n -> ValidatorS n +wrapRegion' regMain regSel ty f = do + (res,ds) <- holdDeclarations f + let rMain = regMain + let rSel = Just $ regSel + let new = RegionInfo rMain rSel (Structural ty) ds + unless (null ds) $ addRegion new + return res + +-- injectRegion :: DiagnosticRegion -> DiagnosticRegion -> () putDocs :: Flattenable a => DocType -> Text -> a -> ValidatorS () -putDocs t nm r = addRegion $ RegionInfo {rRegion=symbolRegion r, rType=Nothing, rText="", rDeclaration=BuiltIn t nm} +putDocs t nm r = addRegion $ RegionInfo {rRegion=symbolRegion r,rSubRegion=Nothing, rRegionType=Documentation t nm,rChildren=[]} putKeywordDocs :: Flattenable a =>Text ->a -> ValidatorS () putKeywordDocs = putDocs KeywordD putTypeDoc :: Flattenable a =>Text ->a -> ValidatorS () @@ -245,13 +292,21 @@ data ValidatorState = ValidatorState { currentContext :: DiagnosticRegion } deriving Show -instance Default ValidatorState where - def = ValidatorState { +-- instance Default ValidatorState where +-- def = ValidatorState { +-- typeChecking = True, +-- regionInfo=[], +-- symbolCategories=M.empty, +-- symbolTable=M.empty +-- } + +initialState :: Flattenable a => a -> ValidatorState +initialState r = ValidatorState { typeChecking = True, regionInfo=[], symbolCategories=M.empty, symbolTable=M.empty, - currentContext=GlobalRegion + currentContext=symbolRegion r } type SymbolTable = (Map Text SymbolTableValue) type SymbolTableValue = (DiagnosticRegion,Bool,Kind) @@ -393,23 +448,23 @@ tCondition (Typed (TypeList TypeBool) _) = pure () tCondition t = contextTypeError $ ComplexTypeError "Bool or [Bool]" $ typeOf_ t validateWhereStatement :: WhereStatementNode -> ValidatorS [Statement] -validateWhereStatement (WhereStatementNode l1 exprs) = do +validateWhereStatement w@(WhereStatementNode l1 exprs) = wrapRegion w w (SWhere) $ do l1 `isA` TtKeyword ws <- Where <$> validateSequence_ (\x -> do setContextFrom x; validateExpression x ?=> tCondition) exprs return [ws] validateObjectiveStatement :: ObjectiveStatementNode -> ValidatorS [Statement] -validateObjectiveStatement (ObjectiveMin lt en) = do +validateObjectiveStatement o@(ObjectiveMin lt en) = wrapRegion o o (SGoal "Minimising") $do lt `isA` TtKeyword exp <- validateExpression en return [Objective Minimising $ untype exp] -validateObjectiveStatement (ObjectiveMax lt en) =do +validateObjectiveStatement o@(ObjectiveMax lt en) =wrapRegion o o (SGoal "Maximising") $ do lt `isA` TtKeyword exp <- validateExpression en return [Objective Maximising $ untype exp] validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] -validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do +validateSuchThatStatement s@(SuchThatStatementNode l1 l2 exprs) = wrapRegion s s SSuchThat $ do [l1,l2] `are` TtKeyword putKeywordDocs "such_that" [l1,l2] exprs' <- validateSequence validateExpression exprs @@ -418,7 +473,7 @@ validateSuchThatStatement (SuchThatStatementNode l1 l2 exprs) = do return [SuchThat bool_exprs] validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] -validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do +validateBranchingStatement b@(BranchingStatementNode l1 l2 sts) = wrapRegion b b SBranching $ do [l1,l2] `are` TtKeyword putKeywordDocs "branchin_on" [l1,l2] branchings <-catMaybes <$> validateList_ (f2n validateBranchingParts) sts @@ -435,12 +490,12 @@ validateBranchingStatement (BranchingStatementNode l1 l2 sts) = do validateDeclarationStatement :: DeclarationStatementNode -> ValidatorS [Statement] validateDeclarationStatement stmt = do stmt' <- case stmt of - FindStatement l1 fs -> l1 `isA` TtKeyword >>putKeywordDocs "find" l1 >> validateStatementSeq validateFind fs - GivenStatement l1 gs -> l1 `isA` TtKeyword >>putKeywordDocs "given" l1 >> validateStatementSeq validateGiven gs - LettingStatement l1 ls -> l1 `isA` TtKeyword >>putKeywordDocs "letting" l1 >> validateStatementSeq validateLetting ls + FindStatement l1 fs -> l1 `isA` TtKeyword >>putKeywordDocs "find" l1 >> validateStatementSeq SFind validateFind fs + GivenStatement l1 gs -> l1 `isA` TtKeyword >>putKeywordDocs "given" l1 >> validateStatementSeq SGiven validateGiven gs + LettingStatement l1 ls -> l1 `isA` TtKeyword >>putKeywordDocs "letting" l1 >> validateStatementSeq SLetting validateLetting ls return $ Declaration <$> stmt' where - validateStatementSeq v l= do + validateStatementSeq s v l = wrapRegion stmt stmt (s) $ do decls <- validateSequence_ v l return $ concat decls @@ -491,7 +546,7 @@ validateLettingAssignment names (LettingExpr en) = do mapM_ (\(r,x) -> putSymbol (x, (r,False,simple t) )) names' return $ [Letting n e | (_,n) <- names'] validateLettingAssignment names (LettingDomain lt dn) = do - lt `isA` TtSubKeyword --TODO classify + lt `isA` TtSubKeyword putKeywordDocs "letting_domain" [lt] (tDomain,domain) <- typeSplit <$> validateDomain dn names' <- validateSequence (validateNameAs TtDomain) names @@ -503,21 +558,24 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do [l1, l2, l3] `are` TtKeyword putKeywordDocs "new_type_enum" [l1,l2,l3] names' <- validateSequence (validateNameAs TtEnum) names - memberNames <- catMaybes <$> listElems enames - [n | NameNode n <- memberNames] `are` TtEnumMember - members <- mapM (validateNameAs TtEnumMember) memberNames + memberNames <- validateList (validateNameAs TtEnumMember) enames + let members = map snd memberNames + -- let (members,memberDecls) = unzip . map (\(r,n)->(n,\t->mkDeclaration r n (Kind ValueType (TypeEnum t)))) $ memberNames sequence_ [ - (do - let nameMap = zip members ([1..] :: [Int]) + wrapRegion' (catRegions [(r,()),(symbolRegion enames,())]) r (SEnum n) $ do + let nameMap = zip memberNames ([1..] :: [Int]) let dType = Kind DomainType $ TypeEnum name let tVal = TypeInt $ TagEnum n - addRegion $ RegionInfo {rRegion=r, rText=n, rType=Just dType, rDeclaration=Ref r} + + putReference r n dType r void $ putSymbol (Name n,(r,True,dType)) mapM_ ( - \(x,i) -> putSymbol (x,(r,False,simple tVal)) + \((r,x),i) -> do + let n = case x of Name n -> n ; _ -> "" + addRegion $ mkDeclaration r n (simple $ TypeInt (TagEnum n)) + putSymbol (x,(r,False,simple tVal)) ) nameMap - ) |(r, name@(Name n)) <- names' ] return $ [LettingDomainDefnEnum n members| (_,n) <- names'] @@ -534,27 +592,6 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do return $ [LettingDomainDefnUnnamed n size| (_,n) <- names'] --- validate :: Validator a -> Validator (Maybe a) --- validate n = do --- case n of --- Validator Nothing ves -> Validator (Just Nothing) ves --- Validator (Just a) ves -> Validator (Just $ Just a) ves - --- getPrefix :: Validator Int --- getPrefix = Validator Nothing [TypeError "ERR"] - --- g :: Validator Foo --- g = do --- _ <- validate getPrefix --- a <- do return 1 --- b <- do return 1 :: Validator Int --- c <- do return 1 --- return $ Foo <$> a <*> b <*> c - --- verify :: Maybe a -> Validator a --- verify (Just a) = Validator{value = Just a, errors = []} --- verify Nothing = Validator{value = Nothing, errors = []} - invalid :: ValidatorDiagnostic -> Validator a invalid err = do raiseError err @@ -595,19 +632,59 @@ validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv BoolDomainNode lt -> (lt `isA` TtType >> (return . Typed TypeBool) DomainBool) - RangedIntDomainNode l1 rs -> l1 `isA` TtType >> validateRangedInt rs + RangedIntDomainNode l1 rs -> do + l1 `isA` TtType + validateRangedInt rs RangedEnumNode nn ranges -> validateEnumRange nn ranges ShortTupleDomainNode lst -> validateTupleDomain lst - TupleDomainNode l1 doms -> l1 `isA` TtType >> validateTupleDomain doms - RecordDomainNode l1 ndom -> l1 `isA` TtType >> validateRecordDomain ndom - VariantDomainNode l1 ndom -> l1 `isA` TtType >> validateVariantDomain ndom - MatrixDomainNode l1 m_ib idoms l2 dom -> l1 `isA` TtType >> l2 `isA` TtKeyword >> validateIndexedByNode m_ib >> validateMatrixDomain idoms dom - SetDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validateSetDomain attrs dom - MSetDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validateMSetDomain attrs dom - FunctionDomainNode l1 attrs dom1 l2 dom2 -> l1 `isA` TtType >> l2 `isA` TtOperator >> validateFunctionDomain attrs dom1 dom2 - SequenceDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validateSequenceDomain attrs dom - RelationDomainNode l1 attrs l2 doms -> [l1, l2] `are` TtType >> validateRelationDomain attrs doms - PartitionDomainNode l1 attrs l2 dom -> [l1, l2] `are` TtType >> validatePartitionDomain attrs dom + TupleDomainNode l1 doms -> do + l1 `isA` TtType + putTypeDoc "tuple" l1 + validateTupleDomain doms + RecordDomainNode l1 ndom -> do + l1 `isA` TtType + putTypeDoc "record" l1 + validateRecordDomain ndom + VariantDomainNode l1 ndom -> do + l1 `isA` TtType + putTypeDoc "variant" l1 + validateVariantDomain ndom + MatrixDomainNode l1 m_ib idoms l2 dom -> do + l1 `isA` TtType + putTypeDoc "matrix" l1 + l2 `isA` TtSubKeyword + validateIndexedByNode m_ib + validateMatrixDomain idoms dom + SetDomainNode l1 attrs l2 dom -> do + l1 `isA` TtType + putTypeDoc "set" l1 + l2 `isA` TtSubKeyword + validateSetDomain attrs dom + MSetDomainNode l1 attrs l2 dom -> do + l1 `isA` TtType + putTypeDoc "mset" l1 + l2 `isA` TtSubKeyword + validateMSetDomain attrs dom + FunctionDomainNode l1 attrs dom1 l2 dom2 -> do + l1 `isA` TtType + putTypeDoc "function" l1 + l2 `isA` TtOperator + validateFunctionDomain attrs dom1 dom2 + SequenceDomainNode l1 attrs l2 dom -> do + l1 `isA` TtType + putTypeDoc "sequence" l1 + l2 `isA` TtSubKeyword + validateSequenceDomain attrs dom + RelationDomainNode l1 attrs l2 doms -> do + l1 `isA` TtType + putTypeDoc "relation" l1 + l2 `isA` TtSubKeyword + validateRelationDomain attrs doms + PartitionDomainNode l1 attrs l2 dom -> do + l1 `isA` TtType + putTypeDoc "partition" l1 + l2 `isA` TtSubKeyword + validatePartitionDomain attrs dom MissingDomainNode lt -> do raiseError $ lt TokenError lt; return $ fallback "Missing Domain" where validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain @@ -746,7 +823,7 @@ validateIndexedByNode Nothing = return () validateIndexedByNode (Just (IndexedByNode a b)) = [a,b] `are` TtSubKeyword todo :: Text -> Validator a -todo s = invalid $ ValidatorDiagnostic GlobalRegion $ Error $ InternalErrorS (append "Not Implemented: " s) +todo s = invalid $ ValidatorDiagnostic global $ Error $ InternalErrorS (append "Not Implemented: " s) validateSizeAttributes :: [(Lexeme,Maybe Expression)] -> ValidatorS (SizeAttr Expression) validateSizeAttributes attrs = do @@ -1007,15 +1084,19 @@ translateQnName qnName = case qnName of _ -> FunctionOp qnName validateQuantificationExpression :: QuantificationExpressionNode -> ValidatorS (Typed Expression) -validateQuantificationExpression (QuantificationExpressionNode name pats over m_guard dot expr) = +validateQuantificationExpression q@(QuantificationExpressionNode name pats over m_guard dot expr) = do + setContextFrom q dot `isA` TtKeyword scoped $ do flagToken name TtQuantifier name' <- validateSymbol name - over' <- validateQuantificationOver pats over - -- patterns <- validateSequence_ validateAbstractPattern pats - g' <- validateQuantificationGuard m_guard + (over',genDec) <- holdDeclarations $ wrapRegion pats pats SGen $ validateQuantificationOver pats over + (g',gDec) <-case m_guard of + Nothing -> return ([],[]) + Just qg -> holdDeclarations $ + wrapRegion qg qg SGuard $ + validateQuantificationGuard m_guard setContextFrom expr let (iType,rType) = case name' of Just L_ForAll -> (tCondition,TypeBool) @@ -1023,12 +1104,15 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ Just L_Sum -> (exactly tInt,tInt) Just L_Product -> (exactly tInt,tInt) _ -> bug $ text ("Unkown quantifier " ++ show name') - body <- validateExpression expr ?=> iType + (body,bDecl) <- holdDeclarations + $ wrapRegion expr expr SBody + $ validateExpression expr ?=> iType let qBody = Comprehension body (over'++g') let result = Typed rType <$> (mkOp <$> (translateQnName <$> name') <*> pure [qBody]) case name' of Just l -> putKeywordDocs (T.pack $ show l) name Nothing -> pure () + wrapRegion q q (SQuantification (maybe "Quantification " lexemeText name') (simple rType)) (mapM_ addRegion (gDec++genDec++bDecl)) return $ fromMaybe (fallback "Quantification error") result where validateQuantificationGuard :: Maybe QuanticationGuard -> ValidatorS [GeneratorOrCondition] @@ -1040,12 +1124,13 @@ validateQuantificationExpression (QuantificationExpressionNode name pats over m_ return $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do - lt `isA` TtKeyword --TODO sets only + lt `isA` TtKeyword putKeywordDocs "powerset_projection" lt ps <- sequenceElems pats exp <- validateExpression en let (t,e) = typeSplit exp - pt <- projectionType (symbolRegion en) t + void $ unifyTypesFailing (TypeSet TypeAny) (symbolRegion en,exp) + let pt = t apats <- unifyPatterns pt ps return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (e)) | pat <- apats] -- x in exp @@ -1115,17 +1200,18 @@ validateOperatorExpression (PrefixOpNode lt expr) = do return . Typed refT $ mkOp (PrefixOp op) [expr'] --lookup symbol validateOperatorExpression (BinaryOpNode lexp op rexp) = do - (lType,lExpr) <- typeSplit <$> validateExpression lexp - (rType,rExpr) <- typeSplit <$> validateExpression rexp + (lType,lExpr) <- validateFlexibleExpression lexp + (rType,rExpr) <- validateFlexibleExpression rexp flagToken op TtOperator Just op' <- validateSymbol op + let resultValidator = binOpType op' - let resultType = resultValidator lType rType + resultType <- resultValidator (symbolRegion lexp,lType) (symbolRegion rexp,rType) addRegion (RegionInfo { rRegion=symbolRegion op, - rType=Nothing, - rText=lexemeText op', - rDeclaration=BuiltIn OperatorD (T.pack $ show op')}) + rSubRegion=Nothing, + rRegionType=Documentation OperatorD (T.pack $ show op'), + rChildren=[]}) return . Typed resultType $ mkBinOp ( pack $ lexemeFace op') (lExpr) (rExpr) validateOperatorExpression (PostfixOpNode expr pon) = do postFixOp <- validatePostfixOp pon @@ -1143,13 +1229,17 @@ validatePostfixOp (ApplicationNode args) = do return $ \exp -> do let reg = symbolRegion exp (t,e) <- typeSplit <$> validateExpression exp - args' <- validateList (validateExpression>=> \(Typed t' e')->return (simple t',e')) args case t of - TypeFunction _ _ -> validateFuncOp L_image ((reg,(simple t, e)):args') - TypeSequence _ -> validateFuncOp L_image ((reg,(simple t, e)):args') + TypeFunction _ _ -> do + args' <- validateList (validateExpression>=> \(Typed t' e')->return (simple t',e')) args + validateFuncOp L_image ((reg,(simple t, e)):args') + TypeSequence _ -> do + args' <- validateList (validateExpression>=> \(Typed t' e')->return (simple t',e')) args + validateFuncOp L_image ((reg,(simple t, e)):args') _ -> do - let underscore = Reference "_" Nothing - let ys = [if underscore == v then Nothing else Just (r,Typed t v)| x@(r,(Kind ValueType t,v)) <- args'] + as <- catMaybes <$> listElems args + args' <- mapM validateProjectionArgs as + let ys = args'-- [if underscore == v then Nothing else Just (r,Typed t v)| x@(r,(Kind ValueType t,v)) <- args'] iType <- case t of TypeRelation ts -> checkProjectionArgs ts ys _ -> do @@ -1160,6 +1250,10 @@ validatePostfixOp (ApplicationNode args) = do let resType = if any null ys then iType else TypeBool return . Typed resType $ op where + validateProjectionArgs :: ExpressionNode -> ValidatorS (Maybe (RegionTagged (Typed Expression))) + validateProjectionArgs (IdentifierNode (NameNode (RealToken _ (lexeme->l)))) | l == LIdentifier "_" = return Nothing + validateProjectionArgs e = validateExpression e >>= \x -> return . pure $ (symbolRegion e , x) + checkProjectionArgs :: [Type] -> [Maybe (RegionTagged (Typed Expression))] -> ValidatorS Type checkProjectionArgs ref bind= do unless (length ref == length bind) $ @@ -1184,16 +1278,11 @@ validatePostfixOp (IndexedNode ln) = do validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do l1 `isA` TtOther "Colon in expr" [l2,l3] `are` TtOther "BackTick" - (_,dom') <- typeSplit <$> validateDomain dom - t <- case getDType dom' of - Just t -> return t - Nothing -> return TypeAny <* (raiseError $ symbolRegion dom InternalErrorS (pack ("Some type bug with:" ++ show dom'))) + (getDomainMembers->t,_) <- typeSplit <$> validateDomain dom return $ \exp -> do + setContextFrom exp e <- validateExpression exp ?=> exactly t return . Typed t $ D.Typed e t - where - getDType :: Domain () Expression -> Maybe Type - getDType d = let ?typeCheckerMode = StronglyTyped in typeOfDomain d validateIndexingOrSlicing :: Typed Expression -> RangeNode -> ValidatorS (Typed Expression) @@ -1319,14 +1408,18 @@ validateSequenceLiteral x = do validateRelationLiteral :: ListNode RelationElemNode -> ValidatorS (Typed Expression) validateRelationLiteral ln = do - ms <- validateList_ validateRelationMember ln - let members = map (map untype) ms - return . Typed TypeAny $ mkAbstractLiteral $ AbsLitRelation members + ms <- validateList validateRelationMember ln + (t,xs) <- typeSplit <$> sameType ms + setContextFrom ln + return . Typed t $ mkAbstractLiteral $ AbsLitRelation xs where - validateRelationMember :: RelationElemNode -> ValidatorS [Typed Expression] + validateRelationMember :: RelationElemNode -> ValidatorS (Typed [Expression]) validateRelationMember x = case x of - RelationElemNodeLabeled (LongTuple lt xs) -> lt `isA` TtType >> validateExprList_ xs - RelationElemNodeShort (ShortTuple xs) -> validateExprList_ xs + RelationElemNodeLabeled (LongTuple lt xs) -> lt `isA` TtType >> validateRelationMember (RelationElemNodeShort $ ShortTuple xs) + RelationElemNodeShort (ShortTuple xs) -> do + es <- validateExprList_ xs + let (ts,vs) = unzip $ typeSplit <$> es + return $ Typed (TypeRelation ts) vs validatePartitionLiteral :: ListNode PartitionElemNode -> ValidatorS (Typed Expression) @@ -1411,7 +1504,7 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do -- Matrix as comprehension -validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do +validateMatrixLiteral m@(MatrixLiteralNode l1 se m_dom (Just comp) l2) = do [l1,l2] `are` TtOther "SquareBrackets" case m_dom of Nothing -> return () @@ -1422,13 +1515,16 @@ validateMatrixLiteral (MatrixLiteralNode l1 se m_dom (Just comp) l2) = do scoped $ do --check gens and put locals into scope - gens <- validateComprehension comp + (gens,dGens) <- holdDeclarations $ validateComprehension comp --now validate expression(s) - es <- validateSequence validateExpression se + (es,dBody) <- holdDeclarations + $ wrapRegion se se SBody + $ validateSequence validateExpression se Just r <- case es of [] -> invalid $ symbolRegion se SemanticError "MissingExpression" ((_,x):xs) -> flagExtraExpressions xs >> (return . pure $ x) let bodyType = typeOf_ r + wrapRegion m (se) (SComprehension (simple $ TypeList bodyType)) (mapM_ addRegion (dGens++dBody)) return . Typed (TypeList bodyType) $ Comprehension (untype r) gens where flagExtraExpressions :: [RegionTagged a] -> ValidatorS () @@ -1443,13 +1539,13 @@ validateComprehension (ComprehensionNode l1 body) = do validateComprehensionBody :: ComprehensionBodyNode -> ValidatorS [GeneratorOrCondition] --guard -validateComprehensionBody (CompBodyCondition en) = do +validateComprehensionBody (CompBodyCondition en) = wrapRegion en en SGuard $ do e <- validateExpression en setContextFrom en assertType e TypeBool "Guards must be bools" return [Condition $ untype e] --x in dom -validateComprehensionBody (CompBodyDomain apn l1 dom) = do +validateComprehensionBody c@(CompBodyDomain apn l1 dom) = wrapRegion c apn SGen $ do l1 `isA` TtKeyword putKeywordDocs "expr_in_domain_projection" l1 (td,domain) <- typeSplit <$> validateDomain dom @@ -1458,7 +1554,7 @@ validateComprehensionBody (CompBodyDomain apn l1 dom) = do return $ [Generator (GenDomainNoRepr pat domain) | pat <- pats] -- x <- expr -validateComprehensionBody (CompBodyGenExpr apn lt en) = do +validateComprehensionBody c@(CompBodyGenExpr apn lt en) = wrapRegion c apn SGen $ do lt `isA` TtKeyword putKeywordDocs "expr_projection" lt e <- validateExpression en @@ -1467,7 +1563,7 @@ validateComprehensionBody (CompBodyGenExpr apn lt en) = do pats <- validateSequence_ (flip unifyPattern t' . Just) (apn) return $ [Generator (GenInExpr pat exp)| pat <- pats] --letting x be -validateComprehensionBody (CompBodyLettingNode l1 nn l2 en) = do +validateComprehensionBody c@(CompBodyLettingNode l1 nn l2 en) = wrapRegion c nn SLetting $ do [l1,l2] `are` TtKeyword (t,expr) <- typeSplit <$> validateExpression en pat <- unifyPattern (Just nn) t @@ -1484,24 +1580,17 @@ projectionType r t = case t of TypeMSet ty -> return ty TypeSequence ty -> return $ TypeTuple [tInt,ty] TypeRelation ts -> return $ TypeTuple ts + TypePartition t -> return $ TypeSet t TypeFunction fr to -> return $ TypeTuple [fr,to] _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny projectionTypeDomain :: DiagnosticRegion -> Type -> ValidatorS Type projectionTypeDomain r t = case t of --TODO check and do properly TypeAny -> return TypeAny - TypeTuple tys -> return t - TypeBool -> return t - TypeMatrix i ty -> return ty - TypeInt t -> return $ TypeInt t TypeEnum (Name n) -> return $ TypeInt $ TagEnum n TypeUnnamed (Name n) -> return $ TypeInt $ TagUnnamed n - TypeList ty -> return ty - TypeSet ty -> return ty - TypeMSet ty -> return ty - TypeSequence ty -> return $ TypeTuple [tInt,ty] - TypeRelation ts -> return $ TypeTuple ts - TypeFunction fr to -> return $ TypeTuple [fr,to] - _ -> (raiseTypeError $ r SemanticError (pack $ "Domain of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny + _ -> return t + + -- _ -> (raiseTypeError $ r SemanticError (pack $ "Domain of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny mkAbstractLiteral :: AbstractLiteral Expression -> Expression mkAbstractLiteral x = case e2c (AbstractLiteral x) of Nothing -> AbstractLiteral x @@ -1659,8 +1748,10 @@ data DiagnosticRegion = DiagnosticRegion { drEndPos :: SourcePos, drOffset :: Int, drLength :: Int -} | GlobalRegion - deriving Show +} + deriving (Show,Eq,Ord) +global :: DiagnosticRegion +global =DiagnosticRegion sourcePos0 sourcePos0 0 0 -- getTokenRegion :: LToken -> DiagnosticRegion -- getTokenRegion a = do -- let h =case a of @@ -1683,10 +1774,10 @@ symbolRegion a = case range of _ :> et -> et let start = tokenSourcePos h let offset = tokenStart h - let tLength = let some :|> last = range in sum (totalLength <$> some) + trueLength last --TODO Tidy up + let tLength = sum (totalLength <$> rst) + trueLength h let en = tokenSourcePos end DiagnosticRegion start (offsetPositionBy (trueLength end) en) offset tLength - _ -> GlobalRegion + _ -> global where range :: Seq ETok = flatten a @@ -1699,9 +1790,9 @@ t /!\ e = ValidatorDiagnostic (getRegion t) $ Warning e () :: WithRegion a => a -> InfoType -> ValidatorDiagnostic t e = ValidatorDiagnostic (getRegion t) $ Info e -() :: WithRegion a => Maybe a -> ErrorType -> ValidatorDiagnostic -Nothing e = ValidatorDiagnostic GlobalRegion $ Error e -Just t e = t e +-- () :: WithRegion a => Maybe a -> ErrorType -> ValidatorDiagnostic +-- Nothing e = ValidatorDiagnostic global $ Error e +-- Just t e = t e contextError :: ErrorType -> Validator a contextError e = do @@ -1744,7 +1835,8 @@ resolveReference (r,Name n) = do case c of Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return (simple TypeAny) Just (reg,_,t) -> do - addRegion (RegionInfo {rRegion=r,rText=n, rType=Just t, rDeclaration=Ref reg}) + putReference r n t reg + -- addRegion (RegionInfo {rRegion=r,rText=n, rType=Just t, rDeclaration=Ref reg}) return t resolveReference _ = return $ simple TypeAny @@ -1795,10 +1887,9 @@ unifyPatterns t = mapM (flip unifyPattern t) unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do (Name n) <- validateNameAs TtLocal nn - -- traceM $ show n ++ ":" ++ show t - --REVIEW don't put symbol if _ ? void $ putSymbol (Name n,(symbolRegion nn,False,simple t)) - addRegion (RegionInfo (symbolRegion nn) (Just $ simple t) n Definition) + unless (n == "_") $ addRegion $ mkDeclaration (symbolRegion nn) n (simple t) + -- addRegion (RegionInfo (symbolRegion nn) (Just $ simple t) n Definition) return $ Single $ Name n unifyPattern (Just(AbstractMetaVar lt)) _ = do @@ -1819,7 +1910,11 @@ unifyPattern (Just(AbstractPatternTuple m_lt ln)) t = do unifyPattern (Just(AbstractPatternMatrix ln)) t = do sps <-listToSeq ln ps <-sequenceElems sps - memberTypes <- getMemberTypes t + memberTypes <- case t of + TypeAny -> return $ repeat TypeAny + TypeList ty -> return $ repeat ty + TypeMatrix _ ty -> return $ repeat ty + _ -> (repeat TypeAny) <$ raiseTypeError (symbolRegion ln (CustomError (T.concat ["Could not project " , (prettyT t) , " onto list pattern"]))) let q = zip ps memberTypes aps <- mapM (uncurry unifyPattern) q return $ AbsPatMatrix aps @@ -1827,7 +1922,11 @@ unifyPattern (Just(AbstractPatternMatrix ln)) t = do unifyPattern (Just(AbstractPatternSet ln)) t = do sps <-listToSeq ln ps <-sequenceElems sps - memberTypes <- getMemberTypes t + memberTypes <- case t of + TypeAny -> return $ repeat TypeAny + TypeSet ty -> return $ repeat ty + TypeMSet ty -> return $ repeat ty + _ -> (repeat TypeAny) <$ raiseTypeError (symbolRegion ln (CustomError (T.concat ["Could not project " , (prettyT t) , " onto set pattern"]))) let q = zip ps memberTypes aps <-mapM (uncurry unifyPattern) q return $ AbsPatSet aps @@ -1836,7 +1935,7 @@ unifyPattern Nothing _ = return . Single $ fallback "No Pattern" catRegions :: [RegionTagged a] -> DiagnosticRegion -catRegions [] = GlobalRegion +catRegions [] = global catRegions xs = DiagnosticRegion { drSourcePos=drSourcePos .fst $ head xs, drEndPos=drEndPos .fst $ last xs, @@ -1892,10 +1991,10 @@ getDomainFromValue t = case t of TypeBool -> t TypeInt it -> case it of TagInt -> t - TagEnum t -> TypeEnum (Name t) - TagUnnamed t -> TypeUnnamed (Name t) - TypeEnum n -> t - TypeUnnamed n -> t + TagEnum n -> TypeEnum (Name n) + TagUnnamed n -> TypeUnnamed (Name n) + TypeEnum _ -> t + TypeUnnamed _ -> t TypeTuple tys -> TypeTuple $ map getDomainFromValue tys TypeRecord tys -> TypeRecord $ map (second getDomainFromValue) tys TypeVariant tys -> TypeVariant $ map (second getDomainFromValue) tys @@ -2048,9 +2147,9 @@ functionOps l = case l of r <- unifyTypesFailing ref' b return $ if null off || null r then Nothing else Just () unaryFlattenArgs :: SArg -> Validator () - unaryFlattenArgs (r,typeOf_->(TypeMatrix _ _)) = valid - unaryFlattenArgs (r,typeOf_->(TypeList _)) = valid - unaryFlattenArgs (r,typeOf_->TypeAny) = valid + unaryFlattenArgs (_,typeOf_->(TypeMatrix _ _)) = valid + unaryFlattenArgs (_,typeOf_->(TypeList _)) = valid + unaryFlattenArgs (_,typeOf_->TypeAny) = valid unaryFlattenArgs (r,typeOf_->t) = invalid $ r ComplexTypeError "List or Matrix " t concatType :: Maybe Type -> Maybe Type @@ -2060,7 +2159,7 @@ functionOps l = case l of concatType (Just(TypeList (TypeMatrix _ t))) = Just $ TypeList t concatType _ = Just $ TypeList TypeAny concatArgs :: SArg -> Validator () - concatArgs = binaryFlattenArgs (GlobalRegion,Typed tInt $ Constant $ ConstantInt TagInt 1) + concatArgs s@(r,a)= binaryFlattenArgs (r,Typed tInt $ Constant $ ConstantInt TagInt 1) s tableArgs :: SArg -> SArg -> Validator () tableArgs (r1,typeOf_->t1) (r2,typeOf_->t2) = do a <- case t1 of @@ -2153,8 +2252,8 @@ functionOps l = case l of funcType <- getValueType k setContext r2 domType <- getDomainType kd - r <- unifyTypesFailing (TypeFunction domType TypeAny) (r1,Typed funcType e) - valid + unifyTypesFailing (TypeFunction domType TypeAny) (r1,Typed funcType ()) + restrictTypes :: Maybe (Kind,Expression) -> Maybe (Kind,Expression) -> Maybe Type restrictTypes (fmap fst -> kv) (fmap fst-> kd) = Just $ TypeFunction from to where @@ -2498,4 +2597,115 @@ checkRVMember (_,TypeVariant ts) (r2,r) = do return Nothing checkRVMember (r1,t) _ = do raiseTypeError $ r1 TypeError (TypeVariant []) t - return Nothing \ No newline at end of file + return Nothing + + + +type OpValidator = RegionTagged Kind -> RegionTagged Kind -> ValidatorS Type +type OpTyper = Kind -> Kind -> Type + +sameToSameV :: (Type -> ValidatorS Type) -> (Type -> Type -> Type) -> OpValidator +sameToSameV tc t (rl,kl) (rr,kr) = do + setContext rl + lt <- getValueType kl + lt' <- tc lt + setContext rr + rt <- getValueType kr + rt' <- tc rt + let md = mostDefinedS [lt,rt] + _ <- unifyTypesFailing md (rl,Typed lt' ()) + _ <- unifyTypesFailing md (rr,Typed rt' ()) + return $ t lt' rt' + +binOpType :: Lexeme -> OpValidator +binOpType l = case l of + L_Plus -> sameToSameV number same + L_Minus -> sameToSameV number same + L_Times -> sameToSameV number same + L_Div -> sameToSameV number same + L_Mod -> sameToSameV number same + L_Pow -> sameToSameV number same + L_Eq -> sameToSameV pure cBool + L_Neq -> sameToSameV pure cBool + L_Lt -> sameToSameV orderable cBool + L_Leq -> sameToSameV orderable cBool + L_Gt -> sameToSameV orderable cBool + L_Geq -> sameToSameV orderable cBool + L_in -> checkIn + + L_And -> sameToSameV bools (cBool) + L_Or -> sameToSameV bools (cBool) + L_Imply -> sameToSameV bools (cBool) + L_Iff -> sameToSameV bools (cBool) -- b b b + + L_subset -> sameToSameV setLike (cBool) -- set mset func rel + L_subsetEq -> sameToSameV setLike (cBool) -- ^^^ + L_supset -> sameToSameV setLike (cBool) -- ^^^^ + L_supsetEq -> sameToSameV setLike (cBool) -- ^^ + + L_subsequence -> sameToSameV justSequence (cBool) -- seq - seq -bool + L_substring -> sameToSameV justSequence (cBool) -- seq - seq -bool + + L_intersect -> sameToSameV setLike (same) + L_union -> sameToSameV setLike (same) + + L_LexLt -> sameToSameV pure cBool + L_LexLeq -> sameToSameV pure cBool + L_LexGt -> sameToSameV pure cBool + L_LexGeq -> sameToSameV pure cBool + L_DotLt -> sameToSameV pure cBool + L_DotLeq -> sameToSameV pure cBool + L_DotGt -> sameToSameV pure cBool + L_DotGeq -> sameToSameV pure cBool + L_TildeLt -> sameToSameV pure cBool + L_TildeLeq -> sameToSameV pure cBool + L_TildeGt -> sameToSameV pure cBool + L_TildeGeq -> sameToSameV pure cBool + _ -> bug $ "Unkown operator" <+> text (show l) + where + cBool = const. const TypeBool + same a b = mostDefinedS [a,b] + checkIn :: OpValidator + checkIn (r1,kl) (r2,kr) = do + setContext r1 + lt <- getValueType kl + setContext r2 + rt <- getValueType kr + case innerTypeOf rt of + Just t -> unifyTypes t (r1,Typed lt ()) + Nothing -> do + unless (rt==TypeAny) $ raiseTypeError (r2 ComplexTypeError (T.pack . show $ "Container of " <+> pretty lt) rt) + return TypeBool + + number :: Type -> ValidatorS Type + number t = do + case t of + TypeInt TagInt -> return t + TypeInt TagEnum{} -> return t + TypeAny -> return t + _ -> TypeAny <$ contextTypeError (ComplexTypeError "Number or Enum" t) + orderable t = do + case t of + TypeInt TagInt -> return t + TypeInt TagEnum{} -> return t + TypeBool -> return t + TypeAny -> return t + _ -> TypeAny <$ contextTypeError (ComplexTypeError "Number, Enum or Bool" t) + justSequence t = do + case t of + TypeAny -> return t + TypeSequence _ -> return t + _ -> TypeAny <$ contextTypeError (TypeError (TypeSequence TypeAny) t) + bools t = do + case t of + TypeAny -> return t + TypeBool -> return t + _ -> TypeAny <$ contextTypeError (TypeError TypeBool t) + setLike t = do + case t of + TypeAny -> return t + TypeMSet _ -> return t + TypeSet _ -> return t + TypeFunction _ _ -> return t + TypeRelation _ -> return t + _ -> TypeAny <$ contextTypeError (ComplexTypeError "Set MSet funcition or relation" t) \ No newline at end of file diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 735973c395..4fa36d37cb 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -31,9 +31,17 @@ instance ShowErrorComponent DiagnosticForPrint where Warning wt -> "Warning:" ++ show wt Info it -> "Info: " ++ show it +tokenErrorToDisplay :: LToken -> String +tokenErrorToDisplay (RealToken _ _) = error "tokenError with valid token" +tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ show t +tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of + L_Missing s -> s + LMissingIdentifier -> "" + _ -> T.unpack $ lexemeText l + displayError :: ErrorType -> String displayError x = case x of - TokenError lt -> "Error: " ++ show lt + TokenError lt -> tokenErrorToDisplay lt SyntaxError txt -> "Syntax Error: " ++ T.unpack txt SemanticError txt -> "Semantic error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt @@ -76,12 +84,11 @@ collapseSkipped ((ValidatorDiagnostic regx ex) :(ValidatorDiagnostic regy ey):rs sameLine (SourcePos _ l1 _) (SourcePos _ l2 _) = l1 == l2 catDr :: DiagnosticRegion -> DiagnosticRegion -> DiagnosticRegion catDr (DiagnosticRegion sp _ o _) (DiagnosticRegion _ en _ _) = DiagnosticRegion sp en o ((unPos (sourceColumn en) - unPos (sourceColumn sp))) - catDr _ _ = GlobalRegion collapseSkipped (x:xs) = x : collapseSkipped xs captureError :: ValidatorDiagnostic -> Parser () -captureError (ValidatorDiagnostic GlobalRegion message) = do +captureError (ValidatorDiagnostic reg message) |reg == global = do let printError = DiagnosticForPrint 0 0 message registerFancyFailure (Set.singleton(ErrorCustom printError) ) captureError (ValidatorDiagnostic area message) = do @@ -103,7 +110,7 @@ val s = do case progStruct of Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) def{typeChecking=True} in + Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (initialState p){typeChecking=True} in case qpr of (model, vds,st) -> do print (maybe "" show model) From 3ca2e5a9a61fad6a0a71ff161d02345a4b37aea0 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 12 Dec 2022 15:26:21 +0000 Subject: [PATCH 112/378] Adding set difference to minus --- src/Conjure/Language/Validator.hs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index c85b0c1d5e..df47006be2 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -2620,7 +2620,7 @@ sameToSameV tc t (rl,kl) (rr,kr) = do binOpType :: Lexeme -> OpValidator binOpType l = case l of L_Plus -> sameToSameV number same - L_Minus -> sameToSameV number same + L_Minus -> sameToSameV minusArgs same L_Times -> sameToSameV number same L_Div -> sameToSameV number same L_Mod -> sameToSameV number same @@ -2684,6 +2684,14 @@ binOpType l = case l of TypeInt TagEnum{} -> return t TypeAny -> return t _ -> TypeAny <$ contextTypeError (ComplexTypeError "Number or Enum" t) + minusArgs t = do + case t of + TypeInt TagInt -> return t + TypeSet _ -> return t + TypeMSet _ -> return t + TypeRelation _ -> return t + TypeFunction _ _ -> return t + _ -> TypeAny <$ contextTypeError (ComplexTypeError "Number / set/ mset / relation / function" t) orderable t = do case t of TypeInt TagInt -> return t From 2c46243217cbf839314e9a1266b22d10a5cddf29 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 12 Dec 2022 15:46:31 +0000 Subject: [PATCH 113/378] Making ambiguous type error more specific --- src/Conjure/Language/Validator.hs | 7 ++++--- src/Conjure/UI/ErrorDisplay.hs | 9 +++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index df47006be2..ac490e2a06 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -164,7 +164,8 @@ data ErrorType | InternalError --Used to explicitly tag invalid pattern matches | InternalErrorS Text -- Used for giving detail to bug messages deriving (Show,Eq,Ord) -data WarningType = UnclassifiedWarning Text deriving (Show,Eq,Ord) +data WarningType = UnclassifiedWarning Text + | AmbiguousTypeWarning deriving (Show,Eq,Ord) data InfoType = UnclassifiedInfo Text deriving (Show,Eq,Ord) @@ -1860,14 +1861,14 @@ mostDefinedS (x:xs) = let ?typeCheckerMode=StronglyTyped in case mostDefined (xs t -> t unifyTypes :: Type -> RegionTagged (Typed a) -> ValidatorS a -unifyTypes _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> return a +unifyTypes _ (r,Typed TypeAny a) = do raiseError (r /!\ AmbiguousTypeWarning) >> return a unifyTypes t (r,Typed t' a) = do let ?typeCheckerMode = StronglyTyped if typesUnify [t', t] then pure () else raiseTypeError $ r TypeError t t' return a unifyTypesFailing :: Type -> RegionTagged (Typed a) -> Validator a -unifyTypesFailing _ (r,Typed TypeAny a) = do raiseError (r /!\ UnclassifiedWarning "TypeAny used") >> (return $ Just a) +unifyTypesFailing _ (r,Typed TypeAny a) = do raiseError (r /!\ AmbiguousTypeWarning) >> (return $ Just a) unifyTypesFailing t (r,Typed t' a) = do tc <- gets typeChecking let ?typeCheckerMode = StronglyTyped diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 4fa36d37cb..20e762d249 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -28,7 +28,7 @@ instance ShowErrorComponent DiagnosticForPrint where showErrorComponent DiagnosticForPrint {dMessage=message}= case message of Error et -> displayError et - Warning wt -> "Warning:" ++ show wt + Warning wt -> displayWarning wt Info it -> "Info: " ++ show it tokenErrorToDisplay :: LToken -> String @@ -39,11 +39,15 @@ tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of LMissingIdentifier -> "" _ -> T.unpack $ lexemeText l +displayWarning :: WarningType -> String +displayWarning (UnclassifiedWarning txt) = "Warning" ++ T.unpack txt +displayWarning AmbiguousTypeWarning = "Ambiguous type occurred" + displayError :: ErrorType -> String displayError x = case x of TokenError lt -> tokenErrorToDisplay lt SyntaxError txt -> "Syntax Error: " ++ T.unpack txt - SemanticError txt -> "Semantic error: " ++ T.unpack txt + SemanticError txt -> "Error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt TypeError expected got -> "Type error: Expected: " ++ show (pretty expected) ++ " Got: " ++ show (pretty got) ComplexTypeError msg ty -> "Type error: Expected:" ++ show msg ++ " got " ++ (show $ pretty ty) @@ -54,6 +58,7 @@ displayError x = case x of InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) KindError a b -> show $ "Tried to use a " <> pretty b <> " where " <> pretty a <> " was expected" + showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Text -> String showDiagnosticsForConsole errs text = case runParser (captureErrors errs) "Errors" text of From b4315154e8a0f3f9a271b377b760f2b71d0f30a2 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 13 Dec 2022 15:45:55 +0000 Subject: [PATCH 114/378] Updating pretty print lib --- conjure-cp.cabal | 2 +- src/Conjure/Language/AST/ASTParser.hs | 3 +- src/Conjure/Language/CategoryOf.hs | 8 ++-- src/Conjure/Language/Domain.hs | 12 ++--- src/Conjure/Language/Expression.hs | 2 +- .../Language/Expression/Op/Indexing.hs | 2 +- src/Conjure/Language/Lexer.hs | 12 ++--- src/Conjure/Language/Parser.hs | 9 ++-- src/Conjure/Language/Pretty.hs | 44 +++++++++++-------- src/Conjure/Language/Validator.hs | 9 ++-- src/Conjure/Prelude.hs | 40 +++++++++++++---- src/Conjure/Process/Enumerate.hs | 9 +++- src/Conjure/UI/Model.hs | 4 +- 13 files changed, 96 insertions(+), 60 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index e9bf45c37d..2f6e6d3666 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -277,7 +277,7 @@ Library , mtl , parallel-io , pipes - , pretty > 1.1.1.1 + , prettyprinter -- >= 2.9 because of the TH fix: https://github.com/nick8325/quickcheck/issues/101 , QuickCheck >= 2.14 , random diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 535631a127..1605f6ac7a 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -21,7 +21,6 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Language.Haskell.TH.PprLib (rparen) import Conjure.Language.Attributes (allAttributLexemes) import Data.Sequence (Seq) -import Text.PrettyPrint.HughesPJ (text) import Text.Megaparsec.Debug (dbg) import qualified Data.Text.Lazy as L import qualified Data.Text as T @@ -33,7 +32,7 @@ data ParserError = ParserError Doc runASTParser ::Flattenable a => Parser a -> ETokenStream -> Either ParserError a runASTParser p str = case runParser (evalStateT p def) "parser" str of - Left peb -> Left $ ParserError . text $ errorBundlePretty peb + Left peb -> Left $ ParserError . pretty $ errorBundlePretty peb Right res -> Right res parseProgram :: Parser ProgramTree diff --git a/src/Conjure/Language/CategoryOf.hs b/src/Conjure/Language/CategoryOf.hs index 11d606178a..92a4acf51e 100644 --- a/src/Conjure/Language/CategoryOf.hs +++ b/src/Conjure/Language/CategoryOf.hs @@ -76,18 +76,18 @@ categoryChecking m = do then return m else userErr1 $ vcat $ [ "Category checking failed." ] - ++ concat ( nub [ [ "The domain :" <+> pretty domain + ++ concat ( [ [ "The domain :" <+> pretty domain , "Its category :" <+> pretty cat , "In the definition of:" <+> pretty name , "" ] - | (domain, (name, cat)) <- errors1 + | (domain, (name, cat)) <- nub errors1 ] ) - ++ concat ( nub [ [ "The domain :" <+> pretty domain + ++ concat ( [ [ "The domain :" <+> pretty domain , "Its category :" <+> pretty cat , "" ] - | (domain, cat) <- errors2 + | (domain, cat) <- nub errors2 ] ) initInfo_Lettings :: Model -> Model diff --git a/src/Conjure/Language/Domain.hs b/src/Conjure/Language/Domain.hs index 8b6c652c52..b633b1cb58 100644 --- a/src/Conjure/Language/Domain.hs +++ b/src/Conjure/Language/Domain.hs @@ -489,7 +489,7 @@ instance FromJSON a => FromJSON (MSetAttr a) where parseJSON = genericParseJSO instance Default (MSetAttr a) where def = MSetAttr def def instance Pretty a => Pretty (MSetAttr a) where pretty (MSetAttr a b) = - let inside = filter (/=prEmpty) [ pretty a + let inside = filter ((""/=) . show) [ pretty a , pretty b ] in if null inside @@ -531,7 +531,7 @@ instance FromJSON a => FromJSON (FunctionAttr a) where parseJSON = genericPars instance Default (FunctionAttr a) where def = FunctionAttr def def def instance Pretty a => Pretty (FunctionAttr a) where pretty (FunctionAttr a b c) = - let inside = filter (/=prEmpty) [pretty a, pretty b, pretty c] + let inside = filter ((""/=) . show) [pretty a, pretty b, pretty c] in if null inside then prEmpty else prettyList prParens "," inside @@ -579,7 +579,7 @@ instance FromJSON a => FromJSON (SequenceAttr a) where parseJSON = genericPars instance Default (SequenceAttr a) where def = SequenceAttr def def instance Pretty a => Pretty (SequenceAttr a) where pretty (SequenceAttr a b) = - let inside = filter (/=prEmpty) [pretty a, pretty b] + let inside = filter ((""/=) . show) [pretty a, pretty b] in if null inside then prEmpty else prettyList prParens "," inside @@ -594,7 +594,7 @@ instance FromJSON a => FromJSON (RelationAttr a) where parseJSON = genericPars instance Default (RelationAttr a) where def = RelationAttr def def instance Pretty a => Pretty (RelationAttr a) where pretty (RelationAttr a b) = - let inside = filter (/=prEmpty) [pretty a, pretty b] + let inside = filter ((""/=) . show) [pretty a, pretty b] in if null inside then prEmpty else prettyList prParens "," inside @@ -722,7 +722,7 @@ instance FromJSON a => FromJSON (PartitionAttr a) where parseJSON = genericPar instance Default (PartitionAttr a) where def = PartitionAttr def def False instance Pretty a => Pretty (PartitionAttr a) where pretty (PartitionAttr a b c) = - let inside = filter (/=prEmpty) [ prettyNum a + let inside = filter ((""/=) . show) [ prettyNum a , prettySize b , prettyReg c ] @@ -924,7 +924,7 @@ instance (Pretty r, Pretty a) => Pretty (Domain r a) where prettyAttrs :: (Pretty a, Pretty b) => a -> b -> Doc prettyAttrs a bs = let prettya = pretty a - in if prettya == "()" + in if show prettya == "()" then pretty bs else prBraces prettya <+> pretty bs diff --git a/src/Conjure/Language/Expression.hs b/src/Conjure/Language/Expression.hs index 5e747db06c..23339128de 100644 --- a/src/Conjure/Language/Expression.hs +++ b/src/Conjure/Language/Expression.hs @@ -42,7 +42,7 @@ import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector -- pretty -import qualified Text.PrettyPrint as Pr ( cat ) +import Conjure.Language.Pretty as Pr ( cat ) ------------------------------------------------------------------------------------------------------------------------ diff --git a/src/Conjure/Language/Expression/Op/Indexing.hs b/src/Conjure/Language/Expression/Op/Indexing.hs index 6c26df1493..71bcdf102c 100644 --- a/src/Conjure/Language/Expression/Op/Indexing.hs +++ b/src/Conjure/Language/Expression/Op/Indexing.hs @@ -11,7 +11,7 @@ import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector -- pretty -import qualified Text.PrettyPrint as Pr ( cat ) +import Conjure.Language.Pretty as Pr ( cat ) data OpIndexing x = OpIndexing x x diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 1a1317cf26..fdfd22e1a9 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -19,7 +19,7 @@ import Data.Void import qualified Data.HashMap.Strict as M import qualified Data.Text as T import qualified Data.Text.Lazy as L -import qualified Text.PrettyPrint as Pr +import Conjure.Language.Pretty import qualified Text.Megaparsec.Char.Lexer as L import Text.Megaparsec.Char @@ -34,18 +34,18 @@ data LexemePos = LexemePos deriving (Show,Eq, Ord) -lexemeFace :: Lexeme -> Pr.Doc +lexemeFace :: Lexeme -> Doc lexemeFace L_Newline = "new line" lexemeFace L_Carriage = "\\r" lexemeFace L_Space = "space character" lexemeFace L_Tab = "tab character" -lexemeFace (LIntLiteral i) = Pr.integer i -lexemeFace (LIdentifier i) = Pr.text (T.unpack i) +lexemeFace (LIntLiteral i) = pretty i +lexemeFace (LIdentifier i) = pretty (T.unpack i) -- lexemeFace (LComment i) = Pr.text (T.unpack i) lexemeFace l = case M.lookup l mapLexemeToText of - Nothing -> Pr.text (show l) - Just t -> Pr.text . T.unpack $ t + Nothing -> pretty (show l) + Just t -> pretty . T.unpack $ t isLexemeSpace :: Lexeme -> Bool isLexemeSpace L_Newline {} = True diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 26f5610276..83339d982a 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -49,12 +49,13 @@ import Conjure.Language.AST.ASTParser (ParserError, runASTParser, parseProgram) -- import qualified Data.Set as S ( null, fromList, toList ) import Data.Void (Void) import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) -import Text.PrettyPrint (text) + import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) import Conjure.Language.AST.Helpers (ParserState) import qualified Conjure.Language.AST.Helpers as P import Conjure.Language.AST.Reformer (Flattenable) +import Conjure.Language.Pretty type Pipeline a b = ( (StateT ParserState (Parsec Void ETokenStream)) a ,a -> V.ValidatorS b,Bool) @@ -75,7 +76,7 @@ runPipeline (parse,val,tc) txt = do let x = V.runValidator (val parseResult) (V.initialState parseResult){V.typeChecking= tc} case x of (Just m, ds,_) | not $ any V.isError ds -> Right m - (_, ves,_) -> Left $ ValidatorError $ text (showDiagnosticsForConsole ves txt) + (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves txt) -- Validator (Just res) [] -> Right res -- Validator _ xs -> Left $ ValidatorError xs @@ -112,7 +113,7 @@ parseModel = (parseProgram,V.strict . V.validateModel,True) parseIO :: (MonadFailDoc m, Flattenable i) => Pipeline i a -> String -> m a parseIO p s = do case runPipeline p $ T.pack s of - Left err -> failDoc $ text $show err + Left err -> failDoc $ pretty $ show err Right x -> return x @@ -1011,7 +1012,7 @@ parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAn runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p inp of - Left pe -> Left $ "Parser error in file:" <+> text file <+> text ("Error is:\n" ++ show pe) + Left pe -> Left $ "Parser error in file:" <+> pretty file <+> pretty ("Error is:\n" ++ show pe) Right a -> Right a -- ls <- runLexer inp -- case runParser p file ls of diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index 8a4ce0b647..3405f99830 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -7,7 +7,8 @@ module Conjure.Language.Pretty , prettyList, prettyListDoc , parensIf , render, renderNormal, renderWide - , hang, hcat + , hang, hcat , nest + , vcat,fsep , cat , prEmpty, prParens, prBrackets, prBraces , Doc , prettyContext @@ -27,10 +28,10 @@ import Text.Printf ( printf ) import qualified Data.Text as T ( Text, unpack, length, singleton, concatMap, pack ) -- pretty -import Text.PrettyPrint - ( parens, brackets, braces, empty -- will be exported with new names - , text -- only used in this module - , style, renderStyle, lineLength, ribbonsPerLine +import Prettyprinter + ( parens, brackets, vcat ,braces, layoutPretty, PageWidth (AvailablePerLine) + , (<+>), (<>) + -- will be exported with new names ) -- aeson @@ -39,6 +40,8 @@ import qualified Data.Aeson.KeyMap as KM import Data.Scientific ( Scientific, floatingOrInteger ) -- scientific import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector +import qualified Prettyprinter.Render.String as Pr +import qualified Prettyprinter as Pr class Show a => Pretty a where @@ -49,12 +52,12 @@ class Show a => Pretty a where prettyPrec _ = pretty instance Pretty Doc where pretty = id -instance Pretty T.Text where pretty = pretty . T.unpack -instance Pretty String where pretty = text -instance Pretty () where pretty = pretty . show -instance Pretty Bool where pretty = pretty . show -instance Pretty Int where pretty = pretty . show -instance Pretty Integer where pretty = pretty . show +instance Pretty T.Text where pretty = Pr.pretty +instance Pretty String where pretty = Pr.pretty +instance Pretty () where pretty = Pr.pretty +instance Pretty Bool where pretty = Pr.pretty +instance Pretty Int where pretty = Pr.pretty +instance Pretty Integer where pretty = Pr.pretty instance Pretty Double where pretty x = pretty (printf "%.2f" x :: String) instance (Pretty a, Pretty b) => Pretty (a, b) where @@ -74,13 +77,13 @@ a <++> b = hang a 4 b -- | For debugging output, truncates the second argument to 5 lines (<+->) :: Doc -> Doc -> Doc -a <+-> b = a <+> (vcat $ map pretty $ take 5 $ lines $ renderWide $ b) +a <+-> b = a <+> (Pr.vcat $ map pretty $ take 5 $ lines $ renderWide $ b) prettyList :: Pretty a => (Doc -> Doc) -> Doc -> [a] -> Doc prettyList wrap punc = prettyListDoc wrap punc . map pretty prettyListDoc :: (Doc -> Doc) -> Doc -> [Doc] -> Doc -prettyListDoc wrap punc = wrap . fsep . punctuate punc +prettyListDoc wrap punc = wrap . Pr.fillSep . Pr.punctuate punc parensIf :: Bool -> Doc -> Doc parensIf = wrapIf parens @@ -95,10 +98,10 @@ renderWide :: Pretty a => a -> String renderWide = render 240 render :: Pretty a => Int -> a -> String -render w = renderStyle (style { lineLength = w, ribbonsPerLine = 1 }) . pretty +render w = Pr.renderString . (layoutPretty (Pr.LayoutOptions $ AvailablePerLine w 1.0) . pretty) prEmpty :: Doc -prEmpty = empty +prEmpty = prEmpty prParens :: Doc -> Doc prParens = parens @@ -110,7 +113,10 @@ prBraces :: Doc -> Doc prBraces = braces prettyContext :: (Pretty a, Pretty b) => [(a,b)] -> [Doc] -prettyContext = map (\ (a,b) -> nest 4 $ pretty a <> ":" <+> pretty b ) +prettyContext = map (\ (a,b) -> Pr.nest 4 $ pretty a <> ":" <+> pretty b ) + + + -------------------------------------------------------------------------------- @@ -136,7 +142,7 @@ instance Pretty JSON.Value where pretty Null = "null" instance Pretty JSON.Object where - pretty = prBraces . fsep . punctuate "," . map f . sortBy (comp `on` fst) . KM.toList + pretty = prBraces . Pr.fillSep . Pr.punctuate "," . map f . sortBy (comp `on` fst) . KM.toList where f (key, Array value) | not (any (\ v -> case v of String t -> T.length t < 20 ; _ -> True ) value) @@ -160,10 +166,10 @@ instance Pretty JSON.Object where in fromMaybe (compare a b) preferred instance Pretty JSON.Array where - pretty = prBrackets . fsep . punctuate "," . map pretty . V.toList + pretty = prBrackets . Pr.fillSep . Pr.punctuate "," . map pretty . V.toList prettyArrayVCat :: V.Vector Value -> Doc -prettyArrayVCat = prBrackets . vcat . punctuate "," . map pretty . V.toList +prettyArrayVCat = prBrackets . Pr.vcat . Pr.punctuate "," . map pretty . V.toList instance Pretty Scientific where pretty = either pretty pretty . (floatingOrInteger :: Scientific -> Either Double Integer) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index ac490e2a06..dbe460aa2a 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -43,7 +43,6 @@ import Conjure.Language.Pretty (Pretty(pretty), prettyT) import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) -import Text.PrettyPrint (text) import qualified Data.Text.Lazy as L import Data.Aeson.Encoding (bool) @@ -1104,7 +1103,7 @@ validateQuantificationExpression q@(QuantificationExpressionNode name pats over Just L_Exists ->(tCondition,TypeBool) Just L_Sum -> (exactly tInt,tInt) Just L_Product -> (exactly tInt,tInt) - _ -> bug $ text ("Unkown quantifier " ++ show name') + _ -> bug $ pretty ("Unkown quantifier " ++ show name') (body,bDecl) <- holdDeclarations $ wrapRegion expr expr SBody $ validateExpression expr ?=> iType @@ -1195,7 +1194,7 @@ validateOperatorExpression (PrefixOpNode lt expr) = do let (refT) = case op of L_Minus -> tInt L_ExclamationMark -> TypeBool - _ -> bug . text $ "Unknown prefix op " ++ show op + _ -> bug . pretty $ "Unknown prefix op " ++ show op putDocs OperatorD (T.pack $"pre_"++show op) lt expr' <- validateExpression expr ?=> exactly refT return . Typed refT $ mkOp (PrefixOp op) [expr'] @@ -2104,7 +2103,7 @@ functionOps l = case l of [] -> unFuncV unaryFlattenArgs (flattenType Nothing) b a [_] -> unFuncV unaryFlattenArgs (flattenType Nothing) b a _ -> biFunc (valueOnly2 binaryFlattenArgs) (\v t -> flattenType (getNum v) (typeOnly t)) (b) a - _ -> bug $ text $ "Unkown functional operator " ++ show l + _ -> bug $ pretty $ "Unkown functional operator " ++ show l where valueOnly :: (SArg -> Validator a) -> Arg -> Validator a valueOnly f (r,(k,e)) = do @@ -2662,7 +2661,7 @@ binOpType l = case l of L_TildeLeq -> sameToSameV pure cBool L_TildeGt -> sameToSameV pure cBool L_TildeGeq -> sameToSameV pure cBool - _ -> bug $ "Unkown operator" <+> text (show l) + _ -> bug $ "Unkown operator" <+> pretty (show l) where cBool = const. const TypeBool same a b = mostDefinedS [a,b] diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index b0b39cf78d..55da744672 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -51,6 +51,7 @@ module Conjure.Prelude , getDirectoryContents , RunStateAsWriter, runStateAsWriterT, sawTell , stripPostfix + , Doc , hang , hcat , fsep , cat ) where import GHC.Err as X ( error ) @@ -168,11 +169,11 @@ import Test.QuickCheck ( Gen ) import Text.Megaparsec ( ParsecT, Parsec ) -- pretty -import Text.PrettyPrint as X - ( Doc - , (<>), (<+>), ($$) - , hang, nest, punctuate - , hcat, vcat, fsep, hsep, sep +import Prettyprinter as X + ( + (<>), (<+>) + , nest, punctuate + , vcat, hsep, sep ) -- uniplate @@ -201,7 +202,7 @@ import System.Random ( StdGen, mkStdGen, setStdGen, randomRIO ) import qualified Data.ByteString as ByteString import qualified Data.Text as T import qualified Data.Text.IO as T -import qualified Text.PrettyPrint as Pr +import qualified Prettyprinter as Pr -- containers import qualified Data.Set as S @@ -228,6 +229,29 @@ import System.TimeIt as X ( timeIt, timeItNamed ) import Debug.Trace as X ( trace, traceM ) import Data.Void (Void) import GHC.IO.Exception (IOErrorType(InvalidArgument)) +import Prettyprinter (PageWidth(AvailablePerLine)) +import Data.Text.Prettyprint.Doc.Render.String (renderString) +import Prettyprinter ((<+>)) + +data EssenceDocAnnotation = EssenceDocAnnotation + +type Doc = Pr.Doc EssenceDocAnnotation + +--compats +hang :: Doc -> Int ->Doc -> Doc +hang a n b = a <> Pr.hang n b + +hcat :: [Doc] -> Doc +hcat = Pr.hcat + +fsep :: [Doc] -> Doc +fsep = Pr.fillSep + +cat :: [Doc] -> Doc +cat = Pr.cat + +nest :: Int -> Doc -> Doc +nest = Pr.nest tracing :: Show a => String -> a -> a @@ -240,7 +264,7 @@ textToString :: T.Text -> String textToString = T.unpack stringToDoc :: String -> Doc -stringToDoc = Pr.text +stringToDoc = Pr.pretty padRight :: Int -> Char -> String -> String padRight n ch s = s ++ replicate (n - length s) ch @@ -550,7 +574,7 @@ runLoggerPipeIO l logger = Pipes.runEffect $ Pipes.for logger each where each (Left (lvl, msg)) = when (lvl <= l) $ do - let txt = Pr.renderStyle (Pr.style { Pr.lineLength = 200 }) msg + let txt = renderString $ (Pr.layoutPretty $ Pr.LayoutOptions (AvailablePerLine 200 1.0)) msg when ("[" `isPrefixOf` txt) $ do liftIO clearScreen liftIO (setCursorPosition 0 0) diff --git a/src/Conjure/Process/Enumerate.hs b/src/Conjure/Process/Enumerate.hs index f961825057..5fbf3411a6 100644 --- a/src/Conjure/Process/Enumerate.hs +++ b/src/Conjure/Process/Enumerate.hs @@ -44,7 +44,14 @@ instance (EnumerateDomain m, MonadFail m) => EnumerateDomain (UserErrorT m) wher -- | Use this if you don't want to allow a (EnumerateDomain m => m a) computation actually do IO. data EnumerateDomainNoIO a = Done a | TriedIO | Failed Doc - deriving (Eq, Show) + deriving (Show) + +instance Eq a => Eq (EnumerateDomainNoIO a) where + (Done a) == (Done b) = a ==b + (TriedIO) == (TriedIO) = True + (Failed d) == (Failed e) = True + _ == _ = False + instance Functor EnumerateDomainNoIO where fmap _ (Failed msg) = Failed msg diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index 9f3aae6341..baf8cb0579 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -983,7 +983,7 @@ checkIfAllRefined m | Just modelZipper <- mkModelZipper m = do -- we | (i, c) <- zip allNats (tail (ascendants x)) ] - fails <- fmap (nub . concat) $ forM (allContextsExceptReferences modelZipper) $ \ x -> + fails <- fmap (nubBy (\a b->show a == show b) . concat) $ forM (allContextsExceptReferences modelZipper) $ \ x -> case hole x of Reference _ (Just (DeclHasRepr _ _ dom)) | not (isPrimitiveDomain dom) -> @@ -1328,7 +1328,7 @@ applicableRules Config{..} rulesAtLevel x = do rResult <- ruleResult res case (hole x, rResult) of (Reference nm1 _, Reference nm2 _) - | name /= "choose-repr" + | show name /= "choose-repr" , nm1 == nm2 -> bug $ vcat [ "Rule applied inside a Reference." , "Rule :" <+> pretty name From b013a443db8fe304d96e54bf0e26736aa45fa711 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 13 Dec 2022 16:07:17 +0000 Subject: [PATCH 115/378] Implementing pretty printing for AST --- src/Conjure/Language/AST/ASTParser.hs | 10 +- src/Conjure/Language/AST/Syntax.hs | 406 +++++++++++++++++++++----- src/Conjure/Language/NewLexer.hs | 9 + src/Conjure/Language/Validator.hs | 1 + 4 files changed, 350 insertions(+), 76 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 1605f6ac7a..45a0fd1ece 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -24,8 +24,12 @@ import Data.Sequence (Seq) import Text.Megaparsec.Debug (dbg) import qualified Data.Text.Lazy as L import qualified Data.Text as T +import Prettyprinter (layoutSmart, layoutPretty, defaultLayoutOptions) +import qualified Prettyprinter as Pr +import Data.Text.Prettyprint.Doc.Util (putDocW) +import Prettyprinter.Render.Text -data ParserError = ParserError Doc +data ParserError = ParserError (Doc) deriving (Show) @@ -827,6 +831,10 @@ example s = do -- putStrLn $ show pt putStrLn $ "Reforming" print $ reformList (flatten pt) == L.fromStrict txt + + putStrLn "Pretty:" + let pp = renderAST 80 pt + putStrLn $ T.unpack pp -- let flat = flatten pt -- putStrLn $ show $ flat -- putTextLn $ reformList $ flat diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 6a9f515122..649a21e24f 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -2,17 +2,39 @@ module Conjure.Language.AST.Syntax where -import Conjure.Language.NewLexer (ETok) -import Conjure.Prelude - - - +import Conjure.Language.NewLexer (ETok, prettySplitComments) +import Conjure.Prelude hiding (Doc, cat, group) + +-- import Conjure.Language.Pretty hiding (Pretty(..),hang) + +-- import Conjure.Language.Pretty hiding (Pretty(..),hang) +import Prettyprinter ( + Doc, + LayoutOptions (LayoutOptions), + PageWidth (AvailablePerLine), + Pretty (..), + align, + cat, + emptyDoc, + fill, + flatAlt, + group, + indent, + layoutSmart, + line, + ) +import Prettyprinter.Render.Text (renderStrict) data LToken = RealToken [ETok] ETok | MissingToken ETok | SkippedToken ETok - deriving (Eq, Ord,Show) + deriving (Eq, Ord, Show) + +instance Pretty LToken where + pretty (SkippedToken e) = pretty e + pretty (RealToken [] r) = pretty r + pretty _ = emptyDoc instance Null LToken where isMissing (MissingToken _) = True @@ -24,14 +46,25 @@ instance Null LToken where -- show (MissingToken x) = "MISSING[" ++ show x ++ "]" -- show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" -data ProgramTree = ProgramTree { - langVersionInfo :: Maybe LangVersionNode, - statements :: [StatementNode], - eofToken :: LToken -} - deriving Show +data ProgramTree = ProgramTree + { langVersionInfo :: Maybe LangVersionNode + , statements :: [StatementNode] + , eofToken :: LToken + } + deriving (Show) + +instance Pretty ProgramTree where + pretty (ProgramTree l s e) = + vcat + [ pretty l + , vcat $ map pretty s + , pretty e + ] + data LangVersionNode = LangVersionNode LToken NameNode (Sequence LToken) - deriving Show + deriving (Show) +instance Pretty LangVersionNode where + pretty (LangVersionNode t n ns) = pretty t <+> pretty n <+> pretty ns data StatementNode = DeclarationStatement DeclarationStatementNode @@ -42,8 +75,15 @@ data StatementNode | HeuristicStatement LToken ExpressionNode | UnexpectedToken LToken deriving (Show) - - +instance Pretty StatementNode where + pretty x = case x of + DeclarationStatement dsn -> pretty dsn + BranchingStatement bsn -> pretty bsn + SuchThatStatement stsn -> pretty stsn + WhereStatement wsn -> pretty wsn + ObjectiveStatement osn -> pretty osn + HeuristicStatement lt en -> pretty lt <+> pretty en + UnexpectedToken _ -> emptyDoc data SuchThatStatementNode = SuchThatStatementNode @@ -52,16 +92,26 @@ data SuchThatStatementNode (Sequence ExpressionNode) -- constraints deriving (Show) +instance Pretty SuchThatStatementNode where + pretty (SuchThatStatementNode l1 l2 es) = topLevelPretty [l1, l2] (pretty es) + data WhereStatementNode = WhereStatementNode LToken -- where (Sequence ExpressionNode) -- expresssions deriving (Show) +instance Pretty WhereStatementNode where + pretty (WhereStatementNode w se) = topLevelPretty [w] (pretty se) + data ObjectiveStatementNode = ObjectiveMin LToken ExpressionNode | ObjectiveMax LToken ExpressionNode deriving (Show) +instance Pretty ObjectiveStatementNode where + pretty x = case x of + ObjectiveMin lt en -> pretty lt <+> pretty en + ObjectiveMax lt en -> pretty lt <+> pretty en -- Declaration statements data DeclarationStatementNode @@ -70,12 +120,19 @@ data DeclarationStatementNode | LettingStatement LToken (Sequence LettingStatementNode) deriving (Show) +instance Pretty DeclarationStatementNode where + pretty x = case x of + FindStatement lt se -> topLevelPretty [lt] (pretty se) + GivenStatement lt se -> topLevelPretty [lt] (pretty se) + LettingStatement lt se -> topLevelPretty [lt] (pretty se) data FindStatementNode = FindStatementNode (Sequence NameNode) -- names LToken -- colon DomainNode -- domain deriving (Show) +instance Pretty FindStatementNode where + pretty (FindStatementNode names col dom) = pretty names <+> pretty col <+> pretty dom instance Null FindStatementNode where isMissing (FindStatementNode n l d) = isMissing n && isMissing l && isMissing d data GivenStatementNode @@ -89,6 +146,10 @@ data GivenStatementNode LToken -- type LToken -- enum deriving (Show) +instance Pretty GivenStatementNode where + pretty g = case g of + GivenStatementNode se lt dn -> pretty se <+> pretty lt <+> pretty dn + GivenEnumNode se lt lt' lt2 -> pretty se <+> pretty lt <+> pretty lt' <+> pretty lt2 instance Null GivenStatementNode where isMissing (GivenStatementNode l t d) = isMissing l && isMissing t && isMissing d @@ -96,16 +157,17 @@ instance Null GivenStatementNode where data LettingStatementNode = LettingStatementNode - (Sequence NameNode) - LToken -- - LettingAssignmentNode + (Sequence NameNode) + LToken -- + LettingAssignmentNode deriving (Show) - +instance Pretty LettingStatementNode where + pretty (LettingStatementNode ns be assign) = pretty ns <+> pretty be <+> pretty assign instance Null LettingStatementNode where - isMissing (LettingStatementNode l t a) = isMissing l && isMissing t && isMissing a + isMissing (LettingStatementNode l t a) = isMissing l && isMissing t && isMissing a data LettingAssignmentNode - = LettingExpr + = LettingExpr ExpressionNode | LettingDomain LToken -- domain @@ -122,13 +184,19 @@ data LettingAssignmentNode LToken -- lSize ExpressionNode -- expr deriving (Show) + +instance Pretty LettingAssignmentNode where + pretty a = case a of + LettingExpr en -> pretty en + LettingDomain lt dn -> pretty lt <+> pretty dn + LettingEnum lt lt' lt2 ln -> pretty lt <+> pretty lt' <+> pretty lt2 <+> pretty ln + LettingAnon lt lt' lt2 lt3 en -> pretty lt <+> pretty lt' <+> pretty lt2 <+> pretty lt3 <+> pretty en instance Null LettingAssignmentNode where isMissing x = case x of - LettingExpr en -> isMissing en - LettingDomain lt dn -> isMissing lt && isMissing dn - LettingEnum l1 l2 l3 ln -> all isMissing [l1,l2,l3] && isMissing ln - LettingAnon l1 l2 l3 l4 en -> all isMissing [l1,l2,l3,l4] && isMissing en - + LettingExpr en -> isMissing en + LettingDomain lt dn -> isMissing lt && isMissing dn + LettingEnum l1 l2 l3 ln -> all isMissing [l1, l2, l3] && isMissing ln + LettingAnon l1 l2 l3 l4 en -> all isMissing [l1, l2, l3, l4] && isMissing en -- Branching on @@ -139,6 +207,8 @@ data BranchingStatementNode (ListNode ExpressionNode) deriving (Show) +instance Pretty BranchingStatementNode where + pretty (BranchingStatementNode br o exs) = pretty br <+> pretty o <+> pretty exs -- Domains @@ -148,8 +218,8 @@ data DomainNode = BoolDomainNode LToken | RangedIntDomainNode LToken (Maybe (ListNode RangeNode)) | RangedEnumNode NameNode (Maybe (ListNode RangeNode)) - -- | EnumDomainNode NameNode - | MetaVarDomain LToken + | -- | EnumDomainNode NameNode + MetaVarDomain LToken | ShortTupleDomainNode (ListNode DomainNode) | TupleDomainNode LToken (ListNode DomainNode) | RecordDomainNode LToken (ListNode NamedDomainNode) @@ -163,12 +233,38 @@ data DomainNode | PartitionDomainNode LToken MAttributes LToken DomainNode | MissingDomainNode LToken deriving (Show) + +instance Pretty DomainNode where + pretty x = case x of + BoolDomainNode lt -> pretty lt + RangedIntDomainNode lt m_ln -> pretty lt <> pretty m_ln + RangedEnumNode nn m_ln -> pretty nn <> pretty m_ln + MetaVarDomain lt -> pretty lt + ShortTupleDomainNode ln -> pretty ln + TupleDomainNode lt ln -> pretty lt <> pretty ln + RecordDomainNode lt ln -> pretty lt <> pretty ln + VariantDomainNode lt ln -> pretty lt <> pretty ln + MatrixDomainNode lt m_ibn ln lt' dn -> + pretty lt + <+> pretty m_ibn + <+> pretty ln + <+> pretty lt' + <+> pretty dn + SetDomainNode lt m_ln lt' dn -> pretty lt <+> pretty m_ln <+> pretty lt' <+> pretty dn + MSetDomainNode lt m_ln lt' dn -> pretty lt <+> pretty m_ln <+> pretty lt' <+> pretty dn + FunctionDomainNode lt m_ln dn lt' dn' -> pretty lt <+> pretty m_ln <+> pretty dn <+> pretty lt' <+> pretty dn' + SequenceDomainNode lt m_ln lt' dn -> pretty lt <+> pretty m_ln <+> pretty lt' <+> pretty dn + RelationDomainNode lt m_ln lt' ln -> pretty lt <+> pretty m_ln <+> pretty lt' <+> pretty ln + PartitionDomainNode lt m_ln lt' dn -> pretty lt <+> pretty m_ln <+> pretty lt' <+> pretty dn + MissingDomainNode _ -> emptyDoc instance Null DomainNode where - isMissing (MissingDomainNode {}) = True - isMissing _ = False + isMissing (MissingDomainNode{}) = True + isMissing _ = False data IndexedByNode = IndexedByNode LToken LToken deriving (Show) +instance Pretty IndexedByNode where + pretty (IndexedByNode a b) = pretty a <+> pretty b data RangeNode = SingleRangeNode ExpressionNode | OpenRangeNode DoubleDotNode @@ -176,33 +272,52 @@ data RangeNode | LeftUnboundedRangeNode DoubleDotNode ExpressionNode | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode deriving (Show) + +instance Pretty RangeNode where + pretty x = case x of + SingleRangeNode en -> pretty en + OpenRangeNode lt -> pretty lt + RightUnboundedRangeNode en lt -> pretty en <> pretty lt + LeftUnboundedRangeNode lt en -> pretty lt <> pretty en + BoundedRangeNode en lt en' -> pretty en <> pretty lt <> pretty en' instance Null RangeNode where isMissing (SingleRangeNode e) = isMissing e isMissing _ = False type DoubleDotNode = LToken + -- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) -data AttributeNode +data AttributeNode = NamedAttributeNode LToken (Maybe ExpressionNode) - -- | TODO: Add dont care - deriving (Show) + deriving (-- | TODO: Add dont care + Show) +instance Pretty AttributeNode where + pretty (NamedAttributeNode a m_e) = pretty a <+> pretty m_e instance Null AttributeNode where - isMissing (NamedAttributeNode n m_e) = isMissing n && isMissing m_e - -- isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e + isMissing (NamedAttributeNode n m_e) = isMissing n && isMissing m_e + +-- isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e data NamedDomainNode = NameDomainNode NameNode (Maybe (LToken, DomainNode)) deriving (Show) +instance Pretty NamedDomainNode where + pretty (NameDomainNode nn Nothing) = pretty nn + pretty (NameDomainNode nn (Just (e, d))) = pretty nn <> pretty e <> pretty d instance Null NamedDomainNode where isMissing (NameDomainNode (NameNode a) Nothing) = isMissing a - isMissing (NameDomainNode (NameNode a) (Just (b,c))) = isMissing a && isMissing b && isMissing c + isMissing (NameDomainNode (NameNode a) (Just (b, c))) = isMissing a && isMissing b && isMissing c + -- Common Statements newtype NameNode = NameNode LToken deriving (Show) +instance Pretty NameNode where + pretty (NameNode n) = pretty n + instance Null NameNode where isMissing (NameNode e) = isMissing e @@ -210,7 +325,7 @@ instance Null NameNode where data ExpressionNode = Literal LiteralNode | IdentifierNode NameNode - | MetaVarExpr LToken + | MetaVarExpr LToken | QuantificationExpr QuantificationExpressionNode | OperatorExpressionNode OperatorExpressionNode | DomainExpression DomainExpressionNode @@ -222,30 +337,51 @@ data ExpressionNode | SpecialCase SpecialCaseNode deriving (Show) +instance Pretty ExpressionNode where + pretty x = case x of + Literal ln -> pretty ln + IdentifierNode nn -> pretty nn + MetaVarExpr lt -> pretty lt + QuantificationExpr qen -> pretty qen + OperatorExpressionNode oen -> pretty oen + DomainExpression den -> pretty den + ParenExpression (ParenExpressionNode l e r) -> pretty l <> pretty e <> pretty r + AbsExpression (ParenExpressionNode l e r) -> pretty l <> pretty e <> pretty r + FunctionalApplicationNode lt ln -> pretty lt <> pretty ln + AttributeAsConstriant lt ln -> pretty lt <> pretty ln + MissingExpressionNode _ -> emptyDoc + SpecialCase scn -> pretty scn instance Null ExpressionNode where - isMissing (MissingExpressionNode _ ) = True + isMissing (MissingExpressionNode _) = True isMissing _ = False data SpecialCaseNode = ExprWithDecls LToken ExpressionNode LToken [StatementNode] LToken deriving (Show) +instance Pretty SpecialCaseNode where + pretty x = case x of + ExprWithDecls lt en lt' sns lt2 -> group $ cat [pretty lt, pretty en, pretty lt', pretty sns, pretty lt2] - -data DomainExpressionNode +data DomainExpressionNode = DomainExpressionNode LToken DomainNode LToken - deriving (Show) + deriving (Show) +instance Pretty DomainExpressionNode where + pretty (DomainExpressionNode l d r) = pretty l <> pretty d <> pretty r data ParenExpressionNode = ParenExpressionNode LToken ExpressionNode LToken deriving (Show) newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) +instance Pretty ShortTuple where + pretty (ShortTuple exps) = pretty exps instance Null ShortTuple where - isMissing (ShortTuple ls ) = isMissing ls + isMissing (ShortTuple ls) = isMissing ls data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) +instance Pretty LongTuple where + pretty (LongTuple t exps) = pretty t <> pretty exps + instance Null LongTuple where isMissing (LongTuple s ls) = isMissing s && isMissing ls - - -- Literals data LiteralNode = IntLiteral LToken @@ -254,7 +390,7 @@ data LiteralNode | TupleLiteralNode LongTuple | TupleLiteralNodeShort ShortTuple | RecordLiteral LToken (ListNode RecordMemberNode) - | VariantLiteral LToken (ListNode RecordMemberNode) --catch later + | VariantLiteral LToken (ListNode RecordMemberNode) -- catch later | SetLiteral (ListNode ExpressionNode) | MSetLiteral LToken (ListNode ExpressionNode) | FunctionLiteral LToken (ListNode ArrowPairNode) @@ -263,29 +399,61 @@ data LiteralNode | PartitionLiteral LToken (ListNode PartitionElemNode) deriving (Show) +instance Pretty LiteralNode where + pretty l = case l of + IntLiteral lt -> pretty lt + BoolLiteral lt -> pretty lt + MatrixLiteral mln -> pretty mln + TupleLiteralNode lt -> pretty lt + TupleLiteralNodeShort st -> pretty st + RecordLiteral lt ln -> pretty lt <> pretty ln + VariantLiteral lt ln -> pretty lt <> pretty ln + SetLiteral ln -> pretty ln + MSetLiteral lt ln -> pretty lt <> pretty ln + FunctionLiteral lt ln -> pretty lt <> pretty ln + SequenceLiteral lt ln -> pretty lt <> pretty ln + RelationLiteral lt ln -> pretty lt <> pretty ln + PartitionLiteral lt ln -> pretty lt <> pretty ln + data MatrixLiteralNode - = MatrixLiteralNode - LToken --openBracket + = MatrixLiteralNode + LToken -- openBracket (Sequence ExpressionNode) (Maybe OverDomainNode) -- explicitDomain - (Maybe ComprehensionNode) --compBody - LToken --close + (Maybe ComprehensionNode) -- compBody + LToken -- close deriving (Show) -data ComprehensionNode - = ComprehensionNode - LToken -- | +instance Pretty MatrixLiteralNode where + pretty (MatrixLiteralNode bl es d c br) = + group $ + align (cat (pretty bl : prettyElems es ++ catMaybes ((pretty <$> d) : comps) ++ [pretty br])) + where + comps = case c of + Nothing -> [] + Just (ComprehensionNode l seq) -> pure <$> pretty l : prettyElems seq + +data ComprehensionNode + = ComprehensionNode + LToken (Sequence ComprehensionBodyNode) - deriving (Show) + deriving (Show) + +instance Pretty ComprehensionNode where + pretty (ComprehensionNode bar es) = align $ pretty bar <+> pretty es data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode deriving (Show) +instance Pretty RecordMemberNode where + pretty (RecordMemberNode n t e) = pretty n <> pretty t <> pretty e instance Null RecordMemberNode where isMissing (RecordMemberNode (NameNode s) t e) = isMissing s && isMissing t && isMissing e data ArrowPairNode = ArrowPairNode ExpressionNode LToken ExpressionNode deriving (Show) +instance Pretty ArrowPairNode where + pretty (ArrowPairNode l a r) = pretty l <> pretty a <> pretty r instance Null ArrowPairNode where isMissing (ArrowPairNode l a b) = isMissing l && isMissing a && isMissing b @@ -293,15 +461,20 @@ data RelationElemNode = RelationElemNodeLabeled LongTuple | RelationElemNodeShort ShortTuple deriving (Show) - +instance Pretty RelationElemNode where + pretty x = case x of + RelationElemNodeLabeled lt -> pretty lt + RelationElemNodeShort st -> pretty st instance Null RelationElemNode where isMissing (RelationElemNodeLabeled lt) = isMissing lt isMissing (RelationElemNodeShort st) = isMissing st newtype PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) deriving (Show) +instance Pretty PartitionElemNode where + pretty (PartitionElemNode l) = pretty l instance Null PartitionElemNode where - isMissing (PartitionElemNode l ) = isMissing l + isMissing (PartitionElemNode l) = isMissing l data QuantificationExpressionNode = QuantificationExpressionNode @@ -309,33 +482,54 @@ data QuantificationExpressionNode (Sequence AbstractPatternNode) QuantificationOverNode (Maybe QuanticationGuard) - LToken --dot + LToken -- dot ExpressionNode deriving (Show) -- MAYBE? -data QuantificationOverNode = - QuantifiedSubsetOfNode LToken ExpressionNode +instance Pretty QuantificationExpressionNode where + pretty (QuantificationExpressionNode q pats over m_guard dot body) = + group $ hd <+> flatIndent 4 (pretty body) + where + hd = group $ pretty q <+> pretty pats <+> pretty over <+> pretty m_guard <+> pretty dot +data QuantificationOverNode + = QuantifiedSubsetOfNode LToken ExpressionNode | QuantifiedMemberOfNode LToken ExpressionNode | QuantifiedDomainNode OverDomainNode deriving (Show) +instance Pretty QuantificationOverNode where + pretty q = case q of + QuantifiedSubsetOfNode lt en -> pretty lt <+> pretty en + QuantifiedMemberOfNode lt en -> pretty lt <+> pretty en + QuantifiedDomainNode odn -> pretty odn data OverDomainNode = OverDomainNode LToken DomainNode deriving (Show) -data AbstractPatternNode = - AbstractIdentifier NameNode +instance Pretty OverDomainNode where + pretty (OverDomainNode a b) = pretty a <+> pretty b +data AbstractPatternNode + = AbstractIdentifier NameNode | AbstractMetaVar LToken | AbstractPatternTuple (Maybe LToken) (ListNode AbstractPatternNode) | AbstractPatternMatrix (ListNode AbstractPatternNode) | AbstractPatternSet (ListNode AbstractPatternNode) deriving (Show) +instance Pretty AbstractPatternNode where + pretty a = case a of + AbstractIdentifier nn -> pretty nn + AbstractMetaVar lt -> pretty lt + AbstractPatternTuple m_lt ln -> pretty m_lt <> pretty ln + AbstractPatternMatrix ln -> pretty ln + AbstractPatternSet ln -> pretty ln instance Null AbstractPatternNode where - isMissing (AbstractIdentifier (NameNode s) ) = isMissing s + isMissing (AbstractIdentifier (NameNode s)) = isMissing s isMissing _ = False data QuanticationGuard = QuanticationGuard LToken ExpressionNode deriving (Show) -data QuantificationPattern = - QuantificationPattern ExpressionNode +instance Pretty QuanticationGuard where + pretty (QuanticationGuard a e) = pretty a <+> pretty e +data QuantificationPattern + = QuantificationPattern ExpressionNode deriving (Show) data ComprehensionExpressionNode @@ -354,6 +548,13 @@ data ComprehensionBodyNode | CompBodyLettingNode LToken AbstractPatternNode LToken ExpressionNode deriving (Show) +instance Pretty ComprehensionBodyNode where + pretty x = case x of + CompBodyCondition en -> pretty en + CompBodyDomain se lt dn -> pretty se <+> pretty lt <+> pretty dn + CompBodyGenExpr se lt en -> pretty se <+> pretty lt <+> pretty en + CompBodyLettingNode lt apn lt' en -> pretty lt <+> pretty apn <+> pretty lt' <+> pretty en + instance Null ComprehensionBodyNode where isMissing (CompBodyCondition a) = isMissing a isMissing (CompBodyDomain a b c) = isMissing a && isMissing b && isMissing c @@ -365,16 +566,28 @@ data OperatorExpressionNode | BinaryOpNode ExpressionNode LToken ExpressionNode deriving (Show) +instance Pretty OperatorExpressionNode where + pretty x = case x of + PostfixOpNode en pon -> pretty en <> pretty pon + PrefixOpNode lt en -> pretty lt <> pretty en + BinaryOpNode en lt en' -> group $ sep [pretty en, pretty lt, pretty en'] data PostfixOpNode = IndexedNode (ListNode RangeNode) - | OpFactorial LToken + | OpFactorial LToken | ExplicitDomain LToken LToken DomainNode LToken | ApplicationNode (ListNode ExpressionNode) deriving (Show) --- data FunctionApplicationNode --- = FunctionApplicationNode LToken (ListNode ExpressionNode) +instance Pretty PostfixOpNode where + pretty o = case o of + IndexedNode ln -> pretty ln + OpFactorial lt -> pretty lt + ExplicitDomain lt lt' dn lt2 -> pretty lt <+> pretty lt' <> pretty dn <> pretty lt2 + ApplicationNode ln -> pretty ln + +-- data FunctionApplicationNode +-- = FunctionApplicationNode LToken (ListNode ExpressionNode) data IndexerNode = Indexer @@ -385,15 +598,39 @@ data ListNode itemType = ListNode , lClBracket :: LToken } deriving (Show) + +-- prettyList :: Pretty a => ListNode a > Doc +-- prettyList (ListNode start es end) = group $ align $ cat $ +-- [ +-- pretty start , +-- flatAlt (indent 4 $ pretty es) (pretty es) , +-- pretty end +-- ] +instance Pretty a => Pretty (ListNode a) where + pretty (ListNode start es end) = + group $ + align $ + cat $ + [ pretty start + , flatAlt (indent 4 $ pretty es) (pretty es) + , pretty end + ] + instance (Null a) => Null (ListNode a) where - isMissing (ListNode l1 s l2 ) = isMissing l1 && isMissing s && isMissing l2 + isMissing (ListNode l1 s l2) = isMissing l1 && isMissing s && isMissing l2 newtype Sequence itemType = Seq { elems :: [SeqElem itemType] } deriving (Show) +instance Pretty a => Pretty (Sequence a) where + pretty (Seq xs) = align $ cat $ map pretty xs + +prettyElems :: (Pretty a) => Sequence a -> [Doc ann] +prettyElems (Seq xs) = map pretty xs + instance (Null a) => Null (SeqElem a) where - isMissing (SeqElem i Nothing)= isMissing i + isMissing (SeqElem i Nothing) = isMissing i isMissing (SeqElem i x) = isMissing i && isMissing x isMissing (MissingSeqElem _ c) = isMissing c @@ -406,18 +643,37 @@ instance (Null a) => Null (Sequence a) where -- instance (Show a) => Show (Sequence a) where -- show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" -data SeqElem itemType = SeqElem - { - item :: itemType, - separator :: Maybe LToken - } +data SeqElem itemType + = SeqElem + { item :: itemType + , separator :: Maybe LToken + } | MissingSeqElem LToken LToken deriving (Show) +instance Pretty a => Pretty (SeqElem a) where + pretty (SeqElem i s) = pretty i <> pretty s + pretty _ = emptyDoc class Null a where isMissing :: a -> Bool - instance (Null a) => Null (Maybe a) where isMissing Nothing = True - isMissing (Just s) = isMissing s \ No newline at end of file + isMissing (Just s) = isMissing s + +prettyTokenAndComments :: LToken -> (Doc ann, Doc ann) +prettyTokenAndComments (RealToken [] t) = prettySplitComments t +prettyTokenAndComments (o) = (emptyDoc, pretty o) + +topLevelPretty :: [LToken] -> Doc ann -> Doc ann +topLevelPretty (t : (map pretty -> xs)) exprs = + let (cs, ps) = prettyTokenAndComments t + dec = ps <+> hsep xs + in cs <> group (fill 7 dec <+> flatIndent 4 exprs) +topLevelPretty _ exprs = group (fill 7 emptyDoc <+> flatIndent 4 exprs) + +flatIndent :: Int -> Doc ann -> Doc ann +flatIndent amt d = flatAlt (line <> indent amt d) d + +renderAST :: Int -> ProgramTree -> Text +renderAST n = renderStrict . layoutSmart (LayoutOptions $ AvailablePerLine n 0.8) . pretty \ No newline at end of file diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index 218fa98094..95a06ee454 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -23,6 +23,9 @@ import qualified Text.Megaparsec.Char.Lexer as L import Data.Sequence (Seq) import qualified Text.Megaparsec as L import Prelude (read) +import Conjure.Language.Pretty (Pretty (..), vcat,(<>)) +import qualified Prettyprinter as Pr + sourcePos0 :: SourcePos sourcePos0 = SourcePos "" (mkPos 1) (mkPos 1) @@ -75,6 +78,12 @@ data ETok = ETok } deriving (Eq, Ord) +instance Pr.Pretty ETok where + pretty = Pr.unAnnotate . uncurry (<>) . prettySplitComments + +prettySplitComments :: ETok -> (Pr.Doc ann, Pr.Doc ann) +prettySplitComments (ETok _ tr _ capture) = (Pr.hcat [Pr.pretty t <> Pr.hardline | LineComment t <- tr],Pr.pretty capture) + totalLength :: ETok -> Int totalLength = oTLength . offsets diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index dbe460aa2a..1f4e14b993 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -43,6 +43,7 @@ import Conjure.Language.Pretty (Pretty(pretty), prettyT) import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) +import Conjure.Language.Pretty import qualified Data.Text.Lazy as L import Data.Aeson.Encoding (bool) From bb7e2637cdccb2b303a61b501e1e92f48921a11a Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 13 Dec 2022 17:04:59 +0000 Subject: [PATCH 116/378] PrettyPrint using new system --- src/Conjure/Language/Parser.hs | 26 +++++++++++++++++++++++++- src/Conjure/Language/Validator.hs | 4 ++++ src/Conjure/UI/IO.hs | 23 +++++++++++++++++++++++ src/Conjure/UI/MainHelper.hs | 10 ++++++++-- 4 files changed, 60 insertions(+), 3 deletions(-) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 83339d982a..71ce9738cc 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -9,6 +9,7 @@ module Conjure.Language.Parser , parseExpr , parseDomain , parseDomainWithRepr + , prettyPrintWithChecks , Pipeline , PipelineError(..) , runPipeline @@ -54,8 +55,9 @@ import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) import Conjure.Language.AST.Helpers (ParserState) import qualified Conjure.Language.AST.Helpers as P -import Conjure.Language.AST.Reformer (Flattenable) +import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Conjure.Language.Pretty +import qualified Prettyprinter as Pr type Pipeline a b = ( (StateT ParserState (Parsec Void ETokenStream)) a ,a -> V.ValidatorS b,Bool) @@ -1136,3 +1138,25 @@ runLexerAndParser p file inp = case runPipeline p inp of -- result <- parser -- eof -- return result + + +prettyPrintWithChecks :: MonadFailDoc m => Text -> m Doc +prettyPrintWithChecks src = do + v <-case lexAndParse parseProgram src of + Left pe -> failDoc $ pretty $ show pe + Right pt -> return pt + return $ (if V.isSyntacticallyValid V.validateModel v then Pr.pretty else partialPretty ) v + +partialPretty :: ProgramTree -> Doc +partialPretty (S.ProgramTree lv sns lt) = vcat [ + langVer, + vcat $ map pTopLevel sns, + Pr.pretty lt + ] + where + langVer = case lv of + Nothing -> "language Essence 1.3\n" + Just _ -> if V.isSyntacticallyValid V.validateLanguageVersion lv then Pr.pretty lv else fallback lv + fallback :: Flattenable a => a -> Doc + fallback v = Pr.pretty $ L.reformList $ flatten v + pTopLevel st = if V.isSyntacticallyValid V.validateStatement st then Pr.pretty st else fallback lv diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 1f4e14b993..e8774ce52a 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -374,6 +374,10 @@ deState ((a,r),n) = (a,n,r) runValidator :: (ValidatorT r w a) -> r -> ((Maybe a),[w],r) runValidator (ValidatorT r) d = deState $ runWriter (runStateT (runMaybeT r) d) +isSyntacticallyValid :: Flattenable a=> (a->(ValidatorT ValidatorState ValidatorDiagnostic b)) -> a -> Bool +isSyntacticallyValid v s = case runValidator (v s) (initialState s){typeChecking=False} of + (_,vds,_) -> not $ any isError vds + todoTypeAny :: Maybe a -> Maybe (Typed a) todoTypeAny = typeAs TypeAny diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 4f3a55dbde..82e6cf84b8 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -34,7 +34,30 @@ import qualified Data.Text.Encoding as T ( encodeUtf8 ) import qualified Data.ByteString as BS ( readFile, writeFile ) import qualified Data.ByteString.Char8 as BS ( putStrLn ) import Conjure.Language.AST.Syntax (ProgramTree) +import Conjure.Language.AST.ASTParser (parseProgram) +import Conjure.Language.Validator (runValidator, validateModel, ValidatorState (typeChecking), initialState, isError) +import Text.Megaparsec (errorBundlePretty) +import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) +readASTFromFile :: + MonadIO m => + MonadFailDoc m => + MonadUserError m => + FilePath -> m ProgramTree +readASTFromFile fp = do + (_,contents) <- liftIO $ pairWithContents fp + v <-case lexAndParse parseProgram contents of + Left pe -> failDoc $ pretty $ show pe + Right pt -> return pt + case + runValidator + (validateModel v) (initialState v) {typeChecking = False} + of + (_, vds, _) | any isError vds -> pure v + (_,vds,_) -> failDoc $ "Cannot pretty print a model with errors" <+> pretty (showDiagnosticsForConsole vds contents) + + + readModelFromFile :: MonadIO m => diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 22366d5f3c..d638edcd19 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -63,7 +63,8 @@ import Shelly ( runHandle, lastStderr, lastExitCode, errExit, Sh ) import qualified Data.Text as T ( unlines, isInfixOf ) -- parallel-io -import Control.Concurrent.ParallelIO.Global ( parallel, stopGlobalPool ) +import Control.Concurrent.ParallelIO.Global ( parallel, parallel_, stopGlobalPool ) +import Conjure.Language.Parser (prettyPrintWithChecks) mainWithArgs :: forall m . @@ -143,7 +144,7 @@ mainWithArgs IDE{..} = do json <- runNameGen () $ modelRepresentationsJSON essence2 liftIO $ putStrLn $ render lineWidth json | otherwise -> writeModel lineWidth ASTJSON Nothing essence2 -mainWithArgs Pretty{..} = do +mainWithArgs Pretty{..} | outputFormat /= Plain = do model0 <- if or [ s `isSuffixOf` essence | s <- [".param", ".eprime-param", ".solution", ".eprime.solution"] ] then do @@ -154,6 +155,11 @@ mainWithArgs Pretty{..} = do |> (if normaliseQuantified then normaliseQuantifiedVariables else id) |> (if removeUnused then removeUnusedDecls else id) writeModel lineWidth outputFormat Nothing model1 +mainWithArgs Pretty{..} = do + (_,cts) <- liftIO $ pairWithContents essence + res <- prettyPrintWithChecks cts + liftIO $ putStrLn $ render lineWidth res + mainWithArgs Diff{..} = join $ modelDiffIO <$> readModelFromFile file1 From c1ddaf168151a0615a0434d05ab68ae084558457 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 13 Dec 2022 19:42:36 +0000 Subject: [PATCH 117/378] Default langauge version in pretty, fixed bug --- src/Conjure/Language/AST/Syntax.hs | 8 ++++---- src/Conjure/Language/Parser.hs | 4 ++-- src/Conjure/Language/Pretty.hs | 8 ++++---- src/Conjure/Language/Validator.hs | 1 - 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 649a21e24f..81d44de796 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -56,7 +56,7 @@ data ProgramTree = ProgramTree instance Pretty ProgramTree where pretty (ProgramTree l s e) = vcat - [ pretty l + [ maybe "language Essence 1.3" pretty l <> line , vcat $ map pretty s , pretty e ] @@ -624,7 +624,7 @@ newtype Sequence itemType = Seq deriving (Show) instance Pretty a => Pretty (Sequence a) where - pretty (Seq xs) = align $ cat $ map pretty xs + pretty (Seq xs) = align $ sep $ map pretty xs prettyElems :: (Pretty a) => Sequence a -> [Doc ann] prettyElems (Seq xs) = map pretty xs @@ -669,8 +669,8 @@ topLevelPretty :: [LToken] -> Doc ann -> Doc ann topLevelPretty (t : (map pretty -> xs)) exprs = let (cs, ps) = prettyTokenAndComments t dec = ps <+> hsep xs - in cs <> group (fill 7 dec <+> flatIndent 4 exprs) -topLevelPretty _ exprs = group (fill 7 emptyDoc <+> flatIndent 4 exprs) + in cs <> group (fill 7 dec <+> flatIndent 4 exprs) <> line +topLevelPretty _ exprs = group (fill 7 emptyDoc <+> flatIndent 4 exprs) <> line flatIndent :: Int -> Doc ann -> Doc ann flatIndent amt d = flatAlt (line <> indent amt d) d diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 71ce9738cc..70f33294d5 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -1155,8 +1155,8 @@ partialPretty (S.ProgramTree lv sns lt) = vcat [ ] where langVer = case lv of - Nothing -> "language Essence 1.3\n" + Nothing -> "language Essence 1.3" Just _ -> if V.isSyntacticallyValid V.validateLanguageVersion lv then Pr.pretty lv else fallback lv fallback :: Flattenable a => a -> Doc fallback v = Pr.pretty $ L.reformList $ flatten v - pTopLevel st = if V.isSyntacticallyValid V.validateStatement st then Pr.pretty st else fallback lv + pTopLevel st = if V.isSyntacticallyValid V.validateStatement st then Pr.pretty st else fallback st \ No newline at end of file diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index 3405f99830..5b0a138bbd 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -29,8 +29,8 @@ import qualified Data.Text as T ( Text, unpack, length, singleton, concatMap, pa -- pretty import Prettyprinter - ( parens, brackets, vcat ,braces, layoutPretty, PageWidth (AvailablePerLine) - , (<+>), (<>) + ( parens, brackets ,braces, layoutPretty, PageWidth (AvailablePerLine) + -- will be exported with new names ) @@ -58,7 +58,7 @@ instance Pretty () where pretty = Pr.pretty instance Pretty Bool where pretty = Pr.pretty instance Pretty Int where pretty = Pr.pretty instance Pretty Integer where pretty = Pr.pretty -instance Pretty Double where pretty x = pretty (printf "%.2f" x :: String) +instance Pretty Double where pretty x = Pr.pretty (printf "%.2f" x :: String) instance (Pretty a, Pretty b) => Pretty (a, b) where pretty (a, b) = prettyListDoc parens "," [pretty a, pretty b] @@ -101,7 +101,7 @@ render :: Pretty a => Int -> a -> String render w = Pr.renderString . (layoutPretty (Pr.LayoutOptions $ AvailablePerLine w 1.0) . pretty) prEmpty :: Doc -prEmpty = prEmpty +prEmpty = Pr.emptyDoc prParens :: Doc -> Doc prParens = parens diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index e8774ce52a..d1df9d7d42 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -39,7 +39,6 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Text.Megaparsec.Pos (SourcePos(..)) import Data.Sequence (Seq (..), viewr, ViewR (..)) -import Conjure.Language.Pretty (Pretty(pretty), prettyT) import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) From bccbc878271298771795476f432ddebfeaa0055a Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 14 Dec 2022 15:24:00 +0000 Subject: [PATCH 118/378] pretty fixes + enum indexing bug --- src/Conjure/Language/Pretty.hs | 6 +-- src/Conjure/Language/Validator.hs | 2 +- src/Conjure/Prelude.hs | 9 ++-- .../Process/ValidateConstantForDomain.hs | 42 +++++++++++++++++-- .../Process/ValidateConstantForDomain.hs-boot | 1 - 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index 5b0a138bbd..774e2810b0 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -29,7 +29,7 @@ import qualified Data.Text as T ( Text, unpack, length, singleton, concatMap, pa -- pretty import Prettyprinter - ( parens, brackets ,braces, layoutPretty, PageWidth (AvailablePerLine) + ( parens, brackets ,braces, PageWidth (AvailablePerLine) -- will be exported with new names ) @@ -83,7 +83,7 @@ prettyList :: Pretty a => (Doc -> Doc) -> Doc -> [a] -> Doc prettyList wrap punc = prettyListDoc wrap punc . map pretty prettyListDoc :: (Doc -> Doc) -> Doc -> [Doc] -> Doc -prettyListDoc wrap punc = wrap . Pr.fillSep . Pr.punctuate punc +prettyListDoc wrap punc = wrap . Pr.align . Pr.cat . map Pr.group . Pr.punctuate punc parensIf :: Bool -> Doc -> Doc parensIf = wrapIf parens @@ -98,7 +98,7 @@ renderWide :: Pretty a => a -> String renderWide = render 240 render :: Pretty a => Int -> a -> String -render w = Pr.renderString . (layoutPretty (Pr.LayoutOptions $ AvailablePerLine w 1.0) . pretty) +render w = Pr.renderString . (Pr.layoutSmart (Pr.LayoutOptions $ AvailablePerLine w 1.0) . pretty) prEmpty :: Doc prEmpty = Pr.emptyDoc diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index d1df9d7d42..2ce3e05552 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -1359,7 +1359,7 @@ getSlicingType t = do getIndexingType :: Type -> ValidatorS Type getIndexingType TypeAny = return $ TypeAny -getIndexingType (TypeMatrix i _) = return i +getIndexingType (TypeMatrix i _) = return $ getDomainMembers i getIndexingType (TypeSequence _) = return tInt getIndexingType (TypeList _) = return tInt getIndexingType (TypeTuple _) = return tInt diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index 55da744672..49c7427ea5 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -230,16 +230,19 @@ import Debug.Trace as X ( trace, traceM ) import Data.Void (Void) import GHC.IO.Exception (IOErrorType(InvalidArgument)) import Prettyprinter (PageWidth(AvailablePerLine)) -import Data.Text.Prettyprint.Doc.Render.String (renderString) -import Prettyprinter ((<+>)) +import Prettyprinter.Render.String (renderString) + + data EssenceDocAnnotation = EssenceDocAnnotation type Doc = Pr.Doc EssenceDocAnnotation +instance Eq Doc where + a == b = show a == show b --compats hang :: Doc -> Int ->Doc -> Doc -hang a n b = a <> Pr.hang n b +hang a n b = a <+> Pr.hang n b hcat :: [Doc] -> Doc hcat = Pr.hcat diff --git a/src/Conjure/Process/ValidateConstantForDomain.hs b/src/Conjure/Process/ValidateConstantForDomain.hs index 11d47fd9fd..2c40db181f 100644 --- a/src/Conjure/Process/ValidateConstantForDomain.hs +++ b/src/Conjure/Process/ValidateConstantForDomain.hs @@ -1,16 +1,50 @@ -{-# OPTIONS_GHC -fmax-pmcheck-iterations=50000000 #-} -- stupid cmdargs +-- {-# OPTIONS_GHC -fmax-pmcheck-iterations=50000000 #-} -- stupid cmdargs module Conjure.Process.ValidateConstantForDomain ( validateConstantForDomain ) where import Conjure.Prelude -import Conjure.Language +import Conjure.Language.Constant + ( viewConstantBool, + viewConstantFunction, + viewConstantIntWithTag, + viewConstantMSet, + viewConstantMatrix, + viewConstantPartition, + viewConstantRecord, + viewConstantRelation, + viewConstantSequence, + viewConstantSet, + viewConstantTuple, + viewConstantVariant, + Constant(ConstantEnum, TypedConstant, ConstantInt, ConstantBool) ) +import Conjure.Language.Definition + ( Name, + NameGen ) +import Conjure.Language.Domain + ( Domain(DomainBool, DomainUnnamed, DomainEnum, DomainPartition, + DomainTuple, DomainRecord, DomainVariant, DomainMatrix, DomainInt, + DomainSet, DomainMSet, DomainFunction, DomainSequence, + DomainRelation), + Range(RangeBounded, RangeOpen, RangeSingle, RangeLowerBounded, + RangeUpperBounded), + BinaryRelationAttrs(BinaryRelationAttrs), + RelationAttr(RelationAttr), + OccurAttr(OccurAttr_MinMaxOccur, OccurAttr_None, + OccurAttr_MinOccur, OccurAttr_MaxOccur), + MSetAttr(MSetAttr), + SizeAttr(SizeAttr_MinMaxSize, SizeAttr_None, SizeAttr_Size, + SizeAttr_MinSize, SizeAttr_MaxSize), + SetAttr(SetAttr), + binRelToAttrName ) +import Conjure.Language.Pretty ( prettyList, Pretty(pretty) ) +import Conjure.Language.Type ( TypeCheckerMode ) import Conjure.Language.Instantiate ( instantiateExpression ) -import Conjure.Language.NameGen ( NameGen ) import Conjure.Process.AttributeAsConstraints ( mkAttributeToConstraint ) import Conjure.Process.Enumerate ( EnumerateDomain ) -- containers import Data.Set as S ( size, size, toList ) +import Conjure.Language.Expression -- | Assuming both the value and the domain are normalised @@ -213,7 +247,7 @@ validateConstantForDomain name , "Evaluted to:" <+> pretty evaluatedC ] nested c d $ forM_ valss $ \ vals -> - zipWithM_ (validateConstantForDomain name) vals dInners + zipWithM_ (validateConstantForDomain name) vals dInners validateConstantForDomain name c@(viewConstantPartition -> Just valss) diff --git a/src/Conjure/Process/ValidateConstantForDomain.hs-boot b/src/Conjure/Process/ValidateConstantForDomain.hs-boot index 9af1950027..9e7a21ad99 100644 --- a/src/Conjure/Process/ValidateConstantForDomain.hs-boot +++ b/src/Conjure/Process/ValidateConstantForDomain.hs-boot @@ -2,7 +2,6 @@ module Conjure.Process.ValidateConstantForDomain ( validateConstantForDomain ) w import Conjure.Prelude import Conjure.Language -import Conjure.Language.NameGen ( NameGen ) import Conjure.Process.Enumerate ( EnumerateDomain ) validateConstantForDomain :: From b4d694e0c71a620f7c2666d0280d04a53ca8c6e1 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 14 Dec 2022 17:36:37 +0000 Subject: [PATCH 119/378] Region ranges fix --- src/Conjure/Language/Validator.hs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 2ce3e05552..3b4199dbd1 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -1095,7 +1095,8 @@ validateQuantificationExpression q@(QuantificationExpressionNode name pats over scoped $ do flagToken name TtQuantifier name' <- validateSymbol name - (over',genDec) <- holdDeclarations $ wrapRegion pats pats SGen $ validateQuantificationOver pats over + let genRegion = catRegions [ (symbolRegion pats,()),(symbolRegion over,())] + (over',genDec) <- holdDeclarations $ wrapRegion' genRegion (symbolRegion pats) SGen $ validateQuantificationOver pats over (g',gDec) <-case m_guard of Nothing -> return ([],[]) Just qg -> holdDeclarations $ @@ -1116,7 +1117,7 @@ validateQuantificationExpression q@(QuantificationExpressionNode name pats over case name' of Just l -> putKeywordDocs (T.pack $ show l) name Nothing -> pure () - wrapRegion q q (SQuantification (maybe "Quantification " lexemeText name') (simple rType)) (mapM_ addRegion (gDec++genDec++bDecl)) + wrapRegion q q (SQuantification (maybe "Quantification " lexemeText name') (simple rType)) (mapM_ addRegion (genDec++gDec++bDecl)) return $ fromMaybe (fallback "Quantification error") result where validateQuantificationGuard :: Maybe QuanticationGuard -> ValidatorS [GeneratorOrCondition] @@ -1753,7 +1754,12 @@ data DiagnosticRegion = DiagnosticRegion { drOffset :: Int, drLength :: Int } - deriving (Show,Eq,Ord) + deriving (Show,Eq) +instance Ord DiagnosticRegion where + compare a b = case compare (drSourcePos a) (drSourcePos b) of + LT -> LT + GT -> GT + EQ -> comparing drLength a b global :: DiagnosticRegion global =DiagnosticRegion sourcePos0 sourcePos0 0 0 -- getTokenRegion :: LToken -> DiagnosticRegion From a4c46e71ad11505bed6fe981f5dd441675fa48d7 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 17 Dec 2022 15:01:09 +0000 Subject: [PATCH 120/378] Cleanup, expression parsing fix and Ts fix --- Makefile | 2 +- conjure-cp.cabal | 2 +- docs/conjure-help.html | 5 + docs/conjure-help.txt | 5 + etc/hs-deps/stack-8.4.yaml | 12 - etc/hs-deps/stack-8.6.yaml | 9 - etc/hs-deps/stack-9.0.yaml | 4 +- src/Conjure/Language/AST/ASTParser.hs | 227 +++---- src/Conjure/Language/AST/Expression.hs | 537 ---------------- src/Conjure/Language/AST/Helpers.hs | 177 +++--- src/Conjure/Language/AST/Reformer.hs | 11 +- src/Conjure/Language/AST/Syntax.hs | 204 +++--- .../Language/Expression/Op/Internal/Common.hs | 3 +- src/Conjure/Language/NewLexer.hs | 62 +- src/Conjure/Language/Parser.hs | 26 +- src/Conjure/Language/ParserC.hs | 2 +- src/Conjure/Language/Pretty.hs | 51 +- src/Conjure/Language/Type.hs | 11 + src/Conjure/Language/Validator.hs | 588 ++++++++++-------- src/Conjure/Prelude.hs | 45 +- .../Process/ValidateConstantForDomain.hs | 2 +- src/Conjure/UI/ErrorDisplay.hs | 8 +- src/Conjure/UI/MainHelper.hs | 12 +- src/Conjure/UI/TypeScript.hs | 500 +++++++-------- src/exec/Main.hs | 4 +- src/test/Conjure/Custom.hs | 2 +- src/test/Conjure/ParsePrint.hs | 2 +- src/test/Conjure/TypeCheckAll.hs | 2 +- 28 files changed, 968 insertions(+), 1547 deletions(-) delete mode 100644 etc/hs-deps/stack-8.4.yaml delete mode 100644 etc/hs-deps/stack-8.6.yaml delete mode 100644 src/Conjure/Language/AST/Expression.hs diff --git a/Makefile b/Makefile index 4a091fa53f..506381eaf6 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ install: @echo "Using GHC version ${GHC_VERSION} (major version)" @echo "Set the environment variable GHC_VERSION to change this location." @echo "For example: \"GHC_VERSION=8.4 make install\"" - @echo "Supported versions: 8.4, 8.6, 9.0" + @echo "Supported version: 9.0" @echo "" @echo "Installing executables to ${BIN_DIR}" @echo "Add this directory to your PATH." diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 2f6e6d3666..e07b5911c4 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -42,7 +42,6 @@ Library , Conjure.Language.Attributes , Conjure.Language.Validator , Conjure.Language.AST.ASTParser - , Conjure.Language.AST.Expression , Conjure.Language.AST.Helpers , Conjure.Language.AST.Reformer , Conjure.Language.AST.Syntax @@ -277,6 +276,7 @@ Library , mtl , parallel-io , pipes + , pretty >=1.1.3.6 , prettyprinter -- >= 2.9 because of the TH fix: https://github.com/nick8325/quickcheck/issues/101 , QuickCheck >= 2.14 diff --git a/docs/conjure-help.html b/docs/conjure-help.html index 757af548bb..09646836ec 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -246,6 +246,11 @@  --log-level=LOGLEVELLog level. General:  --limit-time=INTLimit in seconds of real time. +  +conjure lsp [OPTIONS] +  + --loglevel=LOGLEVEL  + --limittime=INT 
diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index bdcaa12714..2f5781086d 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -468,4 +468,9 @@ --log-level=LOGLEVEL Log level. General: --limit-time=INT Limit in seconds of real time. + + conjure lsp [OPTIONS] + + --loglevel=LOGLEVEL + --limittime=INT diff --git a/etc/hs-deps/stack-8.4.yaml b/etc/hs-deps/stack-8.4.yaml deleted file mode 100644 index ee64392f9a..0000000000 --- a/etc/hs-deps/stack-8.4.yaml +++ /dev/null @@ -1,12 +0,0 @@ -resolver: lts-12.26 -packages: -- '.' -system-ghc: true -install-ghc: true -extra-deps: -- megaparsec-4.4.0 -- shelly-1.8.0 -- statistics-0.15.2.0 -- async-2.2.2 -- dense-linear-algebra-0.1.0.0 -- math-functions-0.3.4.1 \ No newline at end of file diff --git a/etc/hs-deps/stack-8.6.yaml b/etc/hs-deps/stack-8.6.yaml deleted file mode 100644 index b07cf741b3..0000000000 --- a/etc/hs-deps/stack-8.6.yaml +++ /dev/null @@ -1,9 +0,0 @@ -resolver: lts-14.27 -packages: -- '.' -system-ghc: true -install-ghc: true -extra-deps: -- megaparsec-4.4.0 -- aeson-typescript-0.2.0.0 -- shelly-1.8.0 diff --git a/etc/hs-deps/stack-9.0.yaml b/etc/hs-deps/stack-9.0.yaml index bc5ea6b122..f202965300 100644 --- a/etc/hs-deps/stack-9.0.yaml +++ b/etc/hs-deps/stack-9.0.yaml @@ -4,6 +4,6 @@ packages: system-ghc: true install-ghc: true extra-deps: -- megaparsec-9.2.2 +- megaparsec-9.3.0 - aeson-typescript-0.4.0.0 -- shelly-1.10.0 +- shelly-1.10.0 \ No newline at end of file diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 45a0fd1ece..cacb57c321 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -1,7 +1,17 @@ {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use <$>" #-} -module Conjure.Language.AST.ASTParser where +module Conjure.Language.AST.ASTParser ( + parseProgram, + ParserError, + runASTParser, + parseExpression, + parseDomain, + parseTopLevels, + example, + exampleFile --For debugging + ) where + import Conjure.Prelude hiding (many,some) @@ -13,29 +23,19 @@ import Conjure.Language.NewLexer import Conjure.Language.Lexemes import Text.Megaparsec -import Data.Void (Void) import Conjure.Language.AST.Reformer (Flattenable(..)) import Conjure.Language.Expression.Op.Internal.Common import Control.Monad.Combinators.Expr -import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) -import Language.Haskell.TH.PprLib (rparen) -import Conjure.Language.Attributes (allAttributLexemes) -import Data.Sequence (Seq) -import Text.Megaparsec.Debug (dbg) import qualified Data.Text.Lazy as L import qualified Data.Text as T -import Prettyprinter (layoutSmart, layoutPretty, defaultLayoutOptions) -import qualified Prettyprinter as Pr -import Data.Text.Prettyprint.Doc.Util (putDocW) -import Prettyprinter.Render.Text -data ParserError = ParserError (Doc) +newtype ParserError = ParserError (Doc) deriving (Show) runASTParser ::Flattenable a => Parser a -> ETokenStream -> Either ParserError a runASTParser p str = - case runParser (evalStateT p def) "parser" str of + case runParser p "parser" str of Left peb -> Left $ ParserError . pretty $ errorBundlePretty peb Right res -> Right res @@ -50,7 +50,7 @@ parseLangVersion :: Parser LangVersionNode parseLangVersion = do lLang <- need L_language lLName <- parseIdentifier - nums <- parseSequence L_Dot (RealToken [] <$> intLiteral) + nums <- parseSequence L_Dot (StrictToken [] <$> intLiteral) return $ LangVersionNode lLang lLName nums @@ -79,8 +79,8 @@ parseBranching :: Parser StatementNode parseBranching = do lBranching <- need L_branching lOn <- want L_on - statements <- squareBracketList (commaList parseExpression) - return $ BranchingStatement $ BranchingStatementNode lBranching lOn statements + branchSts <- squareBracketList (commaList parseExpression) + return $ BranchingStatement $ BranchingStatementNode lBranching lOn branchSts parseSuchThat :: Parser StatementNode @@ -109,7 +109,7 @@ parseDeclaration = declaration FindStatement L_find parseFind ] where - declaration :: (Null a,Show a) => (LToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b + declaration :: (Null a,Show a) => (SToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b declaration c t p = do l <- need t seq <- commaList1 p @@ -119,11 +119,12 @@ parseLetting :: Parser LettingStatementNode parseLetting = do names <- commaList1 parseIdentifier lBe <- want L_be + guard $ not (isMissing names && isMissing lBe) let start = LettingStatementNode names lBe start <$> choice [ finishDomain - , try finishEnum , try finishAnon + , try finishEnum , LettingExpr <$> parseExpression ] where @@ -131,19 +132,21 @@ parseLetting = do lDomain <- need L_domain domain <- parseDomain return $ LettingDomain lDomain domain - finishEnum = do - lNew <- need L_new - lType <- need L_type - lEnum <- need L_enum - members <- curlyBracketList $ commaList parseIdentifier - return $ LettingEnum lNew lType lEnum members - finishAnon = do - lNew <- need L_new + finishAnon = try $ do + lNew <- want L_new lType <- want L_type lOf <- want L_of lSize <- want L_size + guard (not $ all isMissing [lOf,lSize]) expr <- parseExpression return $ LettingAnon lNew lType lOf lSize expr + finishEnum = do + lNew <- want L_new + lType <- want L_type + lEnum <- want L_enum + guard (not $ all isMissing [lNew,lType,lEnum]) + members <- curlyBracketList $ commaList parseIdentifier + return $ LettingEnum lNew lType lEnum members parseGiven :: Parser GivenStatementNode parseGiven = do @@ -154,9 +157,10 @@ parseGiven = do ] where finishEnum start = do - lNew <- need L_new + lNew <- want L_new lType <- want L_type lEnum <- want L_enum + guard (not $ all isMissing [lNew,lType,lEnum]) return $ start lNew lType lEnum finishDomain start = do lColon <- want L_Colon -- want here so that parse cannot fail @@ -176,16 +180,16 @@ parseObjectiveStatement = do s <- eSymbol L_minimising <|> eSymbol L_maximising e <- parseExpression return $ case s of - (ETok {lexeme=L_minimising}) -> ObjectiveMin (RealToken [] s) e - _ -> ObjectiveMax (RealToken [] s) e + (ETok {lexeme=L_minimising}) -> ObjectiveMin (StrictToken [] s) e + _ -> ObjectiveMax (StrictToken [] s) e "Objective Statement" -pEnding :: Parser LToken +pEnding :: Parser SToken pEnding = do t <- lookAhead anySingle case t of - ETok {lexeme=L_EOF} -> return $ RealToken [] t + ETok {lexeme=L_EOF} -> return $ StrictToken [] t _ -> empty @@ -194,23 +198,17 @@ pEnding = do --------------------------------------- -guardExpressionOverlap :: Parser () -guardExpressionOverlap = do - off <- getOffset - lastOffset <- gets lastMissingExpOffset - -- traceC $ "DME query:" ++ show off ++ "," ++ show lastOffset - guard $ off > lastOffset - -- traceC $ "DME used:" ++ show off - modify (\x->x{lastMissingExpOffset=off}) + parseExpression :: Parser ExpressionNode -parseExpression = do - (parseOperator) - <|> (parseAtomicExpression) <|> (MissingExpressionNode <$> makeMissing (L_Missing "expression")) +parseExpression = try $ do + parseOperator + <|> parseAtomicExpression + <|> (MissingExpressionNode <$> makeMissing (L_Missing "expression")) parseExpressionStrict :: Parser ExpressionNode -- can fail -parseExpressionStrict = do - expr <- try parseExpression +parseExpressionStrict = try $ do + expr <- parseExpression case expr of MissingExpressionNode _ -> empty _ -> return expr @@ -221,8 +219,8 @@ parseAtomicExpression = do choice [ parseSpecialCase + , parseFunction --has to be first because true is overloaded , Literal <$> parseLiteral - , parseFunction , parseAttributeAsConstraint , IdentifierNode <$> parseIdentifierStrict , MetaVarExpr <$> parseMetaVar @@ -230,14 +228,14 @@ parseAtomicExpression = do , AbsExpression <$> parseAbsExpression , QuantificationExpr <$> parseQuantificationStatement , DomainExpression <$> parseDomainExpression - , guardExpressionOverlap >> MissingExpressionNode <$> (makeMissing $ L_Missing "Expr") + , MissingExpressionNode <$> makeMissing (L_Missing "Expr") ] parseDomainExpression :: Parser DomainExpressionNode parseDomainExpression = try $ do - lTick <- need L_BackTick + lTick <- needWeak L_BackTick domain <- parseDomain case domain of MissingDomainNode _ -> empty @@ -252,7 +250,7 @@ parseDomainExpression = try $ do parseMatrixBasedExpression :: Parser LiteralNode parseMatrixBasedExpression = do - openB <- need L_OpenBracket + openB <- needWeak L_OpenBracket exprs <- commaList parseExpression range <- optional pOverDomain comprehension <- optional pComp @@ -260,7 +258,7 @@ parseMatrixBasedExpression = do let es = exprs return $ MatrixLiteral $ MatrixLiteralNode openB es range comprehension closeB where - pOverDomain = OverDomainNode <$> need L_SemiColon <*> parseDomain + pOverDomain = OverDomainNode <$> needWeak L_SemiColon <*> parseDomain pComp = do bar <- need L_Bar body <- commaList parseComprehensionCondition @@ -269,14 +267,14 @@ parseMatrixBasedExpression = do --TODO look into adding enviorment to the parser to configure forgiveness parseAbsExpression :: Parser ParenExpressionNode parseAbsExpression = try $ do - lParen <- need L_Bar + lParen <- needWeak L_Bar expr <- parseExpression - rParen <- need L_Bar + rParen <- needWeak L_Bar return $ ParenExpressionNode lParen expr rParen parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode parseParenExpression (open, close) = try $ do - lParen <- need open + lParen <- needWeak open body <- parseExpression notFollowedBy $ need L_Comma rParen <- want close @@ -302,7 +300,7 @@ parseLiteral = parseShortTupleLiteral :: Parser LiteralNode parseShortTupleLiteral = try $ do - lOpen <- need L_OpenParen + lOpen <- needWeak L_OpenParen exprs <- commaList parseExpression let Seq xs = exprs guard (length xs > 1) @@ -310,7 +308,7 @@ parseShortTupleLiteral = try $ do return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) parseIntLiteral :: Parser LiteralNode -parseIntLiteral = IntLiteral . RealToken [] <$> intLiteral +parseIntLiteral = IntLiteral . StrictToken [] <$> intLiteral parseBoolLiteral :: Parser LiteralNode parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) @@ -343,7 +341,7 @@ parseRecordMember = do parseSetLiteral :: Parser LiteralNode parseSetLiteral = do -- cant just recycle list as it does not require first char - lOpen <- need L_OpenCurly + lOpen <- needWeak L_OpenCurly members <- commaList parseExpression lClose <- want L_CloseCurly return $ SetLiteral (ListNode lOpen members lClose) @@ -436,20 +434,20 @@ parseAbstractPattern = do parseAbstractMetaVar = AbstractMetaVar <$> parseMetaVar parseAbstractPatternTuple :: Parser AbstractPatternNode parseAbstractPatternTuple = do - lTuple <- optional $ need L_tuple - openB <- (if null lTuple then need else want) L_OpenParen + lTuple <- optional $ needWeak L_tuple + openB <- (if null lTuple then needWeak else want) L_OpenParen es <- commaList parseAbstractPattern closeB <- want L_CloseParen return $ AbstractPatternTuple lTuple (ListNode openB es closeB) parseAbstractPatternMatrix :: Parser AbstractPatternNode parseAbstractPatternMatrix = do - openB <- need L_OpenBracket + openB <- needWeak L_OpenBracket es <- commaList parseAbstractPattern closeB <- want L_CloseBracket return $ AbstractPatternMatrix (ListNode openB es closeB) parseAbstractPatternSet :: Parser AbstractPatternNode parseAbstractPatternSet = do - openB <- need L_OpenCurly + openB <- needWeak L_OpenCurly es <- commaList parseAbstractPattern closeB <- want L_CloseCurly return $ AbstractPatternSet (ListNode openB es closeB) @@ -479,9 +477,6 @@ parseComprehensionCondition = do condition = CompBodyCondition <$> parseExpressionStrict --- TODO look over this, asignment of domains should happen in next stage --- Current implementation is hacky - parseOperator :: Parser ExpressionNode parseOperator = try (makeExprParser parseAtomicExpressionAndFixes operatorTable "Expression") @@ -494,13 +489,12 @@ parseFunction = try $ do guard $ not ol || argsHasNoLeadingTrivia args return $ FunctionalApplicationNode name args where - isOverloaded (RealToken _ ETok{lexeme=lex}) = lex `elem` overloadedFunctionals - isOverloaded _ = False - argsHasNoLeadingTrivia (ListNode (RealToken [] ETok{trivia=[]}) y z) = True + isOverloaded (StrictToken _ ETok{lexeme=lex}) = lex `elem` overloadedFunctionals + argsHasNoLeadingTrivia (ListNode (RealToken (StrictToken [] ETok{trivia=[]})) _ _) = True argsHasNoLeadingTrivia _ = False parseAttributeAsConstraint :: Parser ExpressionNode parseAttributeAsConstraint = do - name <- choice $ map need (attributesAsLexemes allSupportedAttributes) + name <- parseAttributeLexeme args <- parenList $ commaList parseExpression return $ AttributeAsConstriant name args @@ -521,13 +515,13 @@ parsePostfixOp = do lBracket <- need L_OpenBracket indexer <- commaList parseRange rBracket <- want L_CloseBracket - return $ IndexedNode $ ListNode lBracket indexer rBracket + return $ IndexedNode $ ListNode (RealToken lBracket) indexer rBracket factorial = OpFactorial <$> need L_ExclamationMark application = do lBracket <- need L_OpenParen args <- commaList parseExpression rBracket <- want L_CloseParen - return $ ApplicationNode $ ListNode lBracket args rBracket + return $ ApplicationNode $ ListNode (RealToken lBracket) args rBracket explicitDomain = try $ do lColon <- need L_Colon lTickl <- need L_BackTick @@ -546,15 +540,15 @@ operatorTable = |> reverse in postfixOps : [ [ case descr of - BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op - BinaryOp op FNone -> InfixN $ prefixBinary <$> need op - BinaryOp op FRight -> InfixR $ prefixBinary <$> need op + BinaryOp op FLeft -> InfixL $ exprBinary <$> need op + BinaryOp op FNone -> InfixN $ exprBinary <$> need op + BinaryOp op FRight -> InfixR $ exprBinary <$> need op UnaryPrefix op -> prefixOps op | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) (descr, _) <- operatorsInGroup ] - | operatorsInGroup <- operatorsGrouped + | operatorsInGroup <- operatorsGrouped ] parseAtomicExpressionAndFixes :: Parser ExpressionNode @@ -566,8 +560,12 @@ parseAtomicExpressionAndFixes = try $ do postfixes = do fs <- some parsePostfixOp return $ foldr1 (.) (reverse fs) - withPrefix x = try x <|> do f <- prefixes; i <- x; return $ f i - withPostfix x = do i <- x; guard $ not $ isMissing i ; mf <- optional postfixes; return $ fromMaybe id mf i + withPrefix x = do f <- option id prefixes; i <- x; return $ f i + withPostfix x = do + i <- x; + -- guard $ not $ isMissing i ; + mf <- optional postfixes; + return $ fromMaybe id mf i withPrefix (withPostfix parseAtomicExpression) "expression" @@ -578,14 +576,13 @@ parsePrefixes = choice [parseUnary L_Minus,parseUnary L_ExclamationMark] -prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode -prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t +exprBinary :: SToken -> ExpressionNode -> ExpressionNode -> ExpressionNode +exprBinary t l = OperatorExpressionNode . BinaryOpNode l t + -prefixUnary :: LToken -> ExpressionNode -> ExpressionNode -prefixUnary l = OperatorExpressionNode . PrefixOpNode l prefixOps ::Lexeme -> Operator Parser ExpressionNode -prefixOps l = Prefix $ foldr1 (. ) <$> some (try opBuilder) +prefixOps l = Prefix $ foldr1 (.) <$> some (try opBuilder) where opBuilder :: Parser (ExpressionNode -> ExpressionNode) opBuilder = do @@ -653,7 +650,7 @@ parseShortTuple = do openB <- need L_OpenParen lst <- commaList parseDomain closeB <- want L_CloseParen - return $ ShortTupleDomainNode $ ListNode openB lst closeB + return $ ShortTupleDomainNode $ ListNode (RealToken openB) lst closeB parseRecord :: Parser DomainNode parseRecord = do @@ -781,13 +778,13 @@ parseAttributes = try $ do validInterior members = not $ null [x | (SeqElem (NamedAttributeNode x _) _) <- members,isNonIdentifier x ] - isNonIdentifier :: LToken -> Bool - isNonIdentifier (RealToken _ ETok{lexeme=(LIdentifier _)}) = False + isNonIdentifier :: SToken -> Bool + isNonIdentifier (StrictToken _ ETok{lexeme=(LIdentifier _)}) = False isNonIdentifier _ = True parseAttribute :: Parser AttributeNode parseAttribute = do - name <- (choice (map need allAttributLexemes)) <|> RealToken [] <$> identifier + name <- parseAttributeLexeme <|> StrictToken [] <$> identifier expr <- optional parseExpressionStrict return $ NamedAttributeNode name expr @@ -799,37 +796,28 @@ parseMissingDomain = "Anything" -attributesAsLexemes :: [(Name,Int)] -> [Lexeme] -attributesAsLexemes xs = do - let xs' = map fst xs - let ys = [t | Name t <- xs'] - let lexes = map textToLexeme ys - catMaybes lexes --------------------------------------- ---EXAMPLES AND TESTING ---- --------------------------------------- -putTextLn :: L.Text -> IO () -putTextLn = putStrLn . L.unpack - example :: String -> IO () example s = do let str = s let txt = T.pack str let lexed = runParser eLex "lexer" txt case lexed of - Left peb -> putStrLn "Lexer error:" >> (putStrLn $ errorBundlePretty peb) + Left peb -> putStrLn "Lexer error:" >> putStrLn (errorBundlePretty peb) Right ets -> do putStrLn $ "Lexed " ++ show ( length ets) ++" symbols" - -- putStrLn $ show . take 100 $ ets - putStrLn $ "reformed" + print $ take 100 ets + putStrLn "reformed" -- putTextLn $ reformList ets let stream = ETokenStream txt ets - case runParser (evalStateT parseProgram def) "parser" stream of - Left peb -> putStrLn "Parser error: " >> (putStrLn $ "") + case runParser parseProgram "parser" stream of + Left peb -> putStrLn "Parser error: " >> putStrLn ( errorBundlePretty peb) Right pt -> do - -- putStrLn $ show pt - putStrLn $ "Reforming" + print $ show pt + putStrLn "Reforming" print $ reformList (flatten pt) == L.fromStrict txt putStrLn "Pretty:" @@ -847,44 +835,3 @@ exampleFile p = do Just s -> example s return () -contextRegion :: String -> Parser a -> Parser a -contextRegion l m = do - prev <- gets context - modify (\x->x{context=l:prev}) - r <- m - modify (\x->x{context=prev}) - return r - -traceC :: String -> Parser () -traceC msg = do - ctx <- gets context - traceM $ intercalate "." (reverse ctx) ++ msg --- parsePrint :: String -> IO () --- parsePrint text = do --- toks <- parseAndRevalidate (pack text) eLex (concatMap reform) text --- case toks of --- Left (a,b)-> do --- putStrLn "Lexer wasn't reversible" --- showDiff a b --- Right ets -> putStrLn "Lexer success" >> do --- tree <- parseAndRevalidate (ETokenStream (pack text) ets) parseProgram (\v -> reformList (flatten v :: Seq ETok) ) text --- case tree of --- Left (a,b) -> do --- putStrLn "Parser wasn't reversible:" --- showDiff a b --- Right _ -> putStrLn "Success" --- where --- showDiff a b = do --- putStrLn "got vvvvvvvvv" --- putStrLn a --- putStrLn "expected vvvvvvvvv" --- putStrLn b - - --- parseAndRevalidate ::(VisualStream a,TraversableStream a,Stream a,Show b) => a -> ParsecT Void a (StateT ParserState Identity) b -> (b -> String) -> String -> IO (Either (String,String) b) --- parseAndRevalidate src p f ref = do --- case evalState (runParserT p "" src) def of --- Left _ -> do --- putStrLn "Parse error" --- parseTest p src >> empty --- Right res -> return (if f res == ref then Right res else Left (f res,ref)) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Expression.hs b/src/Conjure/Language/AST/Expression.hs deleted file mode 100644 index 99dcef2cbe..0000000000 --- a/src/Conjure/Language/AST/Expression.hs +++ /dev/null @@ -1,537 +0,0 @@ --- {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} - --- {-# HLINT ignore "Use <$>" #-} -module Conjure.Language.AST.Expression where - --- import Conjure.Language.AST.Helpers --- import Conjure.Language.AST.Syntax --- import Conjure.Language.Lexemes --- import Conjure.Prelude hiding (many, some) --- import Text.Megaparsec - --- import Control.Monad.Combinators.Expr (Operator (..), makeExprParser) - --- import Conjure.Language.Expression.Op.Internal.Common --- import Conjure.Language.NewLexer (ETok(..)) --- import Conjure.Language.Expression.Op.Internal.Common (overloadedFunctionals) --- import Conjure.Language.AST.ASTParser (parseTopLevel) - --- import Text.Megaparsec.Debug (dbg) - --- parseExpression :: Parser ExpressionNode --- parseExpression = --- parseOperator --- <|> parseAtomicExpression - --- parseExpressionStrict :: Parser ExpressionNode -- can fail --- parseExpressionStrict = do --- expr <- try parseExpression --- case expr of --- MissingExpressionNode _ -> empty --- _ -> return expr - --- parseAtomicExpression :: Parser ExpressionNode --- parseAtomicExpression = do --- try $ --- choice --- [ Literal <$> parseLiteral --- , parseFunction --- , IdentifierNode <$> parseIdentifierStrict --- , MetaVarExpr <$> parseMetaVar --- , ParenExpression <$> parseParenExpression parensPair --- , AbsExpression <$> parseParenExpression (L_Bar, L_Bar) --- , QuantificationExpr <$> parseQuantificationStatement --- , DomainExpression <$> parseDomainExpression --- , MissingExpressionNode <$> makeMissing (L_Missing "Expression") --- ] - - - --- parseDomainExpression :: Parser DomainExpressionNode --- parseDomainExpression = do --- lTick <- need L_BackTick --- domain <- parseDomain --- rTick <- want L_BackTick --- return $ DomainExpressionNode lTick domain rTick - --- -- [a,b,c : int (1..2)] --- -- [a,b,c : int (1..4) | x < 3,letting x be int] - - - --- parseMatrixBasedExpression :: Parser LiteralNode --- parseMatrixBasedExpression = do --- openB <- need L_OpenBracket --- exprs <- commaList parseExpression --- range <- optional pOverDomain --- comprehension <- optional pComp --- closeB <- want L_CloseBracket --- return $ MatrixLiteral $ MatrixLiteralNode openB exprs range comprehension closeB --- where --- pOverDomain = OverDomainNode <$> need L_Colon <*> parseDomain --- pComp = do --- bar <- need L_Bar --- body <- commaList parseComprehensionCondition --- return $ ComprehensionNode bar body - --- parseParenExpression :: (Lexeme, Lexeme) -> Parser ParenExpressionNode --- parseParenExpression (open, close) = try $ do --- lParen <- need open --- body <- parseExpression --- notFollowedBy $ need L_Comma --- rParen <- want close --- return $ ParenExpressionNode lParen body rParen - --- parseLiteral :: Parser LiteralNode --- parseLiteral = --- choice --- [ parseIntLiteral --- , parseBoolLiteral --- , parseMatrixBasedExpression --- , parseTupleLiteral --- , parseShortTupleLiteral --- , parseRecordLiteral --- , parseSetLiteral --- , parseMSetLiteral --- , parseFunctionLiteral --- , parseSequenceLiteral --- , parseRelationLiteral --- , parsePartitionLiteral --- ] - --- parseShortTupleLiteral :: Parser LiteralNode --- parseShortTupleLiteral = try $ do --- lOpen <- need L_OpenParen --- exprs <- commaList parseExpression --- let Seq xs = exprs --- guard (length xs > 1) --- lClose <- want L_CloseParen --- return $ TupleLiteralNodeShort $ ShortTuple (ListNode lOpen exprs lClose) - --- parseIntLiteral :: Parser LiteralNode --- parseIntLiteral = IntLiteral . RealToken <$> intLiteral - --- parseBoolLiteral :: Parser LiteralNode --- parseBoolLiteral = BoolLiteral <$> (need L_true <|> need L_false) - --- parseTupleLiteral :: Parser LiteralNode --- parseTupleLiteral = do --- lTuple <- need L_tuple --- members <- parenList $ commaList parseExpression --- return $ TupleLiteralNode $ LongTuple lTuple members - --- parseRecordLiteral :: Parser LiteralNode --- parseRecordLiteral = do --- lRecord <- need L_record --- members <- curlyBracketList (commaList parseRecordMember) --- return $ RecordLiteral lRecord members - --- parseVariantLiteral :: Parser LiteralNode --- parseVariantLiteral = do --- lVariant <- need L_variant --- members <- curlyBracketList (commaList parseRecordMember) --- return $ RecordLiteral lVariant members - --- parseRecordMember :: Parser RecordMemberNode --- parseRecordMember = do --- name <- parseIdentifier --- lEqual <- want L_Eq --- val <- parseExpression --- return $ RecordMemberNode name lEqual val - --- parseSetLiteral :: Parser LiteralNode --- parseSetLiteral = do --- -- cant just recycle list as it does not require first char --- lOpen <- need L_OpenCurly --- members <- commaList parseExpression --- lClose <- want L_CloseCurly --- return $ SetLiteral (ListNode lOpen members lClose) - --- parseMSetLiteral :: Parser LiteralNode --- parseMSetLiteral = do --- lMSet <- need L_mset --- members <- parenList (commaList parseExpression) --- return $ MSetLiteral lMSet members - --- parseFunctionLiteral :: Parser LiteralNode --- parseFunctionLiteral = do --- lFunc <- need L_function --- args <- parenList (commaList parseArrowPair) --- return $ FunctionLiteral lFunc args - --- parseArrowPair :: Parser ArrowPairNode --- parseArrowPair = try $ do --- lhs <- parseExpression --- arrow <- want L_LongArrow --- rhs <- parseExpression --- return $ ArrowPairNode lhs arrow rhs - --- parseSequenceLiteral :: Parser LiteralNode --- parseSequenceLiteral = do --- lSeq <- need L_sequence --- members <- parenList (commaList parseExpression) --- return $ SequenceLiteral lSeq members - --- parseRelationLiteral :: Parser LiteralNode --- parseRelationLiteral = do --- lRel <- need L_relation --- members <- parenList (commaList parseRelationMember) --- return $ RelationLiteral lRel members - --- parseRelationMember :: Parser RelationElemNode --- parseRelationMember = do --- f <- optional $ need L_tuple --- members <- parenList $ commaList parseExpression --- return $ case f of --- Nothing -> RelationElemNodeShort $ ShortTuple members --- Just lTup -> RelationElemNodeLabeled $ LongTuple lTup members - --- parsePartitionLiteral :: Parser LiteralNode --- parsePartitionLiteral = do --- lPartition <- need L_partition --- members <- parenList (commaList parsePartitionElem) --- return $ PartitionLiteral lPartition members - --- parsePartitionElem :: Parser PartitionElemNode --- parsePartitionElem = PartitionElemNode <$> parenList (commaList parseExpression) - --- parseQuantificationStatement :: Parser QuantificationExpressionNode --- parseQuantificationStatement = do --- lType <- choice $ map need quantifiers --- terms <- commaList parseAbstractPattern --- over <- parseQuantificationOver --- qGuard <- optional $ do --- lComma <- need L_Comma --- expr <- parseExpression --- return $ QuanticationGuard lComma expr --- lDot <- want L_Dot --- expr <- parseExpression --- return $ QuantificationExpressionNode lType terms over qGuard lDot expr --- where --- parseQuantificationOver :: Parser QuantificationOverNode --- parseQuantificationOver = --- choice --- [ QuantifiedMemberOfNode <$> need L_in <*> parseExpression --- , QuantifiedSubsetOfNode <$> need L_subsetEq <*> parseExpression --- , QuantifiedDomainNode <$> (OverDomainNode <$> want L_Colon <*> parseDomain) --- ] - --- parseAbstractPattern :: Parser AbstractPatternNode --- parseAbstractPattern = do --- choice --- [ parseAbstractId --- , parseAbstractMetaVar --- , parseAbstractPatternTuple --- , parseAbstractPatternMatrix --- , parseAbstractPatternSet --- ] --- where --- parseAbstractId :: Parser AbstractPatternNode --- parseAbstractId = AbstractIdentifier <$> parseIdentifierStrict --- parseAbstractMetaVar :: Parser AbstractPatternNode --- parseAbstractMetaVar = AbstractMetaVar <$> parseMetaVar --- parseAbstractPatternTuple :: Parser AbstractPatternNode --- parseAbstractPatternTuple = do --- lTuple <- optional $ need L_tuple --- openB <- (if null lTuple then need else want) L_OpenParen --- es <- commaList parseAbstractPattern --- closeB <- want L_CloseParen --- return $ AbstractPatternTuple lTuple (ListNode openB es closeB) --- parseAbstractPatternMatrix :: Parser AbstractPatternNode --- parseAbstractPatternMatrix = do --- openB <- need L_OpenBracket --- es <- commaList parseAbstractPattern --- closeB <- want L_CloseBracket --- return $ AbstractPatternMatrix (ListNode openB es closeB) --- parseAbstractPatternSet :: Parser AbstractPatternNode --- parseAbstractPatternSet = do --- openB <- need L_OpenCurly --- es <- commaList parseAbstractPattern --- closeB <- want L_CloseCurly --- return $ AbstractPatternMatrix (ListNode openB es closeB) - --- parseComprehensionCondition :: Parser ComprehensionBodyNode --- parseComprehensionCondition = do --- letting <|> generator <|> condition --- where --- letting = do --- lLetting <- need L_letting --- v <- parseAbstractPattern --- lBe <- want L_be --- expr <- parseExpression --- return $ CompBodyLettingNode lLetting v lBe expr --- generator = try $ do --- pats <- commaList parseAbstractPattern --- choice --- [ try $ do --- lColon <- need L_Colon --- domain <- parseDomain --- return $ CompBodyDomain pats lColon domain --- , try $ do --- lArrow <- need L_LeftArrow --- expr <- parseExpression --- return $ CompBodyGenExpr pats lArrow expr --- ] - --- condition = CompBodyCondition <$> parseExpressionStrict - --- -- TODO look over this, asignment of domains should happen in next stage --- -- Current implementation is hacky - --- parseOperator :: Parser ExpressionNode --- parseOperator = try (makeExprParser parseAtomicExpression operatorTable "Expression") - --- parseFunction :: Parser ExpressionNode --- parseFunction = try $ do --- name <- choice $ map need functionals --- let parenP = if isOverloaded name then parenListStrict else parenList --- args <- parenP $ commaList parseExpression --- return $ FunctionalApplicationNode name args --- where --- isOverloaded (RealToken ETok{lexeme=lex}) = lex `elem` overloadedFunctionals --- isOverloaded _ = False --- parsePostfixOp :: Parser (ExpressionNode -> ExpressionNode) --- parsePostfixOp = do --- op <- --- try $ --- choice --- [ indexed --- , factorial --- , application --- ] --- return $ \e -> OperatorExpressionNode $ PostfixOpNode e op --- where --- indexed = do --- lBracket <- need L_OpenBracket --- indexer <- commaList parseRange --- rBracket <- want L_CloseBracket --- return $ IndexedNode $ ListNode lBracket indexer rBracket --- factorial = OpFactorial <$> need L_ExclamationMark --- application = do --- lBracket <- need L_OpenParen --- args <- commaList parseExpression --- rBracket <- want L_CloseParen --- return $ ApplicationNode $ ListNode lBracket args rBracket - --- -- TODO treat funcitonals differently or actually don't but why - --- operatorTable :: [[Operator Parser ExpressionNode]] --- operatorTable = --- let operatorsGrouped = --- operators --- |> sortBy (\(_, a) (_, b) -> compare a b) --- |> groupBy (\(_, a) (_, b) -> a == b) --- |> reverse --- in postfixOps --- : [ [ case descr of --- BinaryOp op FLeft -> InfixL $ prefixBinary <$> need op --- BinaryOp op FNone -> InfixN $ prefixBinary <$> need op --- BinaryOp op FRight -> InfixR $ prefixBinary <$> need op --- UnaryPrefix op -> Prefix $ prefixUnary <$> need op --- | -- UnaryPrefix L_ExclamationMark -> Prefix $ prefixBinary--foldr1 (.) <$> some parseUnaryNot --- -- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) --- (descr, _) <- operatorsInGroup --- ] --- | operatorsInGroup <- operatorsGrouped --- ] - --- prefixBinary :: LToken -> ExpressionNode -> ExpressionNode -> ExpressionNode --- prefixBinary t l = OperatorExpressionNode . BinaryOpNode l t - --- prefixUnary :: LToken -> ExpressionNode -> ExpressionNode --- prefixUnary l = OperatorExpressionNode . PrefixOpNode l - --- postfixOps :: [Operator Parser ExpressionNode] --- postfixOps = --- [ Postfix $ foldr1 (.) <$> some parsePostfixOp --- ] - --- -- DOMAINS --- parseDomain :: Parser DomainNode --- parseDomain = --- do --- choice --- [ BoolDomainNode <$> need L_bool --- , parseIntDomain --- , MetaVarDomain <$> parseMetaVar --- , parseTuple --- , parseRecord --- , parseVariant --- , parseMatrix --- , parseSet --- , parseMSet --- , parseFunctionDomain --- , parseSequenceDomain --- , parseRelation --- , parsePartition --- , parseEnumDomain --- , parseShortTuple --- ] --- "Domain" --- <|> parseMissingDomain --- "missingDomain" - --- parseSpecialCase :: Parser ExpressionNode --- parseSpecialCase = do --- lt <- need L_SpecialCase --- SpecialCase lt <$> choice [parseWithDecls] - --- where --- parseWithDecls = --- do --- p1 <- need L_OpenBracket --- exp1 <- parseExpression --- at <- need L_At --- decsl <- many parseTopLevel --- p2 <- need L_CloseBracket --- return $ ExprWithDecls p1 exp1 at dels p2 - - - --- parseIntDomain :: Parser DomainNode --- parseIntDomain = do --- lInt <- need L_int --- ranges <- parenList $ commaList parseRange --- let range = case ranges of --- ListNode (MissingToken _) (Seq []) (MissingToken _) -> Nothing --- _ -> Just ranges --- return $ RangedIntDomainNode lInt range - --- parseTuple :: Parser DomainNode --- parseTuple = do --- lTuple <- need L_tuple --- members <- parenList $ commaList parseDomain --- return $ TupleDomainNode lTuple members - --- parseShortTuple :: Parser DomainNode --- parseShortTuple = do --- openB <- need L_OpenParen --- lst <- commaList parseDomain --- closeB <- want L_CloseParen --- return $ ShortTupleDomainNode $ ListNode openB lst closeB - --- parseRecord :: Parser DomainNode --- parseRecord = do --- lRecord <- need L_record --- members <- curlyBracketList $ commaList parseNameDomain --- return $ RecordDomainNode lRecord members - --- parseVariant :: Parser DomainNode --- parseVariant = do --- lVariant <- need L_variant --- members <- curlyBracketList $ commaList parseNameDomain --- return $ VariantDomainNode lVariant members - --- parseMatrix :: Parser DomainNode --- parseMatrix = do --- lMatrix <- need L_matrix --- lIndexed <- want L_indexed --- lBy <- want L_by --- members <- squareBracketList $ commaList parseDomain --- lOf <- want L_of --- domain <- parseDomain --- return $ MatrixDomainNode lMatrix lIndexed lBy members lOf domain - --- parseSet :: Parser DomainNode --- parseSet = do --- lSet <- need L_set --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domain <- parseDomain --- return $ SetDomainNode lSet attributes lOf domain - --- parseMSet :: Parser DomainNode --- parseMSet = do --- lMSet <- need L_mset --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domain <- parseDomain --- return $ MSetDomainNode lMSet attributes lOf domain - --- parseFunctionDomain :: Parser DomainNode --- parseFunctionDomain = do --- lFunction <- need L_function --- attributes <- optional parseFunctionAttributes --- fromDom <- parseDomain --- arrow <- want L_LongArrow --- toDom <- parseDomain --- return $ FunctionDomainNode lFunction attributes fromDom arrow toDom --- where --- parseFunctionAttributes :: Parser (ListNode AttributeNode) --- parseFunctionAttributes = try $ do --- openB <- want L_OpenParen --- lst <- commaList1 parseAttribute --- closeB <- want L_CloseBracket --- return $ ListNode openB lst closeB - --- parseSequenceDomain :: Parser DomainNode --- parseSequenceDomain = do --- lSequence <- need L_sequence --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domain <- parseDomain --- return $ SequenceDomainNode lSequence attributes lOf domain - --- parseRelation :: Parser DomainNode --- parseRelation = do --- lRelation <- need L_relation --- attributes <- parenList $ commaList parseAttribute --- lOf <- want L_of --- domains <- parenList $ parseSequence L_Times parseDomain --- return $ RelationDomainNode lRelation attributes lOf domains - --- parsePartition :: Parser DomainNode --- parsePartition = do --- lPartition <- need L_partition --- attributes <- parenList $ commaList parseAttribute --- lFrom <- want L_from --- domain <- parseDomain --- return $ PartitionDomainNode lPartition attributes lFrom domain - --- parseEnumDomain :: Parser DomainNode --- parseEnumDomain = do --- name <- parseIdentifierStrict --- brackets <- optional $ parenListStrict (commaList parseRange) --- case brackets of --- Nothing -> return $ EnumDomainNode name --- Just parens -> return $ RangedEnumNode name parens - --- -- (RangedEnumNode name <$> try (parenList (commaList parseRange))) --- -- <|> return (EnumDomainNode name) - --- -- Util --- parseNameDomain :: Parser NamedDomainNode --- parseNameDomain = do --- name <- parseIdentifierStrict --- lColon <- want L_Colon --- domain <- parseDomain --- return $ NameDomainNode name lColon domain - --- parseRange :: Parser RangeNode --- parseRange = ranged <|> singleR --- where --- ranged = try $ do --- lExpr <- optional $ try parseExpressionStrict --- dots <- need L_DoubleDot --- rExpr <- optional parseExpressionStrict --- case (lExpr, rExpr) of --- (Nothing, Nothing) -> return $ OpenRangeNode dots --- (Just l, Nothing) -> return $ RightUnboundedRangeNode l dots --- (Nothing, Just r) -> return $ LeftUnboundedRangeNode dots r --- (Just l, Just r) -> return $ BoundedRangeNode l dots r --- singleR = SingleRangeNode <$> parseExpressionStrict - --- parseAttribute :: Parser AttributeNode --- parseAttribute = do --- name <- choice $ map need functionAttributes -- TODO This is wrong --- expr <- optional parseExpressionStrict --- case expr of --- Nothing -> return $ NamedAttributeNode (NameNode name) --- Just en -> return $ NamedExpressionAttribute (NameNode name) en - --- parseMissingDomain :: Parser DomainNode --- parseMissingDomain = --- do --- m <- makeMissing (L_Missing "Domain") --- return $ MissingDomainNode m --- "Anything" \ No newline at end of file diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 236d50dc83..1f72b2990a 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -1,22 +1,40 @@ -module Conjure.Language.AST.Helpers where +module Conjure.Language.AST.Helpers ( + Parser, + makeUnexpected, + makeMissing, + eSymbol, + identifier, + need, + want, + needWeak, + commaList, + commaList1, + parseIdentifier, + parseIdentifierStrict, + parseMetaVar, + intLiteral, + parseSequence, + parseSequence1, + parseList, + curlyBracketList, + squareBracketList, + parenListStrict, + parenList, + parensPair, + parseAttributeLexeme +) where import Conjure.Language.AST.Syntax +import Conjure.Language.Attributes (allAttributLexemes) import Conjure.Language.Lexemes import Conjure.Language.NewLexer import Conjure.Prelude hiding (many) import qualified Data.Set as Set import Data.Void import Text.Megaparsec -import Text.Megaparsec.Debug (MonadParsecDbg(dbg)) - -type Parser = StateT ParserState (Parsec Void ETokenStream) -data ParserState = ParserState { - lastMissingExpOffset::Int, - context :: [String] -} - deriving Show -instance Default ParserState where - def = ParserState 0 [] + +type Parser = (Parsec Void ETokenStream) + eSymbol :: Lexeme -> Parser ETok eSymbol lx = token test Set.empty "Symbol " ++ show lx where @@ -28,34 +46,32 @@ identifier :: Parser ETok identifier = token test Set.empty "Identifier" where test x = case x of - ETok {lexeme=(LIdentifier _) } -> Just x + ETok{lexeme = (LIdentifier _)} -> Just x ETok{} -> Nothing metaVar :: Parser ETok metaVar = token test Set.empty "Metavar" where test x = case x of - ETok {lexeme=(LMetaVar _) } -> Just x + ETok{lexeme = (LMetaVar _)} -> Just x ETok{} -> Nothing - anIdent :: Lexeme anIdent = LIdentifier "" -aMetaVar :: Lexeme -aMetaVar = LMetaVar "" + intLiteral :: Parser ETok intLiteral = token test Set.empty "Int Literal" where test x = case x of - ETok {lexeme=(LIntLiteral _)} -> Just x + ETok{lexeme = (LIntLiteral _)} -> Just x ETok{} -> Nothing makeMissing :: Lexeme -> Parser LToken makeMissing l = do + ETok (Offsets st _ _ _) _ _ _ <- lookAhead anySingle spos <- getSourcePos - s <- getOffset - return (MissingToken (ETok ( Offsets s s 0 spos) [] l "")) + return (MissingToken (ETok (Offsets st st 0 spos) [] l "")) makeUnexpected :: Parser LToken makeUnexpected = SkippedToken <$> anySingle @@ -63,44 +79,50 @@ makeUnexpected = SkippedToken <$> anySingle -- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do - (ETok o t lex _ ) <- lookAhead anySingle + (ETok o t lex _) <- lookAhead anySingle case lex of - (LIdentifier _) -> RealToken [] <$> anySingle - _ -> return $ MissingToken $ ETok o{oTLength=0} t LMissingIdentifier "" + (LIdentifier _) -> makeStrict <$> anySingle + _ -> return $ MissingToken $ ETok o{oTLength = 0} t LMissingIdentifier "" want a = do (ETok o t lex _) <- lookAhead anySingle if lex == a - then RealToken [] <$> anySingle - else return $ MissingToken $ ETok o{oTLength=0} t a "" + then makeStrict <$> anySingle + else return $ MissingToken $ ETok o{oTLength = 0} t a "" -- get a symbol from the stream with no fallback -need :: Lexeme -> Parser LToken -need a = RealToken [] <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" +need :: Lexeme -> Parser SToken +need a = StrictToken [] <$> eSymbol a "\"" ++ lexemeFace a ++ "\"" + +-- get a symbol from the stream where it is required but the underlying +-- structure does not (e.g. disambiguating a list) +needWeak :: Lexeme -> Parser LToken +needWeak a = RealToken <$> need a + -adjacent :: Parser a -> Parser a -adjacent p = do - next <- lookAhead anySingle - guard $ null $ trivia next - p parseIdentifier :: Parser NameNode -parseIdentifier = do - x <- want anIdent - return $ NameNode x +parseIdentifier = do NameNode <$> parseIdentifierStrict <|> MissingNameNode <$> want anIdent + +parseAttributeLexeme :: Parser SToken +parseAttributeLexeme = StrictToken [] <$> token isValid Set.empty + where + isValid t@(lexeme -> l) + | l `elem` allAttributLexemes = Just t + | otherwise = Nothing -parseMetaVar :: Parser LToken -parseMetaVar = RealToken [] <$> metaVar +parseMetaVar :: Parser SToken +parseMetaVar = StrictToken [] <$> metaVar -parseIdentifierStrict :: Parser NameNode +parseIdentifierStrict :: Parser NameNodeS parseIdentifierStrict = do - NameNode . RealToken [] <$> identifier + NameNodeS . StrictToken [] <$> identifier -- List helpers -commaList ::(Null a,Show a) => Parser a -> Parser (Sequence a) +commaList :: (Null a, Show a) => Parser a -> Parser (Sequence a) commaList = parseSequence L_Comma -commaList1 ::(Null a, Show a) => Parser a -> Parser (Sequence a) +commaList1 :: (Null a, Show a) => Parser a -> Parser (Sequence a) commaList1 = parseSequence1 L_Comma squareBracketList :: Parser (Sequence a) -> Parser (ListNode a) @@ -127,73 +149,38 @@ parseListStrict startB endB seq = do startB' <- need startB vals <- seq endB' <- want endB - return $ ListNode startB' vals endB' + return $ ListNode (RealToken startB') vals endB' --- parseSequence :: Lexeme -> Parser a -> Parser (Sequence a) --- parseSequence divider pElem = do --- start <- optional seqElemNoSep --- rest <- many $ try seqElemSep --- case start of --- Nothing -> return $ Seq rest --- Just se -> return $ Seq (se:rest) --- where --- seqElemNoSep = do --- SeqElem Nothing <$> pElem --- seqElemSep = do --- s <- need divider --- SeqElem (Just s) <$> pElem - -parseSequence1 :: (Null a,Show a) => Lexeme -> Parser a -> Parser (Sequence a) +parseSequence1 :: (Null a, Show a) => Lexeme -> Parser a -> Parser (Sequence a) parseSequence1 divider pElem = do s <- parseSequence divider pElem - case s of + case s of Seq [] -> try $ do - q <- pElem - return $ Seq [SeqElem q Nothing] + q <- pElem + return $ Seq [SeqElem q Nothing] Seq _ -> return s - - -parseSequence :: (Null a,Show a) => Lexeme -> Parser a -> Parser (Sequence a) +parseSequence :: (Null a, Show a) => Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = try $ do missingPlaceholder <- makeMissing $ L_Missing "SequenceElem" - elem <- optional pElem + sElem <- optional pElem sep <- want divider - case (elem, isMissing sep) of - (a,True) | isMissing a -> return $ Seq [] - _ -> do + case (sElem, isMissing sep) of + (a, True) | isMissing a -> return $ Seq [] + _ -> do Seq rest <- parseSequence divider pElem - makeElem rest elem sep missingPlaceholder - - where + makeElem rest sElem sep missingPlaceholder + where makeElem rest el sep plc = do - let newElem = case (el, isMissing sep) of - (Just a, True) ->[SeqElem a $ if null rest then Nothing else Just sep ] - (a,False) | isMissing a -> [MissingSeqElem plc sep] - (Just a,_) -> [SeqElem a $ Just sep] - _ -> [] - return $ Seq $ newElem++rest - - - - - - -parseNESequence :: (Null a,Show a) => Lexeme -> Parser a -> Parser (Sequence a) -parseNESequence divider pElem =try $ do - lst <- try $ parseSequence divider pElem - case lst of - Seq {elems=[]} -> empty - Seq _ -> return lst - - + let newElem = case (el, isMissing sep) of + (Just a, True) -> [SeqElem a $ if null rest then Nothing else Just sep] + (a, False) | isMissing a -> [MissingSeqElem plc sep] + (Just a, _) -> [SeqElem a $ Just sep] + _ -> [] + return $ Seq $ newElem ++ rest -parensPair :: (Lexeme,Lexeme) -parensPair = (L_OpenParen,L_CloseParen) -squarBracketPair :: (Lexeme,Lexeme) -squarBracketPair = (L_OpenBracket,L_CloseBracket) +parensPair :: (Lexeme, Lexeme) +parensPair = (L_OpenParen, L_CloseParen) -curlyPair :: (Lexeme,Lexeme) -curlyPair = (L_OpenCurly,L_CloseCurly) \ No newline at end of file diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index d738ad71d2..5066152fdf 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -1,4 +1,4 @@ -module Conjure.Language.AST.Reformer where +module Conjure.Language.AST.Reformer (Flattenable(..)) where import Conjure.Language.AST.Syntax import Conjure.Language.NewLexer (ETok (..)) @@ -12,6 +12,8 @@ import qualified Data.Sequence as S class Flattenable a where flatten :: Flattenable a => a -> S.Seq ETok +instance Flattenable (S.Seq ETok) where + flatten = id instance Flattenable ProgramTree where flatten (ProgramTree lv sts end) = mconcat [flatten lv , mconcat $ map flatten sts , flatten end] @@ -69,10 +71,12 @@ instance Flattenable ObjectiveStatementNode where instance Flattenable LToken where flatten x = case x of - RealToken xs et -> flatten xs >< flatten et + RealToken st -> flatten st MissingToken et -> flatten et SkippedToken et -> flatten et +instance Flattenable SToken where + flatten (StrictToken xs e) = flatten xs >< flatten e instance Flattenable ETok where flatten = pure @@ -246,6 +250,9 @@ instance Flattenable NamedDomainNode where instance Flattenable NameNode where flatten (NameNode n) = flatten n + flatten (MissingNameNode n) = flatten n +instance Flattenable NameNodeS where + flatten (NameNodeS n) = flatten n instance Flattenable ParenExpressionNode where flatten (ParenExpressionNode a b c) = flatten a >< flatten b >< flatten c diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 81d44de796..41ea9bcf6d 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -1,55 +1,41 @@ -{-# LANGUAGE InstanceSigs #-} - -module Conjure.Language.AST.Syntax where +module Conjure.Language.AST.Syntax where import Conjure.Language.NewLexer (ETok, prettySplitComments) -import Conjure.Prelude hiding (Doc, cat, group) - --- import Conjure.Language.Pretty hiding (Pretty(..),hang) - --- import Conjure.Language.Pretty hiding (Pretty(..),hang) -import Prettyprinter ( - Doc, - LayoutOptions (LayoutOptions), - PageWidth (AvailablePerLine), - Pretty (..), - align, - cat, - emptyDoc, - fill, - flatAlt, - group, - indent, - layoutSmart, - line, - ) +import Conjure.Prelude hiding (Doc, group) + +import Prettyprinter + import Prettyprinter.Render.Text (renderStrict) data LToken - = RealToken [ETok] ETok + = RealToken SToken | MissingToken ETok | SkippedToken ETok deriving (Eq, Ord, Show) +data SToken + = StrictToken [ETok] ETok + deriving (Eq , Ord, Show) +instance Null SToken where + isMissing = const False +instance Pretty SToken where + pretty (StrictToken _ r) = pretty r +makeStrict :: ETok -> LToken +makeStrict = RealToken . StrictToken [] instance Pretty LToken where pretty (SkippedToken e) = pretty e - pretty (RealToken [] r) = pretty r + pretty (RealToken r) = pretty r pretty _ = emptyDoc instance Null LToken where isMissing (MissingToken _) = True isMissing _ = False --- instance Show LToken where --- show (RealToken [] x) = show x --- show (RealToken ss x) = "SKIPPED" ++ show ss ++ show x --- show (MissingToken x) = "MISSING[" ++ show x ++ "]" --- show (SkippedToken x) = "SKIPPED[" ++ show x ++ "]" data ProgramTree = ProgramTree { langVersionInfo :: Maybe LangVersionNode , statements :: [StatementNode] - , eofToken :: LToken + , eofToken :: SToken } deriving (Show) @@ -61,7 +47,7 @@ instance Pretty ProgramTree where , pretty e ] -data LangVersionNode = LangVersionNode LToken NameNode (Sequence LToken) +data LangVersionNode = LangVersionNode SToken NameNode (Sequence SToken) deriving (Show) instance Pretty LangVersionNode where pretty (LangVersionNode t n ns) = pretty t <+> pretty n <+> pretty ns @@ -72,7 +58,7 @@ data StatementNode | SuchThatStatement SuchThatStatementNode | WhereStatement WhereStatementNode | ObjectiveStatement ObjectiveStatementNode - | HeuristicStatement LToken ExpressionNode + | HeuristicStatement SToken ExpressionNode | UnexpectedToken LToken deriving (Show) instance Pretty StatementNode where @@ -87,26 +73,26 @@ instance Pretty StatementNode where data SuchThatStatementNode = SuchThatStatementNode - LToken -- Such + SToken -- Such LToken -- That (Sequence ExpressionNode) -- constraints deriving (Show) instance Pretty SuchThatStatementNode where - pretty (SuchThatStatementNode l1 l2 es) = topLevelPretty [l1, l2] (pretty es) + pretty (SuchThatStatementNode l1 l2 es) = topLevelPretty [RealToken l1, l2] (pretty es) data WhereStatementNode = WhereStatementNode - LToken -- where + SToken -- where (Sequence ExpressionNode) -- expresssions deriving (Show) instance Pretty WhereStatementNode where - pretty (WhereStatementNode w se) = topLevelPretty [w] (pretty se) + pretty (WhereStatementNode w se) = topLevelPretty [RealToken w] (pretty se) data ObjectiveStatementNode - = ObjectiveMin LToken ExpressionNode - | ObjectiveMax LToken ExpressionNode + = ObjectiveMin SToken ExpressionNode + | ObjectiveMax SToken ExpressionNode deriving (Show) instance Pretty ObjectiveStatementNode where pretty x = case x of @@ -115,16 +101,16 @@ instance Pretty ObjectiveStatementNode where -- Declaration statements data DeclarationStatementNode - = FindStatement LToken (Sequence FindStatementNode) - | GivenStatement LToken (Sequence GivenStatementNode) - | LettingStatement LToken (Sequence LettingStatementNode) + = FindStatement SToken (Sequence FindStatementNode) + | GivenStatement SToken (Sequence GivenStatementNode) + | LettingStatement SToken (Sequence LettingStatementNode) deriving (Show) instance Pretty DeclarationStatementNode where pretty x = case x of - FindStatement lt se -> topLevelPretty [lt] (pretty se) - GivenStatement lt se -> topLevelPretty [lt] (pretty se) - LettingStatement lt se -> topLevelPretty [lt] (pretty se) + FindStatement lt se -> topLevelPretty [RealToken lt] (pretty se) + GivenStatement lt se -> topLevelPretty [RealToken lt] (pretty se) + LettingStatement lt se -> topLevelPretty [RealToken lt] (pretty se) data FindStatementNode = FindStatementNode (Sequence NameNode) -- names @@ -170,7 +156,7 @@ data LettingAssignmentNode = LettingExpr ExpressionNode | LettingDomain - LToken -- domain + SToken -- domain DomainNode | LettingEnum LToken -- lNew @@ -202,7 +188,7 @@ instance Null LettingAssignmentNode where data BranchingStatementNode = BranchingStatementNode - LToken + SToken LToken (ListNode ExpressionNode) deriving (Show) @@ -215,22 +201,22 @@ instance Pretty BranchingStatementNode where type MAttributes = Maybe (ListNode AttributeNode) data DomainNode - = BoolDomainNode LToken - | RangedIntDomainNode LToken (Maybe (ListNode RangeNode)) - | RangedEnumNode NameNode (Maybe (ListNode RangeNode)) + = BoolDomainNode SToken + | RangedIntDomainNode SToken (Maybe (ListNode RangeNode)) + | RangedEnumNode NameNodeS (Maybe (ListNode RangeNode)) | -- | EnumDomainNode NameNode - MetaVarDomain LToken + MetaVarDomain SToken | ShortTupleDomainNode (ListNode DomainNode) - | TupleDomainNode LToken (ListNode DomainNode) - | RecordDomainNode LToken (ListNode NamedDomainNode) - | VariantDomainNode LToken (ListNode NamedDomainNode) - | MatrixDomainNode LToken (Maybe IndexedByNode) (ListNode DomainNode) LToken DomainNode - | SetDomainNode LToken MAttributes LToken DomainNode - | MSetDomainNode LToken MAttributes LToken DomainNode - | FunctionDomainNode LToken MAttributes DomainNode LToken DomainNode - | SequenceDomainNode LToken MAttributes LToken DomainNode - | RelationDomainNode LToken MAttributes LToken (ListNode DomainNode) - | PartitionDomainNode LToken MAttributes LToken DomainNode + | TupleDomainNode SToken (ListNode DomainNode) + | RecordDomainNode SToken (ListNode NamedDomainNode) + | VariantDomainNode SToken (ListNode NamedDomainNode) + | MatrixDomainNode SToken (Maybe IndexedByNode) (ListNode DomainNode) LToken DomainNode + | SetDomainNode SToken MAttributes LToken DomainNode + | MSetDomainNode SToken MAttributes LToken DomainNode + | FunctionDomainNode SToken MAttributes DomainNode LToken DomainNode + | SequenceDomainNode SToken MAttributes LToken DomainNode + | RelationDomainNode SToken MAttributes LToken (ListNode DomainNode) + | PartitionDomainNode SToken MAttributes LToken DomainNode | MissingDomainNode LToken deriving (Show) @@ -284,21 +270,19 @@ instance Null RangeNode where isMissing (SingleRangeNode e) = isMissing e isMissing _ = False -type DoubleDotNode = LToken +type DoubleDotNode = SToken -- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) data AttributeNode - = NamedAttributeNode LToken (Maybe ExpressionNode) - deriving (-- | TODO: Add dont care - Show) + = NamedAttributeNode SToken (Maybe ExpressionNode) + deriving (Show) instance Pretty AttributeNode where pretty (NamedAttributeNode a m_e) = pretty a <+> pretty m_e instance Null AttributeNode where - isMissing (NamedAttributeNode n m_e) = isMissing n && isMissing m_e + isMissing _ = False --- isMissing (NamedExpressionAttribute n e) = isMissing n && isMissing e data NamedDomainNode = NameDomainNode NameNode (Maybe (LToken, DomainNode)) deriving (Show) @@ -307,32 +291,41 @@ instance Pretty NamedDomainNode where pretty (NameDomainNode nn (Just (e, d))) = pretty nn <> pretty e <> pretty d instance Null NamedDomainNode where - isMissing (NameDomainNode (NameNode a) Nothing) = isMissing a - isMissing (NameDomainNode (NameNode a) (Just (b, c))) = isMissing a && isMissing b && isMissing c + isMissing (NameDomainNode (a) Nothing) = isMissing a + isMissing (NameDomainNode (a) (Just (b, c))) = isMissing a && isMissing b && isMissing c -- Common Statements +data NameNodeS = NameNodeS SToken + deriving (Show) +instance Pretty NameNodeS where + pretty (NameNodeS n) = pretty n -newtype NameNode = NameNode LToken +instance Null NameNodeS where + isMissing = const False +data NameNode = NameNode NameNodeS | MissingNameNode LToken deriving (Show) + instance Pretty NameNode where pretty (NameNode n) = pretty n + pretty _ = emptyDoc instance Null NameNode where - isMissing (NameNode e) = isMissing e + isMissing (NameNode _) = False + isMissing (MissingNameNode _) = True -- Expressions data ExpressionNode = Literal LiteralNode - | IdentifierNode NameNode - | MetaVarExpr LToken + | IdentifierNode NameNodeS + | MetaVarExpr SToken | QuantificationExpr QuantificationExpressionNode | OperatorExpressionNode OperatorExpressionNode | DomainExpression DomainExpressionNode | ParenExpression ParenExpressionNode | AbsExpression ParenExpressionNode - | FunctionalApplicationNode LToken (ListNode ExpressionNode) - | AttributeAsConstriant LToken (ListNode ExpressionNode) + | FunctionalApplicationNode SToken (ListNode ExpressionNode) + | AttributeAsConstriant SToken (ListNode ExpressionNode) | MissingExpressionNode LToken | SpecialCase SpecialCaseNode deriving (Show) @@ -355,7 +348,7 @@ instance Null ExpressionNode where isMissing (MissingExpressionNode _) = True isMissing _ = False -data SpecialCaseNode = ExprWithDecls LToken ExpressionNode LToken [StatementNode] LToken +data SpecialCaseNode = ExprWithDecls SToken ExpressionNode SToken [StatementNode] SToken deriving (Show) instance Pretty SpecialCaseNode where pretty x = case x of @@ -375,7 +368,7 @@ instance Pretty ShortTuple where instance Null ShortTuple where isMissing (ShortTuple ls) = isMissing ls -data LongTuple = LongTuple LToken (ListNode ExpressionNode) deriving (Show) +data LongTuple = LongTuple SToken (ListNode ExpressionNode) deriving (Show) instance Pretty LongTuple where pretty (LongTuple t exps) = pretty t <> pretty exps @@ -384,19 +377,19 @@ instance Null LongTuple where -- Literals data LiteralNode - = IntLiteral LToken - | BoolLiteral LToken + = IntLiteral SToken + | BoolLiteral SToken | MatrixLiteral MatrixLiteralNode | TupleLiteralNode LongTuple | TupleLiteralNodeShort ShortTuple - | RecordLiteral LToken (ListNode RecordMemberNode) - | VariantLiteral LToken (ListNode RecordMemberNode) -- catch later + | RecordLiteral SToken (ListNode RecordMemberNode) + | VariantLiteral SToken (ListNode RecordMemberNode) -- catch later | SetLiteral (ListNode ExpressionNode) - | MSetLiteral LToken (ListNode ExpressionNode) - | FunctionLiteral LToken (ListNode ArrowPairNode) - | SequenceLiteral LToken (ListNode ExpressionNode) - | RelationLiteral LToken (ListNode RelationElemNode) - | PartitionLiteral LToken (ListNode PartitionElemNode) + | MSetLiteral SToken (ListNode ExpressionNode) + | FunctionLiteral SToken (ListNode ArrowPairNode) + | SequenceLiteral SToken (ListNode ExpressionNode) + | RelationLiteral SToken (ListNode RelationElemNode) + | PartitionLiteral SToken (ListNode PartitionElemNode) deriving (Show) instance Pretty LiteralNode where @@ -435,7 +428,7 @@ instance Pretty MatrixLiteralNode where data ComprehensionNode = ComprehensionNode - LToken + SToken (Sequence ComprehensionBodyNode) deriving (Show) @@ -448,7 +441,7 @@ instance Pretty RecordMemberNode where pretty (RecordMemberNode n t e) = pretty n <> pretty t <> pretty e instance Null RecordMemberNode where - isMissing (RecordMemberNode (NameNode s) t e) = isMissing s && isMissing t && isMissing e + isMissing (RecordMemberNode n t e) = isMissing n && isMissing t && isMissing e data ArrowPairNode = ArrowPairNode ExpressionNode LToken ExpressionNode deriving (Show) @@ -478,7 +471,7 @@ instance Null PartitionElemNode where data QuantificationExpressionNode = QuantificationExpressionNode - LToken + SToken (Sequence AbstractPatternNode) QuantificationOverNode (Maybe QuanticationGuard) @@ -487,13 +480,13 @@ data QuantificationExpressionNode deriving (Show) -- MAYBE? instance Pretty QuantificationExpressionNode where - pretty (QuantificationExpressionNode q pats over m_guard dot body) = + pretty (QuantificationExpressionNode q pats over m_guard lDot body) = group $ hd <+> flatIndent 4 (pretty body) where - hd = group $ pretty q <+> pretty pats <+> pretty over <+> pretty m_guard <+> pretty dot + hd = group $ pretty q <+> pretty pats <+> pretty over <+> pretty m_guard <+> pretty lDot data QuantificationOverNode - = QuantifiedSubsetOfNode LToken ExpressionNode - | QuantifiedMemberOfNode LToken ExpressionNode + = QuantifiedSubsetOfNode SToken ExpressionNode + | QuantifiedMemberOfNode SToken ExpressionNode | QuantifiedDomainNode OverDomainNode deriving (Show) instance Pretty QuantificationOverNode where @@ -507,8 +500,8 @@ data OverDomainNode = OverDomainNode LToken DomainNode instance Pretty OverDomainNode where pretty (OverDomainNode a b) = pretty a <+> pretty b data AbstractPatternNode - = AbstractIdentifier NameNode - | AbstractMetaVar LToken + = AbstractIdentifier NameNodeS + | AbstractMetaVar SToken | AbstractPatternTuple (Maybe LToken) (ListNode AbstractPatternNode) | AbstractPatternMatrix (ListNode AbstractPatternNode) | AbstractPatternSet (ListNode AbstractPatternNode) @@ -522,9 +515,8 @@ instance Pretty AbstractPatternNode where AbstractPatternSet ln -> pretty ln instance Null AbstractPatternNode where - isMissing (AbstractIdentifier (NameNode s)) = isMissing s - isMissing _ = False -data QuanticationGuard = QuanticationGuard LToken ExpressionNode + isMissing (_) = False +data QuanticationGuard = QuanticationGuard SToken ExpressionNode deriving (Show) instance Pretty QuanticationGuard where pretty (QuanticationGuard a e) = pretty a <+> pretty e @@ -543,9 +535,9 @@ data ComprehensionExpressionNode data ComprehensionBodyNode = CompBodyCondition ExpressionNode - | CompBodyDomain (Sequence AbstractPatternNode) LToken DomainNode - | CompBodyGenExpr (Sequence AbstractPatternNode) LToken ExpressionNode - | CompBodyLettingNode LToken AbstractPatternNode LToken ExpressionNode + | CompBodyDomain (Sequence AbstractPatternNode) SToken DomainNode + | CompBodyGenExpr (Sequence AbstractPatternNode) SToken ExpressionNode + | CompBodyLettingNode SToken AbstractPatternNode LToken ExpressionNode deriving (Show) instance Pretty ComprehensionBodyNode where @@ -562,8 +554,8 @@ instance Null ComprehensionBodyNode where isMissing (CompBodyLettingNode t p l e) = isMissing t && isMissing p && isMissing l && isMissing e data OperatorExpressionNode = PostfixOpNode ExpressionNode PostfixOpNode - | PrefixOpNode LToken ExpressionNode - | BinaryOpNode ExpressionNode LToken ExpressionNode + | PrefixOpNode SToken ExpressionNode + | BinaryOpNode ExpressionNode SToken ExpressionNode deriving (Show) instance Pretty OperatorExpressionNode where @@ -574,8 +566,8 @@ instance Pretty OperatorExpressionNode where data PostfixOpNode = IndexedNode (ListNode RangeNode) - | OpFactorial LToken - | ExplicitDomain LToken LToken DomainNode LToken + | OpFactorial SToken + | ExplicitDomain SToken SToken DomainNode LToken | ApplicationNode (ListNode ExpressionNode) deriving (Show) @@ -662,7 +654,7 @@ instance (Null a) => Null (Maybe a) where isMissing (Just s) = isMissing s prettyTokenAndComments :: LToken -> (Doc ann, Doc ann) -prettyTokenAndComments (RealToken [] t) = prettySplitComments t +prettyTokenAndComments (RealToken (StrictToken [] t)) = prettySplitComments t prettyTokenAndComments (o) = (emptyDoc, pretty o) topLevelPretty :: [LToken] -> Doc ann -> Doc ann diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index 7aadbe5b74..86cf42bb48 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -241,9 +241,10 @@ operators = , ( UnaryPrefix L_Minus , 2000 ) , ( UnaryPrefix L_ExclamationMark , 2000 ) ] - +--Functional operators that clash with other constructs so require no spaces overloadedFunctionals :: [Lexeme] overloadedFunctionals = [ + L_true, L_Sum, L_Product ] diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index 95a06ee454..c141b2acf0 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -4,7 +4,21 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} -module Conjure.Language.NewLexer where +module Conjure.Language.NewLexer ( + ETok(..), + Offsets(..), + prettySplitComments, + eLex, + reformList, + tokenSourcePos, + totalLength, + trueLength, + tokenStart, + sourcePos0, + LexerError(..), + runLexer, + ETokenStream(..) + ) where import Conjure.Language.Lexemes import Conjure.Prelude hiding (many, some,Text) @@ -19,12 +33,9 @@ import Text.Megaparsec.Char import Data.List (splitAt) import qualified Data.List.NonEmpty as NE -import qualified Text.Megaparsec.Char.Lexer as L -import Data.Sequence (Seq) import qualified Text.Megaparsec as L import Prelude (read) -import Conjure.Language.Pretty (Pretty (..), vcat,(<>)) -import qualified Prettyprinter as Pr +import Prettyprinter as Pr sourcePos0 :: SourcePos @@ -260,7 +271,11 @@ instance Stream ETokenStream where buildStream :: [ETok] -> ETokenStream buildStream xs = case NE.nonEmpty xs of Nothing -> ETokenStream "" xs - Just s -> ETokenStream (T.pack $ "showTokens pxy s") xs + Just _ -> ETokenStream (T.pack "showTokens pxy s") xs + +instance VisualStream ETokenStream where + showTokens _ = L.unpack . reformList + tokensLength _ = sum . fmap ( oTLength . offsets ) -- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where @@ -285,40 +300,9 @@ instance TraversableStream ETokenStream where [] -> pstateSourcePos (x : _) -> tokenSourcePos x (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) - (preStr, postStr) = ("NOT SUPPORTED","NOT SUPPORTED") + (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) preLine = reverse . takeWhile (/= '\n') . reverse $ preStr - restOfLine = "" - -instance VisualStream ETokenStream where - showTokens p = L.unpack . reformList - tokensLength p ls = sum $ oTLength . offsets <$> ls - --- -- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams --- instance TraversableStream ETokenStream where --- reachOffset o PosState{..} = --- ( Just (prefix ++ restOfLine) --- , PosState --- { pstateInput = buildStream post --- , pstateOffset = max pstateOffset o --- , pstateSourcePos = newSourcePos --- , pstateTabWidth = pstateTabWidth --- , pstateLinePrefix = prefix --- } --- ) --- where --- prefix = --- if sameLine --- then pstateLinePrefix ++ preLine --- else preLine --- sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos --- newSourcePos = --- case post of --- [] -> pstateSourcePos --- (x : _) -> tokenSourcePos x --- (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) --- (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) --- preLine = reverse . takeWhile (/= '\n') . reverse $ preStr --- restOfLine = takeWhile (/= '\n') postStr + restOfLine = takeWhile (/= '\n') postStr pxy :: Proxy ETokenStream pxy = Proxy \ No newline at end of file diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 70f33294d5..7f0444d7b8 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -16,7 +16,7 @@ module Conjure.Language.Parser ) where -- conjure -import Conjure.Prelude +import Conjure.Prelude -- import Conjure.Bug import Conjure.Language.Definition import Conjure.Language.Domain @@ -53,14 +53,14 @@ import Conjure.Language.AST.Syntax (ProgramTree, DomainNode) import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) -import Conjure.Language.AST.Helpers (ParserState) +-- import Conjure.Language.AST.Helpers (ParserState) import qualified Conjure.Language.AST.Helpers as P import Conjure.Language.AST.Reformer (Flattenable (flatten)) -import Conjure.Language.Pretty +import Conjure.Language.Pretty import qualified Prettyprinter as Pr -type Pipeline a b = ( (StateT ParserState (Parsec Void ETokenStream)) a ,a -> V.ValidatorS b,Bool) +type Pipeline a b = ( (Parsec Void ETokenStream) a ,a -> V.ValidatorS b,Bool) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc @@ -77,14 +77,14 @@ runPipeline (parse,val,tc) txt = do parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult let x = V.runValidator (val parseResult) (V.initialState parseResult){V.typeChecking= tc} case x of - (Just m, ds,_) | not $ any V.isError ds -> Right m + (m, ds,_) | not $ any V.isError ds -> Right m (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves txt) -- Validator (Just res) [] -> Right res -- Validator _ xs -> Left $ ValidatorError xs parseModel :: Pipeline ProgramTree Model -parseModel = (parseProgram,V.strict . V.validateModel,True) +parseModel = (parseProgram, V.validateModel,True) -- inCompleteFile $ do -- let -- pLanguage :: Parser LanguageVersion @@ -134,7 +134,7 @@ parseIO p s = do -- -------------------------------------------------------------------------------- parseTopLevels :: Pipeline [S.StatementNode] [Statement] -parseTopLevels = (P.parseTopLevels,V.strict . V.validateProgramTree,False) +parseTopLevels = (P.parseTopLevels, V.validateProgramTree,False) -- let one = satisfyL $ \case -- L_find -> Just $ do -- decls <- flip sepEndBy1 comma $ do @@ -1012,7 +1012,7 @@ parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAn -- data ParserState = ParserState { enumDomains :: [Name] } -- type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a -runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a +runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either (Doc) a runLexerAndParser p file inp = case runPipeline p inp of Left pe -> Left $ "Parser error in file:" <+> pretty file <+> pretty ("Error is:\n" ++ show pe) Right a -> Right a @@ -1140,23 +1140,23 @@ runLexerAndParser p file inp = case runPipeline p inp of -- return result -prettyPrintWithChecks :: MonadFailDoc m => Text -> m Doc +prettyPrintWithChecks :: MonadFailDoc m => Text -> m (Pr.Doc ann) prettyPrintWithChecks src = do v <-case lexAndParse parseProgram src of Left pe -> failDoc $ pretty $ show pe Right pt -> return pt return $ (if V.isSyntacticallyValid V.validateModel v then Pr.pretty else partialPretty ) v -partialPretty :: ProgramTree -> Doc -partialPretty (S.ProgramTree lv sns lt) = vcat [ +partialPretty :: ProgramTree -> Pr.Doc ann +partialPretty (S.ProgramTree lv sns lt) = Pr.vcat [ langVer, - vcat $ map pTopLevel sns, + Pr.vcat $ map pTopLevel sns, Pr.pretty lt ] where langVer = case lv of Nothing -> "language Essence 1.3" Just _ -> if V.isSyntacticallyValid V.validateLanguageVersion lv then Pr.pretty lv else fallback lv - fallback :: Flattenable a => a -> Doc + fallback :: Flattenable a => a -> Pr.Doc ann fallback v = Pr.pretty $ L.reformList $ flatten v pTopLevel st = if V.isSyntacticallyValid V.validateStatement st then Pr.pretty st else fallback st \ No newline at end of file diff --git a/src/Conjure/Language/ParserC.hs b/src/Conjure/Language/ParserC.hs index 1fc361d608..c4a2d9e8a2 100644 --- a/src/Conjure/Language/ParserC.hs +++ b/src/Conjure/Language/ParserC.hs @@ -17,4 +17,4 @@ import Conjure.Language.AST.ASTParser (parseProgram) parseModel :: Pipeline ProgramTree Model -parseModel = (parseProgram,V.strict . V.validateModel,False) \ No newline at end of file +parseModel = (parseProgram,V.validateModel,False) \ No newline at end of file diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index 774e2810b0..524b5441e6 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -1,14 +1,13 @@ {-# LANGUAGE TypeSynonymInstances #-} module Conjure.Language.Pretty - ( Pretty(..) + ( module X + , Pretty(..) , (<++>), (<+>), (<>) , (<+->) , prettyList, prettyListDoc , parensIf , render, renderNormal, renderWide - , hang, hcat , nest - , vcat,fsep , cat , prEmpty, prParens, prBrackets, prBraces , Doc , prettyContext @@ -16,7 +15,12 @@ module Conjure.Language.Pretty , tracingPretty , prettyT ) where - +import Text.PrettyPrint.Annotated.HughesPJ as X + ( + (<>), (<+>), ($$) + , hang, nest, punctuate , cat + , hcat, vcat, fsep, hsep, sep + ) -- conjure import Conjure.Prelude @@ -28,11 +32,7 @@ import Text.Printf ( printf ) import qualified Data.Text as T ( Text, unpack, length, singleton, concatMap, pack ) -- pretty -import Prettyprinter - ( parens, brackets ,braces, PageWidth (AvailablePerLine) - - -- will be exported with new names - ) + -- aeson import Data.Aeson as JSON @@ -40,8 +40,12 @@ import qualified Data.Aeson.KeyMap as KM import Data.Scientific ( Scientific, floatingOrInteger ) -- scientific import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector -import qualified Prettyprinter.Render.String as Pr -import qualified Prettyprinter as Pr +-- import qualified Prettyprinter.Render.String as Pr +-- import qualified Prettyprinter as Pr + +import qualified Text.PrettyPrint.Annotated.HughesPJ as Pr +import Text.PrettyPrint.HughesPJ (Style(..)) +import Text.PrettyPrint.Annotated.HughesPJ hiding (Doc,render) class Show a => Pretty a where @@ -52,13 +56,13 @@ class Show a => Pretty a where prettyPrec _ = pretty instance Pretty Doc where pretty = id -instance Pretty T.Text where pretty = Pr.pretty -instance Pretty String where pretty = Pr.pretty -instance Pretty () where pretty = Pr.pretty -instance Pretty Bool where pretty = Pr.pretty -instance Pretty Int where pretty = Pr.pretty -instance Pretty Integer where pretty = Pr.pretty -instance Pretty Double where pretty x = Pr.pretty (printf "%.2f" x :: String) +instance Pretty T.Text where pretty = pretty . T.unpack +instance Pretty String where pretty = text +instance Pretty () where pretty = pretty . show +instance Pretty Bool where pretty = pretty . show +instance Pretty Int where pretty = pretty . show +instance Pretty Integer where pretty = pretty . show +instance Pretty Double where pretty x = pretty (printf "%.2f" x :: String) instance (Pretty a, Pretty b) => Pretty (a, b) where pretty (a, b) = prettyListDoc parens "," [pretty a, pretty b] @@ -83,7 +87,7 @@ prettyList :: Pretty a => (Doc -> Doc) -> Doc -> [a] -> Doc prettyList wrap punc = prettyListDoc wrap punc . map pretty prettyListDoc :: (Doc -> Doc) -> Doc -> [Doc] -> Doc -prettyListDoc wrap punc = wrap . Pr.align . Pr.cat . map Pr.group . Pr.punctuate punc +prettyListDoc wrap punc = wrap . fsep . punctuate punc parensIf :: Bool -> Doc -> Doc parensIf = wrapIf parens @@ -98,10 +102,11 @@ renderWide :: Pretty a => a -> String renderWide = render 240 render :: Pretty a => Int -> a -> String -render w = Pr.renderString . (Pr.layoutSmart (Pr.LayoutOptions $ AvailablePerLine w 1.0) . pretty) +-- render w = Pr.renderString . (Pr.layoutSmart (Pr.LayoutOptions $ AvailablePerLine w 1.0) . pretty) +render w = renderStyle (style { lineLength = w, ribbonsPerLine = 1 }) . pretty prEmpty :: Doc -prEmpty = Pr.emptyDoc +prEmpty = empty prParens :: Doc -> Doc prParens = parens @@ -142,7 +147,7 @@ instance Pretty JSON.Value where pretty Null = "null" instance Pretty JSON.Object where - pretty = prBraces . Pr.fillSep . Pr.punctuate "," . map f . sortBy (comp `on` fst) . KM.toList + pretty = prBraces . fsep . Pr.punctuate "," . map f . sortBy (comp `on` fst) . KM.toList where f (key, Array value) | not (any (\ v -> case v of String t -> T.length t < 20 ; _ -> True ) value) @@ -166,7 +171,7 @@ instance Pretty JSON.Object where in fromMaybe (compare a b) preferred instance Pretty JSON.Array where - pretty = prBrackets . Pr.fillSep . Pr.punctuate "," . map pretty . V.toList + pretty = prBrackets . fsep . Pr.punctuate "," . map pretty . V.toList prettyArrayVCat :: V.Vector Value -> Doc prettyArrayVCat = prBrackets . Pr.vcat . Pr.punctuate "," . map pretty . V.toList diff --git a/src/Conjure/Language/Type.hs b/src/Conjure/Language/Type.hs index a925a68ef2..a8ae467e5b 100644 --- a/src/Conjure/Language/Type.hs +++ b/src/Conjure/Language/Type.hs @@ -135,6 +135,17 @@ typeUnify (TypeRecord as) (TypeRecord bs) Just b -> typeUnify a b | (n,a) <- as ] +--special cases for when one is an instance +-- TODO: Not the best solution so might need looking at +typeUnify (TypeVariant as) (TypeVariant [(n,a)]) + = case lookup n as of + Nothing -> False + Just b -> typeUnify a b +typeUnify (TypeVariant [(n,a)]) (TypeVariant as) + = case lookup n as of + Nothing -> False + Just b -> typeUnify a b + typeUnify (TypeVariant as) (TypeVariant bs) | length as /= length bs = False | otherwise = and [ case lookup n bs of diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 3b4199dbd1..4ec0abc1b8 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -6,10 +6,11 @@ module Conjure.Language.Validator where import Conjure.Language.AST.Syntax as S import Conjure.Language.Definition hiding (Typed) -import qualified Conjure.Language.Definition as D (Expression(Typed)) +import qualified Conjure.Language.Expression as D + ( Expression(Typed) ) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.NewLexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, reformList, sourcePos0) +import Conjure.Language.NewLexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, sourcePos0) import Conjure.Language.Attributes import Conjure.Prelude @@ -22,7 +23,7 @@ import Data.Map.Strict (Map) import qualified Data.Map.Strict as M import qualified Data.Set as S import qualified Data.Text as T -import Data.Text (pack, unpack, toLower, append) +import Data.Text (pack, unpack, append) import Text.Megaparsec ( SourcePos, mkPos, unPos ) import Conjure.Language.Expression.Op @@ -39,12 +40,10 @@ import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Text.Megaparsec.Pos (SourcePos(..)) import Data.Sequence (Seq (..), viewr, ViewR (..)) -import Conjure.Language.TypeOf (TypeOf(typeOf)) import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Conjure.Language.Pretty -import qualified Data.Text.Lazy as L -import Data.Aeson.Encoding (bool) +import Data.List (splitAt) data TagType =TtType @@ -84,6 +83,9 @@ instance WithRegion DiagnosticRegion where instance WithRegion LToken where getRegion = symbolRegion +instance WithRegion SToken where + getRegion = symbolRegion + type RegionTagged a = (DiagnosticRegion,a) unregion :: RegionTagged a -> a unregion (_,a) =a @@ -131,7 +133,7 @@ exactly t r = void $ untypeAs t r typeAs :: Type -> Maybe a -> Maybe (Typed a) typeAs t (Just a) = Just $ Typed t a -typeAs t Nothing = Nothing +typeAs _ Nothing = Nothing (?=>) :: ValidatorS (Typed a) -> TypeCheck a -> ValidatorS a v ?=> t = v >>= (\a -> t a >> return (untype a)) @@ -216,7 +218,7 @@ mkDeclaration :: DiagnosticRegion -> Text -> Kind -> RegionInfo mkDeclaration r n (t) = RegionInfo r (Just r) (Definition n t) [] mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo -mkLiteral r n (Typed t _) = RegionInfo r (Just r) (LiteralDecl (simple t)) [] +mkLiteral r _ (Typed t _) = RegionInfo r (Just r) (LiteralDecl (simple t)) [] putReference :: DiagnosticRegion -> Text -> Kind -> DiagnosticRegion -> ValidatorS () putReference r n t ref = addRegion (RegionInfo r Nothing (Ref n t ref) []) @@ -252,20 +254,26 @@ putTypeDoc :: Flattenable a =>Text ->a -> ValidatorS () putTypeDoc = putDocs TypeD putAttrDoc :: Flattenable a =>Text ->a -> ValidatorS () putAttrDoc = putDocs AttributeD + --Infix symbol validation and tagging -isA :: LToken -> TagType -> ValidatorS () -isA a b= validateSymbol a >> flagToken a b +isA :: SToken -> TagType -> ValidatorS () +isA a b= flagSToken a b + +isA' :: LToken -> TagType -> ValidatorS () +isA' a b= validateSymbol a >> flagToken a b are :: [LToken] -> TagType -> ValidatorS () -are a b = mapM_ (`isA` b) a +are a b = mapM_ (`isA'` b) a flagToken :: LToken -> TagType -> ValidatorS () -flagToken (RealToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}->x{symbolCategories= M.insert t (TaggedToken c t) sc}) +flagToken (RealToken s) c = flagSToken s c flagToken _ _ = return () +flagSToken :: SToken -> TagType -> ValidatorS () +flagSToken (StrictToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}->x{symbolCategories= M.insert t (TaggedToken c t) sc}) tagWithType :: NameNode -> Kind -> ValidatorS () -tagWithType (NameNode lt) (Kind ValueType ty) = flagToken lt $ case ty of +tagWithType (NameNode (NameNodeS lt)) (Kind ValueType ty) = flagSToken lt $ case ty of TypeEnum _ -> TtEnum TypeInt (TagEnum _) -> TtEnumMember TypeInt (TagUnnamed _) -> TtEnumMember @@ -278,10 +286,11 @@ tagWithType (NameNode lt) (Kind ValueType ty) = flagToken lt $ case ty of TypeSequence _ -> TtFunction TypeRelation _ -> TtFunction _ -> TtVariable -tagWithType (NameNode lt) (Kind DomainType (TypeEnum{})) = flagToken lt TtEnum -tagWithType (NameNode lt) (Kind DomainType (TypeRecord{})) = flagToken lt TtRecord -tagWithType (NameNode lt) (Kind DomainType (TypeVariant{})) = flagToken lt TtRecord -tagWithType (NameNode lt) (Kind DomainType _) = flagToken lt TtDomain +tagWithType (NameNode (NameNodeS lt)) (Kind DomainType (TypeEnum{})) = flagSToken lt TtEnum +tagWithType (NameNode (NameNodeS lt)) (Kind DomainType (TypeRecord{})) = flagSToken lt TtRecord +tagWithType (NameNode (NameNodeS lt)) (Kind DomainType (TypeVariant{})) = flagSToken lt TtRecord +tagWithType (NameNode (NameNodeS lt)) (Kind DomainType _) = flagSToken lt TtDomain +tagWithType _ _ = pure () data ValidatorState = ValidatorState { @@ -313,8 +322,8 @@ type SymbolTableValue = (DiagnosticRegion,Bool,Kind) -- instance Show SymbolTableValue where -- show (SType t) = show $ pretty t -- show (SDomain d) = show $ pretty d -newtype ValidatorT r w a = ValidatorT (MaybeT (StateT r (Writer [w])) a) - deriving (Monad,Applicative ,Functor,MonadState r ,MonadWriter [w],MonadFail) +newtype ValidatorT r w a = ValidatorT (StateT r (Writer [w]) a) + deriving (Monad,Applicative ,Functor,MonadState r ,MonadWriter [w]) --synonym wrapped in maybe to allow errors to propagate @@ -325,6 +334,8 @@ type ValidatorS a = ValidatorT ValidatorState ValidatorDiagnostic a -- addEnumDefns :: [Text] -> SymbolTable -> SymbolTable -- addEnumDefns names (SymbolTable enums) = SymbolTable $ enums ++ map (\m -> (m,"Enum")) names +-- instance MonadFail (ValidatorT ValidatorState ValidatorDiagnostic a) where +-- fail = return . fallback . T.pack modifySymbolTable :: (SymbolTable -> SymbolTable) -> ValidatorS () modifySymbolTable f = modify (\x -> x{symbolTable=f.symbolTable $ x}) @@ -345,7 +356,6 @@ addRegion :: RegionInfo -> ValidatorS () addRegion r = modify (\x->x{regionInfo=r:regionInfo x}) - makeEnumDomain :: Name -> Maybe [Range Expression] -> Domain () Expression makeEnumDomain n es = DomainEnum n es Nothing @@ -364,36 +374,35 @@ setContext r = modify (\p -> p{currentContext = r}) setContextFrom :: Flattenable a => a -> ValidatorS () setContextFrom a = setContext $ symbolRegion a -strict :: Validator a -> ValidatorS a -strict a = do Just res <- a; return res +-- strict :: Validator a -> ValidatorS a +-- strict a = do res <- a; return res deState :: ((a,r),n) -> (a,n,r) deState ((a,r),n) = (a,n,r) -runValidator :: (ValidatorT r w a) -> r -> ((Maybe a),[w],r) -runValidator (ValidatorT r) d = deState $ runWriter (runStateT (runMaybeT r) d) +runValidator :: (ValidatorT r w a) -> r -> (a,[w],r) +runValidator (ValidatorT r) d = deState $ runWriter (runStateT r d) -isSyntacticallyValid :: Flattenable a=> (a->(ValidatorT ValidatorState ValidatorDiagnostic b)) -> a -> Bool +isSyntacticallyValid :: Flattenable a=> (a->ValidatorS b) -> a -> Bool isSyntacticallyValid v s = case runValidator (v s) (initialState s){typeChecking=False} of (_,vds,_) -> not $ any isError vds todoTypeAny :: Maybe a -> Maybe (Typed a) todoTypeAny = typeAs TypeAny -validateModelS :: ProgramTree -> ValidatorS Model -validateModelS = strict . validateModel -validateModel :: ProgramTree -> Validator Model + +validateModel :: ProgramTree -> ValidatorS Model validateModel model = do sts <- validateProgramTree (statements model) langVersion <- validateLanguageVersion $ langVersionInfo model - return $ Model <$> langVersion <*> sts <*> pure def + return $ Model (fromMaybe def langVersion) sts def -validateProgramTree :: [StatementNode] -> Validator [Statement] +validateProgramTree :: [StatementNode] -> ValidatorS [Statement] validateProgramTree sts = do q <- validateArray validateStatement sts - return . pure $ concat q + return $ concat q isValidLanguageName :: Text -> Bool @@ -403,21 +412,20 @@ validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3] validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do setContextFrom lv - let NameNode nt = n l1 `isA` TtKeyword name <- validateIdentifier n - unless (maybe False isValidLanguageName name) (raiseError $symbolRegion n SyntaxError "Not a valid language name") + unless (isValidLanguageName name) (raiseError $symbolRegion n SyntaxError "Not a valid language name") nums <- catMaybes <$> validateSequence_ getNum v return . pure $ LanguageVersion - (Name $ fromMaybe "Essence" name) + (Name $ name) (if null nums then [1,3] else nums) where - getNum :: LToken -> Validator Int + getNum :: SToken -> Validator Int getNum c = do - c' <- validateSymbol c + c' <- validateSToken c case c' of - Just (LIntLiteral x) -> return . pure $ fromInteger x + (LIntLiteral x) -> return . pure $ fromInteger x _ -> invalid $ c InternalError @@ -430,12 +438,12 @@ validateStatement (ObjectiveStatement osn) = validateObjectiveStatement osn validateStatement (HeuristicStatement lt exp) = validateHeuristicStatement lt exp validateStatement (UnexpectedToken lt) = return [] <* (invalid $ lt TokenError lt) --TODO address as part of skip token refactor -validateHeuristicStatement :: LToken -> ExpressionNode -> ValidatorS [Statement] +validateHeuristicStatement :: SToken -> ExpressionNode -> ValidatorS [Statement] validateHeuristicStatement lt exp = do let validHeuristics = ["static", "sdf", "conflict", "srf", "ldf", "wdeg", "domoverwdeg"] lt `isA` TtKeyword h <- case exp of - IdentifierNode nn@(NameNode (RealToken _ (ETok{lexeme=(LIdentifier nm)}))) -> do + IdentifierNode nn@(NameNodeS (StrictToken _ (ETok{lexeme=(LIdentifier nm)}))) -> do if nm `elem` validHeuristics then return $ pure [SearchHeuristic (Name nm)] else @@ -452,7 +460,7 @@ tCondition (Typed (TypeList TypeBool) _) = pure () tCondition t = contextTypeError $ ComplexTypeError "Bool or [Bool]" $ typeOf_ t validateWhereStatement :: WhereStatementNode -> ValidatorS [Statement] -validateWhereStatement w@(WhereStatementNode l1 exprs) = wrapRegion w w (SWhere) $ do +validateWhereStatement w@(WhereStatementNode l1 exprs) = wrapRegion w w SWhere $ do l1 `isA` TtKeyword ws <- Where <$> validateSequence_ (\x -> do setContextFrom x; validateExpression x ?=> tCondition) exprs return [ws] @@ -469,8 +477,9 @@ validateObjectiveStatement o@(ObjectiveMax lt en) =wrapRegion o o (SGoal "Maximi validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement s@(SuchThatStatementNode l1 l2 exprs) = wrapRegion s s SSuchThat $ do - [l1,l2] `are` TtKeyword - putKeywordDocs "such_that" [l1,l2] + l1 `isA` TtKeyword + l2 `isA'` TtKeyword + putKeywordDocs "such_that" [flatten l1,flatten l2] exprs' <- validateSequence validateExpression exprs bools <- mapM (\(a,b)->do setContext a; return b ?=> tCondition) exprs' let bool_exprs = bools @@ -478,14 +487,15 @@ validateSuchThatStatement s@(SuchThatStatementNode l1 l2 exprs) = wrapRegion s s validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] validateBranchingStatement b@(BranchingStatementNode l1 l2 sts) = wrapRegion b b SBranching $ do - [l1,l2] `are` TtKeyword - putKeywordDocs "branchin_on" [l1,l2] + l1 `isA` TtKeyword + l2 `isA'` TtKeyword + putKeywordDocs "branchin_on" [flatten l1,flatten l2] branchings <-catMaybes <$> validateList_ (f2n validateBranchingParts) sts return [SearchOrder branchings] where validateBranchingParts :: ExpressionNode -> ValidatorS SearchOrder validateBranchingParts (IdentifierNode nn) = do - n <- validateNameAs TtVariable nn + n <- tagNameAs TtVariable nn return $ BranchingOn n validateBranchingParts exp = do x <- validateExpression exp ?=> exactly TypeAny @@ -536,7 +546,7 @@ validateFind (FindStatementNode names colon domain) = do validateLetting :: LettingStatementNode -> ValidatorS [Declaration] -- Letting [names] be validateLetting (LettingStatementNode names l1 assign) = do - l1 `isA` TtKeyword --be + l1 `isA'` TtKeyword --be validateLettingAssignment names assign validateLettingAssignment :: Sequence NameNode -> LettingAssignmentNode -> ValidatorS [Declaration] @@ -575,9 +585,9 @@ validateLettingAssignment names (LettingEnum l1 l2 l3 enames) = do putReference r n dType r void $ putSymbol (Name n,(r,True,dType)) mapM_ ( - \((r,x),i) -> do - let n = case x of Name n -> n ; _ -> "" - addRegion $ mkDeclaration r n (simple $ TypeInt (TagEnum n)) + \((r',x),_) -> do + let n' = case x of Name nm -> nm ; _ -> "" + addRegion $ mkDeclaration r' n' (simple $ TypeInt (TagEnum n)) putSymbol (x,(r,False,simple tVal)) ) nameMap |(r, name@(Name n)) <- names' @@ -601,13 +611,16 @@ invalid err = do raiseError err return Nothing +validateSToken :: SToken -> ValidatorS Lexeme +validateSToken (StrictToken ss t) = do + checkSymbols (map SkippedToken ss) + return $ lexeme t validateSymbol :: LToken -> Validator Lexeme validateSymbol s = case s of - RealToken ss et -> do - checkSymbols (map SkippedToken ss) - return . pure $ lexeme et + RealToken st -> do + pure <$> validateSToken st _ -> invalid $ ValidatorDiagnostic (getRegion s) $ Error $ TokenError s -- [MissingTokenError ] @@ -656,52 +669,52 @@ validateDomain dm = case dm of MatrixDomainNode l1 m_ib idoms l2 dom -> do l1 `isA` TtType putTypeDoc "matrix" l1 - l2 `isA` TtSubKeyword + l2 `isA'` TtSubKeyword validateIndexedByNode m_ib validateMatrixDomain idoms dom SetDomainNode l1 attrs l2 dom -> do l1 `isA` TtType putTypeDoc "set" l1 - l2 `isA` TtSubKeyword + l2 `isA'` TtSubKeyword validateSetDomain attrs dom MSetDomainNode l1 attrs l2 dom -> do l1 `isA` TtType putTypeDoc "mset" l1 - l2 `isA` TtSubKeyword + l2 `isA'` TtSubKeyword validateMSetDomain attrs dom FunctionDomainNode l1 attrs dom1 l2 dom2 -> do l1 `isA` TtType putTypeDoc "function" l1 - l2 `isA` TtOperator + l2 `isA'` TtOperator validateFunctionDomain attrs dom1 dom2 SequenceDomainNode l1 attrs l2 dom -> do l1 `isA` TtType putTypeDoc "sequence" l1 - l2 `isA` TtSubKeyword + l2 `isA'` TtSubKeyword validateSequenceDomain attrs dom RelationDomainNode l1 attrs l2 doms -> do l1 `isA` TtType putTypeDoc "relation" l1 - l2 `isA` TtSubKeyword + l2 `isA'` TtSubKeyword validateRelationDomain attrs doms PartitionDomainNode l1 attrs l2 dom -> do l1 `isA` TtType putTypeDoc "partition" l1 - l2 `isA` TtSubKeyword + l2 `isA'` TtSubKeyword validatePartitionDomain attrs dom MissingDomainNode lt -> do raiseError $ lt TokenError lt; return $ fallback "Missing Domain" where validateRangedInt :: Maybe (ListNode RangeNode) -> ValidatorS TypedDomain - validateRangedInt (Just ln@(ListNode _ (Seq [SeqElem a _]) _)) = do + validateRangedInt (Just (ListNode _ (Seq [SeqElem a _]) _)) = do d <- case a of SingleRangeNode en -> do (t,e) <- typeSplit <$> validateExpression en case t of TypeInt TagInt -> return $ DomainInt TagInt [RangeSingle e] - TypeMatrix _ tInt -> return $ DomainIntE e - TypeList tInt -> return $ DomainIntE e - TypeSet tInt -> return $ DomainIntE e - _ -> return (DomainIntE e) <* raiseTypeError (symbolRegion en ComplexTypeError "Set/List of int or Int" t) + TypeMatrix _ _ -> return $ DomainIntE e + TypeList _ -> return $ DomainIntE e + TypeSet _ -> return $ DomainIntE e + _ -> (DomainIntE e) <$ raiseTypeError (symbolRegion en ComplexTypeError "Set/List of int or Int" t) _ -> do r <- validateRange tInt a return $ DomainInt TagInt [r] @@ -710,11 +723,11 @@ validateDomain dm = case dm of ranges' <- catMaybes <$> validateList_ (f2n (validateRange tInt)) ranges return . Typed tInt $ DomainInt TagInt ranges' validateRangedInt Nothing = return . Typed tInt $ DomainInt TagInt [] - validateEnumRange :: NameNode -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain - validateEnumRange name@(NameNode n) ranges = do - flagToken n TtEnum + validateEnumRange :: NameNodeS -> Maybe (ListNode RangeNode) -> ValidatorS TypedDomain + validateEnumRange name@(NameNodeS n) ranges = do + flagSToken n TtEnum setContextFrom name - Just name' <- validateIdentifier name + name' <- validateIdentifierS name _ <- resolveReference (symbolRegion name,Name name') a <- getSymbol name' case a of @@ -762,7 +775,6 @@ validateDomain dm = case dm of dom' <- validateDomain dom return $ foldr acc dom' idoms where - -- TODO: This could well be backwards acc :: TypedDomain -> TypedDomain -> TypedDomain acc (Typed t d) (Typed t' d') = Typed (TypeMatrix t t') (DomainMatrix d d') @@ -786,7 +798,7 @@ validateDomain dm = case dm of return . Typed (TypeMSet t) $ DomainMSet repr attrs' dom' validateFunctionDomain :: Maybe (ListNode AttributeNode) -> DomainNode -> DomainNode -> ValidatorS TypedDomain validateFunctionDomain attrs dom1 dom2 = do - let repr = Just () + let _repr = Just () --placeholder if this gets implemented in future attrs' <- case attrs of Just a -> validateFuncAttributes a Nothing -> return $ def @@ -904,8 +916,8 @@ validateMSetAttributes atts = do let filtered = sort $ filter (\x -> fst x `elem` sizeAttrs) attrs case filtered of [] -> return $ OccurAttr_None - [(L_minOccur,Just a)] -> return $ (OccurAttr_MinOccur a) - [(L_maxOccur, Just a)] -> return $ (OccurAttr_MaxOccur a) + [(L_minOccur,Just a)] -> return (OccurAttr_MinOccur a) + [(L_maxOccur, Just a)] -> return (OccurAttr_MaxOccur a) [(L_minOccur, Just a),(L_maxOccur, Just b)] -> return $ (OccurAttr_MinMaxOccur a b) as ->do void . contextError $ SemanticError $ pack $ "Bad args to occurs" ++ show as;return def @@ -951,8 +963,8 @@ validatePartitionAttributes atts = do validateAttributeNode :: Map Lexeme Bool -> AttributeNode -> Validator (Lexeme,Maybe Expression) validateAttributeNode vs (NamedAttributeNode t Nothing) = do - flagToken t TtAttribute - Just name <- validateSymbol t + flagSToken t TtAttribute + name <- validateSToken t putAttrDoc (T.pack $ show name) t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" @@ -960,10 +972,10 @@ validateAttributeNode vs (NamedAttributeNode t Nothing) = do Just False -> return . pure $ (name , Nothing) validateAttributeNode vs (NamedAttributeNode t (Just e)) = do - flagToken t TtAttribute + flagSToken t TtAttribute setContextFrom e expr <- validateExpression e ?=> exactly tInt - Just name <- validateSymbol t + name <- validateSToken t putAttrDoc (T.pack $ show name) t case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" @@ -976,67 +988,83 @@ validateNamedDomainInVariant (NameDomainNode name m_dom) = do name' <- validateNameAs TtRecordMember name domain' <-case m_dom of Nothing -> do return . Typed tInt $ DomainInt TagInt [RangeSingle 0] - Just (l,d) -> do l `isA` TtOperator; validateDomain d + Just (l,d) -> do l `isA'` TtOperator; validateDomain d return $ (name' , domain') validateNamedDomainInRecord :: NamedDomainNode -> ValidatorS (Name, TypedDomain) validateNamedDomainInRecord (NameDomainNode name m_dom) = do name' <- validateNameAs TtRecordMember name domain' <-case m_dom of - Just (l,d) ->l `isA` TtOperator >> validateDomain d + Just (l,d) ->l `isA'` TtOperator >> validateDomain d Nothing -> do raiseError $ symbolRegion name SemanticError "Dataless not allowed in record" (return (fallback "Dataless RecordMemeber")) return $ (name', domain') -validateRange ::Type -> RangeNode -> ValidatorS ((Range Expression)) +validateRange ::Type -> RangeNode -> ValidatorS (Range Expression) validateRange t range = case range of - SingleRangeNode en -> do setContextFrom en; ex <- validateExpression en ?=> exactly t; return $ RangeSingle ex + SingleRangeNode en -> do ex <- validateExpression en ?=> exactly t; return $ RangeSingle ex OpenRangeNode dots -> do dots `isA` TtOther "Ellips" ; return RangeOpen - RightUnboundedRangeNode e1 dots -> do dots `isA` TtOther "Ellips" ;setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeLowerBounded ex - LeftUnboundedRangeNode dots e1 -> do dots `isA` TtOther "Ellips" ; setContextFrom e1; ex <- validateExpression e1 ?=> exactly t ; return $ RangeUpperBounded ex + RightUnboundedRangeNode e1 dots -> do dots `isA` TtOther "Ellips"; ex <- validateExpression e1 ?=> exactly t ; return $ RangeLowerBounded ex + LeftUnboundedRangeNode dots e1 -> do dots `isA` TtOther "Ellips" ; ex <- validateExpression e1 ?=> exactly t ; return $ RangeUpperBounded ex BoundedRangeNode e1 dots e2 -> do dots `isA` TtOther "Ellips" - setContextFrom e1 e1' <- validateExpression e1 ?=> exactly t - setContextFrom e2 e2' <- validateExpression e2 ?=> exactly t return $ RangeBounded e1' e2' validateArrowPair :: ArrowPairNode -> Validator (RegionTagged (Typed Expression), RegionTagged (Typed Expression)) validateArrowPair (ArrowPairNode e1 s e2) = do - s `isA` TtOperator + s `isA'` TtOperator e1' <- validateExpression e1 e2' <- validateExpression e2 return .pure $ (\a b->((symbolRegion e1,a),(symbolRegion e2,b))) e1' e2' validateExpression :: ExpressionNode -> ValidatorS (Typed Expression) -validateExpression expr = case expr of - Literal ln -> validateLiteral ln - IdentifierNode nn -> validateIdentifierExpr nn - MetaVarExpr tok -> do - x <- validateMetaVar tok ; - return $ Typed TypeAny $ ExpressionMetaVar x - QuantificationExpr qen -> validateQuantificationExpression qen - OperatorExpressionNode oen -> validateOperatorExpression oen - DomainExpression dex -> validateDomainExpression dex - ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp - AbsExpression (ParenExpressionNode l1 exp l2) -> do - [l1,l2] `are` TtOperator - setContextFrom exp - exp' <- validateExpression exp ?=> exactly TypeAny - return . Typed tInt $ mkOp TwoBarOp [exp'] - FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln - AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs - SpecialCase scn -> validateSpecialCase scn - MissingExpressionNode lt -> do raiseError (lt TokenError lt) ; return (fallback "Missing expression") +validateExpression expr = do + setContextFrom expr + res <- case expr of + Literal ln -> validateLiteral ln + IdentifierNode nn -> validateIdentifierExpr nn + MetaVarExpr tok -> do + x <- validateMetaVar tok ; + return $ Typed TypeAny $ ExpressionMetaVar x + QuantificationExpr qen -> validateQuantificationExpression qen + OperatorExpressionNode oen -> validateOperatorExpression oen + DomainExpression dex -> validateDomainExpression dex + ParenExpression (ParenExpressionNode l1 exp l2) -> checkSymbols [l1,l2] >> validateExpression exp + AbsExpression (ParenExpressionNode l1 exp l2) -> do + [l1,l2] `are` TtOperator + (kExp,exp') <- validateFlexibleExpression exp + typeCheckAbs kExp + return . Typed tInt $ mkOp TwoBarOp [exp'] + FunctionalApplicationNode lt ln -> validateFunctionApplication lt ln + AttributeAsConstriant lt exprs -> validateAttributeAsConstraint lt exprs + SpecialCase scn -> validateSpecialCase scn + MissingExpressionNode lt -> do raiseError (lt TokenError lt) ; return (fallback "Missing expression") + setContextFrom expr + return res + where + typeCheckAbs :: Kind -> ValidatorS () + typeCheckAbs (Kind DomainType _) = pure () + typeCheckAbs (Kind ValueType t) = case t of + TypeAny -> return () + TypeInt _ -> return () + TypeList{} -> return () + TypeSet{} -> return () + TypeMSet{} -> return () + TypeFunction{} -> return () + TypeSequence{} -> return () + TypeRelation{} -> return () + TypePartition{} -> return () + _ -> contextTypeError $ ComplexTypeError "Int or collection" t validateFlexibleExpression :: ExpressionNode -> ValidatorS (Kind,Expression) validateFlexibleExpression (IdentifierNode name) = do - Just n <- validateIdentifier name + n <- validateIdentifierS name setContextFrom name t <- resolveReference (symbolRegion name,Name n) - tagWithType name t + tagWithType (NameNode name) t return (t,Reference (Name n) Nothing) validateFlexibleExpression (DomainExpression den) = do (dType,d) <- typeSplit <$> validateDomainExpression den @@ -1045,18 +1073,18 @@ validateFlexibleExpression en = do (t,expr) <- typeSplit <$> validateExpression en return (simple t,expr) -validateAttributeAsConstraint :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) +validateAttributeAsConstraint :: SToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateAttributeAsConstraint l1 exprs = do es <- map untype <$> validateList_ validateExpression exprs do - flagToken l1 TtAAC - Just lx <- validateSymbol l1 + flagSToken l1 TtAAC + lx <- validateSToken l1 let n = lookup (Name (lexemeText lx)) allSupportedAttributes r <- case (n,es) of (Just 1 , [e,v]) -> return . pure . Typed TypeBool $ aacBuilder e lx (Just v) - (Just 1 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es)) + (Just 1 , _) -> invalid $ l1 SemanticError ( pack $ "Expected 2 args to " ++ (show lx) ++ "got" ++ (show $ length es)) (Just 0 , [e]) -> return . pure . Typed TypeBool $ aacBuilder e lx Nothing - (Just 0 , _) -> invalid $ l1 (SemanticError $ pack $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es)) + (Just 0 , _) -> invalid $ l1 SemanticError ( pack $ "Expected 1 arg to " ++ (show lx) ++ "got" ++ (show $ length es)) (_,_) -> invalid $ l1 InternalErrorS "Bad AAC" return $ fromMaybe (fallback "bad AAC") r where @@ -1064,20 +1092,20 @@ validateAttributeAsConstraint l1 exprs = do validateSpecialCase :: SpecialCaseNode -> ValidatorS (Typed Expression) validateSpecialCase (ExprWithDecls l1 ex l2 sts l3) = do - checkSymbols [l1,l2,l3] --TODO maybe add tokens - Just conds <- validateProgramTree sts - let decls = - [ Declaration (FindOrGiven LocalFind nm dom) - | Declaration (FindOrGiven Find nm dom) <- conds ] - let cons = concat - [ xs - | SuchThat xs <- conds - ] - let locals = if null decls - then DefinednessConstraints cons - else AuxiliaryVars (decls ++ [SuchThat cons]) - (t,expr) <- typeSplit <$> validateExpression ex - return . Typed t $ WithLocals (expr) locals + mapM_ validateSToken [l1,l2,l3] + scoped $ do conds <- validateProgramTree sts + let decls = + [ Declaration (FindOrGiven LocalFind nm dom) + | Declaration (FindOrGiven Find nm dom) <- conds ] + let cons = concat + [ xs + | SuchThat xs <- conds + ] + let locals = if null decls + then DefinednessConstraints cons + else AuxiliaryVars (decls ++ [SuchThat cons]) + (t,expr) <- typeSplit <$> validateExpression ex + return . Typed t $ WithLocals expr locals translateQnName :: Lexeme -> OpType translateQnName qnName = case qnName of @@ -1091,12 +1119,11 @@ validateQuantificationExpression :: QuantificationExpressionNode -> ValidatorS ( validateQuantificationExpression q@(QuantificationExpressionNode name pats over m_guard dot expr) = do setContextFrom q - dot `isA` TtKeyword + dot `isA'` TtKeyword scoped $ do - flagToken name TtQuantifier - name' <- validateSymbol name - let genRegion = catRegions [ (symbolRegion pats,()),(symbolRegion over,())] - (over',genDec) <- holdDeclarations $ wrapRegion' genRegion (symbolRegion pats) SGen $ validateQuantificationOver pats over + flagSToken name TtQuantifier + name' <- validateSToken name + (over',genDec) <- holdDeclarations $ wrapRegion pats pats SGen $ validateQuantificationOver pats over (g',gDec) <-case m_guard of Nothing -> return ([],[]) Just qg -> holdDeclarations $ @@ -1104,53 +1131,51 @@ validateQuantificationExpression q@(QuantificationExpressionNode name pats over validateQuantificationGuard m_guard setContextFrom expr let (iType,rType) = case name' of - Just L_ForAll -> (tCondition,TypeBool) - Just L_Exists ->(tCondition,TypeBool) - Just L_Sum -> (exactly tInt,tInt) - Just L_Product -> (exactly tInt,tInt) + L_ForAll -> (tCondition,TypeBool) + L_Exists ->(tCondition,TypeBool) + L_Sum -> (exactly tInt,tInt) + L_Product -> (exactly tInt,tInt) _ -> bug $ pretty ("Unkown quantifier " ++ show name') (body,bDecl) <- holdDeclarations $ wrapRegion expr expr SBody $ validateExpression expr ?=> iType let qBody = Comprehension body (over'++g') - let result = Typed rType <$> (mkOp <$> (translateQnName <$> name') <*> pure [qBody]) - case name' of - Just l -> putKeywordDocs (T.pack $ show l) name - Nothing -> pure () - wrapRegion q q (SQuantification (maybe "Quantification " lexemeText name') (simple rType)) (mapM_ addRegion (genDec++gDec++bDecl)) - return $ fromMaybe (fallback "Quantification error") result + let result = Typed rType (mkOp (translateQnName name') [qBody]) + putKeywordDocs (T.pack $ show name') name + + wrapRegion q q (SQuantification (lexemeText name') (simple rType)) (mapM_ addRegion (gDec++genDec++bDecl)) + return result where validateQuantificationGuard :: Maybe QuanticationGuard -> ValidatorS [GeneratorOrCondition] validateQuantificationGuard Nothing = return [] validateQuantificationGuard (Just (QuanticationGuard l1 exp) ) = do - checkSymbols [l1] - setContextFrom exp + l1 `isA` TtOther "Comma" expr' <- validateExpression exp ?=> exactly TypeBool return $ [Condition expr'] validateQuantificationOver :: Sequence AbstractPatternNode -> QuantificationOverNode -> ValidatorS [GeneratorOrCondition] - validateQuantificationOver pats ( QuantifiedSubsetOfNode lt en ) = do + validateQuantificationOver lpats ( QuantifiedSubsetOfNode lt en ) = do lt `isA` TtKeyword putKeywordDocs "powerset_projection" lt - ps <- sequenceElems pats + ps <- sequenceElems lpats exp <- validateExpression en let (t,e) = typeSplit exp void $ unifyTypesFailing (TypeSet TypeAny) (symbolRegion en,exp) let pt = t apats <- unifyPatterns pt ps - return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet (e)) | pat <- apats] + return [Generator $ GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet e) | pat <- apats] -- x in exp - validateQuantificationOver pats ( QuantifiedMemberOfNode lt en ) = do + validateQuantificationOver lpats ( QuantifiedMemberOfNode lt en ) = do lt `isA` TtKeyword - ps <- sequenceElems pats + ps <- sequenceElems lpats exp <- validateExpression en let (t,e) = typeSplit exp pt <- projectionType (symbolRegion en) t apats <- unifyPatterns pt ps return [Generator $ GenInExpr pat e|pat <- apats] -- x : domain - validateQuantificationOver pats ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do - l1 `isA` TtOther "Colon in comprehension" - ps <- sequenceElems pats + validateQuantificationOver lpats ( QuantifiedDomainNode (OverDomainNode l1 dom) ) = do + l1 `isA'` TtOther "Colon in comprehension" + ps <- sequenceElems lpats (dType,dom') <- typeSplit <$> validateDomain dom pt <- projectionTypeDomain (symbolRegion dom) dType apats <- unifyPatterns pt ps @@ -1158,12 +1183,12 @@ validateQuantificationExpression q@(QuantificationExpressionNode name pats over -validateMetaVar :: LToken -> ValidatorS String +validateMetaVar :: SToken -> ValidatorS String validateMetaVar tok = do - Just lx <- validateSymbol tok + lx <- validateSToken tok case lx of LMetaVar s -> return $ unpack s - _ -> error $ "Bad MetaVar" ++ show lx + _ -> bug $ "Bad MetaVar" <+> pretty (show lx) validateDomainExpression :: DomainExpressionNode -> ValidatorS (Typed Expression) validateDomainExpression (DomainExpressionNode l1 dom l2) = do @@ -1171,32 +1196,32 @@ validateDomainExpression (DomainExpressionNode l1 dom l2) = do (tdom,dom') <- typeSplit <$> validateDomain dom return . Typed tdom $ Domain dom' -validateFunctionApplication :: LToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) +validateFunctionApplication :: SToken -> ListNode ExpressionNode -> ValidatorS (Typed Expression) validateFunctionApplication name args = do args' <- validateList validateFlexibleExpression args - flagToken name TtFunction - Just name' <- validateSymbol name + flagSToken name TtFunction + name' <- validateSToken name putDocs FunctionD (lexemeText name') name setContextFrom args validateFuncOp name' args' -validateIdentifierExpr :: NameNode -> ValidatorS (Typed Expression) +validateIdentifierExpr :: NameNodeS -> ValidatorS (Typed Expression) validateIdentifierExpr name = do - Just n <- validateIdentifier name + n <- validateIdentifierS name setContextFrom name t <- resolveReference (symbolRegion name,Name n) - tagWithType name t + tagWithType (NameNode name) t t' <- getValueType t return . Typed t' $ Reference (Name n) Nothing validateOperatorExpression :: OperatorExpressionNode -> ValidatorS (Typed Expression) validateOperatorExpression (PrefixOpNode lt expr) = do - flagToken lt TtOperator - Just op <- validateSymbol lt + flagSToken lt TtOperator + op <- validateSToken lt setContextFrom expr - let (refT) = case op of + let refT = case op of L_Minus -> tInt L_ExclamationMark -> TypeBool _ -> bug . pretty $ "Unknown prefix op " ++ show op @@ -1207,8 +1232,8 @@ validateOperatorExpression (PrefixOpNode lt expr) = do validateOperatorExpression (BinaryOpNode lexp op rexp) = do (lType,lExpr) <- validateFlexibleExpression lexp (rType,rExpr) <- validateFlexibleExpression rexp - flagToken op TtOperator - Just op' <- validateSymbol op + flagSToken op TtOperator + op' <- validateSToken op let resultValidator = binOpType op' resultType <- resultValidator (symbolRegion lexp,lType) (symbolRegion rexp,rType) @@ -1225,7 +1250,7 @@ validateOperatorExpression (PostfixOpNode expr pon) = do validatePostfixOp :: PostfixOpNode -> ValidatorS (ExpressionNode -> ValidatorS (Typed Expression)) validatePostfixOp (OpFactorial lt) = do lt `isA` TtOperator - putDocs OperatorD ("post_factorial") lt + putDocs OperatorD "post_factorial" lt setContextFrom lt return $ \exp -> do v <- validateExpression exp ?=> exactly tInt @@ -1256,7 +1281,7 @@ validatePostfixOp (ApplicationNode args) = do return . Typed resType $ op where validateProjectionArgs :: ExpressionNode -> ValidatorS (Maybe (RegionTagged (Typed Expression))) - validateProjectionArgs (IdentifierNode (NameNode (RealToken _ (lexeme->l)))) | l == LIdentifier "_" = return Nothing + validateProjectionArgs (IdentifierNode (NameNodeS ((StrictToken _ (lexeme->l))))) | l == LIdentifier "_" = return Nothing validateProjectionArgs e = validateExpression e >>= \x -> return . pure $ (symbolRegion e , x) checkProjectionArgs :: [Type] -> [Maybe (RegionTagged (Typed Expression))] -> ValidatorS Type @@ -1275,17 +1300,16 @@ validatePostfixOp (ApplicationNode args) = do validatePostfixOp (IndexedNode ln) = do res <- catMaybes <$> listElems ln return $ \exp -> do - setContextFrom exp e <- validateExpression exp foldM validateIndexingOrSlicing e res validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do l1 `isA` TtOther "Colon in expr" - [l2,l3] `are` TtOther "BackTick" + l2 `isA` TtOther "BackTick" + l3 `isA'` TtOther "BackTick" (getDomainMembers->t,_) <- typeSplit <$> validateDomain dom return $ \exp -> do - setContextFrom exp e <- validateExpression exp ?=> exactly t return . Typed t $ D.Typed e t @@ -1293,13 +1317,12 @@ validatePostfixOp (ExplicitDomain l1 l2 dom l3) = do validateIndexingOrSlicing :: Typed Expression -> RangeNode -> ValidatorS (Typed Expression) validateIndexingOrSlicing (Typed t exp) (SingleRangeNode r) = do setContextFrom r - -- i <- validateExpression r ?=> exactly iType (vType,e) <- case t of TypeRecord ts -> validateRecordMemberIndex (ts) r TypeVariant ts-> validateRecordMemberIndex (ts) r - t -> do + _ -> do t' <- getIndexingType t - e <- (validateExpression r) ?=> (exactly t') + e <- validateExpression r ?=> exactly t' setContextFrom r vType <- getIndexedType t (Typed t' e) return (vType,e) @@ -1320,7 +1343,7 @@ validateIndexingOrSlicing exp range = do validateRecordMemberIndex :: [(Name,Type)] -> ExpressionNode -> ValidatorS (Type,Expression) validateRecordMemberIndex ns (IdentifierNode nn) = do - n <- validateNameAs TtRecordMember nn + n <- tagNameAs TtRecordMember nn let t = lookup n ns ty <- case t of Just ty -> return ty @@ -1365,23 +1388,23 @@ getIndexingType (TypeSequence _) = return tInt getIndexingType (TypeList _) = return tInt getIndexingType (TypeTuple _) = return tInt getIndexingType t = do - contextTypeError (CustomError . pack $ "Type " ++ (show $ pretty t) ++ " does not support indexing") + contextTypeError (CustomError . pack $ "Type " ++ show (pretty t) ++ " does not support indexing") return TypeAny -getIndexedType :: Type -> (Typed Expression) -> ValidatorS Type +getIndexedType :: Type -> Typed Expression -> ValidatorS Type getIndexedType (TypeMatrix _ ms) _ = return ms getIndexedType (TypeSequence t) _ = return t getIndexedType (TypeTuple ts) ex = do case intOut "Index" (untype ex) of Left _ -> do - (void . contextTypeError $ CustomError $ "Non constant value indexing tuple") + contextTypeError (CustomError "Non constant value indexing tuple") return TypeAny Right v | v <= 0 || v > toInteger ( length ts) -> do - (contextTypeError $ CustomError . pack $ "Tuple index "++ show v ++ " out of bounds" ) + contextTypeError . CustomError . pack $ "Tuple index "++ show v ++ " out of bounds" return TypeAny Right v -> return $ ts `at` (fromInteger v -1) -getIndexedType t@(TypeRecord vs) (Typed _ e) = return TypeAny --TODO implement -getIndexedType t@(TypeVariant _) _ = return TypeAny --TODO implement +getIndexedType (TypeRecord _) (Typed _ _) = bug "Index type called on record, should be handled by special case" +getIndexedType (TypeVariant _) _ = bug "Index type called on variant, should be handled by special case" getIndexedType _ _ = return TypeAny validateLiteral :: LiteralNode -> ValidatorS (Typed Expression) @@ -1463,7 +1486,7 @@ validateVariantLiteral ln = do validateRecordMember :: RecordMemberNode -> ValidatorS (Name,Typed Expression) validateRecordMember (RecordMemberNode name lEq expr) = do - lEq `isA` TtKeyword + lEq `isA'` TtKeyword name' <- validateName name expr' <- validateExpression expr return ( name' , expr') @@ -1496,16 +1519,16 @@ validateMatrixLiteral :: MatrixLiteralNode -> ValidatorS (Typed Expression) --Matrix proper validateMatrixLiteral (MatrixLiteralNode l1 se m_dom Nothing l2) = do [l1,l2] `are` TtOther "SquareBrackets" - elems <- validateSequence validateExpression se - (t,es) <- typeSplit <$> sameType elems - let defaultDomain :: TypedDomain = Typed tInt (mkDomainIntB 1 (fromInt $ genericLength elems)) + matElems <- validateSequence validateExpression se + (t,es) <- typeSplit <$> sameType matElems + let defaultDomain :: TypedDomain = Typed tInt (mkDomainIntB 1 (fromInt $ genericLength matElems)) dom <- fromMaybe defaultDomain <$> validateOverDomain m_dom let lit = AbsLitMatrix (untype $ dom) es return $ Typed (TypeMatrix tInt t) $ mkAbstractLiteral lit where validateOverDomain :: Maybe OverDomainNode -> Validator TypedDomain validateOverDomain Nothing = return Nothing - validateOverDomain (Just (OverDomainNode l3 dom)) = do l3 `isA` TtOther "Semicolon in matrix"; pure <$> validateDomain dom + validateOverDomain (Just (OverDomainNode l3 dom)) = do l3 `isA'` TtOther "Semicolon in matrix"; pure <$> validateDomain dom -- Matrix as comprehension @@ -1514,7 +1537,7 @@ validateMatrixLiteral m@(MatrixLiteralNode l1 se m_dom (Just comp) l2) = do case m_dom of Nothing -> return () Just p@(OverDomainNode l3 dom) -> do - l3 `isA` TtOther "Semicolon in matrix" + l3 `isA'` TtOther "Semicolon in matrix" void $ validateDomain dom raiseError $ symbolRegion p SemanticError "Index domains are not supported in comprehensions" scoped $ @@ -1525,11 +1548,11 @@ validateMatrixLiteral m@(MatrixLiteralNode l1 se m_dom (Just comp) l2) = do (es,dBody) <- holdDeclarations $ wrapRegion se se SBody $ validateSequence validateExpression se - Just r <- case es of - [] -> invalid $ symbolRegion se SemanticError "MissingExpression" - ((_,x):xs) -> flagExtraExpressions xs >> (return . pure $ x) + r <- case es of + [] -> return $ fallback "missing" <$ raiseError $ symbolRegion se SemanticError "MissingExpression" + ((_,x):xs) -> flagExtraExpressions xs >> (return $ x) let bodyType = typeOf_ r - wrapRegion m (se) (SComprehension (simple $ TypeList bodyType)) (mapM_ addRegion (dGens++dBody)) + wrapRegion m se (SComprehension (simple $ TypeList bodyType)) (mapM_ addRegion (dGens++dBody)) return . Typed (TypeList bodyType) $ Comprehension (untype r) gens where flagExtraExpressions :: [RegionTagged a] -> ValidatorS () @@ -1545,10 +1568,8 @@ validateComprehension (ComprehensionNode l1 body) = do validateComprehensionBody :: ComprehensionBodyNode -> ValidatorS [GeneratorOrCondition] --guard validateComprehensionBody (CompBodyCondition en) = wrapRegion en en SGuard $ do - e <- validateExpression en - setContextFrom en - assertType e TypeBool "Guards must be bools" - return [Condition $ untype e] + e <- validateExpression en ?=> exactly TypeBool + return [Condition e] --x in dom validateComprehensionBody c@(CompBodyDomain apn l1 dom) = wrapRegion c apn SGen $ do l1 `isA` TtKeyword @@ -1565,11 +1586,12 @@ validateComprehensionBody c@(CompBodyGenExpr apn lt en) = wrapRegion c apn SGen e <- validateExpression en let (t,exp) = typeSplit e t' <- projectionType (symbolRegion en) t - pats <- validateSequence_ (flip unifyPattern t' . Just) (apn) + pats <- validateSequence_ (flip unifyPattern t' . Just) apn return $ [Generator (GenInExpr pat exp)| pat <- pats] --letting x be validateComprehensionBody c@(CompBodyLettingNode l1 nn l2 en) = wrapRegion c nn SLetting $ do - [l1,l2] `are` TtKeyword + l1 `isA` TtKeyword + l2 `isA'` TtKeyword (t,expr) <- typeSplit <$> validateExpression en pat <- unifyPattern (Just nn) t return [ComprehensionLetting pat expr] @@ -1578,18 +1600,18 @@ validateComprehensionBody c@(CompBodyLettingNode l1 nn l2 en) = wrapRegion c nn projectionType :: DiagnosticRegion -> Type -> ValidatorS Type projectionType r t = case t of TypeAny -> return TypeAny - TypeTuple tys -> return t - TypeMatrix i ty -> return ty + TypeTuple _ -> return t + TypeMatrix _ ty -> return ty TypeList ty -> return ty TypeSet ty -> return ty TypeMSet ty -> return ty TypeSequence ty -> return $ TypeTuple [tInt,ty] TypeRelation ts -> return $ TypeTuple ts - TypePartition t -> return $ TypeSet t + TypePartition ty -> return $ TypeSet ty TypeFunction fr to -> return $ TypeTuple [fr,to] _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny projectionTypeDomain :: DiagnosticRegion -> Type -> ValidatorS Type -projectionTypeDomain r t = case t of --TODO check and do properly +projectionTypeDomain _ t = case t of --TODO check and do properly TypeAny -> return TypeAny TypeEnum (Name n) -> return $ TypeInt $ TagEnum n TypeUnnamed (Name n) -> return $ TypeInt $ TagUnnamed n @@ -1628,18 +1650,18 @@ makeTupleLiteral members = do return . Typed eType . mkAbstractLiteral . AbsLitTuple $ snd memberTypes -validateIntLiteral :: LToken -> ValidatorS Constant +validateIntLiteral :: SToken -> ValidatorS Constant validateIntLiteral t = do - flagToken t TtNumber - l <- validateSymbol t + flagSToken t TtNumber + l <- validateSToken t case l of - Just (LIntLiteral x) -> return $ ConstantInt TagInt x + (LIntLiteral x) -> return $ ConstantInt TagInt x _ -> error "Bad int literal" -validateBoolLiteral :: LToken -> ValidatorS Constant +validateBoolLiteral :: SToken -> ValidatorS Constant validateBoolLiteral t = do - flagToken t $ TtBool - Just l <- validateSymbol t + flagSToken t TtBool + l <- validateSToken t case l of L_true -> return $ ConstantBool True L_false -> return $ ConstantBool False @@ -1651,27 +1673,34 @@ validateNameList = validateSequence validateName validateNameList_ :: Sequence NameNode -> ValidatorS [Name] validateNameList_ = validateSequence_ validateName -validateIdentifier :: NameNode -> Validator Text -validateIdentifier (NameNode iden) = do - Just q <- validateSymbol iden +validateIdentifierS :: NameNodeS -> ValidatorS Text +validateIdentifierS (NameNodeS iden) = do + q <- validateSToken iden case q of - LIdentifier x -> checkName x - _ -> return Nothing + (LIdentifier x) -> checkName x >> return x + _ -> bug $ "Name wasn't a name:" <+> (pretty $ show q) where checkName :: Text -> Validator Text checkName "" = invalid $ iden SemanticError "Empty names not allowed" checkName "\"\"" = invalid $ iden SemanticError "Empty names not allowed" checkName x = return . pure $ x +validateIdentifier :: NameNode -> ValidatorS Text +validateIdentifier (NameNode nns) = validateIdentifierS nns +validateIdentifier (MissingNameNode iden) = do + _ <- validateSymbol iden + return " " + validateName :: NameNode -> ValidatorS Name validateName name = do n <- validateIdentifier name - return $ fromMaybe (fallback "bad Identifier") (Name <$> n) + return (Name n) validateNameAs :: TagType -> NameNode -> ValidatorS Name -validateNameAs f name@(NameNode n) = do - flagToken n f - validateName name +validateNameAs f (NameNode n) = tagNameAs f n +validateNameAs _ name = validateName name +tagNameAs :: TagType -> NameNodeS -> ValidatorS Name +tagNameAs f nn@(NameNodeS n) = flagSToken n f >> Name <$> validateIdentifier (NameNode nn) listToSeq :: ListNode a -> ValidatorS (Sequence a) listToSeq (ListNode l1 s l2) = checkSymbols [l1,l2] >> return s @@ -1722,8 +1751,8 @@ validateSequenceElem f (SeqElem i s) = do Just lt -> void $ validateSymbol lt v <- f i return (symbolRegion i,v) -validateSequenceElem _ (MissingSeqElem plc sep) = do - checkSymbols [sep] +validateSequenceElem _ (MissingSeqElem plc sepr) = do + checkSymbols [sepr] raiseError $ symbolRegion plc TokenError plc return $ (symbolRegion plc , fallback "Missing elem") @@ -1734,8 +1763,8 @@ validateSequenceElem_ f (SeqElem i s) = do Nothing -> pure () Just lt -> void $ validateSymbol lt f i -validateSequenceElem_ _ (MissingSeqElem plc sep) = do - checkSymbols [sep] +validateSequenceElem_ _ (MissingSeqElem plc sepr) = do + checkSymbols [sepr] raiseError $ symbolRegion plc TokenError plc return $ fallback "Missing Elem" @@ -1754,12 +1783,7 @@ data DiagnosticRegion = DiagnosticRegion { drOffset :: Int, drLength :: Int } - deriving (Show,Eq) -instance Ord DiagnosticRegion where - compare a b = case compare (drSourcePos a) (drSourcePos b) of - LT -> LT - GT -> GT - EQ -> comparing drLength a b + deriving (Show,Eq,Ord) global :: DiagnosticRegion global =DiagnosticRegion sourcePos0 sourcePos0 0 0 -- getTokenRegion :: LToken -> DiagnosticRegion @@ -1818,29 +1842,29 @@ contextTypeError e = do contextInfo :: InfoType -> ValidatorS () contextInfo e = do q <- getContext - tell $ [ValidatorDiagnostic q $ Info e] + tell [ValidatorDiagnostic q $ Info e] return () -getType :: (Pretty a ,TypeOf a) => a -> ValidatorS Type -getType a = do - tc <- gets typeChecking - (if tc then (do - let t = let ?typeCheckerMode = StronglyTyped in typeOf a - case t of - Left err -> do - void $ contextError (CustomError . pack $ "type err in :" ++ show (pretty a) ++ "err:" ++ show err) - return TypeAny - Right t -> return t) else return TypeAny) - - -assertType :: (Pretty a,TypeOf a) => Typed a -> Type -> Text -> ValidatorS () -assertType v ref msg = do - let Typed t _ = v - tc <- gets typeChecking - unless (not tc || t == ref) $ void . contextError $ CustomError msg +-- getType :: (Pretty a ,TypeOf a) => a -> ValidatorS Type +-- getType a = do +-- tc <- gets typeChecking +-- (if tc then (do +-- let t = let ?typeCheckerMode = StronglyTyped in typeOf a +-- case t of +-- Left err -> do +-- void $ contextError (CustomError . pack $ "type err in :" ++ show (pretty a) ++ "err:" ++ show err) +-- return TypeAny +-- Right ty -> return ty) else return TypeAny) + + +-- assertType :: (Pretty a,TypeOf a) => Typed a -> Type -> Text -> ValidatorS () +-- assertType v ref msg = do +-- let Typed t _ = v +-- tc <- gets typeChecking +-- unless (not tc || t == ref) $ void . contextError $ CustomError msg resolveReference :: RegionTagged Name -> ValidatorS Kind -resolveReference (r,Name n) = do +resolveReference (r,Name n) | n /= "" = do c <- getSymbol n case c of Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return (simple TypeAny) @@ -1896,7 +1920,11 @@ unifyPatterns t = mapM (flip unifyPattern t) unifyPattern :: Maybe AbstractPatternNode -> Type -> ValidatorS AbstractPattern unifyPattern (Just (AbstractIdentifier nn)) t = do - (Name n) <- validateNameAs TtLocal nn + (nm) <- tagNameAs TtLocal nn + let n =case nm of + Name txt -> txt + NameMetaVar s -> T.pack s + _ -> bug "Bad name " void $ putSymbol (Name n,(symbolRegion nn,False,simple t)) unless (n == "_") $ addRegion $ mkDeclaration (symbolRegion nn) n (simple t) -- addRegion (RegionInfo (symbolRegion nn) (Just $ simple t) n Definition) @@ -1911,10 +1939,19 @@ unifyPattern (Just(AbstractPatternTuple m_lt ln)) t = do ps <-sequenceElems sps case m_lt of Nothing -> void $ return () - Just lt -> lt `isA` TtType - memberTypes <- getMemberTypes t - let q = zip ps memberTypes + Just lt -> lt `isA'` TtType + memberTypes <- case t of + TypeAny -> return $ replicate (length ps) TypeAny + TypeTuple ts-> do + let dif = length ts - length ps + unless (dif <= 0) $ raiseError $ symbolRegion ln (CustomError . T.pack $ "Missing "++ show dif ++ " fields from projection tuple, if you dont want the value, use '_'") + return $ ts + _ -> replicate (length ps) TypeAny <$ raiseTypeError (symbolRegion ln (CustomError (T.concat ["Could not project " , (prettyT t) , " onto tuple pattern"]))) + + let (paired,unpaired) = (splitAt (length memberTypes) ps) + let q = zip paired memberTypes aps <- mapM (uncurry unifyPattern) q + mapM_ (\x ->raiseError $ (symbolRegion x) CustomError "Extraneous tuple field from projection" ) (catMaybes unpaired) return $ AbsPatTuple aps unifyPattern (Just(AbstractPatternMatrix ln)) t = do @@ -1924,8 +1961,9 @@ unifyPattern (Just(AbstractPatternMatrix ln)) t = do TypeAny -> return $ repeat TypeAny TypeList ty -> return $ repeat ty TypeMatrix _ ty -> return $ repeat ty - _ -> (repeat TypeAny) <$ raiseTypeError (symbolRegion ln (CustomError (T.concat ["Could not project " , (prettyT t) , " onto list pattern"]))) - let q = zip ps memberTypes + _ -> repeat TypeAny <$ raiseTypeError (symbolRegion ln (CustomError (T.concat ["Could not project " , (prettyT t) , " onto list pattern"]))) + + let q = zip (ps) memberTypes aps <- mapM (uncurry unifyPattern) q return $ AbsPatMatrix aps @@ -2146,13 +2184,13 @@ functionOps l = case l of indep f1 f2 a b = do v1 <- f1 a v2 <- f2 b - if null $ catMaybes $ [v1,v2] then return $ pure () else return Nothing + if not . null $ catMaybes $ [v1,v2] then return $ pure () else return Nothing binaryFlattenArgs :: SArg -> SArg -> Validator () binaryFlattenArgs (r1,d) b = do off <- case intOut "" (untype d) of - Just (fromInteger->a) | a > 0 -> return $ Just a + Just (fromInteger->a :: Integer) | a > 0 -> return $ Just a _ -> invalid $ r1 CustomError "1st arg must be a constant positive int" - let ref = map (const TypeList) [1..fromMaybe 1 (off)] + let ref = map (const TypeList) [1..fromMaybe 1 off] let ref' = foldr id TypeAny ref r <- unifyTypesFailing ref' b return $ if null off || null r then Nothing else Just () @@ -2169,7 +2207,7 @@ functionOps l = case l of concatType (Just(TypeList (TypeMatrix _ t))) = Just $ TypeList t concatType _ = Just $ TypeList TypeAny concatArgs :: SArg -> Validator () - concatArgs s@(r,a)= binaryFlattenArgs (r,Typed tInt $ Constant $ ConstantInt TagInt 1) s + concatArgs s@(r,_)= binaryFlattenArgs (r,Typed tInt $ Constant $ ConstantInt TagInt 1) s tableArgs :: SArg -> SArg -> Validator () tableArgs (r1,typeOf_->t1) (r2,typeOf_->t2) = do a <- case t1 of @@ -2257,7 +2295,7 @@ functionOps l = case l of partInner _ = Just $ TypeSet TypeAny restrictArgs :: Arg -> Arg -> Validator () - restrictArgs (r1,(k,e)) (r2,(kd,_)) = do + restrictArgs (r1,(k,_)) (r2,(kd,_)) = do setContext r1 funcType <- getValueType k setContext r2 @@ -2309,13 +2347,13 @@ functionOps l = case l of inverseArgs :: SArg -> SArg -> Validator () inverseArgs (r1,a) (r2,b) = do - let (fi,fo) = case (typeOf_ a,typeOf_ b) of + let (fIn,fOut) = case (typeOf_ a,typeOf_ b) of (TypeFunction fi fo,TypeFunction gi go) -> (mostDefinedS [fi,go],mostDefinedS [fo,gi]) (TypeFunction fi fo,_ ) -> (fi,fo) (_,TypeFunction gi go) -> (gi,go) _ -> (TypeAny,TypeAny) - a' <- unifyTypesFailing (TypeFunction fi fo) (r1,a) - b' <- unifyTypesFailing (TypeFunction fo fi) (r2,b) + a' <- unifyTypesFailing (TypeFunction fIn fOut) (r1,a) + b' <- unifyTypesFailing (TypeFunction fIn fOut) (r2,b) return $ if null a' || null b' then Nothing else Just () setPartArgs :: SArg -> SArg -> Validator () setPartArgs (r1,a) (r2,b) = do @@ -2330,25 +2368,25 @@ functionOps l = case l of partyType :: Maybe Type ->Maybe Type -> Maybe Type partyType a b = do - let at = case a of + let at' = case a of Just (TypePartition t) -> t _ -> TypeAny let bt = fromMaybe TypeAny b - return $ TypeSet $ mostDefinedS [at,bt] + return $ TypeSet $ mostDefinedS [at',bt] partsType :: Maybe (Type) -> Maybe Type partsType (Just (TypePartition a)) = Just $ TypeSet $ TypeSet a partsType (Just TypeAny) = Just $ TypeSet $ TypeSet TypeAny partsType _ = Nothing minMaxArgs :: Arg -> Validator () - minMaxArgs (r,(Kind DomainType t ,e)) = + minMaxArgs (r,(Kind DomainType t ,_)) = case t of TypeInt TagInt -> valid TypeInt (TagEnum _) -> valid TypeEnum {} -> valid TypeAny -> valid _ -> invalid $ r ComplexTypeError "Domain of int-like or matrix of int-like" t - minMaxArgs (r,(k ,e)) = do + minMaxArgs (r,(k ,_)) = do t <- getValueType k inner <- case t of TypeList tyInner -> return tyInner @@ -2356,7 +2394,7 @@ functionOps l = case l of TypeSet tyInner -> return tyInner TypeMSet tyInner -> return tyInner TypeAny -> return TypeAny - _ -> return TypeAny <* invalid (r ComplexTypeError "Domain of int-like or matrix of int-like" t) + _ -> TypeAny <$ invalid (r ComplexTypeError "Domain of int-like or matrix of int-like" t) case inner of TypeInt TagInt -> valid TypeInt (TagEnum _) -> valid @@ -2373,13 +2411,13 @@ functionOps l = case l of minMaxType _ = Just TypeAny transformArgs :: SArg -> SArg -> Validator () - transformArgs a b = do + transformArgs _ _ = do return $ pure () activeArgs :: SArg -> SArg -> Validator () - activeArgs (r,(typeOf_->TypeAny)) b =valid - activeArgs (r,(typeOf_->t@(TypeVariant vs))) (r2,typeOf_->b) = do + activeArgs (_,(typeOf_->TypeAny)) _ =valid + activeArgs (r,(typeOf_->t@(TypeVariant _))) (r2,typeOf_->b) = do checkRVMember (r,t) (r2,b) - activeArgs (r,(typeOf_->t)) b = invalid $ r ComplexTypeError "Variant " t + activeArgs (r,(typeOf_->t)) _ = invalid $ r ComplexTypeError "Variant " t typeToSet :: Maybe Type -> Maybe Type typeToSet (Just t) = TypeSet <$> tMembers t @@ -2403,13 +2441,14 @@ functionOps l = case l of imageArgs :: SArg -> SArg -> Validator () imageArgs (r1,typeOf_->t1) r2 = do - Just from <- case t1 of + from <- case t1 of TypeAny -> return $ Just TypeAny TypeFunction a _ -> return $Just a TypeSequence _ -> return $Just tInt _ -> (return Nothing) <* (raiseTypeError $ (r1 ComplexTypeError "Function or Sequence" t1)) - _ <- unifyTypes from r2 - return $ pure () + case from of + Just f -> unifyTypes f r2 >> (return $ pure ()) + Nothing -> return Nothing sumArgs :: SArg -> Validator () sumArgs (r,typeOf_->t') = do @@ -2419,9 +2458,8 @@ functionOps l = case l of TypeMatrix _ t -> return t TypeSet t -> return t TypeMSet t -> return t - _ -> do - (raiseTypeError $ r ComplexTypeError "Matrix or Set" t') - fail "" + _ -> TypeAny <$ (raiseTypeError $ r ComplexTypeError "Matrix or Set" t') + case t of TypeAny -> return $ pure () TypeInt TagInt -> return $ pure () @@ -2495,7 +2533,7 @@ isOfType :: Type -> RegionTagged (Typed Expression) -> ValidatorS Bool isOfType t (r,v) = setContext r >> return v ?=> exactly t >> (return $ typesUnifyS [t,typeOf_ v]) isLogicalContainer :: RegionTagged (Typed Expression) -> Validator () -isLogicalContainer (r,Typed t e) = do +isLogicalContainer (r,Typed t _) = do case t of TypeAny -> return $ pure () TypeList TypeAny -> return $ pure () @@ -2588,7 +2626,7 @@ triFunc argVal t f args = do return (result,(Just (unregion x) , Just ( unregion y), Just ( unregion z))) let res = maybe (fallback "Arg Fail Tri") f v return $ Typed (fromMaybe TypeAny $ uncurry3 t ts) res - where uncurry3 f (a,b,c) = f a b c --todo export from prelude + where uncurry3 fn (a,b,c) = fn a b c --todo export from prelude tooFewArgs :: Int -> Int -> ValidatorS () tooFewArgs n i = do void . contextError $ MissingArgsError n i diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index 49c7427ea5..c23139168b 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -51,7 +51,7 @@ module Conjure.Prelude , getDirectoryContents , RunStateAsWriter, runStateAsWriterT, sawTell , stripPostfix - , Doc , hang , hcat , fsep , cat + , Doc , ) where import GHC.Err as X ( error ) @@ -169,12 +169,7 @@ import Test.QuickCheck ( Gen ) import Text.Megaparsec ( ParsecT, Parsec ) -- pretty -import Prettyprinter as X - ( - (<>), (<+>) - , nest, punctuate - , vcat, hsep, sep - ) + -- uniplate import Data.Generics.Uniplate.Data as X @@ -202,7 +197,7 @@ import System.Random ( StdGen, mkStdGen, setStdGen, randomRIO ) import qualified Data.ByteString as ByteString import qualified Data.Text as T import qualified Data.Text.IO as T -import qualified Prettyprinter as Pr +import qualified Text.PrettyPrint.Annotated.HughesPJ as Pr -- containers import qualified Data.Set as S @@ -229,8 +224,9 @@ import System.TimeIt as X ( timeIt, timeItNamed ) import Debug.Trace as X ( trace, traceM ) import Data.Void (Void) import GHC.IO.Exception (IOErrorType(InvalidArgument)) -import Prettyprinter (PageWidth(AvailablePerLine)) -import Prettyprinter.Render.String (renderString) +import Text.PrettyPrint.Annotated.HughesPJ ((<+>)) +-- import Prettyprinter (PageWidth(AvailablePerLine)) +-- import Prettyprinter.Render.String (renderString) @@ -238,23 +234,23 @@ data EssenceDocAnnotation = EssenceDocAnnotation type Doc = Pr.Doc EssenceDocAnnotation -instance Eq Doc where - a == b = show a == show b +-- instance Eq Doc where +-- a == b = show a == show b --compats -hang :: Doc -> Int ->Doc -> Doc -hang a n b = a <+> Pr.hang n b +-- hang :: Doc -> Int ->Doc -> Doc +-- hang a n b = a <+> Pr.hang n b -hcat :: [Doc] -> Doc -hcat = Pr.hcat +-- hcat :: [Doc] -> Doc +-- hcat = Pr.hcat -fsep :: [Doc] -> Doc -fsep = Pr.fillSep +-- fsep :: [Doc] -> Doc +-- fsep = Pr.fillSep -cat :: [Doc] -> Doc -cat = Pr.cat +-- cat :: [Doc] -> Doc +-- cat = Pr.cat -nest :: Int -> Doc -> Doc -nest = Pr.nest +-- nest :: Int -> Doc -> Doc +-- nest = Pr.nest tracing :: Show a => String -> a -> a @@ -267,7 +263,7 @@ textToString :: T.Text -> String textToString = T.unpack stringToDoc :: String -> Doc -stringToDoc = Pr.pretty +stringToDoc = Pr.text padRight :: Int -> Char -> String -> String padRight n ch s = s ++ replicate (n - length s) ch @@ -577,7 +573,8 @@ runLoggerPipeIO l logger = Pipes.runEffect $ Pipes.for logger each where each (Left (lvl, msg)) = when (lvl <= l) $ do - let txt = renderString $ (Pr.layoutPretty $ Pr.LayoutOptions (AvailablePerLine 200 1.0)) msg + let txt = Pr.renderStyle (Pr.style { Pr.lineLength = 200 }) msg + -- let txt = renderString $ (Pr.layoutPretty $ Pr.LayoutOptions (AvailablePerLine 200 1.0)) msg when ("[" `isPrefixOf` txt) $ do liftIO clearScreen liftIO (setCursorPosition 0 0) diff --git a/src/Conjure/Process/ValidateConstantForDomain.hs b/src/Conjure/Process/ValidateConstantForDomain.hs index 2c40db181f..956f72c01c 100644 --- a/src/Conjure/Process/ValidateConstantForDomain.hs +++ b/src/Conjure/Process/ValidateConstantForDomain.hs @@ -36,7 +36,7 @@ import Conjure.Language.Domain SizeAttr_MinSize, SizeAttr_MaxSize), SetAttr(SetAttr), binRelToAttrName ) -import Conjure.Language.Pretty ( prettyList, Pretty(pretty) ) +import Conjure.Language.Pretty import Conjure.Language.Type ( TypeCheckerMode ) import Conjure.Language.Instantiate ( instantiateExpression ) import Conjure.Process.AttributeAsConstraints ( mkAttributeToConstraint ) diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 20e762d249..550160d772 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -11,7 +11,7 @@ import Conjure.Language.Lexemes import qualified Data.Text import qualified Data.Text as T import Data.Map.Strict (mapWithKey, assocs) -import Conjure.Language.Expression.Op.Internal.Common (Pretty(..)) +import Conjure.Language.Pretty @@ -32,7 +32,7 @@ instance ShowErrorComponent DiagnosticForPrint where Info it -> "Info: " ++ show it tokenErrorToDisplay :: LToken -> String -tokenErrorToDisplay (RealToken _ _) = error "tokenError with valid token" +tokenErrorToDisplay (RealToken _ ) = error "tokenError with valid token" tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ show t tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of L_Missing s -> s @@ -111,14 +111,14 @@ val s = do let lexed = parseMaybe eLex txt let stream = ETokenStream txt $ fromMaybe other lexed -- parseTest parseProgram stream - let progStruct = (runParser (evalStateT parseProgram def) "TEST" stream) + let progStruct = runParser parseProgram "TEST" stream case progStruct of Left _ -> putStrLn "error" Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (initialState p){typeChecking=True} in case qpr of (model, vds,st) -> do - print (maybe "" show model) + print (show model) putStrLn $ show vds printSymbolTable $ symbolTable st putStrLn $ show $ (regionInfo st) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index d638edcd19..486eefb9db 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -26,7 +26,7 @@ import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), De import Conjure.Language.Type ( TypeCheckerMode(..) ) import Conjure.Language.Domain ( Domain(..), Range(..) ) import Conjure.Language.NameGen ( NameGen, NameGenM, runNameGen ) -import Conjure.Language.Pretty ( pretty, prettyList, renderNormal, render, prParens ) +import Conjure.Language.Pretty import qualified Conjure.Language.ParserC as ParserC ( parseModel ) import Conjure.Language.ModelDiff ( modelDiffIO ) import Conjure.Rules.Definition ( viewAuto, Strategy(..) ) @@ -144,7 +144,11 @@ mainWithArgs IDE{..} = do json <- runNameGen () $ modelRepresentationsJSON essence2 liftIO $ putStrLn $ render lineWidth json | otherwise -> writeModel lineWidth ASTJSON Nothing essence2 -mainWithArgs Pretty{..} | outputFormat /= Plain = do +-- mainWithArgs Pretty{..} | outputFormat == Plain= do +-- (_,cts) <- liftIO $ pairWithContents essence +-- res <- prettyPrintWithChecks cts +-- liftIO $ putStrLn $ render lineWidth res +mainWithArgs Pretty{..} = do model0 <- if or [ s `isSuffixOf` essence | s <- [".param", ".eprime-param", ".solution", ".eprime.solution"] ] then do @@ -155,10 +159,6 @@ mainWithArgs Pretty{..} | outputFormat /= Plain = do |> (if normaliseQuantified then normaliseQuantifiedVariables else id) |> (if removeUnused then removeUnusedDecls else id) writeModel lineWidth outputFormat Nothing model1 -mainWithArgs Pretty{..} = do - (_,cts) <- liftIO $ pairWithContents essence - res <- prettyPrintWithChecks cts - liftIO $ putStrLn $ render lineWidth res mainWithArgs Diff{..} = join $ modelDiffIO diff --git a/src/Conjure/UI/TypeScript.hs b/src/Conjure/UI/TypeScript.hs index bf2a4a4a96..5740d58a05 100644 --- a/src/Conjure/UI/TypeScript.hs +++ b/src/Conjure/UI/TypeScript.hs @@ -111,19 +111,19 @@ import qualified Data.Aeson.TypeScript.Recursive as TS -- deriveTypeScript defaultOptions ''OpUnion -- deriveTypeScript defaultOptions ''OpXor -- deriveTypeScript defaultOptions ''Op - - - - - +-- -- +-- -- +-- -- +-- -- +-- -- -- deriveTypeScript defaultOptions ''AbstractPattern - +-- -- -- deriveTypeScript defaultOptions ''BinaryRelationAttr -- deriveTypeScript defaultOptions ''BinaryRelationAttrs -- deriveTypeScript defaultOptions ''IntTag -- deriveTypeScript defaultOptions ''AbstractLiteral -- deriveTypeScript defaultOptions ''Type - +-- -- -- deriveTypeScript defaultOptions ''Constant -- deriveTypeScript defaultOptions ''Decision -- deriveTypeScript defaultOptions ''FindOrGiven @@ -163,251 +163,251 @@ import qualified Data.Aeson.TypeScript.Recursive as TS -- getTypeScriptType :: TypeScript a => Proxy (Tree a) -> String -- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy (Tree a)) --- -- $( mconcat --- -- <$> traverse --- -- (deriveTypeScript defaultOptions) --- -- [''AbstractLiteral --- -- ,''AbstractPattern --- -- ,''AttrName --- -- ,''BinaryRelationAttr --- -- ,''BinaryRelationAttrs --- -- ,''Constant --- -- ,''Decision --- -- ,''Declaration --- -- ,''Domain --- -- ,''Expression --- -- ,''FindOrGiven --- -- ,''FunctionAttr --- -- ,''Generator --- -- ,''GeneratorOrCondition --- -- ,''HasRepresentation --- -- ,''InBubble --- -- ,''IntTag --- -- ,''JectivityAttr --- -- ,''LanguageVersion --- -- ,''Model --- -- ,''ModelInfo --- -- ,''MSetAttr --- -- ,''Name --- -- ,''Objective --- -- ,''OccurAttr --- -- ,''Op --- -- ,''OpActive --- -- ,''OpAllDiff --- -- ,''OpAllDiffExcept --- -- ,''OpAnd --- -- ,''OpApart --- -- ,''OpAtLeast --- -- ,''OpAtMost --- -- ,''OpAttributeAsConstraint --- -- ,''OpCatchUndef --- -- ,''OpDefined --- -- ,''OpDiv --- -- ,''OpDontCare --- -- ,''OpDotLeq --- -- ,''OpDotLt --- -- ,''OpEq --- -- ,''OpFactorial --- -- ,''OpFlatten --- -- ,''OpFreq --- -- ,''OpGCC --- -- ,''OpGeq --- -- ,''OpGt --- -- ,''OpHist --- -- ,''OpIff --- -- ,''OpImage --- -- ,''OpImageSet --- -- ,''OpImply --- -- ,''OpIn --- -- ,''OpIndexing --- -- ,''OpIntersect --- -- ,''OpInverse --- -- ,''OpLeq --- -- ,''OpLexLeq --- -- ,''OpLexLt --- -- ,''OpLt --- -- ,''OpMakeTable --- -- ,''OpMax --- -- ,''OpMin --- -- ,''OpMinus --- -- ,''OpMod --- -- ,''OpNegate --- -- ,''OpNeq --- -- ,''OpNot --- -- ,''OpOr --- -- ,''OpParticipants --- -- ,''OpParts --- -- ,''OpParty --- -- ,''OpPow --- -- ,''OpPowerSet --- -- ,''OpPred --- -- ,''OpPreImage --- -- ,''OpProduct --- -- ,''OpRange --- -- ,''OpRelationProj --- -- ,''OpRestrict --- -- ,''OpSlicing --- -- ,''OpSubsequence --- -- ,''OpSubset --- -- ,''OpSubsetEq --- -- ,''OpSubstring --- -- ,''OpSucc --- -- ,''OpSum --- -- ,''OpSupset --- -- ,''OpSupsetEq --- -- ,''OpTable --- -- ,''OpTildeLeq --- -- ,''OpTildeLt --- -- ,''OpTogether --- -- ,''OpToInt --- -- ,''OpToMSet --- -- ,''OpToRelation --- -- ,''OpToSet --- -- ,''OpTransform --- -- ,''OpTrue --- -- ,''OpTwoBars --- -- ,''OpUnion --- -- ,''OpXor --- -- ,''PartialityAttr --- -- ,''PartitionAttr --- -- ,''Range --- -- ,''ReferenceTo --- -- ,''Region --- -- ,''RelationAttr --- -- ,''SearchOrder --- -- ,''SequenceAttr --- -- ,''SetAttr --- -- ,''SizeAttr --- -- ,''Statement --- -- ,''Strategy --- -- ,''TrailRewrites --- -- ,''Tree --- -- ,''Type --- -- ] --- -- ) +$( mconcat + <$> traverse + (deriveTypeScript defaultOptions) + [''AbstractLiteral + ,''AbstractPattern + ,''AttrName + ,''BinaryRelationAttr + ,''BinaryRelationAttrs + ,''Constant + ,''Decision + ,''Declaration + ,''Domain + ,''Expression + ,''FindOrGiven + ,''FunctionAttr + ,''Generator + ,''GeneratorOrCondition + ,''HasRepresentation + ,''InBubble + ,''IntTag + ,''JectivityAttr + ,''LanguageVersion + ,''Model + ,''ModelInfo + ,''MSetAttr + ,''Name + ,''Objective + ,''OccurAttr + ,''Op + ,''OpActive + ,''OpAllDiff + ,''OpAllDiffExcept + ,''OpAnd + ,''OpApart + ,''OpAtLeast + ,''OpAtMost + ,''OpAttributeAsConstraint + ,''OpCatchUndef + ,''OpDefined + ,''OpDiv + ,''OpDontCare + ,''OpDotLeq + ,''OpDotLt + ,''OpEq + ,''OpFactorial + ,''OpFlatten + ,''OpFreq + ,''OpGCC + ,''OpGeq + ,''OpGt + ,''OpHist + ,''OpIff + ,''OpImage + ,''OpImageSet + ,''OpImply + ,''OpIn + ,''OpIndexing + ,''OpIntersect + ,''OpInverse + ,''OpLeq + ,''OpLexLeq + ,''OpLexLt + ,''OpLt + ,''OpMakeTable + ,''OpMax + ,''OpMin + ,''OpMinus + ,''OpMod + ,''OpNegate + ,''OpNeq + ,''OpNot + ,''OpOr + ,''OpParticipants + ,''OpParts + ,''OpParty + ,''OpPow + ,''OpPowerSet + ,''OpPred + ,''OpPreImage + ,''OpProduct + ,''OpRange + ,''OpRelationProj + ,''OpRestrict + ,''OpSlicing + ,''OpSubsequence + ,''OpSubset + ,''OpSubsetEq + ,''OpSubstring + ,''OpSucc + ,''OpSum + ,''OpSupset + ,''OpSupsetEq + ,''OpTable + ,''OpTildeLeq + ,''OpTildeLt + ,''OpTogether + ,''OpToInt + ,''OpToMSet + ,''OpToRelation + ,''OpToSet + ,''OpTransform + ,''OpTrue + ,''OpTwoBars + ,''OpUnion + ,''OpXor + ,''PartialityAttr + ,''PartitionAttr + ,''Range + ,''ReferenceTo + ,''Region + ,''RelationAttr + ,''SearchOrder + ,''SequenceAttr + ,''SetAttr + ,''SizeAttr + ,''Statement + ,''Strategy + ,''TrailRewrites + ,''Tree + ,''Type + ] + ) -- qq :: [TSDeclaration] -- qq = getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) --- tsDef :: IO () --- tsDef = putStrLn $ formatTSDeclarations $ mconcat --- [ getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) --- , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) --- , getTypeScriptDeclarations (Proxy :: Proxy AttrName) --- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) --- , getTypeScriptDeclarations (Proxy :: Proxy Constant) --- , getTypeScriptDeclarations (Proxy :: Proxy Decision) --- , getTypeScriptDeclarations (Proxy :: Proxy Declaration) --- , getTypeScriptDeclarations (Proxy :: Proxy (Domain () Expression)) --- , getTypeScriptDeclarations (Proxy :: Proxy Expression) --- , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) --- , getTypeScriptDeclarations (Proxy :: Proxy (FunctionAttr Expression)) --- , getTypeScriptDeclarations (Proxy :: Proxy Generator) --- , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) --- , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) --- , getTypeScriptDeclarations (Proxy :: Proxy InBubble) --- , getTypeScriptDeclarations (Proxy :: Proxy IntTag) --- , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) --- , getTypeScriptDeclarations (Proxy :: Proxy Model) --- , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) --- , getTypeScriptDeclarations (Proxy :: Proxy (MSetAttr Expression)) --- , getTypeScriptDeclarations (Proxy :: Proxy Name) --- , getTypeScriptDeclarations (Proxy :: Proxy Objective) --- , getTypeScriptDeclarations (Proxy :: Proxy (OccurAttr Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (Op Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpActive Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiff Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiffExcept Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpAnd Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpApart Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpAtLeast Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpAtMost Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpAttributeAsConstraint Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpCatchUndef Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpDefined Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpDiv Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpDontCare Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLeq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLt Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpEq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpFactorial Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpFlatten Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpFreq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpGCC Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpGeq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpGt Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpHist Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpIff Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpImage Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpImageSet Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpImply Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpIn Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpIndexing Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpIntersect Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpInverse Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpLeq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLeq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLt Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpLt Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpMax Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpMin Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpMinus Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpMod Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpNegate Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpNeq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpNot Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpOr Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpParticipants Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpParts Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpParty Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpPow Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpPowerSet Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpPred Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpPreImage Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpProduct Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpRange Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpRelationProj Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpRestrict Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSlicing Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsequence Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubset Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsetEq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSubstring Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSucc Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSum Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSupset Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpSupsetEq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTable Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLeq Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLt Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTogether Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpToInt Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpToMSet Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpToRelation Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpToSet Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTransform Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTrue Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpTwoBars Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpUnion Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy (OpXor Expression )) --- , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) --- , getTypeScriptDeclarations (Proxy :: Proxy (PartitionAttr Type)) --- , getTypeScriptDeclarations (Proxy :: Proxy (Range Type)) --- , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) --- , getTypeScriptDeclarations (Proxy :: Proxy Region) --- , getTypeScriptDeclarations (Proxy :: Proxy (RelationAttr Type)) --- , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) --- , getTypeScriptDeclarations (Proxy :: Proxy (SequenceAttr Type)) --- , getTypeScriptDeclarations (Proxy :: Proxy (SetAttr Type)) --- , getTypeScriptDeclarations (Proxy :: Proxy (SizeAttr Type)) --- , getTypeScriptDeclarations (Proxy :: Proxy Statement) --- , getTypeScriptDeclarations (Proxy :: Proxy Strategy) --- , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) --- , getTypeScriptDeclarations (Proxy :: Proxy Tree) --- , getTypeScriptDeclarations (Proxy :: Proxy Type) --- ] - tsDef :: IO () -tsDef = putStrLn "<>" \ No newline at end of file +tsDef = putStrLn $ formatTSDeclarations $ mconcat + [ getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) + , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) + , getTypeScriptDeclarations (Proxy :: Proxy AttrName) + , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) + , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) + , getTypeScriptDeclarations (Proxy :: Proxy Constant) + , getTypeScriptDeclarations (Proxy :: Proxy Decision) + , getTypeScriptDeclarations (Proxy :: Proxy Declaration) + , getTypeScriptDeclarations (Proxy :: Proxy (Domain () Expression)) + , getTypeScriptDeclarations (Proxy :: Proxy Expression) + , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) + , getTypeScriptDeclarations (Proxy :: Proxy (FunctionAttr Expression)) + , getTypeScriptDeclarations (Proxy :: Proxy Generator) + , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) + , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) + , getTypeScriptDeclarations (Proxy :: Proxy InBubble) + , getTypeScriptDeclarations (Proxy :: Proxy IntTag) + , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) + , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) + , getTypeScriptDeclarations (Proxy :: Proxy Model) + , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) + , getTypeScriptDeclarations (Proxy :: Proxy (MSetAttr Expression)) + , getTypeScriptDeclarations (Proxy :: Proxy Name) + , getTypeScriptDeclarations (Proxy :: Proxy Objective) + , getTypeScriptDeclarations (Proxy :: Proxy (OccurAttr Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (Op Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpActive Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiff Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiffExcept Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpAnd Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpApart Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpAtLeast Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpAtMost Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpAttributeAsConstraint Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpCatchUndef Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpDefined Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpDiv Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpDontCare Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLeq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLt Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpEq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpFactorial Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpFlatten Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpFreq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpGCC Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpGeq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpGt Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpHist Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpIff Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpImage Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpImageSet Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpImply Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpIn Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpIndexing Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpIntersect Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpInverse Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpLeq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLeq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLt Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpLt Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpMax Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpMin Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpMinus Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpMod Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpNegate Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpNeq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpNot Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpOr Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpParticipants Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpParts Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpParty Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpPow Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpPowerSet Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpPred Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpPreImage Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpProduct Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpRange Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpRelationProj Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpRestrict Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSlicing Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsequence Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSubset Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsetEq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSubstring Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSucc Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSum Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSupset Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpSupsetEq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTable Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLeq Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLt Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTogether Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpToInt Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpToMSet Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpToRelation Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpToSet Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTransform Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTrue Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpTwoBars Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpUnion Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy (OpXor Expression )) + , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) + , getTypeScriptDeclarations (Proxy :: Proxy (PartitionAttr Type)) + , getTypeScriptDeclarations (Proxy :: Proxy (Range Type)) + , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) + , getTypeScriptDeclarations (Proxy :: Proxy Region) + , getTypeScriptDeclarations (Proxy :: Proxy (RelationAttr Type)) + , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) + , getTypeScriptDeclarations (Proxy :: Proxy (SequenceAttr Type)) + , getTypeScriptDeclarations (Proxy :: Proxy (SetAttr Type)) + , getTypeScriptDeclarations (Proxy :: Proxy (SizeAttr Type)) + , getTypeScriptDeclarations (Proxy :: Proxy Statement) + , getTypeScriptDeclarations (Proxy :: Proxy Strategy) + , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) + -- , getTypeScriptDeclarations (Proxy :: Proxy Tree) + , getTypeScriptDeclarations (Proxy :: Proxy Type) + ] + +-- tsDef :: IO () +-- tsDef = putStrLn "<>" \ No newline at end of file diff --git a/src/exec/Main.hs b/src/exec/Main.hs index bf1a6ddbe2..576aa10a08 100644 --- a/src/exec/Main.hs +++ b/src/exec/Main.hs @@ -3,10 +3,10 @@ module Main where import Conjure.Prelude import Conjure.UI ( UI(..), ui ) import Conjure.UI.MainHelper ( mainWithArgs ) -import Conjure.Language.Pretty ( pretty ) +import Conjure.Language.Pretty import Conjure.Language.Type ( TypeCheckerMode(..) ) import Conjure.UserError ( userErr1 ) -import Conjure.Language.Pretty ( renderWide ) + import Conjure.Language.NameGen ( runNameGen ) -- base diff --git a/src/test/Conjure/Custom.hs b/src/test/Conjure/Custom.hs index fa54ed16ee..e6eb22381b 100644 --- a/src/test/Conjure/Custom.hs +++ b/src/test/Conjure/Custom.hs @@ -4,7 +4,7 @@ module Conjure.Custom ( tests ) where -- conjure import Conjure.Prelude -import Conjure.Language.Pretty ( pretty, (<++>), renderNormal ) +import Conjure.Language.Pretty import Conjure.ModelAllSolveAll ( TestTimeLimit(..) ) -- tasty diff --git a/src/test/Conjure/ParsePrint.hs b/src/test/Conjure/ParsePrint.hs index 70650e6ef9..842420d2c9 100644 --- a/src/test/Conjure/ParsePrint.hs +++ b/src/test/Conjure/ParsePrint.hs @@ -6,7 +6,7 @@ module Conjure.ParsePrint (tests) where import Conjure.Language.Definition (Model) import Conjure.Language.NameGen (runNameGen) -import Conjure.Language.Pretty (pretty, renderNormal, (<++>)) +import Conjure.Language.Pretty import Conjure.Language.Type (TypeCheckerMode (..)) import Conjure.Prelude import Conjure.UI (OutputFormat (..)) diff --git a/src/test/Conjure/TypeCheckAll.hs b/src/test/Conjure/TypeCheckAll.hs index c7e7fe637c..3c9401d73b 100644 --- a/src/test/Conjure/TypeCheckAll.hs +++ b/src/test/Conjure/TypeCheckAll.hs @@ -3,7 +3,7 @@ module Conjure.TypeCheckAll ( tests ) where -- conjure import Conjure.Prelude import Conjure.Language.NameGen ( runNameGen ) -import Conjure.Language.Pretty ( renderNormal ) +import Conjure.Language.Pretty import Conjure.Language.Type ( TypeCheckerMode(..) ) import Conjure.UI.IO import Conjure.UI.TypeCheck From d65b0d909f3ed10d1066dfe52be6668414e94cb9 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 12:08:59 +0000 Subject: [PATCH 121/378] Adding 9.2.5 support as well --- Makefile | 4 ++-- conjure-cp.cabal | 28 ++++------------------------ etc/hs-deps/stack-9.2.yaml | 11 +++++++++++ 3 files changed, 17 insertions(+), 26 deletions(-) create mode 100644 etc/hs-deps/stack-9.2.yaml diff --git a/Makefile b/Makefile index 506381eaf6..13256acce1 100644 --- a/Makefile +++ b/Makefile @@ -14,8 +14,8 @@ export LIMIT_TIME?=10 install: @echo "Using GHC version ${GHC_VERSION} (major version)" @echo "Set the environment variable GHC_VERSION to change this location." - @echo "For example: \"GHC_VERSION=8.4 make install\"" - @echo "Supported version: 9.0" + @echo "For example: \"GHC_VERSION=9.2 make install\"" + @echo "Supported version: 9.0 , 9.2" @echo "" @echo "Installing executables to ${BIN_DIR}" @echo "Add this directory to your PATH." diff --git a/conjure-cp.cabal b/conjure-cp.cabal index e07b5911c4..1ed50194c3 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -264,7 +264,7 @@ Library -- changes in newline handling , cmdargs >= 0.10.14 -- a bunch of improvements in 0.5.8.1 - , containers >= 0.5.8.1 + , containers , data-default , directory , filepath @@ -307,28 +307,10 @@ Library , ansi-terminal >= 0.8.2 , timeit >= 2.0 , primes >= 0.2.1.0 - -- , statistics >= 0.15.2.0 , parser-combinators - - if impl(ghc == 7.8.*) - build-depends: template-haskell == 2.9.* - if impl(ghc == 7.10.*) - build-depends: template-haskell == 2.10.* - if impl(ghc == 8.0.*) - build-depends: template-haskell == 2.11.* - ghc-options: -Wno-redundant-constraints - if impl(ghc == 8.2.*) - build-depends: template-haskell == 2.12.* - if impl(ghc == 8.4.*) - build-depends: template-haskell == 2.13.* - if impl(ghc == 8.6.*) - build-depends: template-haskell == 2.14.* - if impl(ghc == 8.8.*) - build-depends: template-haskell == 2.15.* - if impl(ghc == 8.10.*) - build-depends: template-haskell == 2.16.* - if impl(ghc == 9.0.*) - build-depends: template-haskell == 2.17.* + , lsp + , lens + , template-haskell default-extensions: FlexibleContexts @@ -378,7 +360,6 @@ Executable conjure OverloadedStrings ScopedTypeVariables TypeOperators - NoMonadFailDesugaring ViewPatterns ghc-options: -O2 @@ -441,7 +422,6 @@ Test-Suite conjure-testing OverloadedStrings ScopedTypeVariables TypeOperators - NoMonadFailDesugaring ViewPatterns ghc-options: -fwarn-incomplete-patterns diff --git a/etc/hs-deps/stack-9.2.yaml b/etc/hs-deps/stack-9.2.yaml new file mode 100644 index 0000000000..0cb5008d95 --- /dev/null +++ b/etc/hs-deps/stack-9.2.yaml @@ -0,0 +1,11 @@ +resolver: lts-20.2 +packages: +- '.' +system-ghc: true +install-ghc: true +extra-deps: +- megaparsec-9.3.0 +- aeson-typescript-0.4.0.0 +- shelly-1.10.0 +- lsp-1.6.0.0 +- co-log-core-0.3.2.0 From 657fd5acf0acd32917a78be91202091975c199d8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 13:17:42 +0000 Subject: [PATCH 122/378] Testing cleanup --- src/Conjure/Language/NewLexer.hs | 1 + src/Conjure/Language/Parser.hs | 12 ++++++------ src/Conjure/UI/ErrorDisplay.hs | 20 +++++++++++++++----- src/Conjure/UI/IO.hs | 2 +- src/test/Conjure/ParserFuzz.hs | 1 - 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs index c141b2acf0..bbf569d725 100644 --- a/src/Conjure/Language/NewLexer.hs +++ b/src/Conjure/Language/NewLexer.hs @@ -7,6 +7,7 @@ module Conjure.Language.NewLexer ( ETok(..), Offsets(..), + Reformable(..), prettySplitComments, eLex, reformList, diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 7f0444d7b8..9b57907bce 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -71,14 +71,14 @@ lexAndParse parse t = do lr <- either (Left . LexErr) Right $ L.runLexer t either (Left . ParserError ) Right $ runASTParser parse lr -runPipeline :: Flattenable a =>Pipeline a b -> Text -> Either PipelineError b -runPipeline (parse,val,tc) txt = do +runPipeline :: Flattenable a =>Pipeline a b -> (Maybe FilePath,Text) -> Either PipelineError b +runPipeline (parse,val,tc) (fp,txt) = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult let x = V.runValidator (val parseResult) (V.initialState parseResult){V.typeChecking= tc} case x of (m, ds,_) | not $ any V.isError ds -> Right m - (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves txt) + (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves fp txt) -- Validator (Just res) [] -> Right res -- Validator _ xs -> Left $ ValidatorError xs @@ -114,7 +114,7 @@ parseModel = (parseProgram, V.validateModel,True) parseIO :: (MonadFailDoc m, Flattenable i) => Pipeline i a -> String -> m a parseIO p s = do - case runPipeline p $ T.pack s of + case runPipeline p $ (Just "IO",T.pack s) of Left err -> failDoc $ pretty $ show err Right x -> return x @@ -1012,8 +1012,8 @@ parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAn -- data ParserState = ParserState { enumDomains :: [Name] } -- type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a -runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either (Doc) a -runLexerAndParser p file inp = case runPipeline p inp of +runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a +runLexerAndParser p file inp = case runPipeline p (Just file,inp) of Left pe -> Left $ "Parser error in file:" <+> pretty file <+> pretty ("Error is:\n" ++ show pe) Right a -> Right a -- ls <- runLexer inp diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 550160d772..ed862c5bc0 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -59,9 +59,9 @@ displayError x = case x of WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) KindError a b -> show $ "Tried to use a " <> pretty b <> " where " <> pretty a <> " was expected" -showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Text -> String -showDiagnosticsForConsole errs text - = case runParser (captureErrors errs) "Errors" text of +showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Maybe String -> Text -> String +showDiagnosticsForConsole errs fileName text + = case runParser (captureErrors errs) (fromMaybe "Errors" fileName) text of Left peb -> errorBundlePretty peb Right _ -> "No printable errors from :" ++ (show . length $ errs) @@ -73,7 +73,17 @@ printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs t printEntry (a,(r,c,t)) = putStrLn $ show a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" captureErrors :: [ValidatorDiagnostic] -> Parser () -captureErrors = (mapM_ captureError) . collapseSkipped +captureErrors = (mapM_ captureError) . collapseSkipped . removeAmbiguousTypeWarning + +--Remove these warnings from a console print of errors as they are just clutter +removeAmbiguousTypeWarning :: [ValidatorDiagnostic] -> [ValidatorDiagnostic] +removeAmbiguousTypeWarning = filter ( + \(ValidatorDiagnostic _ x)-> + case x of + Warning AmbiguousTypeWarning->False; + _->True + ) + collapseSkipped :: [ValidatorDiagnostic] -> [ValidatorDiagnostic] collapseSkipped [] = [] @@ -122,7 +132,7 @@ val s = do putStrLn $ show vds printSymbolTable $ symbolTable st putStrLn $ show $ (regionInfo st) - putStrLn $ showDiagnosticsForConsole vds txt + putStrLn $ showDiagnosticsForConsole vds Nothing txt -- putStrLn $ show qpr diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 82e6cf84b8..f12eca7034 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -54,7 +54,7 @@ readASTFromFile fp = do (validateModel v) (initialState v) {typeChecking = False} of (_, vds, _) | any isError vds -> pure v - (_,vds,_) -> failDoc $ "Cannot pretty print a model with errors" <+> pretty (showDiagnosticsForConsole vds contents) + (_,vds,_) -> failDoc $ "Cannot pretty print a model with errors" <+> pretty (showDiagnosticsForConsole vds (Just fp) contents) diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 72ae4c5fa3..32d6113e86 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -21,7 +21,6 @@ import Data.ByteString.Char8(hPutStrLn, pack) import Conjure.Language.AST.Reformer (Flattenable(flatten)) import Data.Algorithm.Diff (getDiff, getGroupedDiff) import Data.Algorithm.DiffOutput (ppDiff) -import Data.ByteString (hPutStrLn) import GHC.IO.Handle.FD (stderr) From 9a212eaf412345526da2a7b138c441d7ffd6fc25 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 13:24:43 +0000 Subject: [PATCH 123/378] TSdef test update --- tests/custom/tsdef/stdout.expected | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tests/custom/tsdef/stdout.expected b/tests/custom/tsdef/stdout.expected index 0da493e1d9..4f07cc6b42 100644 --- a/tests/custom/tsdef/stdout.expected +++ b/tests/custom/tsdef/stdout.expected @@ -131,7 +131,7 @@ type Decision = IDecision; interface IDecision { dDescription: string[]; - dNumOptions?: number; + dNumOptions: number | null; dDecision: number; } @@ -1420,14 +1420,7 @@ interface ITrailRewrites { trAfter: string[]; } -type Tree = ITree; - -interface ITree { - rootLabel: T; - subForest: Tree[]; -} - -type Type = ITypeAny | ITypeBool | ITypeInt | ITypeEnum | ITypeUnnamed | ITypeTuple | ITypeRecord | ITypeVariant | ITypeList | ITypeMatrix | ITypeSet | ITypeMSet | ITypeFunction | ITypeSequence | ITypeRelation | ITypePartition; +type Type = ITypeAny | ITypeBool | ITypeInt | ITypeEnum | ITypeUnnamed | ITypeTuple | ITypeRecord | ITypeRecordMember | ITypeVariant | ITypeVariantMember | ITypeList | ITypeMatrix | ITypeSet | ITypeMSet | ITypeFunction | ITypeSequence | ITypeRelation | ITypePartition; interface ITypeAny { tag: "TypeAny"; @@ -1462,11 +1455,21 @@ interface ITypeRecord { contents: [Name, Type][]; } +interface ITypeRecordMember { + tag: "TypeRecordMember"; + contents: [Name, [Name, Type][]]; +} + interface ITypeVariant { tag: "TypeVariant"; contents: [Name, Type][]; } +interface ITypeVariantMember { + tag: "TypeVariantMember"; + contents: [Name, [Name, Type][]]; +} + interface ITypeList { tag: "TypeList"; contents: Type; From 6626afeb0909740d6cc0616e21f8b62bcf3554e0 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 16:45:50 +0000 Subject: [PATCH 124/378] Fixing tests --- src/Conjure/Language/Expression/OpTypes.hs | 2 +- src/Conjure/Language/Validator.hs | 21 ++++++++++++--------- src/Conjure/UI/ErrorDisplay.hs | 6 +++--- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Conjure/Language/Expression/OpTypes.hs b/src/Conjure/Language/Expression/OpTypes.hs index 164695c144..02ac7ad7a6 100644 --- a/src/Conjure/Language/Expression/OpTypes.hs +++ b/src/Conjure/Language/Expression/OpTypes.hs @@ -1,4 +1,4 @@ -module Conjure.Language.Expression.OpTypes where +module Conjure.Language.Expression.OpTypes () where import Conjure.Language.Lexemes (Lexeme) import Conjure.Language.Expression.Op.Internal.Common (Type (..)) import Conjure.Prelude diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 4ec0abc1b8..9e534fd54f 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -394,8 +394,8 @@ todoTypeAny = typeAs TypeAny validateModel :: ProgramTree -> ValidatorS Model validateModel model = do - sts <- validateProgramTree (statements model) langVersion <- validateLanguageVersion $ langVersionInfo model + sts <- validateProgramTree (statements model) return $ Model (fromMaybe def langVersion) sts def @@ -405,8 +405,6 @@ validateProgramTree sts = do return $ concat q -isValidLanguageName :: Text -> Bool -isValidLanguageName t = T.toLower t `elem` ["essence","essence'"] validateLanguageVersion :: Maybe LangVersionNode -> Validator LanguageVersion validateLanguageVersion Nothing = return $ pure $ LanguageVersion "Essence" [1,3] @@ -414,7 +412,7 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do setContextFrom lv l1 `isA` TtKeyword name <- validateIdentifier n - unless (isValidLanguageName name) (raiseError $symbolRegion n SyntaxError "Not a valid language name") + checkLanguageName name nums <- catMaybes <$> validateSequence_ getNum v return . pure $ LanguageVersion @@ -427,6 +425,11 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do case c' of (LIntLiteral x) -> return . pure $ fromInteger x _ -> invalid $ c InternalError + checkLanguageName (nm) | T.toLower nm == "essence" = pure () + | T.toLower nm == "essence'" = do + raiseError (symbolRegion lv /!\ UnclassifiedWarning "Essence prime file detected, type checking is off") + modify (\s->s{typeChecking=False}) + | otherwise = (raiseError $ symbolRegion n SyntaxError "Not a valid language name") validateStatement :: StatementNode -> ValidatorS [Statement] @@ -1642,7 +1645,7 @@ raiseError e = tell [e] raiseTypeError :: ValidatorDiagnostic -> ValidatorS () raiseTypeError e = do tc <- gets typeChecking - unless (not tc) $ raiseError e + when tc $ raiseError e makeTupleLiteral :: [Typed Expression] -> ValidatorS (Typed Expression) makeTupleLiteral members = do let memberTypes = unzip $ map typeSplit members @@ -2353,7 +2356,7 @@ functionOps l = case l of (_,TypeFunction gi go) -> (gi,go) _ -> (TypeAny,TypeAny) a' <- unifyTypesFailing (TypeFunction fIn fOut) (r1,a) - b' <- unifyTypesFailing (TypeFunction fIn fOut) (r2,b) + b' <- unifyTypesFailing (TypeFunction fOut fIn) (r2,b) return $ if null a' || null b' then Nothing else Just () setPartArgs :: SArg -> SArg -> Validator () setPartArgs (r1,a) (r2,b) = do @@ -2445,9 +2448,9 @@ functionOps l = case l of TypeAny -> return $ Just TypeAny TypeFunction a _ -> return $Just a TypeSequence _ -> return $Just tInt - _ -> (return Nothing) <* (raiseTypeError $ (r1 ComplexTypeError "Function or Sequence" t1)) + _ -> Nothing <$ (raiseTypeError $ (r1 ComplexTypeError "Function or Sequence" t1)) case from of - Just f -> unifyTypes f r2 >> (return $ pure ()) + Just f -> unifyTypes f r2 >> return (pure ()) Nothing -> return Nothing sumArgs :: SArg -> Validator () @@ -2463,7 +2466,7 @@ functionOps l = case l of case t of TypeAny -> return $ pure () TypeInt TagInt -> return $ pure () - _ -> return Nothing <* raiseTypeError (r ComplexTypeError "Integer elements" t) + _ -> Nothing <$ raiseTypeError (r ComplexTypeError "Integer elements" t) funcSeq :: SArg -> Validator () funcSeq (r,typeOf_->t') = case t' of TypeAny -> return $ pure () diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index ed862c5bc0..65dbf7f9bb 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -40,7 +40,7 @@ tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of _ -> T.unpack $ lexemeText l displayWarning :: WarningType -> String -displayWarning (UnclassifiedWarning txt) = "Warning" ++ T.unpack txt +displayWarning (UnclassifiedWarning txt) = "Warning: " ++ T.unpack txt displayWarning AmbiguousTypeWarning = "Ambiguous type occurred" displayError :: ErrorType -> String @@ -49,8 +49,8 @@ displayError x = case x of SyntaxError txt -> "Syntax Error: " ++ T.unpack txt SemanticError txt -> "Error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt - TypeError expected got -> "Type error: Expected: " ++ show (pretty expected) ++ " Got: " ++ show (pretty got) - ComplexTypeError msg ty -> "Type error: Expected:" ++ show msg ++ " got " ++ (show $ pretty ty) + TypeError expected got -> "Type error:\n\tExpected: " ++ show (pretty expected) ++ "\n\tGot: " ++ show (pretty got) + ComplexTypeError msg ty -> "Type error:\n\tExpected:" ++ show msg ++ "\n\tGot " ++ (show $ pretty ty) SkippedTokens -> "Skipped tokens" UnexpectedArg -> "Unexpected argument" MissingArgsError expected got -> "Insufficient args, expected " ++ (show expected) ++ " got " ++ (show got) From 7e5477fb97210e99248fb00218ca7e7b822c20d8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 16:53:12 +0000 Subject: [PATCH 125/378] Style fix --- src/Conjure/UI/ErrorDisplay.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 65dbf7f9bb..1812f8685c 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -50,7 +50,7 @@ displayError x = case x of SemanticError txt -> "Error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt TypeError expected got -> "Type error:\n\tExpected: " ++ show (pretty expected) ++ "\n\tGot: " ++ show (pretty got) - ComplexTypeError msg ty -> "Type error:\n\tExpected:" ++ show msg ++ "\n\tGot " ++ (show $ pretty ty) + ComplexTypeError msg ty -> "Type error:\n\tExpected:" ++ show msg ++ "\n\tGot: " ++ (show $ pretty ty) SkippedTokens -> "Skipped tokens" UnexpectedArg -> "Unexpected argument" MissingArgsError expected got -> "Insufficient args, expected " ++ (show expected) ++ " got " ++ (show got) From 796eb9646c8348f16912a110bc470ce1edb4edbc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 18:23:11 +0000 Subject: [PATCH 126/378] Test fixes and result updates --- src/Conjure/Language/AST/ASTParser.hs | 4 +- src/Conjure/Language/Validator.hs | 19 +++++----- .../product-type-error/stderr.expected | 19 ++++++++-- .../basic/enum-spaces-error/stderr.expected | 12 +++--- .../allDiff-type-error/stderr.expected | 11 +++++- .../matrices/matrix-forAll/stderr.expected | 21 +++++++++-- .../matrix-index-error/stderr.expected | 24 ++++++++---- .../hist-type-error/stderr.expected | 11 +++++- .../set-apart/stderr.expected | 11 +++++- .../set-participant/stderr.expected | 11 +++++- .../set-parts-together/stderr.expected | 37 +++++++++++++------ .../basic/record-type-error/stderr.expected | 17 +++++---- .../in-type-error-02/stderr.expected | 11 +++++- .../in-type-error-03/stderr.expected | 11 +++++- .../tuple-addition-error/stderr.expected | 21 +++++++++-- .../tuples/tuple-bounds-error/stderr.expected | 9 ++++- .../toInt-error/stderr.expected | 17 +++++---- .../allDiff-type-error/stderr.expected | 11 +++++- .../stderr.expected | 19 +++++++++- .../stderr.expected | 19 +++++++++- .../and-type-error/stderr.expected | 19 ++++++++-- .../apart-type-error/stderr.expected | 19 +++++++++- .../defined-type-error/stderr.expected | 19 +++++++++- .../factorial-type-error/stderr.expected | 19 +++++++++- .../flatten-type-error-01/stderr.expected | 13 +++++-- .../flatten-type-error-02/stderr.expected | 21 +++++++++-- .../freq-type-error/stderr.expected | 14 ++++--- .../hist-type-error/stderr.expected | 19 +++++++++- .../in-type-error-01/stderr.expected | 14 ++++--- .../in-type-error-02/stderr.expected | 11 +++++- .../inverse-type-error/stderr.expected | 11 +++++- .../max-type-error-01/stderr.expected | 13 +++++-- .../max-type-error-02/stderr.expected | 13 +++++-- .../min-type-error-01/stderr.expected | 13 +++++-- .../min-type-error-02/stderr.expected | 13 +++++-- .../negate-type-error/stderr.expected | 11 +++++- .../not-type-error/stderr.expected | 14 ++++--- .../or-type-error/stderr.expected | 13 +++++-- .../participants-type-error/stderr.expected | 11 +++++- .../parts-type-error/stderr.expected | 13 +++++-- .../powerSet-type-error/stderr.expected | 19 +++++++++- .../pred-type-error/stderr.expected | 11 +++++- .../product-type-error-01/stderr.expected | 13 +++++-- .../product-type-error-02/stderr.expected | 13 +++++-- .../range-type-error/stderr.expected | 11 +++++- .../restrict-type-error/stderr.expected | 11 +++++- .../subsequence-type-error/stderr.expected | 23 +++++++++--- .../substring-type-error/stderr.expected | 23 +++++++++--- .../succ-type-error/stderr.expected | 11 +++++- .../sum-type-error-01/stderr.expected | 13 +++++-- .../sum-type-error-02/stderr.expected | 13 +++++-- .../toInt-type-error/stderr.expected | 14 ++++--- .../xor-type-error/stderr.expected | 13 +++++-- 53 files changed, 600 insertions(+), 196 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index cacb57c321..a423b016e6 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -112,11 +112,11 @@ parseDeclaration = declaration :: (Null a,Show a) => (SToken -> Sequence a -> b) -> Lexeme -> Parser a -> Parser b declaration c t p = do l <- need t - seq <- commaList1 p + seq <- option (Seq []) (commaList1 p) return $ c l seq parseLetting :: Parser LettingStatementNode -parseLetting = do +parseLetting = try $ do names <- commaList1 parseIdentifier lBe <- want L_be guard $ not (isMissing names && isMissing lBe) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 9e534fd54f..cf8260b914 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -514,6 +514,7 @@ validateDeclarationStatement stmt = do where validateStatementSeq s v l = wrapRegion stmt stmt (s) $ do decls <- validateSequence_ v l + when (null decls) $ raiseError (symbolRegion stmt SemanticError "Declaration without any members") return $ concat decls validateGiven :: GivenStatementNode -> ValidatorS [Declaration] @@ -2193,7 +2194,7 @@ functionOps l = case l of off <- case intOut "" (untype d) of Just (fromInteger->a :: Integer) | a > 0 -> return $ Just a _ -> invalid $ r1 CustomError "1st arg must be a constant positive int" - let ref = map (const TypeList) [1..fromMaybe 1 off] + let ref = map (const TypeList) [0..fromMaybe 1 off] let ref' = foldr id TypeAny ref r <- unifyTypesFailing ref' b return $ if null off || null r then Nothing else Just () @@ -2371,10 +2372,10 @@ functionOps l = case l of partyType :: Maybe Type ->Maybe Type -> Maybe Type partyType a b = do - let at' = case a of + let at' = fromMaybe TypeAny a + let bt = case b of Just (TypePartition t) -> t _ -> TypeAny - let bt = fromMaybe TypeAny b return $ TypeSet $ mostDefinedS [at',bt] partsType :: Maybe (Type) -> Maybe Type partsType (Just (TypePartition a)) = Just $ TypeSet $ TypeSet a @@ -2423,11 +2424,11 @@ functionOps l = case l of activeArgs (r,(typeOf_->t)) _ = invalid $ r ComplexTypeError "Variant " t typeToSet :: Maybe Type -> Maybe Type - typeToSet (Just t) = TypeSet <$> tMembers t - typeToSet _ = Nothing + typeToSet (Just t) = Just . TypeSet $ fromMaybe TypeAny (tMembers t) + typeToSet _ = Just $ TypeSet TypeAny typeToMSet :: Maybe Type -> Maybe Type - typeToMSet (Just t) = TypeMSet <$> tMembers t - typeToMSet _ = Nothing + typeToMSet (Just t) = Just . TypeMSet $ fromMaybe TypeAny (tMembers t) + typeToMSet _ = Just $ TypeMSet TypeAny typeToRelation :: Maybe Type -> Maybe Type typeToRelation (Just(TypeFunction i j)) = Just $ TypeRelation [i,j] typeToRelation (Just(TypeAny)) = Just $ TypeRelation [TypeAny,TypeAny] @@ -2515,13 +2516,13 @@ functionOps l = case l of flattenType :: Maybe Int -> Maybe Type -> Maybe Type -flattenType (Just n) (Just a ) | n < 0 = Just a +flattenType (Just n) (Just a ) | n < 0 = Just $ TypeList a flattenType (Just n) (Just (TypeList m) )= flattenType (Just (n-1)) (Just (m)) flattenType (Just n) (Just (TypeMatrix _ m) )= flattenType (Just (n-1)) (Just (m)) flattenType Nothing (Just (TypeMatrix _ m)) = flattenType Nothing (Just (m)) flattenType Nothing (Just (TypeList m)) = flattenType Nothing (Just (m)) -flattenType Nothing (Just (TypeAny)) = Just $ TypeList TypeAny +flattenType Nothing (Just (t)) = Just $ TypeList t flattenType _ _ = Just $ TypeList TypeAny validateFuncOp :: Lexeme -> [RegionTagged (Kind,Expression)] -> ValidatorS (Typed Expression) diff --git a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected index b204c62ef7..c9ac90919b 100644 --- a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected @@ -1,5 +1,16 @@ Error: - In a 'such that' statement: x = product(false) - Error: - Type error in product(false) - The argument has type: bool + Parser error in file: product.essence Error is: +ValidatorError product.essence:2:23: + | +2 | such that x = product(false, true) + | ^^^^^ +Type error: + Expected:"Matrix or Set" + Got: bool + +product.essence:2:30: + | +2 | such that x = product(false, true) + | ^^^^ +Unexpected argument + diff --git a/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected b/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected index 19b771acb9..def01c9f84 100644 --- a/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected @@ -1,6 +1,8 @@ Error: - enum-spaces.essence:2:43: -unexpected o -expecting comma or } - letting numbers be new type enum {one, tw o, three} - ^ + Parser error in file: enum-spaces.essence Error is: +ValidatorError enum-spaces.essence:2:43: + | +2 | letting numbers be new type enum {one, tw o, three} + | ^ +Missing , + diff --git a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected index ae9d0db7da..3a0b69d65d 100644 --- a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = allDiff(false) - Error: Type error in allDiff(false) + Parser error in file: allDiff-type-error.essence Error is: +ValidatorError allDiff-type-error.essence:3:23: + | +3 | such that a = allDiff(false) + | ^^^^^ +Type error: + Expected:"Matrix or list" + Got: bool + diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected index b4ee8020b5..a4994c5c8b 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected @@ -1,5 +1,18 @@ Error: - In a 'such that' statement: b = and([i = i * i | i <- a]) - Error: - Type error in i * i - The argument has type: matrix indexed by [int, int] of int + Parser error in file: matrix-forAll.essence Error is: +ValidatorError matrix-forAll.essence:6:33: + | +6 | such that b = forAll i in a . i=i*i + | ^ +Type error: + Expected:"Number or Enum" + Got: matrix indexed by [int] of int + +matrix-forAll.essence:6:35: + | +6 | such that b = forAll i in a . i=i*i + | ^ +Type error: + Expected:"Number or Enum" + Got: matrix indexed by [int] of int + diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected index 32cb21b2c6..247afb4ed2 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected @@ -1,8 +1,18 @@ Error: - In a 'such that' statement: b = (a[1, true] = 1) - Error: - Indexing with inappropriate type: - The expression: a[1] - Indexing: a - Expected type of index: bool - Actual type of index : int + Parser error in file: matrix-index-error.essence Error is: +ValidatorError matrix-index-error.essence:5:18: + | +5 | such that b = (a[1][true] = 1) $ swapped bool and int indices + | ^ +Type error: + Expected: bool + Got: int + +matrix-index-error.essence:5:21: + | +5 | such that b = (a[1][true] = 1) $ swapped bool and int indices + | ^^^^ +Type error: + Expected: int + Got: bool + diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected index 2a7af631a5..40a58196c7 100644 --- a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: h = hist(s) - Error: Type error in hist(s) + Parser error in file: hist-type-error.essence Error is: +ValidatorError hist-type-error.essence:3:20: + | +3 | such that h = hist(s) + | ^ +Type error: + Expected:"Matrix, List or MSet" + Got: set of int + diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected index d14e6d50c9..4534d9928f 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = apart({2, 4, 6, 8, 9}, s) - Error: Type error in apart({2, 4, 6, 8, 9}, s) + Parser error in file: set-apart.essence Error is: +ValidatorError set-apart.essence:4:38: + | +4 | such that a = apart({2, 4, 6, 8, 9}, s) + | ^ +Type error: + Expected: partition from int + Got: set of int + diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected index 1d53b0b630..b4741df866 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = participants(s) - Error: Type error in participants(s) + Parser error in file: set-participant.essence Error is: +ValidatorError set-participant.essence:4:28: + | +4 | such that a = participants(s) + | ^ +Type error: + Expected: partition from ? + Got: set of int + diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected index 283fd608a4..7efd2e8409 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected @@ -1,11 +1,26 @@ -Error 1: - In a 'such that' statement: b = ({{2, 4}, {6, 8, 9}} = parts(s)) - Error: - Type error in parts(s) - The argument has type: set of set of int -Error 2: - In a 'such that' statement: c = together({2, 6}, s) - Error: Type error in together({2, 6}, s) -Error 3: - In a 'such that' statement: d = together({2, 4}, s) - Error: Type error in together({2, 4}, s) +Error: + Parser error in file: set-parts-together.essence Error is: +ValidatorError set-parts-together.essence:4:42: + | +4 | such that b = ({{2,4},{6, 8, 9}} = parts(s)) + | ^ +Type error: + Expected: partition from ? + Got: set of set of int + +set-parts-together.essence:6:30: + | +6 | such that c = together({2,6},s) + | ^ +Type error: + Expected: partition from int + Got: set of set of int + +set-parts-together.essence:8:30: + | +8 | such that d = together({2,4},s) + | ^ +Type error: + Expected: partition from int + Got: set of set of int + diff --git a/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected index 84bf2df36d..65f5ae4b78 100644 --- a/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected @@ -1,9 +1,10 @@ Error: - In a 'such that' statement: x[a] = true - Error: - When type checking: x[a] = true - Cannot unify the types of the following. - lhs : x[a] - type of lhs: int - rhs : true - type of rhs: bool + Parser error in file: record.essence Error is: +ValidatorError record.essence:3:18: + | +3 | such that x[a] = true + | ^^^^ +Type error: + Expected: int + Got: bool + diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected index 33484c1be7..413de2f612 100644 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = 1 in (1, 1, 2, 3) - Error: Type error in 1 in (1, 1, 2, 3) + Parser error in file: in.essence Error is: +ValidatorError in.essence:2:21: + | +2 | such that a = (1 in (1, 1, 2, 3)) + | ^^^^^^^^^^^^ +Type error: + Expected:"Container of int" + Got: (int, int, int, int) + diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected index 6e962ae8a7..9688fc7398 100644 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = 1 in true - Error: Type error in 1 in true + Parser error in file: in.essence Error is: +ValidatorError in.essence:2:21: + | +2 | such that a = (1 in true) + | ^^^^ +Type error: + Expected:"Container of int" + Got: bool + diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected index 88bdd9af61..4588736afc 100644 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected @@ -1,5 +1,18 @@ Error: - In a letting statement: letting z be x + y - Error: - Type error in x + y - The argument has type: matrix indexed by [int] of (int, int) + Parser error in file: addition.essence Error is: +ValidatorError addition.essence:4:14: + | +4 | letting z be x + y + | ^ +Type error: + Expected:"Number or Enum" + Got: (int, int) + +addition.essence:4:18: + | +4 | letting z be x + y + | ^ +Type error: + Expected:"Number or Enum" + Got: (int, int) + diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected index 7da43d9a7b..67be433825 100644 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected @@ -1,3 +1,8 @@ Error: - In a 'such that' statement: b = a[0] - Error: Out of bounds tuple indexing: a[0] + Parser error in file: bound.essence Error is: +ValidatorError bound.essence:4:17: + | +4 | such that b = a[0] + | ^ +Error: Tuple index 0 out of bounds + diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected index a3c7255c98..40f5896e20 100644 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected @@ -1,9 +1,10 @@ Error: - In a 'such that' statement: b = toInt(a) - Error: - When type checking: b = toInt(a) - Cannot unify the types of the following. - lhs : b - type of lhs: bool - rhs : toInt(a) - type of rhs: int + Parser error in file: toInt-error.essence Error is: +ValidatorError toInt-error.essence:3:15: + | +3 | such that b = toInt(a) + | ^^^^^^^^ +Type error: + Expected: bool + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected index c18bb6a331..f0200ed5b7 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: b = allDiff(5) - Error: Type error in allDiff(5) + Parser error in file: allDiff-type-error.essence Error is: +ValidatorError allDiff-type-error.essence:2:23: + | +2 | such that b = allDiff(5) + | ^ +Type error: + Expected:"Matrix or list" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected index 7a3c29152f..d643551619 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = alldifferent_except(1, {1, 3, 4, 5}) - Error: Type error in alldifferent_except(1, {1, 3, 4, 5}) + Parser error in file: allDiffExcept-type-error.essence Error is: +ValidatorError allDiffExcept-type-error.essence:2:35: + | +2 | such that b = alldifferent_except(1, {1, 3, 4, 5}) + | ^ +Type error: + Expected:"Matrix or list" + Got: int + +allDiffExcept-type-error.essence:2:38: + | +2 | such that b = alldifferent_except(1, {1, 3, 4, 5}) + | ^^^^^^^^^^^^ +Type error: + Expected:"int enum or bool" + Got: set of int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected index ef579e8ed1..822748da7f 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = alldifferent_except(false, [1, 2, 3, 4; int(1..4)]) - Error: Type error in alldifferent_except(false, [1, 2, 3, 4; int(1..4)]) + Parser error in file: allDiffExcept-type-error.essence Error is: +ValidatorError allDiffExcept-type-error.essence:2:35: + | +2 | such that b = alldifferent_except(false, [1, 2, 3, 4]) + | ^^^^^ +Type error: + Expected:"Matrix or list" + Got: bool + +allDiffExcept-type-error.essence:2:42: + | +2 | such that b = alldifferent_except(false, [1, 2, 3, 4]) + | ^^^^^^^^^^^^ +Type error: + Expected:"int enum or bool" + Got: matrix indexed by [int] of int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected index f068c53c68..10ec16b784 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected @@ -1,5 +1,16 @@ Error: - In a 'such that' statement: b = and(1) - Error: - Type error in and(1) - The argument has type: int + Parser error in file: and-type-error.essence Error is: +ValidatorError and-type-error.essence:2:19: + | +2 | such that b = and(1, 3) + | ^ +Type error: + Expected:"Collection of boolean" + Got: int + +and-type-error.essence:2:22: + | +2 | such that b = and(1, 3) + | ^ +Unexpected argument + diff --git a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected index 8c2c0dc071..49661cbefd 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = apart(1, 3) - Error: Type error in apart(1, 3) + Parser error in file: apart-type-error.essence Error is: +ValidatorError apart-type-error.essence:2:21: + | +2 | such that b = apart(1, 3) + | ^ +Type error: + Expected: set of ? + Got: int + +apart-type-error.essence:2:24: + | +2 | such that b = apart(1, 3) + | ^ +Type error: + Expected: partition from ? + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected index e48863fd0f..a8597c73fa 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = (defined(1) = defined(1)) - Error: Type error in defined(1) + Parser error in file: defined-type-error.essence Error is: +ValidatorError defined-type-error.essence:2:24: + | +2 | such that b = (defined(1) = defined(1)) + | ^ +Type error: + Expected:"Function or Sequence" + Got: int + +defined-type-error.essence:2:37: + | +2 | such that b = (defined(1) = defined(1)) + | ^ +Type error: + Expected:"Function or Sequence" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected index ae0522cd62..635a93e19e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = (factorial(false) = factorial(false)) - Error: Pattern match failure in do expression at src/Conjure/Language/Expression/Op/Factorial.hs:23:9-17 + Parser error in file: factorial-type-error.essence Error is: +ValidatorError factorial-type-error.essence:2:16: + | +2 | such that b = (false! = false!) + | ^^^^^ +Type error: + Expected: int + Got: bool + +factorial-type-error.essence:2:25: + | +2 | such that b = (false! = false!) + | ^^^^^ +Type error: + Expected: int + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected index 622c3a0560..2be8f4687a 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = (flatten(false) = [false; int(1)]) - Error: - Type error in flatten(false) - The argument has type: bool + Parser error in file: flatten-type-error.essence Error is: +ValidatorError flatten-type-error.essence:2:24: + | +2 | such that b = (flatten(false) = [false]) + | ^^^^^ +Type error: + Expected:"List or Matrix " + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected index 152e5f899b..094710d5ae 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected @@ -1,5 +1,18 @@ Error: - In a 'such that' statement: b = (flatten(1, false) = flatten(1, false)) - Error: - Type error in flatten(1, false) - Cannot flatten 1 levels. + Parser error in file: flatten-type-error.essence Error is: +ValidatorError flatten-type-error.essence:2:27: + | +2 | such that b = (flatten(1, false) = flatten(1, false)) + | ^^^^^ +Type error: + Expected: [?] + Got: bool + +flatten-type-error.essence:2:47: + | +2 | such that b = (flatten(1, false) = flatten(1, false)) + | ^^^^^ +Type error: + Expected: [?] + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected index 23f80328f6..b08588d8dd 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected @@ -1,6 +1,10 @@ Error: - In a 'such that' statement: b = (freq(1, false) = 0) - Error: - Type error in The first argument of freq is expected to be a matrix or a multi-set. - We got: int - In expression: freq(1, false) + Parser error in file: freq-type-error.essence Error is: +ValidatorError freq-type-error.essence:2:21: + | +2 | such that b = (freq(1, false) = 0) + | ^ +Type error: + Expected: matrix indexed by [int] of bool + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected index fc4f9445af..04d86e8914 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = (hist(false) = hist(false)) - Error: Type error in hist(false) + Parser error in file: hist-type-error.essence Error is: +ValidatorError hist-type-error.essence:2:21: + | +2 | such that b = (hist(false) = hist(false)) + | ^^^^^ +Type error: + Expected:"Matrix, List or MSet" + Got: bool + +hist-type-error.essence:2:35: + | +2 | such that b = (hist(false) = hist(false)) + | ^^^^^ +Type error: + Expected:"Matrix, List or MSet" + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected index 10e727a0d2..4715f145f3 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected @@ -1,6 +1,10 @@ Error: - In a 'such that' statement: b = false in {1, 2, 3} - Error: - Type error in false in {1, 2, 3} - false has type bool - {1, 2, 3} has type set of int + Parser error in file: in-type-error.essence Error is: +ValidatorError in-type-error.essence:2:16: + | +2 | such that b = (false in {1, 2, 3}) + | ^^^^^ +Type error: + Expected: int + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected index 659a0d2616..b2afc3387c 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: b = false in 5 - Error: Type error in false in 5 + Parser error in file: in-type-error.essence Error is: +ValidatorError in-type-error.essence:2:25: + | +2 | such that b = (false in 5) + | ^ +Type error: + Expected:"Container of bool" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected index 8a7c9eb006..2058c5427e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = inverse(function(0 --> 1), function(false --> true)) - Error: Type error in inverse(function(0 --> 1), function(false --> true)) + Parser error in file: inverse-type-error.essence Error is: +ValidatorError inverse-type-error.essence:2:39: + | +2 | such that a = inverse(function(0-->1),function(false-->true)) + | ^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected: function int --> int + Got: function bool --> bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected index c1094c10a7..5f1468290e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = (max(4) = 4) - Error: - Type error in max(4) - Unexpected type inside max: int + Parser error in file: max-type-error.essence Error is: +ValidatorError max-type-error.essence:2:20: + | +2 | such that b = (max(4) = 4) + | ^ +Type error: + Expected:"Domain of int-like or matrix of int-like" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected index 1858985c3d..d8a521bf59 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = (max([false, true, false, true; int(1..4)]) = true) - Error: - Type error in max([false, true, false, true; int(1..4)]) - Unexpected type inside max: matrix indexed by [int] of bool + Parser error in file: max-type-error.essence Error is: +ValidatorError max-type-error.essence:2:20: + | +2 | such that b = (max([false, true, false, true]) = true) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Domain of int-like or matrix of int-like" + Got: matrix indexed by [int] of bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected index a198263ca4..099e86f9ef 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = (min(4) = 2) - Error: - Type error in min(4) - Unexpected type inside min: int + Parser error in file: min-type-error.essence Error is: +ValidatorError min-type-error.essence:2:20: + | +2 | such that b = (min(4) = 2) + | ^ +Type error: + Expected:"Domain of int-like or matrix of int-like" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected index 03f8a171c3..e0748c8b54 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = (min([false, true, false, true; int(1..4)]) = false) - Error: - Type error in min([false, true, false, true; int(1..4)]) - Unexpected type inside min: matrix indexed by [int] of bool + Parser error in file: min-type-error.essence Error is: +ValidatorError min-type-error.essence:2:20: + | +2 | such that b = (min([false, true, false, true]) = false) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Domain of int-like or matrix of int-like" + Got: matrix indexed by [int] of bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected index 6114eb94c7..ead4ffa996 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = -false - Error: Pattern match failure in do expression at src/Conjure/Language/Expression/Op/Negate.hs:23:9-17 + Parser error in file: negate-type-error.essence Error is: +ValidatorError negate-type-error.essence:2:17: + | +2 | such that a = (-false) + | ^^^^^ +Type error: + Expected: int + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected index f8e208c7ae..e78865ce10 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected @@ -1,6 +1,10 @@ Error: - In a 'such that' statement: b = !5 - Error: - Type error in !5 - Expected type: bool - But got: int + Parser error in file: not-type-error.essence Error is: +ValidatorError not-type-error.essence:2:17: + | +2 | such that b = (!5) + | ^ +Type error: + Expected: bool + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected index a1a693bacd..5ecf07c3cf 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = or(5) - Error: - Type error in or(5) - The argument has type: int + Parser error in file: or-type-error.essence Error is: +ValidatorError or-type-error.essence:2:19: + | +2 | such that b = (or(5)) + | ^ +Type error: + Expected:"Collection of boolean" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected index 982fce872b..3d9ea1f33a 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: b = participants(5) - Error: Type error in participants(5) + Parser error in file: participants-type-error.essence Error is: +ValidatorError participants-type-error.essence:2:28: + | +2 | such that b = participants(5) + | ^ +Type error: + Expected: partition from ? + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected index 86d56b47a2..c53393c562 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = ({{1, 2}, {3}, {4, 5, 6}} = parts(false)) - Error: - Type error in parts(false) - The argument has type: bool + Parser error in file: parts-type-error.essence Error is: +ValidatorError parts-type-error.essence:2:34: + | +2 | b = ({{1,2},{3},{4,5,6}} = parts(false)) + | ^^^^^ +Type error: + Expected: partition from ? + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected index ad28f5b07f..12c81ca0cf 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: s = powerSet(2) - Error: Type error in powerSet(2) + Parser error in file: powerSet-type-error.essence Error is: +ValidatorError powerSet-type-error.essence:2:15: + | +2 | such that s = powerSet(2) + | ^^^^^^^^^^^ +Type error: + Expected: set of int + Got: set of set of ? + +powerSet-type-error.essence:2:24: + | +2 | such that s = powerSet(2) + | ^ +Type error: + Expected: set of ? + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected index 543f9c9c27..807425da83 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: b = pred([false, true, false; int(1..3)]) - Error: Type error in pred([false, true, false; int(1..3)]) + Parser error in file: pred-type-error.essence Error is: +ValidatorError pred-type-error.essence:2:20: + | +2 | such that b = pred([false, true, false]) + | ^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"int enum or bool" + Got: matrix indexed by [int] of bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected index af57113c6a..1db321f159 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: i = product(5) - Error: - Type error in product(5) - The argument has type: int + Parser error in file: product-type-error.essence Error is: +ValidatorError product-type-error.essence:2:23: + | +2 | such that i = product(5) + | ^ +Type error: + Expected:"Matrix or Set" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected index e62565461e..adc1d33029 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: i = product([false, true, false; int(1..3)]) - Error: - Type error in product([false, true, false; int(1..3)]) - The argument has type: matrix indexed by [int] of bool + Parser error in file: product-type-error.essence Error is: +ValidatorError product-type-error.essence:2:23: + | +2 | such that i = product([false, true, false]) + | ^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Integer elements" + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected index 807b3c1a2e..5aa4bfc5bc 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: s = range(5) - Error: Type error in range(5) + Parser error in file: range-type-error.essence Error is: +ValidatorError range-type-error.essence:2:21: + | +2 | such that s = range(5) + | ^ +Type error: + Expected:"Function or Sequence" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected index 1dcd9b664d..c6109d38d4 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: g = restrict(f, d) - Error: Type error in restrict(f, d) + Parser error in file: restrict-type-error.essence Error is: +ValidatorError restrict-type-error.essence:4:24: + | +4 | such that g = restrict(f, d) + | ^ +Type error: + Expected: function bool --> ? + Got: function int --> int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected index e97eaecfd3..1207ea97af 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected @@ -1,7 +1,18 @@ Error: - In a 'such that' statement: b = (4 subsequence false) - Error: - Type error in 4 subsequence false - Unexpected types for operands: - - int - - bool + Parser error in file: subsequence-type-error.essence Error is: +ValidatorError subsequence-type-error.essence:2:16: + | +2 | such that b = (4 subsequence false) + | ^ +Type error: + Expected: sequence of ? + Got: int + +subsequence-type-error.essence:2:30: + | +2 | such that b = (4 subsequence false) + | ^^^^^ +Type error: + Expected: sequence of ? + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected index ac72bf5f72..8b5af79f81 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected @@ -1,7 +1,18 @@ Error: - In a 'such that' statement: b = (4 substring false) - Error: - Type error in 4 substring false - Unexpected types for operands: - - int - - bool + Parser error in file: substring-type-error.essence Error is: +ValidatorError substring-type-error.essence:2:16: + | +2 | such that b = (4 substring false) + | ^ +Type error: + Expected: sequence of ? + Got: int + +substring-type-error.essence:2:28: + | +2 | such that b = (4 substring false) + | ^^^^^ +Type error: + Expected: sequence of ? + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected index b43bb99fd7..4fee6772a3 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: b = succ([false, true, false; int(1..3)]) - Error: Type error in succ([false, true, false; int(1..3)]) + Parser error in file: succ-type-error.essence Error is: +ValidatorError succ-type-error.essence:2:20: + | +2 | such that b = succ([false, true, false]) + | ^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"int enum or bool" + Got: matrix indexed by [int] of bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected index 6b6692456c..f813f88a9d 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: i = sum(5) - Error: - Type error in sum(5) - The argument has type: int + Parser error in file: sum-type-error.essence Error is: +ValidatorError sum-type-error.essence:2:19: + | +2 | such that i = sum(5) + | ^ +Type error: + Expected:"Matrix or Set" + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected index d2c31ce102..2b412d9f1d 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: i = sum([false, true, false; int(1..3)]) - Error: - Type error in sum([false, true, false; int(1..3)]) - The argument has type: matrix indexed by [int] of bool + Parser error in file: sum-type-error.essence Error is: +ValidatorError sum-type-error.essence:2:19: + | +2 | such that i = sum([false, true, false]) + | ^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Integer elements" + Got: bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected index d7a1bae599..71a7202d31 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected @@ -1,6 +1,10 @@ Error: - In a 'such that' statement: i = toInt([false, true, false; int(1..3)]) - Error: - Type error in toInt([false, true, false; int(1..3)]) - Expected type bool. - But got: matrix indexed by [int] of bool + Parser error in file: toInt-type-error.essence Error is: +ValidatorError toInt-type-error.essence:2:21: + | +2 | such that i = toInt([false, true, false]) + | ^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected: bool + Got: matrix indexed by [int] of bool + diff --git a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected index 76bb2c3168..ede1a0d07a 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = xor(3) - Error: - Type error in xor(3) - The argument has type: int + Parser error in file: xor-type-error.essence Error is: +ValidatorError xor-type-error.essence:2:19: + | +2 | such that b = xor(3) + | ^ +Type error: + Expected:"Collection of boolean" + Got: int + From 38c19a3f62ca99c74e5fd7f4d49a3889fe408b9d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 18:36:23 +0000 Subject: [PATCH 127/378] Further staris output updates --- .../set-party/stderr.expected | 11 ++++++++-- .../flatten-type-error-02/stderr.expected | 4 ++-- .../party-type-error-02/stderr.expected | 11 ++++++++-- .../party-type-error-03/stderr.expected | 19 +++++++++++++++-- .../toMSet-type-error/stderr.expected | 21 +++++++++++++++---- .../toSet-type-error/stderr.expected | 13 ++++++++---- 6 files changed, 63 insertions(+), 16 deletions(-) diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected index d837f8afe6..602345a884 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: a = party(2, s) - Error: Type error in party(2, s) + Parser error in file: set-party.essence Error is: +ValidatorError set-party.essence:4:23: + | +4 | such that a = party(2,s) + | ^ +Type error: + Expected: partition from int + Got: set of int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected index 094710d5ae..6ff209c65d 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected @@ -5,7 +5,7 @@ ValidatorError flatten-type-error.essence:2:27: 2 | such that b = (flatten(1, false) = flatten(1, false)) | ^^^^^ Type error: - Expected: [?] + Expected: [[?]] Got: bool flatten-type-error.essence:2:47: @@ -13,6 +13,6 @@ flatten-type-error.essence:2:47: 2 | such that b = (flatten(1, false) = flatten(1, false)) | ^^^^^ Type error: - Expected: [?] + Expected: [[?]] Got: bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected index 62e5007aaa..00e9d62c0a 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected @@ -1,3 +1,10 @@ Error: - In a 'such that' statement: b = party(5, 6) - Error: Type error in party(5, 6) + Parser error in file: party-type-error.essence Error is: +ValidatorError party-type-error.essence:2:24: + | +2 | such that b = party(5, 6) + | ^ +Type error: + Expected: partition from int + Got: int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected index b1c48d0d3d..280b78645f 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected @@ -1,3 +1,18 @@ Error: - In a 'such that' statement: b = party(false, P) - Error: Type error in party(false, P) + Parser error in file: party-type-error.essence Error is: +ValidatorError party-type-error.essence:3:15: + | +3 | such that b = party(false, P) + | ^^^^^^^^^^^^^^^ +Type error: + Expected: set of int + Got: set of bool + +party-type-error.essence:3:28: + | +3 | such that b = party(false, P) + | ^ +Type error: + Expected: partition from bool + Got: partition from int + diff --git a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected index 5b4aa3bcd8..41c69bdc93 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected @@ -1,5 +1,18 @@ Error: - In a 'such that' statement: b = (toMSet(false) = (2, 3, 2)) - Error: - Type error in toMSet(false) - The argument has type: bool + Parser error in file: toMSet-type-error.essence Error is: +ValidatorError toMSet-type-error.essence:2:23: + | +2 | such that b = (toMSet(false) = (2, 3, 2)) + | ^^^^^ +Type error: + Expected:"Matrix ,list,function,relation,mset,set " + Got: bool + +toMSet-type-error.essence:2:32: + | +2 | such that b = (toMSet(false) = (2, 3, 2)) + | ^^^^^^^^^ +Type error: + Expected: mset of ? + Got: (int, int, int) + diff --git a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected index ac01e7fb3c..c69e7b1aac 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected @@ -1,5 +1,10 @@ Error: - In a 'such that' statement: b = (toSet(false) = {2, 3, 2}) - Error: - Type error in toSet(false) - The argument has type: bool + Parser error in file: toSet-type-error.essence Error is: +ValidatorError toSet-type-error.essence:2:22: + | +2 | such that b = (toSet(false) = {2, 3, 2}) + | ^^^^^ +Type error: + Expected:"Matrix ,list,function,relation,mset " + Got: bool + From 59bb145148be69edabe302aa90fc8f2d1a6585f1 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 19:12:44 +0000 Subject: [PATCH 128/378] Bug fixes wrt to model generation --- src/Conjure/Language/Validator.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index cf8260b914..13dd42ed81 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -606,7 +606,7 @@ validateLettingAssignment names (LettingAnon l1 l2 l3 l4 szExp) = do validateExpression szExp ?=> exactly tInt let d = Kind DomainType . TypeUnnamed mapM_ addRegion [mkDeclaration r n (d $ Name n)|(r,Name n)<- names' ] - mapM_ (\(r,x) -> putSymbol (x,(r,True,d x))) names' + mapM_ (\(r,x) -> putSymbol (x,(r,False,d x))) names' return $ [LettingDomainDefnUnnamed n size| (_,n) <- names'] @@ -1483,7 +1483,7 @@ validateVariantLiteral ln = do members <- catMaybes <$> validateList_ (f2n validateRecordMember) ln res <- case members of [] -> invalid $ symbolRegion ln SemanticError "Variants must contain exactly one member" - [(n,Typed t v)]-> return . pure . Typed (TypeVariant [(n,t)]) $ mkAbstractLiteral $ AbsLitVariant Nothing n v + [(n,Typed t v)]-> return . pure . Typed (TypeVariant [(n,t)]) $ AbstractLiteral $ AbsLitVariant Nothing n v _:_ -> invalid $ symbolRegion ln SyntaxError "Variants must contain exactly one member" --tag subsequent members as unexpected return $ fromMaybe (fallback "bad variant") res From afa3aa3c5b8f6907b659a18d230979c4c42ba5c3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 18 Dec 2022 19:32:33 +0000 Subject: [PATCH 129/378] More test outputs --- docs/conjure-help.html | 5 -- docs/conjure-help.txt | 5 -- tests/custom/ide/basic/stdout.expected | 67 +++++++++++++++++++------ tests/custom/issues/365/stderr.expected | 20 ++++++-- tests/custom/issues/383/stdout.expected | 17 ++++--- tests/custom/issues/431/stderr.expected | 36 +++++++++++-- tests/custom/issues/439/stderr.expected | 9 +++- 7 files changed, 113 insertions(+), 46 deletions(-) diff --git a/docs/conjure-help.html b/docs/conjure-help.html index 09646836ec..757af548bb 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -246,11 +246,6 @@  --log-level=LOGLEVELLog level. General:  --limit-time=INTLimit in seconds of real time. -  -conjure lsp [OPTIONS] -  - --loglevel=LOGLEVEL  - --limittime=INT 
diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index 2f5781086d..bdcaa12714 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -468,9 +468,4 @@ --log-level=LOGLEVEL Log level. General: --limit-time=INT Limit in seconds of real time. - - conjure lsp [OPTIONS] - - --loglevel=LOGLEVEL - --limittime=INT diff --git a/tests/custom/ide/basic/stdout.expected b/tests/custom/ide/basic/stdout.expected index 4b33e7b3a0..0af6191258 100644 --- a/tests/custom/ide/basic/stdout.expected +++ b/tests/custom/ide/basic/stdout.expected @@ -1,27 +1,62 @@ == lexer.essence == -Error: Lexing error: # y = 2 +Error: + Parser error in file: lexer.essence Error is: +ValidatorError lexer.essence:7:29: + | +7 | such that x + y = z, x = 1, # y = 2 + | ^^^^^^^ +Skipped tokens == parser.essence == Error: - parser.essence:7:28: -unexpected = -expecting <->, comma, end of input, operator, rest of statement, or statement - such that x + y = z, x = 1 = y = 2 - ^ + Parser error in file: parser.essence Error is: +ValidatorError parser.essence:7:27: + | +7 | such that x + y = z, x = 1 = y = 2 + | ^ +Missing Expr + +parser.essence:7:28: + | +7 | such that x + y = z, x = 1 = y = 2 + | ^ +Missing , + +parser.essence:7:31: + | +7 | such that x + y = z, x = 1 = y = 2 + | ^ +Missing Expr + +parser.essence:7:32: + | +7 | such that x + y = z, x = 1 = y = 2 + | ^ +Missing , + == type.essence == Error: - In a 'such that' statement: x union y = 2 - Error: - When type checking: x union y - Arguments have unsupported types. - lhs : x - type of lhs: int - rhs : y - type of rhs: int + Parser error in file: type.essence Error is: +ValidatorError type.essence:7:22: + | +7 | such that x + y = z, x union y = 2 + | ^ +Type error: + Expected:"Set MSet funcition or relation" + Got: int + +type.essence:7:30: + | +7 | such that x + y = z, x union y = 2 + | ^ +Type error: + Expected:"Set MSet funcition or relation" + Got: int + == category.essence == @@ -37,8 +72,8 @@ Error: {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/custom/issues/365/stderr.expected b/tests/custom/issues/365/stderr.expected index c060e992fd..9367dd54fa 100644 --- a/tests/custom/issues/365/stderr.expected +++ b/tests/custom/issues/365/stderr.expected @@ -1,6 +1,16 @@ Error: - 365.essence:2:56: -unexpected > -expecting expression - find i : int(0..9) such that forAll j : int(0..9) . j <> i - ^ + Parser error in file: 365.essence Error is: +ValidatorError 365.essence:2:56: + | +2 | find i : int(0..9) such that forAll j : int(0..9) . j <> i + | ^ +Missing Expr + +365.essence:2:58: + | +2 | find i : int(0..9) such that forAll j : int(0..9) . j <> i + | ^ +Type error: + Expected: bool + Got: int + diff --git a/tests/custom/issues/383/stdout.expected b/tests/custom/issues/383/stdout.expected index 00e601876c..2f4835bd9e 100644 --- a/tests/custom/issues/383/stdout.expected +++ b/tests/custom/issues/383/stdout.expected @@ -54,11 +54,12 @@ such that ========== 3 ========== Error: - In a 'such that' statement: c = |toSet([image(f, u) | u : vertices])| - Error: - When type checking: c = |toSet([image(f, u) | u : vertices])| - Cannot unify the types of the following. - lhs : c - type of lhs: colours - rhs : |toSet([image(f, u) | u : vertices])| - type of rhs: int + Parser error in file: 383-3.essence Error is: +ValidatorError 383-3.essence:10:32: + | +10 | find c : colours such that c = |toSet([ f(u) | u : vertices ])| + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected: colours + Got: int + diff --git a/tests/custom/issues/431/stderr.expected b/tests/custom/issues/431/stderr.expected index 746443ef59..798eaad318 100644 --- a/tests/custom/issues/431/stderr.expected +++ b/tests/custom/issues/431/stderr.expected @@ -1,6 +1,32 @@ Error: - 431.essence:2:14: -unexpected { -expecting ( or of - find s : set {x,y} - ^ + Parser error in file: 431.essence Error is: +ValidatorError 431.essence:2:13: + | +2 | find s : set {x,y} + | ^ +Missing Domain + +431.essence:2:14: + | +2 | find s : set {x,y} + | ^^^^^ +Skipped tokens + +431.essence:2:14: + | +2 | find s : set {x,y} + | ^ +Missing of + +431.essence:3:11: + | +3 | such that x Date: Thu, 2 Mar 2023 13:43:38 +0000 Subject: [PATCH 130/378] Fixes errors caused by rebase onto main --- src/Conjure/Language/Constant.hs | 9 +++++---- src/Conjure/Language/Definition.hs | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index 6197af249e..e05428d812 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -42,6 +42,7 @@ import Test.QuickCheck ( Arbitrary(..), oneof ) -- aeson import qualified Data.Aeson as JSON +import Data.Aeson.Key (toText) import qualified Data.Aeson.KeyMap as KM import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector @@ -112,7 +113,7 @@ instance SimpleJSON Constant where ConstantAbstract . AbsLitTuple <$> zipWithM fromSimpleJSON ts (V.toList xs) fromSimpleJSON t@(TypeVariant ts) x@(JSON.Object m) = do - mys <- forM (M.toList m) $ \ (name, value) -> do + mys <- forM (KM.toList m) $ \ (toText->name, value) -> do let mty = [ ty | (nm, ty) <- ts, nm == Name name ] case mty of [ty] -> do @@ -125,7 +126,7 @@ instance SimpleJSON Constant where _ -> noFromSimpleJSON "Constant" t x fromSimpleJSON t@(TypeRecord ts) x@(JSON.Object m) = do - mys <- forM (M.toList m) $ \ (name, value) -> do + mys <- forM (KM.toList m) $ \ (toText->name, value) -> do let mty = [ ty | (nm, ty) <- ts, nm == Name name ] case mty of [ty] -> do @@ -138,7 +139,7 @@ instance SimpleJSON Constant where else noFromSimpleJSON "Constant" t x fromSimpleJSON (TypeMatrix index inner) (JSON.Object m) = do - ys <- forM (M.toList m) $ \ (name, value) -> do + ys <- forM (KM.toList m) $ \ (toText->name, value) -> do -- the name must be an integer a <- fromSimpleJSON index (JSON.String name) b <- fromSimpleJSON inner value @@ -165,7 +166,7 @@ instance SimpleJSON Constant where ConstantAbstract . AbsLitMSet <$> mapM (fromSimpleJSON t) (V.toList xs) fromSimpleJSON (TypeFunction fr to) (JSON.Object m) = do - ys <- forM (M.toList m) $ \ (name, value) -> do + ys <- forM (KM.toList m) $ \ (toText->name, value) -> do -- the name must be an integer -- and this is a function from ints we are reading here a <- fromSimpleJSON fr (JSON.String name) diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index 0029681a3f..298c1851f4 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -67,6 +67,7 @@ import qualified Data.Vector as V -- vector -- uniplate import Data.Generics.Uniplate.Zipper ( Zipper, down, right, hole ) +import Data.Aeson.Key (toText) ------------------------------------------------------------------------------------------------------------------------ @@ -91,7 +92,7 @@ instance SimpleJSON Model where let (innersAsMaps, rest) = unzip [ case i of JSON.Object mp -> ([mp], []); _ -> ([], [i]) | i <- inners ] |> (\ (xs, ys) -> ((mconcat) <$> xs, concat ys)) unless (null rest) $ bug $ "Expected json objects only, but got:" <+> vcat (map pretty rest) - return (JSON.Object innersAsMaps) + return (JSON.Object $ mconcat innersAsMaps) fromSimpleJSON = noFromSimpleJSON "Model" fromSimpleJSONModel :: @@ -104,7 +105,7 @@ fromSimpleJSONModel :: fromSimpleJSONModel essence json = case json of JSON.Object inners -> do - stmts <- forM (M.toList inners) $ \ (name, valueJSON) -> do + stmts <- forM (KM.toList inners) $ \ (toText->name, valueJSON) -> do -- traceM $ show $ "name " <+> pretty name let mdomain = [ dom | Declaration (FindOrGiven Given (Name nm) dom) <- mStatements essence From 1c3d86a630fd19d2993cf6d79da0c73ba629715f Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 14:58:43 +0000 Subject: [PATCH 131/378] Fixes test related bugs ( also removes log from json parsing, maybe address) --- src/Conjure/Language/Definition.hs | 3 +-- src/Conjure/UI/IO.hs | 2 -- src/test/Conjure/ModelAllSolveAll.hs | 16 ++++++++-------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index 298c1851f4..a946f0497d 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -98,7 +98,6 @@ instance SimpleJSON Model where fromSimpleJSONModel :: (?typeCheckerMode :: TypeCheckerMode) => MonadUserError m => - MonadLog m => Model -> JSON.Value -> m Model @@ -121,7 +120,7 @@ fromSimpleJSONModel essence json = -- traceM $ show $ "value " <+> pretty value return $ Just $ Declaration (Letting (Name name) value) _ -> do - logWarn $ "Ignoring" <+> pretty name <+> "from the JSON file." + -- logWarn $ "Ignoring" <+> pretty name <+> "from the JSON file." return Nothing return def { mStatements = catMaybes stmts } _ -> noFromSimpleJSON "Model" TypeAny json diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index f12eca7034..fb5cc30db3 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -89,7 +89,6 @@ readParamJSON :: MonadIO m => MonadFail m => MonadUserError m => - MonadLog m => Model -> FilePath -> m Model readParamJSON model fp = do (_, contents) <- liftIO $ pairWithContents fp @@ -106,7 +105,6 @@ readParamOrSolutionFromFile :: MonadIO m => MonadFailDoc m => MonadUserError m => - MonadLog m => Model -> FilePath -> m Model readParamOrSolutionFromFile model fp = do if ".json" `isSuffixOf` fp diff --git a/src/test/Conjure/ModelAllSolveAll.hs b/src/test/Conjure/ModelAllSolveAll.hs index 46aa129682..657f3b59ec 100644 --- a/src/test/Conjure/ModelAllSolveAll.hs +++ b/src/test/Conjure/ModelAllSolveAll.hs @@ -227,7 +227,7 @@ savileRowNoParam step srOptions TestDirFiles{..} modelPath = do <$> getDirectoryContents outputsDir forM_ (take nbEprimeSolutions allNats) $ \ i -> do let eprimeSolutionPath = outBase ++ ".eprime-solution." ++ padLeft 6 '0' (show i) - eprimeSolution <- readParamOrSolutionFromFile (outputsDir eprimeSolutionPath) + eprimeSolution <- readParamOrSolutionFromFile eprimeModel (outputsDir eprimeSolutionPath) res <- runUserErrorT $ ignoreLogs $ runNameGen () $ translateSolution eprimeModel def eprimeSolution case res of @@ -252,7 +252,7 @@ savileRowWithParams step srOptions TestDirFiles{..} modelPath paramPath = do fileShouldExist (outputsDir modelPath) fileShouldExist (tBaseDir paramPath) eprimeModel <- readModelInfoFromFile (outputsDir modelPath) - param <- readParamOrSolutionFromFile (tBaseDir paramPath) + param <- readParamOrSolutionFromFile eprimeModel (tBaseDir paramPath) eprimeParam <- ignoreLogs $ runNameGen () $ translateParameter False eprimeModel param let outBase = dropExtension modelPath ++ "-" ++ dropExtension paramPath writeFile (outputsDir outBase ++ ".eprime-param") (renderNormal eprimeParam) @@ -276,7 +276,7 @@ savileRowWithParams step srOptions TestDirFiles{..} modelPath paramPath = do <$> getDirectoryContents outputsDir forM_ (take nbEprimeSolutions allNats) $ \ i -> do let eprimeSolutionPath = outBase ++ ".eprime-solution." ++ padLeft 6 '0' (show i) - eprimeSolution <- readParamOrSolutionFromFile (outputsDir eprimeSolutionPath) + eprimeSolution <- readParamOrSolutionFromFile eprimeModel (outputsDir eprimeSolutionPath) res <- runUserErrorT $ ignoreLogs $ runNameGen () $ translateSolution eprimeModel param eprimeSolution case res of @@ -301,7 +301,7 @@ validateSolutionNoParam step TestDirFiles{..} solutionPaths = do forM_ solutionPaths $ \ solutionPath -> do step (unwords ["Validating solution:", solutionPath]) fileShouldExist (outputsDir solutionPath) - solution <- readParamOrSolutionFromFile (outputsDir solutionPath) + solution <- readParamOrSolutionFromFile essence (outputsDir solutionPath) result <- runUserErrorT $ ignoreLogs $ runNameGen () $ do [essence2, param2, solution2] <- resolveNamesMulti [essence, def, solution] validateSolution essence2 param2 solution2 @@ -319,11 +319,11 @@ validateSolutionWithParams step TestDirFiles{..} paramSolutionPaths = do essence <- readModelFromFile essenceFile forM_ paramSolutionPaths $ \ (paramPath, solutionPaths) -> do fileShouldExist (tBaseDir paramPath) - param <- readParamOrSolutionFromFile (tBaseDir paramPath) + param <- readParamOrSolutionFromFile essence (tBaseDir paramPath) forM_ solutionPaths $ \ solutionPath -> do step (unwords ["Validating solution:", paramPath, solutionPath]) fileShouldExist (outputsDir solutionPath) - solution <- readParamOrSolutionFromFile (outputsDir solutionPath) + solution <- readParamOrSolutionFromFile essence (outputsDir solutionPath) result <- runUserErrorT $ ignoreLogs $ runNameGen () $ do [essence2, param2, solution2] <- resolveNamesMulti [essence, param, solution] validateSolution essence2 param2 solution2 @@ -437,14 +437,14 @@ equalNumberOfSolutions step TestDirFiles{..} = do ] -noDuplicateSolutions :: HasCallStack => Step -> TestDirFiles -> Assertion +noDuplicateSolutions :: HasCallStack =>(?typeCheckerMode :: TypeCheckerMode) => Step -> TestDirFiles -> Assertion noDuplicateSolutions step TestDirFiles{..} = do step "Checking duplicate solutions" dirShouldExist outputsDir models <- sort . filter (".eprime" `isSuffixOf`) <$> getDirectoryContents outputsDir params <- sort . filter (".eprime-param" `isSuffixOf`) <$> getDirectoryContents outputsDir solutions <- filter (".solution" `isSuffixOf`) <$> getDirectoryContents outputsDir - solutionContents <- forM solutions $ \ s -> do m <- readParamOrSolutionFromFile (outputsDir s) + solutionContents <- forM solutions $ \ s -> do m <- readParamOrSolutionFromFile (def :: Model) (outputsDir s) return (s, m) let grouped :: [ ( Maybe String -- the parameter From 90d0be8c7998a1c46832d3707f17b25b89587c7f Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 15:38:14 +0000 Subject: [PATCH 132/378] Fixes realtion projection as image in json tests --- .../model.expected.json | 12 +- .../model.expected.json | 14 +- .../model.expected.json | 12 +- .../model.expected.json | 18 +- .../model.expected.json | 376 ++++++++--------- .../model.expected.json | 90 ++-- .../model.expected.json | 392 +++++++++--------- .../model.expected.json | 18 +- .../model.expected.json | 14 +- .../model.expected.json | 261 ++++++------ .../parse_print/parsing02/model.expected.json | 41 +- .../expressions/operators/model.expected.json | 113 ++++- 12 files changed, 722 insertions(+), 639 deletions(-) diff --git a/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/model.expected.json index 3103223d4a..4ad77df352 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -469,12 +469,12 @@ {"AbstractLiteral": {"AbsLitSet": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var4"}, null]}, - [{"Reference": - [{"Name": "var9"}, - null]}]]}}, + {"Reference": + [{"Name": "var9"}, + null]}]}}, {"Op": {"MkOpPow": [{"Constant": diff --git a/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/model.expected.json b/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/model.expected.json index 1c80b98df5..f1c9e7fe18 100644 --- a/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -936,13 +936,13 @@ {"AbstractLiteral": {"AbsLitFunction": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var6"}, null]}, - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}]]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 6]}}]}}, {"Op": {"MkOpProduct": {"AbstractLiteral": diff --git a/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/model.expected.json index 8ca3849dca..14a8484422 100644 --- a/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -97,9 +97,9 @@ {"AbsLitSet": [{"ConstantBool": true}, {"ConstantBool": true}]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var7"}, null]}, - [{"Reference": [{"Name": "var3"}, null]}]]}}], + {"Reference": [{"Name": "var3"}, null]}]}}], [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}}, {"Constant": @@ -121,9 +121,9 @@ {"AbsLitSet": [{"ConstantBool": true}, {"ConstantBool": true}]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var7"}, null]}, - [{"Reference": [{"Name": "var3"}, null]}]]}}], + {"Reference": [{"Name": "var3"}, null]}]}}], [{"Typed": [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, {"TypeSet": {"TypeBool": []}}]}, diff --git a/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/model.expected.json index 73d0d02280..85270665a3 100644 --- a/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -662,9 +662,9 @@ {"Constant": {"ConstantBool": true}}]}}], [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var6"}, null]}, - [{"Reference": [{"Name": "var2"}, null]}]]}}, + {"Reference": [{"Name": "var2"}, null]}]}}, {"Constant": {"ConstantAbstract": {"AbsLitFunction": @@ -727,12 +727,12 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var6"}, null]}, - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 8]}}}}]]}}, + {"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 8]}}}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitFunction": diff --git a/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/model.expected.json b/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/model.expected.json index aad0aadadc..1ba780f77d 100644 --- a/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -610,43 +610,43 @@ {"ConstantBool": true}}]}}]]}}]]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}}}, - {"Op": - {"MkOpProduct": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}]]}}}}]}}]]}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 4]}}}}, + {"Op": + {"MkOpProduct": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 6]}}]]}}}}]}}]}}, {"AbstractLiteral": {"AbsLitFunction": [[{"Constant": {"ConstantBool": true}}, @@ -1837,24 +1837,24 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpParty": - [{"Op": - {"MkOpToInt": - {"Constant": - {"ConstantBool": - false}}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, - -8]}, - {"ConstantInt": - [{"TagInt": []}, - -5]}]]}}}]}}]]}}, + {"Op": + {"MkOpParty": + [{"Op": + {"MkOpToInt": + {"Constant": + {"ConstantBool": + false}}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": + [{"TagInt": []}, + -8]}, + {"ConstantInt": + [{"TagInt": []}, + -5]}]]}}}]}}]}}, {"Constant": {"ConstantInt": [{"TagInt": []}, 10]}}]]}}}}, {"Op": {"MkOpIntersect": @@ -2110,17 +2110,17 @@ [{"TagInt": []}, 6]}}]}}]]}}]]}}]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpTwoBars": - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": true}]}}}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}]]}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"Op": + {"MkOpTwoBars": + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantBool": true}]}}}}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}]}}, {"AbstractLiteral": {"AbsLitFunction": [[{"Op": @@ -2215,32 +2215,32 @@ [{"Reference": [{"Name": "var4"}, null]}, {"Reference": [{"Name": "var4"}, null]}]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpToSet": - [false, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, - -3]}]}}}]}}]]}}, + {"Op": + {"MkOpToSet": + [false, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantInt": + [{"TagInt": []}, + -3]}]}}}]}}]}}, {"Op": {"MkOpEq": [{"Reference": [{"Name": "var3"}, null]}, {"Reference": [{"Name": "var3"}, null]}]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpParticipants": - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, - 5]}]]}}}}}]]}}, + {"Op": + {"MkOpParticipants": + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": + [{"TagInt": []}, + 5]}]]}}}}}]}}, {"Op": {"MkOpIn": [{"Op": @@ -2361,53 +2361,53 @@ {"AbstractLiteral": {"AbsLitRelation": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpParty": - [{"Op": - {"MkOpToInt": - {"Constant": - {"ConstantBool": - false}}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, - 2]}]]}}}]}}]]}}, + {"Op": + {"MkOpParty": + [{"Op": + {"MkOpToInt": + {"Constant": + {"ConstantBool": + false}}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": + [{"TagInt": []}, + 2]}]]}}}]}}]}}, {"Constant": {"ConstantBool": true}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpMod": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 3]}}}}]}}, - {"Op": - {"MkOpToInt": - {"Constant": - {"ConstantBool": - false}}}}, - {"Op": - {"MkOpToInt": - {"Constant": - {"ConstantBool": - true}}}}]}}]]}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"Op": + {"MkOpMod": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}}}, + {"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 3]}}}}]}}, + {"Op": + {"MkOpToInt": + {"Constant": + {"ConstantBool": + false}}}}, + {"Op": + {"MkOpToInt": + {"Constant": + {"ConstantBool": + true}}}}]}}]}}, {"Constant": {"ConstantBool": true}}], [{"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}, {"Constant": {"ConstantBool": false}}]]}}], @@ -2415,20 +2415,20 @@ {"AbstractLiteral": {"AbsLitRelation": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpToSet": - [false, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, - -10]}, - {"ConstantInt": - [{"TagInt": []}, - -7]}]}}}]}}]]}}, + {"Op": + {"MkOpToSet": + [false, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantInt": + [{"TagInt": []}, + -10]}, + {"ConstantInt": + [{"TagInt": []}, + -7]}]}}}]}}]}}, {"Constant": {"ConstantBool": true}}], [{"Op": {"MkOpProduct": @@ -2972,58 +2972,58 @@ [{"TagInt": []}, 10]}}}}]}}]]}}]]}}]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpParticipants": - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpMod": - [{"Op": - {"MkOpNegate": + {"Op": + {"MkOpParticipants": + {"AbstractLiteral": + {"AbsLitPartition": + [[{"Op": + {"MkOpMod": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 1]}}}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 10]}}]}}, + {"Op": + {"MkOpSum": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 7]}}}}, {"Constant": {"ConstantInt": [{"TagInt": []}, - 1]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 10]}}]}}, - {"Op": - {"MkOpSum": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 7]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 7]}}]]}}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]]}}}}]]}}, + 7]}}]]}}}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}, + {"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 1]}}}}]]}}}}]}}, {"AbstractLiteral": {"AbsLitFunction": [[{"Op": diff --git a/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/model.expected.json index 00f4240917..0ad9c36017 100644 --- a/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -715,16 +715,16 @@ {"ConstantInt": [{"TagInt": []}, -3]}]]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]}}]]}}]}}, + {"Op": + {"MkOpIff": + [{"Constant": + {"ConstantBool": + false}}, + {"Constant": + {"ConstantBool": + true}}]}}]}}]}}, {"Op": {"MkOpLeq": [{"Reference": [{"Name": "var1"}, null]}, @@ -809,10 +809,10 @@ {"Op": {"MkOpNeq": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Reference": - [{"Name": "var3"}, null]}]]}}, + {"Reference": + [{"Name": "var3"}, null]}]}}, {"Constant": {"ConstantAbstract": {"AbsLitFunction": @@ -979,21 +979,20 @@ {"Op": {"MkOpEq": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - true}}]}}]]}}, + {"Op": + {"MkOpIff": + [{"Constant": + {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": + true}}]}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Reference": - [{"Name": "var3"}, null]}]]}}]}}, + {"Reference": + [{"Name": "var3"}, null]}]}}]}}, {"Reference": [{"Name": "var1"}, null]}]]}}, {"Op": {"MkOpMinus": @@ -1612,21 +1611,21 @@ {"ConstantInt": [{"TagInt": []}, 6]}]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 9]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}]}}]]}}, + {"Op": + {"MkOpNeq": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 9]}}}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 6]}}]}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitFunction": @@ -1662,15 +1661,14 @@ {"ConstantAbstract": {"AbsLitSet": []}}}, {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": - {"ConstantBool": false}}]]}}, + {"Constant": {"ConstantBool": false}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Reference": - [{"Name": "var3"}, null]}]]}}, + {"Reference": + [{"Name": "var3"}, null]}]}}, {"Constant": {"ConstantAbstract": {"AbsLitTuple": diff --git a/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/model.expected.json index 0323fdc89a..041d734f7d 100644 --- a/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -85,42 +85,40 @@ {"ConstantInt": [{"TagInt": []}, 1]}}}}}]]}, [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - true}}]}}]]}}]]}}, + {"Op": + {"MkOpIff": + [{"Constant": {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": true}}]}}]}}]]}}, {"AbstractLiteral": {"AbsLitPartition": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}, + {"Op": + {"MkOpOr": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Constant": + {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": + false}}]]}}}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -273,31 +271,30 @@ [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}]]}}, + {"Op": + {"MkOpAnd": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Constant": + {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": + false}}]]}}}}]}}]]}}, {"Constant": {"ConstantAbstract": {"AbsLitPartition": @@ -446,41 +443,40 @@ [{"ConstantInt": [{"TagInt": []}, 5]}, {"ConstantInt": [{"TagInt": []}, -2]}]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": - false}}]}}]]}}]]}}, + {"Op": + {"MkOpIff": + [{"Constant": {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": false}}]}}]}}]]}}, {"AbstractLiteral": {"AbsLitPartition": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}]]}}], + {"Op": + {"MkOpIff": + [{"Constant": {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": false}}]}}]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 7]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}}}]}}]]}}], + {"Op": + {"MkOpNeq": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 7]}}}}, + {"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 2]}}}}]}}]}}], [{"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -532,13 +528,13 @@ [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}]]}}, + {"Op": + {"MkOpImply": + [{"Constant": {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": false}}]}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -546,31 +542,31 @@ {"AbstractLiteral": {"AbsLitPartition": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}]]}}, + {"Op": + {"MkOpOr": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Constant": + {"ConstantBool": + false}}, + {"Constant": + {"ConstantBool": + false}}]]}}}}]}}]]}}, {"Constant": {"ConstantAbstract": {"AbsLitMatrix": @@ -645,19 +641,19 @@ [{"ConstantInt": [{"TagInt": []}, -1]}, {"ConstantInt": [{"TagInt": []}, -3]}]}}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 8]}}]}}]]}}, + {"Op": + {"MkOpEq": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 6]}}}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 8]}}]}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -712,21 +708,21 @@ {"AbstractLiteral": {"AbsLitPartition": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}, + {"Op": + {"MkOpIff": + [{"Constant": {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": true}}]}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": {"ConstantBool": false}}]]}}], + {"Constant": {"ConstantBool": false}}]}}], [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": {"ConstantBool": false}}]]}}]]}}, + {"Constant": {"ConstantBool": false}}]}}]]}}, {"Constant": {"ConstantAbstract": {"AbsLitMatrix": @@ -837,31 +833,31 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}]]}, [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": {"ConstantBool": false}}]]}}, + {"Constant": {"ConstantBool": false}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}]}}]]}}, + {"Op": + {"MkOpNeq": + [{"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 6]}}}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 5]}}]}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}, + {"Op": + {"MkOpNeq": + [{"Constant": {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": true}}]}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -879,43 +875,41 @@ {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 5]}]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": {"ConstantBool": false}}]]}}, + {"Constant": {"ConstantBool": false}}]}}, {"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 5]}]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": - false}}]}}]]}}]]}}, + {"Op": + {"MkOpEq": + [{"Constant": {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": false}}]}}]}}]]}}, {"AbstractLiteral": {"AbsLitPartition": [[{"Typed": [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": {"ConstantBool": false}}]]}}, + {"Constant": {"ConstantBool": false}}]}}, {"Typed": [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": - true}}]}}]]}}]]}}, + {"Op": + {"MkOpIff": + [{"Constant": {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": true}}]}}]}}]]}}, {"Constant": {"ConstantAbstract": {"AbsLitMatrix": @@ -991,31 +985,31 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}]]}}, + {"Op": + {"MkOpOr": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Constant": + {"ConstantBool": + false}}, + {"Constant": + {"ConstantBool": + false}}]]}}}}]}}]]}}, {"Constant": {"ConstantAbstract": {"AbsLitPartition": diff --git a/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/model.expected.json index 848ec1b1ce..90e5d52446 100644 --- a/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -203,12 +203,12 @@ {"AbstractLiteral": {"AbsLitPartition": [[{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}]]}}]]}}], + {"Op": + {"MkOpImply": + [{"Constant": {"ConstantBool": true}}, + {"Constant": {"ConstantBool": true}}]}}]}}]]}}], [{"Constant": {"ConstantAbstract": {"AbsLitPartition": @@ -223,9 +223,9 @@ {"AbsLitPartition": [[{"Reference": [{"Name": "var1"}, null]}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": {"ConstantBool": false}}]]}}], + {"Constant": {"ConstantBool": false}}]}}], [{"Op": {"MkOpToInt": {"Constant": {"ConstantBool": true}}}}]]}}], [{"Constant": {"ConstantAbstract": diff --git a/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/model.expected.json index b262c77476..1a418618ac 100644 --- a/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -37,12 +37,12 @@ [{"Op": {"MkOpTwoBars": {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "f"}, null]}, - [{"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": [{"Name": "i"}, null]}, - {"Reference": [{"Name": "i"}, null]}]}}]]}}}}, + {"AbstractLiteral": + {"AbsLitTuple": + [{"Reference": [{"Name": "i"}, null]}, + {"Reference": [{"Name": "i"}, null]}]}}]}}}}, {"Op": {"MkOpSum": {"AbstractLiteral": diff --git a/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/model.expected.json index 7cc3b12c17..1d7caa00c0 100644 --- a/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -134,37 +134,37 @@ [{"TagInt": []}, 2]}}]]}}}}]]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var5"}, null]}, - [{"Op": - {"MkOpUnion": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 4]}, - {"ConstantInt": - [{"TagInt": []}, 8]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, - -8]}]}}}]}}]]}}, + {"Op": + {"MkOpUnion": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 4]}, + {"ConstantInt": + [{"TagInt": []}, 8]}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, + -8]}]}}}]}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var5"}, null]}, - [{"Op": - {"MkOpToSet": - [false, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, 0]}, - {"ConstantInt": - [{"TagInt": []}, - 4]}]}}}]}}]]}}]}}], + {"Op": + {"MkOpToSet": + [false, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantInt": + [{"TagInt": []}, 0]}, + {"ConstantInt": + [{"TagInt": []}, + 4]}]}}}]}}]}}]}}], [{"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -197,21 +197,20 @@ {"AbstractLiteral": {"AbsLitSet": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var5"}, null]}, - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpRelationProj": - [{"Reference": [{"Name": "var2"}, null]}, - [{"Op": - {"MkOpImply": - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - true}}]}}]]}}]}}]]}}]}}], + {"AbstractLiteral": + {"AbsLitSet": + [{"Op": + {"MkOpImage": + [{"Reference": [{"Name": "var2"}, null]}, + {"Op": + {"MkOpImply": + [{"Constant": + {"ConstantBool": true}}, + {"Constant": + {"ConstantBool": + true}}]}}]}}]}}]}}]}}], [{"Constant": {"ConstantAbstract": {"AbsLitSet": @@ -324,18 +323,18 @@ {"AbstractLiteral": {"AbsLitSet": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var5"}, null]}, - [{"Op": - {"MkOpParticipants": - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, -9]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]]}}}}}]]}}]}}]]}}, + {"Op": + {"MkOpParticipants": + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": + [{"TagInt": []}, -9]}, + {"ConstantInt": + [{"TagInt": []}, + 0]}]]}}}}}]}}]}}]]}}, {"AbstractLiteral": {"AbsLitFunction": [[{"Constant": @@ -384,42 +383,42 @@ {"AbstractLiteral": {"AbsLitSet": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var5"}, null]}, - [{"Op": - {"MkOpUnion": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 5]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, -4]}, - {"ConstantInt": - [{"TagInt": []}, - -7]}]}}}]}}]]}}, + {"Op": + {"MkOpUnion": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 5]}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, -4]}, + {"ConstantInt": + [{"TagInt": []}, + -7]}]}}}]}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var5"}, null]}, - [{"Op": - {"MkOpParty": - [{"Op": - {"MkOpPow": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, - 2]}]]}}}]}}]]}}, + {"Op": + {"MkOpParty": + [{"Op": + {"MkOpPow": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 9]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 4]}}]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": + [{"TagInt": []}, + 2]}]]}}}]}}]}}, {"AbstractLiteral": {"AbsLitPartition": [[{"Op": @@ -888,24 +887,23 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var4"}, null]}, - [{"Op": - {"MkOpIn": - [{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": - true}]}}}]}}]]}}, + {"Op": + {"MkOpIn": + [{"Op": + {"MkOpNeq": + [{"Constant": + {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": + true}}]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantBool": false}, + {"ConstantBool": + true}]}}}]}}]}}, {"Op": {"MkOpTwoBars": {"Constant": @@ -1028,33 +1026,32 @@ {"Op": {"MkOpPow": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var4"}, null]}, - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}, + {"Op": + {"MkOpOr": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": + []}, + 2]}}]}]]}, + [{"Constant": + {"ConstantBool": false}}, + {"Constant": + {"ConstantBool": + false}}]]}}}}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "var2"}, null]}, - [{"Constant": - {"ConstantBool": true}}]]}}]}}]}}]]}}]}}]}]} \ No newline at end of file + {"Constant": + {"ConstantBool": true}}]}}]}}]}}]]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/parsing02/model.expected.json b/tests/parse_print/parsing02/model.expected.json index 484716ffea..6a72f03b90 100644 --- a/tests/parse_print/parsing02/model.expected.json +++ b/tests/parse_print/parsing02/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -67,13 +67,13 @@ [{"Op": {"MkOpLeq": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "crew"}, null]}, - [{"Reference": [{"Name": "i"}, null]}]]}}, + {"Reference": [{"Name": "i"}, null]}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "capacity"}, null]}, - [{"Reference": [{"Name": "i"}, null]}]]}}]}}, + {"Reference": [{"Name": "i"}, null]}]}}]}}, [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "i"}}, @@ -112,9 +112,9 @@ [{"Op": {"MkOpEq": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "p"}, null]}, - [{"Reference": [{"Name": "h"}, null]}]]}}, + {"Reference": [{"Name": "h"}, null]}]}}, {"Reference": [{"Name": "h"}, null]}]}}, [{"Generator": {"GenInExpr": @@ -135,11 +135,11 @@ {"MkOpSum": {"Comprehension": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "crew"}, null]}, - [{"Reference": - [{"Name": "b"}, null]}]]}}, + {"Reference": + [{"Name": "b"}, null]}]}}, [{"Generator": {"GenInExpr": [{"Single": {"Name": "b"}}, @@ -152,9 +152,9 @@ [{"Name": "h"}, null]}]}}]}}]]}}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "capacity"}, null]}, - [{"Reference": [{"Name": "h"}, null]}]]}}]}}, + {"Reference": [{"Name": "h"}, null]}]}}]}}, [{"Generator": {"GenInExpr": [{"Single": {"Name": "h"}}, @@ -175,19 +175,18 @@ {"Op": {"MkOpEq": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "p"}, null]}, - [{"Reference": - [{"Name": "b1"}, - null]}]]}}, + {"Reference": + [{"Name": "b1"}, null]}]}}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "p"}, null]}, - [{"Reference": - [{"Name": "b2"}, - null]}]]}}]}}}}, + {"Reference": + [{"Name": "b2"}, + null]}]}}]}}}}, [{"Generator": {"GenInExpr": [{"Single": {"Name": "p"}}, diff --git a/tests/parse_print/syntax_test/expressions/operators/model.expected.json b/tests/parse_print/syntax_test/expressions/operators/model.expected.json index 6eb74b56f8..cff163610d 100644 --- a/tests/parse_print/syntax_test/expressions/operators/model.expected.json +++ b/tests/parse_print/syntax_test/expressions/operators/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -55,6 +55,20 @@ {"Op": {"MkOpFactorial": {"Op": {"MkOpFactorial": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}}}}]}}, + {"Declaration": + {"Letting": + [{"Name": "a"}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, + [{"ConstantInt": [{"TagInt": []}, 1]}, {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}, {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 5]}]]}}}]}}, {"Declaration": {"Letting": [{"Name": "_indexing"}, @@ -62,6 +76,62 @@ {"MkOpIndexing": [{"Reference": [{"Name": "a"}, null]}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]}}, + {"Declaration": + {"Letting": + [{"Name": "b"}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}]}]]}, + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantInt": [{"TagInt": []}, 1]}]]}}]]}}, + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantInt": [{"TagInt": []}, 1]}]]}}]]}}, + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantInt": [{"TagInt": []}, 1]}]]}}]]}}]]}}}]}}, {"Declaration": {"Letting": [{"Name": "_multiIndex"}, @@ -75,25 +145,50 @@ {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}]}}, + {"Declaration": + {"Letting": + [{"Name": "f"}, + {"Constant": + {"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}]]}}]]}}}]}}, {"Declaration": {"Letting": [{"Name": "_functionUser"}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "f"}, null]}, - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]]}}]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]}}, {"Declaration": {"Letting": [{"Name": "_functionUserMulti"}, {"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Op": - {"MkOpRelationProj": + {"MkOpImage": [{"Reference": [{"Name": "f"}, null]}, - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]]}}, - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]]}}]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}]}}, + {"Declaration": {"Letting": [{"Name": "x"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, {"Declaration": {"Letting": [{"Name": "_functionFactorial"}, {"Op": {"MkOpFactorial": {"Reference": [{"Name": "x"}, null]}}}]}}, {"Declaration": - {"Letting": [{"Name": "_functionInbuilt"}, {"Op": {"MkOpAllDiff": {"Reference": [{"Name": "x"}, null]}}}]}}]} \ No newline at end of file + {"Letting": + [{"Name": "_functionInbuilt"}, + {"Op": + {"MkOpAllDiff": + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}]}]]}, + [{"ConstantInt": [{"TagInt": []}, 1]}, {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}]]}}}}}]}}]} \ No newline at end of file From 40ee555d0f66f4efa5f1625820317578fc423f36 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 15:50:07 +0000 Subject: [PATCH 133/378] Updates test output for custom/issues --- tests/custom/issues/405/stderr.expected | 30 ++++++++++++++++++++----- tests/custom/issues/551/stderr.expected | 10 ++++++--- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/tests/custom/issues/405/stderr.expected b/tests/custom/issues/405/stderr.expected index 5d06d2b042..da912bf863 100644 --- a/tests/custom/issues/405/stderr.expected +++ b/tests/custom/issues/405/stderr.expected @@ -1,6 +1,26 @@ Error: - 405.essence:2:15: -unexpected i -expecting <->, comma, end of input, operator, rest of statement, or statement - such that for i in s . i % 2 = 0 - ^ + Parser error in file: 405.essence Error is: +ValidatorError 405.essence:2:11: + | +2 | such that for i in s . i % 2 = 0 + | ^^^ +Error: Symbol not found "for" + +405.essence:2:15: + | +2 | such that for i in s . i % 2 = 0 + | ^ +Error: Symbol not found "i" + +405.essence:2:15: + | +2 | such that for i in s . i % 2 = 0 + | ^ +Missing , + +405.essence:2:22: + | +2 | such that for i in s . i % 2 = 0 + | ^^^^^^^^^^^ +Skipped tokens + diff --git a/tests/custom/issues/551/stderr.expected b/tests/custom/issues/551/stderr.expected index d813e13309..1182c92d9e 100644 --- a/tests/custom/issues/551/stderr.expected +++ b/tests/custom/issues/551/stderr.expected @@ -1,4 +1,8 @@ Error: - Redefinition of name: blocks - When trying to define it as record field (blocks : function int --> int) - It was already defined as declaration of find blocks: function (total) int(1..5) --> int(1..5) + Parser error in file: 551.essence Error is: +ValidatorError 551.essence:4:28: + | +4 | such that and([true | b <- blocks]) + | ^^^^^^ +Error: Expression of type member blocks of record {blocks : function int --> int} cannot be projected in a comprehension + From cff95afd6335096a310f06b733104ff9172e68eb Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 15:56:15 +0000 Subject: [PATCH 134/378] Updates relation related outputs --- .../stdout.expected | 2 +- .../stdout.expected | 2 +- .../stdout.expected | 4 ++-- .../stdout.expected | 4 ++-- .../stdout.expected | 19 ++++++++------- .../stdout.expected | 10 ++++---- .../stdout.expected | 24 ++++++++++--------- .../stdout.expected | 4 ++-- .../stdout.expected | 2 +- .../stdout.expected | 15 ++++++------ 10 files changed, 45 insertions(+), 41 deletions(-) diff --git a/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/stdout.expected b/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/stdout.expected index 88b9d2ad54..2b8fc615ee 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/stdout.expected @@ -28,6 +28,6 @@ such that | q_13 : set of set of int(1), range(function(relation(tuple (false), tuple (false), tuple (true)) --> {7, -10} - ({} : `set of int`), relation(tuple (false), tuple (true), tuple (true)) --> toSet(mset(0, 0)), - relation(tuple (false), tuple (false), tuple (false)) --> {var4(var9), 0 ** 1}, + relation(tuple (false), tuple (false), tuple (false)) --> {image(var4, var9), 0 ** 1}, relation(tuple (false), tuple (true), tuple (true)) --> participants(partition({6}, {1})))) = q_13]) diff --git a/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/stdout.expected b/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/stdout.expected index 830c5be5b9..7bd50211d9 100644 --- a/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/stdout.expected @@ -62,7 +62,7 @@ such that and([{true} != {false, true} /\ (true \/ (true -> false)) -> false | q_12 <- var9, |q_12| >= - |range(function(var6(6) --> 1 * 4, function(true --> true, false --> false) --> toInt(true)))|]), + |range(function(image(var6, 6) --> 1 * 4, function(true --> true, false --> false) --> toInt(true)))|]), false, or([max(toMSet({2})) != 5 | q_13 : set of set of bool]), false, diff --git a/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/stdout.expected b/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/stdout.expected index f65b8f92f0..6c1fc6b1e3 100644 --- a/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/stdout.expected @@ -8,10 +8,10 @@ find var5: relation of (partition from bool) find var6: partition from bool find var7: function int(4, -4..-2) --> partition from int(2, -1..3) such that - or([function({true, true} --> q_8, {true, true} --> var7(var3), {false} --> partition({-5}), + or([function({true, true} --> q_8, {true, true} --> image(var7, var3), {false} --> partition({-5}), {true, false} --> partition({3})) != - function({true, true} --> var7(var3), ({} : `set of bool`) --> partition({-1}, {6}), + function({true, true} --> image(var7, var3), ({} : `set of bool`) --> partition({-1}, {6}), {true} --> partition({3}, {2})) | q_8 <- var4, q_8 = partition({|(mset() : `mset of bool`)|, var3}, {-9})]), -4 != |({} : `set of int`)| / -9, diff --git a/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/stdout.expected b/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/stdout.expected index 1fc7893950..d5e5a2d905 100644 --- a/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/stdout.expected @@ -43,12 +43,12 @@ such that | q_31 : set of int(-2..3, 3), |q_31| <= toInt(var7) ** toInt(var8)]), [relation((toInt(true), {-8}, function(false --> false), toInt(false), true), (toInt(false), {-6, -9}, function(false --> true), var5, true <-> true), - (5, var6(var2), function(true --> true), toInt(true), false)); + (5, image(var6, var2), function(true --> true), toInt(true), false)); int(5)] = [relation((toInt(true), var1, function(false --> true, false --> true), -1 / -6, var7), (1 / -10, var1, function(true --> true, true --> true), var2, var8), - (-2 / -9, var6(-8), function(false --> true, true --> true), toInt(false), -4 = 10)), + (-2 / -9, image(var6, -8), function(false --> true, true --> true), toInt(false), -4 = 10)), relation((toInt(false), {3, -10}, function(true --> false, false --> false), toInt(false), false != true), (-3 * 7, var1, function(true --> true, false --> true), -10, -8 = 8), (3 + -10, var1, function(false --> false, false --> true), -8 + 7, false)); diff --git a/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/stdout.expected b/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/stdout.expected index e48d12bcf1..bdb111487a 100644 --- a/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/stdout.expected @@ -21,7 +21,7 @@ such that false --> relation((-10 * -9, true = false), (1, -1 = 3), (-6 / 7, false \/ false)), true != false --> relation((1, true -> true), (-4 % -10, false), (toInt(true), false = true))), - var2({-4, -1 * 6}) + image(var2, {-4, -1 * 6}) --> function(true --> relation((-4, true != true), (8, false), (-4, false <-> false)), false != true --> relation((toInt(false), true /\ false), (-1 / -3, -2 != -4), (-8 + -6, false)), @@ -66,7 +66,7 @@ such that (6 * 3, true)), false != false --> relation((-10, -1 != 0), (-7, true /\ true), (toInt(true), true -> true))), - var2(party(toInt(false), partition({-8, -5}))) * 10 + image(var2, party(toInt(false), partition({-8, -5}))) * 10 --> function(true --> relation((-10 % -8, -10 != 6), (-10, true != false), (8, true <-> false))) intersect function(0 != 3 --> relation((-1, true = false), (toInt(true), 5 = -9), (9 % 9, true \/ false)), @@ -74,22 +74,23 @@ such that false != false --> relation((toInt(false), false -> true), (-10, true), (10, -8 != -10)), false != true --> relation((7 / -4, false), (-9 * 7, false <-> true), (toInt(false), -9 = 6))), - var2({|{true}|, 0}) + image(var2, {|{true}|, 0}) --> function(var4 = var4 --> relation((|{8, -7}|, false), (9, 3 != -3 -> (false <-> true)), (0, mset(7, 8) = mset(-9))), toInt(false) in mset(-1, 2) - --> relation((toInt(true) * -8, var4 = var4), (var2(toSet(mset(-3))), var3 = var3), - (var2(participants(partition({5}))), toInt(true) in mset(-9)))), + --> relation((toInt(true) * -8, var4 = var4), + (image(var2, toSet(mset(-3))), var3 = var3), + (image(var2, participants(partition({5}))), toInt(true) in mset(-9)))), -8 / (-8 + toInt(false)) --> function(true --> relation((toInt(false) * toInt(false), var2 = var2), (-6, (true -> false) \/ -5 = 3), (-8, false)), false - --> relation((var2(party(toInt(false), partition({2}))), true), - (var2({-1 % -3, toInt(false), toInt(true)}), true), (9, false)), + --> relation((image(var2, party(toInt(false), partition({2}))), true), + (image(var2, {-1 % -3, toInt(false), toInt(true)}), true), (9, false)), true - --> relation((var2(toSet(mset(-10, -7))), true), (-7 % -7 * 9, var4 != var4), + --> relation((image(var2, toSet(mset(-10, -7))), true), (-7 % -7 * 9, var4 != var4), (|{true}|, true)), true --> toRelation(function(5 --> true)), toInt(true) in mset(-3, -6) --> toRelation(function(-5 --> false, -3 --> false)), @@ -111,7 +112,7 @@ such that --> relation((toInt(true), true = true), (toInt(true), true \/ true), (8, false -> false)), -3 = 9 --> relation((6 + -7, false -> false), (-3 / 6, true), (9 + 4, 0 = -10))), - var2(participants(partition({-1 % 10, -7 + 7, 6, -1}))) + image(var2, participants(partition({-1 % 10, -7 + 7, 6, -1}))) --> function((true = true) in {false} --> relation((6, (mset() : `mset of bool`) = mset(false, true)), (|partition({false}, {false})|, true = (true <-> false)), diff --git a/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected b/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected index 27fe4a02b9..436dc7dd4d 100644 --- a/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected @@ -29,18 +29,18 @@ such that (var3 \/ var3, (false = false) in mset(true, false), -10)), {var1}, relation((10, var3, 2 * -2 in {10, -9}), (|partition({1})|, false, (-10, false) = (-7, false)), - (var1, function(4 --> -3) != var2(false <-> true), var1 <= var1)))}, + (var1, function(4 --> -3) != image(var2, false <-> true), var1 <= var1)))}, {([partition({-4}), partition({2}), partition({1}), partition({-5}), partition({1}); int(5, 1..4)], -9, relation((false, false, toInt(false)), (var3, true, toInt(var3)), (toInt(true) in mset(3, -5), true, 4)), {var1}, - relation((2, var3 /\ var3, var2(var3) != function(-2 --> -4)), + relation((2, var3 /\ var3, image(var2, var3) != function(-2 --> -4)), (1, toInt(false) in mset(7), mset(true) = mset(true, true)), (-2, ({} : `set of bool`) = {false, true}, false /\ false \/ var3)))}, {([partition({-3}, {-9}); int(-4)], 7, relation((var3 in mset(true, false), toInt(false) in {-7}, 5), (toInt(false) in {4}, var3 in (mset() : `mset of bool`), |(mset() : `mset of int`)|), - (-5 in ({} : `set of int`), var2(true <-> true) = var2(var3), var1)), + (-5 in ({} : `set of int`), image(var2, true <-> true) = image(var2, var3), var1)), {7} - {5}, relation((-1, (-9 != 2) in {false, true}, toInt(true) in {-9, 3}), (|({} : `set of bool`)|, toInt(false) in mset(2), true), @@ -68,7 +68,7 @@ such that --> ({8, -3}, function(0 --> 9, 5 --> 4), function(-3 --> 3), (true, 10))) = function([(mset() : `mset of bool`), mset(false, true); int(-1, 3)] - --> ({-10, 6}, var2(-9 != 6), function(-7 --> -7, -3 --> 3), (false, -4)), - [mset(true); int(-4)] --> (({} : `set of int`), var2(false), var2(var3), (false, 10)), + --> ({-10, 6}, image(var2, -9 != 6), function(-7 --> -7, -3 --> 3), (false, -4)), + [mset(true); int(-4)] --> (({} : `set of int`), image(var2, false), image(var2, var3), (false, 10)), [mset(false, true); int(5)] --> ({-7}, function(3 --> -2, -2 --> -9), function(10 --> 0), (false, 7))), and([false | q_4 : int(-4..2, -3..1)]) diff --git a/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/stdout.expected b/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/stdout.expected index 6cfba3f6dc..d275622ecd 100644 --- a/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/stdout.expected @@ -7,7 +7,7 @@ find var4: partition from (bool, bool) find var5: int(-3..3, 5) find var6: tuple (tuple (int(2..4))) such that - function(([var2(true <-> true); int(-1, -1)], partition({var2(true \/ false), {-2}}), + function(([image(var2, true <-> true); int(-1, -1)], partition({image(var2, true \/ false), {-2}}), [function(8 --> false, -7 --> false); int(2)]) --> (relation((function(true --> false, false --> true) != function(false --> true, true --> false), toInt(false) in mset(1)), @@ -15,7 +15,7 @@ such that function(false --> true, true --> false) != function(false --> true, false --> true)), ((false = true) = false, false = false /\ false)), ((10, false), partition({true}, {true}))), - ([({} : `set of int`), var2(true /\ false); int(4..5)], partition({{-5, 2}}), + ([({} : `set of int`), image(var2, true /\ false); int(4..5)], partition({{-5, 2}}), [function(1 --> false, -9 --> true), function(6 --> false), function(-3 --> true, -4 --> false), function(-1 --> true, -5 --> true), function(8 --> true, -9 --> true), function(3 --> true, 6 --> true), function(9 --> true, 9 --> true); @@ -23,34 +23,36 @@ such that --> (relation((false <-> (false <-> true), 1 != 8 \/ false), (var2 != var2, var1 = var1), (true, toInt(false) in mset(-1))), ((7, false), partition({false}, {false}))), - ([{5, -2}, var2(false <-> false); int(3, 5)], partition({var2(false <-> false)}, {var2(-7 != -2)}, {{0}}), + ([{5, -2}, image(var2, false <-> false); int(3, 5)], + partition({image(var2, false <-> false)}, {image(var2, -7 != -2)}, {{0}}), [function(8 --> true, 6 --> false); int(-1)]) --> (toRelation(function(true --> true)), ((-10, true), partition({true}))), - ([({} : `set of int`), var2(true -> false), {9}; int(1..3)], partition({var2(false \/ false)}), - [function(2 --> true, -5 --> true); int(0)]) + ([({} : `set of int`), image(var2, true -> false), {9}; int(1..3)], + partition({image(var2, false \/ false)}), [function(2 --> true, -5 --> true); int(0)]) --> (relation((true, var3 != var3), (var1 > var1, true), (tuple (true) != tuple (false), var6 != var6)), ((5, true), partition({false}))), - ([({} : `set of int`); int(-5)], partition({{-1, -3}}, {var2(-6 = 8), {2, 4}}), + ([({} : `set of int`); int(-5)], partition({{-1, -3}}, {image(var2, -6 = 8), {2, 4}}), [function(-2 --> true, -9 --> false); int(-5)]) --> (toRelation(function(true --> false, false --> false)), ((-8, true), partition({true}))), - ([({} : `set of int`); int(3)], partition({var2(false <-> true), var2(false)}, {var2(false)}), + ([({} : `set of int`); int(3)], + partition({image(var2, false <-> true), image(var2, false)}, {image(var2, false)}), [function(10 --> true), function(-5 --> false), function(-10 --> true), function(7 --> false, 6 --> true), function(10 --> true, -6 --> true), function(7 --> false, 3 --> false), function(8 --> true, 3 --> true); int(-1..5)]) --> (relation((var1 != var1, false), (true, toInt(false) in {-4, 10}), (partition({false}) = partition({false}, {false}), var1 > var1)), ((-4, false), partition({true}, {false}))), - ([var2(false), var2(-6 != 5), var2(true != true), {-3, -3}, {2}, ({} : `set of int`), {5}, var2(false), - {5}, var2(false = false); + ([image(var2, false), image(var2, -6 != 5), image(var2, true != true), {-3, -3}, {2}, ({} : `set of int`), + {5}, image(var2, false), {5}, image(var2, false = false); int(-4..5, 2)], - partition({({} : `set of int`), var2(false), ({} : `set of int`), var2(false <-> true)}), + partition({({} : `set of int`), image(var2, false), ({} : `set of int`), image(var2, false <-> true)}), [function(-10 --> false, 10 --> false), function(6 --> false, 10 --> false), function(-2 --> true, -7 --> true), function(9 --> true, -4 --> false), function(9 --> false); int(1, 0..4)]) --> (toRelation(function(false --> true)), ((-10, false), partition({false}, {true})))) != - function(([var2(false \/ false); int(4, 4)], partition({{-6, 1}}, {{-6, -10}}), + function(([image(var2, false \/ false); int(4, 4)], partition({{-6, 1}}, {{-6, -10}}), [function(0 --> true, -9 --> true); int(1)]) --> (relation((toInt(true) = -10, true <-> false /\ false), (var1 != var1, function(true --> -9, false --> 10) = function(false --> 0, false --> 9)), diff --git a/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/stdout.expected b/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/stdout.expected index 51f34c409a..d8d8b2101a 100644 --- a/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/stdout.expected @@ -15,9 +15,9 @@ such that != function(partition({partition({true}, {false})}, {partition({true, false}), partition({true}, {true}), partition({false, true})}) - --> partition({var2(true -> true)}), + --> partition({image(var2, true -> true)}), partition({partition({false})}, {partition({true}, {false})}, {partition({true})}) - --> partition({var1, var2(false)}, {toInt(true)}), + --> partition({var1, image(var2, false)}, {toInt(true)}), partition({partition({false, true}), partition({true})}, {partition({true})}, {partition({false, true})}) --> partition({toInt(true)}, {-2 ** (-10)}, {5})), and([false | q_6 : int(-3..0), |toSet(mset(5, 1))| <= q_6]) diff --git a/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/stdout.expected b/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/stdout.expected index 555523f7c6..acf6412102 100644 --- a/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/stdout.expected @@ -1,4 +1,4 @@ language Essence 1.3 find f: function (int(1..3), int(1..3)) --> set of int(0..9) -such that and([|f((i, i))| = i + i | i : int(1..3)]) +such that and([|image(f, (i, i))| = i + i | i : int(1..3)]) diff --git a/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/stdout.expected b/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/stdout.expected index 9fd7eeb6a7..5736791c2b 100644 --- a/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/stdout.expected @@ -9,9 +9,10 @@ such that function({relation((true, false, 9), (true, true, -10), (true, false, -6)), relation((true, true, -7), (false, true, 10), (true, true, -8)), relation((true, false, 1), (false, false, -4), (false, false, 1))} - --> {partition({1 * 2}), var5({4, 8} union {-8}), var5(toSet(mset(0, 4)))}, + --> {partition({1 * 2}), image(var5, {4, 8} union {-8}), image(var5, toSet(mset(0, 4)))}, {relation((false, true, 0), (true, true, -10), (false, false, -5))} --> {partition({6, -8})}, - {relation((false, false, 0), (false, true, -2), (true, false, -10))} --> {var5({var2(true -> true)})}, + {relation((false, false, 0), (false, true, -2), (true, false, -10))} + --> {image(var5, {image(var2, true -> true)})}, {relation((true, true, 9), (true, true, -4), (false, false, 2)), relation((false, true, 0), (true, false, 7), (false, false, -5)), relation((true, true, -7), (false, true, 7), (false, false, -7)), @@ -22,15 +23,15 @@ such that relation((true, true, 5), (false, true, 6), (false, false, -6))} --> participants(partition({partition({3})}, {partition({-5}), partition({-8, 3})}, {partition({9})})), {relation((true, false, -5), (true, true, 2), (true, false, 4))} - --> {var5(participants(partition({-9, 0})))}) + --> {image(var5, participants(partition({-9, 0})))}) != function({relation((true, false, 3), (true, false, 2), (true, false, 6)), relation((true, true, 8), (true, false, 8), (false, false, -10)), relation((true, true, -8), (false, true, -6), (false, true, -5)), relation((true, true, 0), (true, true, -10), (false, true, 6)), relation((false, false, -1), (true, true, -6), (false, false, -8))} - --> {var5({5} union {-4, -7}), var5(party(9 ** 4, partition({2}))), partition({toInt(false)}), - partition({toInt(false)})}), + --> {image(var5, {5} union {-4, -7}), image(var5, party(9 ** 4, partition({2}))), + partition({toInt(false)}), partition({toInt(false)})}), relation((relation((true, -7, 3, -4), (true, -5, 0, 5), (false, -9, -9, -8)), function(({} : `set of int`) --> {true}, ({} : `set of int`) --> {false}, {4} --> ({} : `set of bool`), {10} --> {false}), @@ -64,7 +65,7 @@ such that --> 8, (partition({mset(true, false)}, {mset(false)}), relation((-5, false, 1, true), (5, false, -6, false), (6, true, -3, false))) - --> var4((false != true) in {false, true}) * |mset(10, -10)|, + --> image(var4, (false != true) in {false, true}) * |mset(10, -10)|, (partition({(mset() : `mset of bool`)}), relation((8, true, 2, true), (0, true, -4, true), (-2, true, 9, true))) --> toInt(true \/ true) / -7, @@ -73,4 +74,4 @@ such that = function((partition({mset(true, false), mset(false), mset(true, true), (mset() : `mset of bool`)}), relation((3, false, -5, true), (1, false, 10, false), (1, false, 5, false))) - --> toInt(true) ** var4(false \/ false) ** var2(true)) + --> toInt(true) ** image(var4, false \/ false) ** image(var2, true)) From dfc39392ccbebf6ceabf7455ffabce1f6900975e Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 16:04:10 +0000 Subject: [PATCH 135/378] Updates typecheck fails from partition subtraction in autogen tests --- .../stderr.expected | 17 ++ .../stdout.expected | 127 -------------- .../stderr.expected | 23 +++ .../stdout.expected | 157 ------------------ .../typecheck.expected | 89 ---------- .../autogen/315~1435148451_38/stderr.expected | 17 ++ .../autogen/315~1435148451_38/stdout.expected | 95 ----------- .../autogen/316~final/stderr.expected | 17 ++ .../autogen/316~final/stdout.expected | 15 -- .../autogen/317~1435132020_93/stderr.expected | 17 ++ .../autogen/317~1435132020_93/stdout.expected | 11 -- .../autogen/318~final/stderr.expected | 17 ++ .../autogen/318~final/stdout.expected | 4 - .../autogen/319~1435138340_66/stderr.expected | 17 ++ .../autogen/319~1435138340_66/stdout.expected | 11 -- .../autogen/320~final/stderr.expected | 17 ++ .../autogen/320~final/stdout.expected | 4 - .../autogen/321~1435140010_44/stderr.expected | 33 ++++ .../autogen/321~1435140010_44/stdout.expected | 64 ------- .../autogen/322~final/stderr.expected | 17 ++ .../autogen/322~final/stdout.expected | 4 - .../autogen/325~1435147026_26/stderr.expected | 17 ++ .../autogen/325~1435147026_26/stdout.expected | 80 --------- .../autogen/326~final/stderr.expected | 17 ++ .../autogen/326~final/stdout.expected | 4 - .../autogen/427~1435209539_80/stderr.expected | 17 ++ .../autogen/427~1435209539_80/stdout.expected | 17 -- .../autogen/441~1435208191_85/stderr.expected | 17 ++ .../autogen/441~1435208191_85/stdout.expected | 20 --- .../autogen/442~final/stderr.expected | 17 ++ .../autogen/442~final/stdout.expected | 4 - .../autogen/445~1435212982_68/stderr.expected | 33 ++++ .../autogen/445~1435212982_68/stdout.expected | 17 -- .../autogen/446~final/stderr.expected | 17 ++ .../autogen/446~final/stdout.expected | 4 - .../autogen/447~1435213364_36/stderr.expected | 17 ++ .../autogen/447~1435213364_36/stdout.expected | 8 - .../autogen/448~final/stderr.expected | 17 ++ .../autogen/448~final/stdout.expected | 4 - .../autogen/560~1436548014_12/stderr.expected | 17 ++ .../autogen/560~1436548014_12/stdout.expected | 10 -- .../autogen/561~final/stderr.expected | 17 ++ .../autogen/561~final/stdout.expected | 4 - .../autogen/562~1436556139_51/stderr.expected | 17 ++ .../autogen/562~1436556139_51/stdout.expected | 23 --- .../autogen/563~final/stderr.expected | 17 ++ .../autogen/563~final/stdout.expected | 4 - .../autogen/613~1436580506_52/stderr.expected | 17 ++ .../autogen/613~1436580506_52/stdout.expected | 17 -- .../autogen/614~final/stderr.expected | 17 ++ .../autogen/614~final/stdout.expected | 4 - .../autogen/615~1436587408_39/stderr.expected | 17 ++ .../autogen/615~1436587408_39/stdout.expected | 12 -- .../autogen/616~final/stderr.expected | 17 ++ .../autogen/616~final/stdout.expected | 6 - 55 files changed, 497 insertions(+), 819 deletions(-) create mode 100644 tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected delete mode 100644 tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stdout.expected create mode 100644 tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected delete mode 100644 tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stdout.expected delete mode 100644 tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/typecheck.expected create mode 100644 tests/parse_print/autogen/315~1435148451_38/stderr.expected delete mode 100644 tests/parse_print/autogen/315~1435148451_38/stdout.expected create mode 100644 tests/parse_print/autogen/316~final/stderr.expected delete mode 100644 tests/parse_print/autogen/316~final/stdout.expected create mode 100644 tests/parse_print/autogen/317~1435132020_93/stderr.expected delete mode 100644 tests/parse_print/autogen/317~1435132020_93/stdout.expected create mode 100644 tests/parse_print/autogen/318~final/stderr.expected delete mode 100644 tests/parse_print/autogen/318~final/stdout.expected create mode 100644 tests/parse_print/autogen/319~1435138340_66/stderr.expected delete mode 100644 tests/parse_print/autogen/319~1435138340_66/stdout.expected create mode 100644 tests/parse_print/autogen/320~final/stderr.expected delete mode 100644 tests/parse_print/autogen/320~final/stdout.expected create mode 100644 tests/parse_print/autogen/321~1435140010_44/stderr.expected delete mode 100644 tests/parse_print/autogen/321~1435140010_44/stdout.expected create mode 100644 tests/parse_print/autogen/322~final/stderr.expected delete mode 100644 tests/parse_print/autogen/322~final/stdout.expected create mode 100644 tests/parse_print/autogen/325~1435147026_26/stderr.expected delete mode 100644 tests/parse_print/autogen/325~1435147026_26/stdout.expected create mode 100644 tests/parse_print/autogen/326~final/stderr.expected delete mode 100644 tests/parse_print/autogen/326~final/stdout.expected create mode 100644 tests/parse_print/autogen/427~1435209539_80/stderr.expected delete mode 100644 tests/parse_print/autogen/427~1435209539_80/stdout.expected create mode 100644 tests/parse_print/autogen/441~1435208191_85/stderr.expected delete mode 100644 tests/parse_print/autogen/441~1435208191_85/stdout.expected create mode 100644 tests/parse_print/autogen/442~final/stderr.expected delete mode 100644 tests/parse_print/autogen/442~final/stdout.expected create mode 100644 tests/parse_print/autogen/445~1435212982_68/stderr.expected delete mode 100644 tests/parse_print/autogen/445~1435212982_68/stdout.expected create mode 100644 tests/parse_print/autogen/446~final/stderr.expected delete mode 100644 tests/parse_print/autogen/446~final/stdout.expected create mode 100644 tests/parse_print/autogen/447~1435213364_36/stderr.expected delete mode 100644 tests/parse_print/autogen/447~1435213364_36/stdout.expected create mode 100644 tests/parse_print/autogen/448~final/stderr.expected delete mode 100644 tests/parse_print/autogen/448~final/stdout.expected create mode 100644 tests/parse_print/autogen/560~1436548014_12/stderr.expected delete mode 100644 tests/parse_print/autogen/560~1436548014_12/stdout.expected create mode 100644 tests/parse_print/autogen/561~final/stderr.expected delete mode 100644 tests/parse_print/autogen/561~final/stdout.expected create mode 100644 tests/parse_print/autogen/562~1436556139_51/stderr.expected delete mode 100644 tests/parse_print/autogen/562~1436556139_51/stdout.expected create mode 100644 tests/parse_print/autogen/563~final/stderr.expected delete mode 100644 tests/parse_print/autogen/563~final/stdout.expected create mode 100644 tests/parse_print/autogen/613~1436580506_52/stderr.expected delete mode 100644 tests/parse_print/autogen/613~1436580506_52/stdout.expected create mode 100644 tests/parse_print/autogen/614~final/stderr.expected delete mode 100644 tests/parse_print/autogen/614~final/stdout.expected create mode 100644 tests/parse_print/autogen/615~1436587408_39/stderr.expected delete mode 100644 tests/parse_print/autogen/615~1436587408_39/stdout.expected create mode 100644 tests/parse_print/autogen/616~final/stderr.expected delete mode 100644 tests/parse_print/autogen/616~final/stdout.expected diff --git a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected new file mode 100644 index 0000000000..24c905a28a --- /dev/null +++ b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence:175:39: + | +175 | (partition() : `partition from int`) - (partition() : `partition from int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int + +tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence:175:78: + | +175 | (partition() : `partition from int`) - (partition() : `partition from int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int diff --git a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stdout.expected b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stdout.expected deleted file mode 100644 index 9c3a4d5026..0000000000 --- a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stdout.expected +++ /dev/null @@ -1,127 +0,0 @@ -language Essence 1.3 - -find var1: - partition (minNumParts -toInt(false), maxNumParts 3, regular) from - partition (maxNumParts 4 % 4, partSize -5, regular) from set (minSize 5) of int(3, 1) -such that - image(function(mset(function(relation(tuple (2), tuple (2), tuple (1)) --> mset(4), - relation(tuple (0), tuple (2)) --> mset(0, 4, 2), - relation(tuple (0), tuple (4), tuple (4), tuple (2)) --> mset(3, 3)), - function(relation(tuple (0), tuple (1), tuple (0), tuple (1)) --> mset(1, 4, 3), - relation(tuple (5), tuple (0)) --> mset(1, 3, 5), - relation(tuple (5), tuple (5), tuple (0), tuple (0)) --> mset(2, 1), - (relation() : `relation of (int)`) --> mset(2), - relation(tuple (4)) --> (mset() : `mset of int`)), - function(relation(tuple (3), tuple (3), tuple (3)) --> mset(1, 2))) - --> 2 ** 3 ** (4 - 4) >= freq(mset(1), 0 ** 5), - mset(function(relation(tuple (5), tuple (0), tuple (1), tuple (5), tuple (1)) --> mset(5), - relation(tuple (4), tuple (5), tuple (4), tuple (4)) --> mset(5, 5, 1), - (relation() : `relation of (int)`) --> mset(5), - relation(tuple (3), tuple (1)) --> (mset() : `mset of int`))) - --> (relation() : `relation of (bool * bool * function bool --> bool)`) subsetEq - (relation() : `relation of (bool * bool * function bool --> bool)`), - mset(function(relation(tuple (5), tuple (5)) --> mset(2), relation(tuple (4)) --> mset(5, 1), - relation(tuple (0)) --> mset(4))) - --> relation((function(true --> true, false --> false, true --> true), - relation(tuple (2), tuple (1)), mset(5, 5), -5), - (function(false --> false, false --> true, true --> true), - relation(tuple (1), tuple (1), tuple (3), tuple (5)), mset(2), 3 / 1), - (function(true --> true, false --> true), relation(tuple (2), tuple (1), tuple (4)), - mset(2, 3), 1)) - != - relation((function(true --> true), (relation() : `relation of (int)`), mset(1, 2), - toInt(true))), - mset(function(relation(tuple (5)) --> mset(3), relation(tuple (4), tuple (0)) --> mset(4, 4, 4), - relation(tuple (2), tuple (4), tuple (2)) --> mset(5, 2, 4), - relation(tuple (3)) --> mset(1, 0, 0), - (relation() : `relation of (int)`) --> (mset() : `mset of int`)), - function(relation(tuple (1)) --> mset(4, 5)), - function(relation(tuple (3)) --> mset(3, 3, 0), relation(tuple (0), tuple (3)) --> mset(0), - relation(tuple (2), tuple (1)) --> (mset() : `mset of int`))) - --> inverse(function(false --> 3, false --> 3, true --> 3), - function(5 --> false, 0 --> true, 0 --> true, 0 --> false)) - <-> - relation((true, 1, false, true), (false, 4, true, true), (true, 4, true, true)) supsetEq - (relation() : `relation of (bool * int * bool * bool)`)), - mset(function(relation(tuple (2), tuple (4)) --> mset(0, 5, 2)) intersect - function(relation(tuple (4), tuple (2), tuple (3), tuple (3), tuple (5)) --> mset(0)), - (function() : `function relation of (int) --> mset of int`) intersect - (function() : `function relation of (int) --> mset of int`))), - function({relation((tuple (false), ([] : `matrix indexed by [int] of bool`), - (relation() : `relation of (bool * int * int)`))), - relation((tuple (false), [false; int(2)], - relation((false, 3, 5), (true, 2, 1), (true, 3, 4), (false, 2, 0), (false, 4, 1))), - (tuple (true), [false, false, true, false, false; int(0, 8..11)], - (relation() : `relation of (bool * int * int)`)), - (tuple (false), [false; int(2)], relation((true, 2, 0), (true, 1, 5), (false, 1, 1)))), - relation((tuple (true), [false, false, true; int(0, 3..4)], - relation((false, 0, 3), (true, 1, 3), (true, 2, 5), (true, 2, 3), (true, 1, 2))))} - --> mset(product([1, 3, 0, 0; int(3..6)]), -(0 % 4), 0), - ({} : `set of relation of (tuple(bool) * matrix indexed by [int] of bool * - relation of (bool * int * int))`) - --> mset(toInt(0 > 2), toInt(true) / (3 % 4))) - subsetEq - function({relation((tuple (true), [true, false; int(2..3)], relation((false, 3, 0), (false, 3, 3), (true, 2, 4))))} - --> mset(toInt(false -> false), - image(function(true --> 4, false --> 5, false --> 0, false --> 4, false --> 5), 5 >= 3), - |function(true --> true, true --> true, false --> false, false --> true)|), - {relation((tuple (true), [false, false, true, false, true; int(8, 7..8, 6, 2)], relation((false, 3, 5))), - (tuple (false), ([] : `matrix indexed by [int] of bool`), - relation((true, 5, 5), (true, 4, 1), (false, 3, 2), (true, 1, 1), (true, 1, 0))), - (tuple (true), [true, true; int(4, 3)], relation((false, 2, 4), (false, 4, 5), (false, 5, 0))), - (tuple (false), ([] : `matrix indexed by [int] of bool`), - relation((true, 5, 3), (false, 0, 1), (true, 5, 0), (true, 1, 3))), - (tuple (false), ([] : `matrix indexed by [int] of bool`), - relation((true, 1, 2), (true, 5, 0), (true, 2, 0), (true, 0, 4), (false, 0, 4)))), - relation((tuple (true), ([] : `matrix indexed by [int] of bool`), - relation((false, 5, 4), (true, 4, 3), (false, 5, 4), (true, 4, 3), (true, 5, 2))))} - --> ((2, 3, false, 5), mset(0, 1, 3), (true, true), false >= true)[2]), - [l_1 | l_1 : int(5, 2..5)] <=lex [l_2 | l_2 : int(1..2, 2), and(([] : `matrix indexed by [int] of bool`))], - allDiff([partition({(mset() : `mset of partition from bool`), - mset(partition({true}, {true, false, true, true, false}, {true, true, false}, - {true, true, false, true}), - partition({true, true, true, false, true}, {true, true, false, true, false}, - {true, true, true, false}, {false, false, true, true}, - {false, false, true, false, true})), - (mset() : `mset of partition from bool`)}, - {mset(partition({true}, {false, false, true}, {true, true, true, false, false}, - {true, true, true}), - (partition() : `partition from bool`), - partition({false, false, true, false}, {false, false, true, true, false})), - (mset() : `mset of partition from bool`), - mset((partition() : `partition from bool`), partition({true}), - partition({false, true, true, false})), - mset(partition({true, true, true, true}, {false, false}), - partition({true, false, true}, {false, true, false, true, true}, - {false, false, true, false}, {true, false, true, true}), - partition({false})), - (mset() : `mset of partition from bool`)}), - partition({mset((partition() : `partition from bool`), - partition({false, false, true, false}, {false, true, true}, {false, false, true, true}, - {false}), - partition({true, true, true}, {false, false, true, true, true}, {false, false}, - {false, false, false}))}, - {mset(partition({false, true, true, false, false}, {false}, {false, false, false}, - {true, true, false, false}, {true, true}), - partition({true, true, true}, {true, false, false, true}))}), - (partition() : `partition from mset of partition from bool`); - int(3, 4, 2)]), - [l_3 | l_3 : int(2, 0), false] !true, - relation((false, l_5, l_5, true), (false, l_5, l_5, true)) --> true = true, - relation((true, l_5, l_5, false), (false, l_5, l_4, true), (true, l_5, l_5, false)) - --> true = true), - (relation() : `relation of (bool * int * int * bool)`)), - allDiff(([] : `matrix indexed by [int] of function bool --> bool`))], - [l_7 | l_6 : bool, l_7 : bool] - [freq(mset((relation() : `relation of (mset of int * partition from int)`)), - relation((mset(factorial(1), toInt(true), factorial(0)), partition({0 / 0}, {2 - 4})), - (toMSet({2}), partition({factorial(1), 5 % 2, -1}, {1 % 2, 4 % 4, -3})), - (mset(4, 0, 4) - mset(4), - (partition() : `partition from int`) - (partition() : `partition from int`)), - (toMSet({3}), partition({0 ** 3, 0}, {0 / 5}, {-0, 5 ** 0})), - (mset(toInt(true)), - partition({0 ** 5, 4 ** 4}, {toInt(false), 2 % 1, toInt(false)}, - {1 / 4, toInt(true), 3 % 2, toInt(false)}, {4 % 3, factorial(3), 3 - 2}, - {-0, -0, 3 - 0}))))] diff --git a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected new file mode 100644 index 0000000000..0bc70f6dd4 --- /dev/null +++ b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected @@ -0,0 +1,23 @@ +Error: + Parser error in file: tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence:109:40: + | +109 | together(false != false, true <-> true, partition({false, true})) --> var2 + | ^^^^^^^^^^^^^^ +Type error: + Expected: set of ? + Got: bool + +tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence:109:56: + | +109 | together(false != false, true <-> true, partition({false, true})) --> var2 + | ^^^^^^^^^^^^^ +Type error: + Expected: partition from ? + Got: bool + +tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence:109:71: + | +109 | together(false != false, true <-> true, partition({false, true})) --> var2 + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Unexpected argument diff --git a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stdout.expected b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stdout.expected deleted file mode 100644 index 7577377bd2..0000000000 --- a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stdout.expected +++ /dev/null @@ -1,157 +0,0 @@ -language Essence 1.3 - -find var1: function bool --> set of int(-3) -find var2: set of bool -find var3: (int(-5..-1), (bool, int(-3, -1))) -find var4: function partition from bool --> int(-5) -find var5: relation of (tuple (int(-1..3, -1)) * (bool, int(-2..3)) * tuple (bool)) -find var6: partition from set of bool -such that - false, - participants(partition({relation(tuple (function(false --> 2 != -3, false = true --> true, - false --> true /\ false)), - tuple (function(true --> 7 = -7)), tuple (function(true /\ false --> -6 != -3)))}, - {relation(tuple (function(true --> true)), - tuple (function(false --> false, false --> true) - function(false --> true)), - tuple (function(false \/ false --> false, true -> false --> false, - false /\ false --> false = false)))}, - {relation(tuple (function(true --> false) intersect function(true --> true, true --> false)), - tuple (function(true --> false) - function(false --> true, true --> false)), - tuple (function(false --> false, true --> false) - - function(false --> true, true --> true)))}, - {relation(tuple (function(true /\ false --> true /\ false)), - tuple (function(true --> true -> true)), - tuple (function(false --> true, true --> true) intersect - function(false --> true, false --> false)))}, - {relation(tuple (function(true != true --> true \/ true, true --> true = true, - true --> true = true, false --> true = true)), - tuple (function(false \/ true --> true, true = true --> false \/ true, - true != false --> -6 = 2, true --> true /\ false)), - tuple (function(true --> true = true))), - relation(tuple (function(true -> false --> false \/ false)), - tuple (function(false --> true) intersect function(true --> true)), - tuple (function(false != true --> true -> false, true --> -3 = -6)))})) - = - {relation(tuple (function(false --> false, false --> false) - function(false --> false)), - tuple (function(false --> true) intersect function(true --> true)), - tuple (function(false --> false, true --> false) intersect function(false --> true))) - union - relation(tuple (function(5 = 5 --> true /\ false, true <-> false --> -2 != 0)), - tuple (function(true --> false) - function(false --> true, true --> true)), - tuple (function(false --> false) - function(true --> true, true --> true))), - relation(tuple (function(false <-> false --> true, true = false --> false, true -> true --> false, - false --> true)), - tuple (function(true \/ false --> 9 != -9)), - tuple (function(false --> false) intersect function(false --> true, false --> false))) - intersect - relation(tuple (function(true = false --> true = true, false -> true --> false \/ false, -4 != -1 --> true, - true -> false --> 4 = -6)), - tuple (function(-2 != -3 --> false -> true, true <-> true --> true)), - tuple (function(false --> false, false --> false) - function(false --> true, false --> true))), - relation(tuple (function(partition({-6}, {2}) = partition({-4}) --> false, - (false /\ true) in mset(true, false) --> true \/ false -> true \/ false, - {2, 8} = ({} : `set of int`) --> false, true --> partition({-4}) != partition({-3}))), - tuple (function((true != false) = (true \/ false) --> var3 != var3)), - tuple (function(true --> true, false --> 7 != -3, false -> true --> true \/ true) intersect - (function(true --> false, true --> false) - - (function(false --> true, false --> true) - function(false --> false, false --> true))))), - relation(tuple (function(3 != -6 --> true, true --> true <-> true)), - tuple (function(true --> false) intersect function(true --> false)), - tuple (function(-8 = -5 --> false <-> true))) - intersect - relation(tuple (function(false --> true) - function(true --> true, false --> false)), - tuple (function(true --> false) - function(true --> false, true --> true)), - tuple (function(false --> true, false --> true) - function(false --> true))), - relation(tuple (function(-3 = -1 --> false)), - tuple (function(true --> false, false --> false) intersect function(false --> false)), - tuple (function(true --> true, true --> false) - function(true --> false))) - - - relation(tuple (function(true --> false, false /\ true --> true != true, 9 != 9 --> -2 = 0, - true \/ false --> true)), - tuple (function(2 = -8 --> false = false, true --> -6 = -8, true --> true, true --> true /\ true)), - tuple (function(false --> false) - function(true --> true))), - relation(tuple (function(false = false --> false)), - tuple (function(false --> true, true --> false) intersect function(false --> false)), - tuple (function(false --> true <-> false, true --> 5 != 3, true --> false != false))) - - - relation(tuple (function(false --> true, false --> true) - function(true --> true)), - tuple (function(true --> true, true --> false) - function(true --> true)), - tuple (function(true \/ false --> false))), - relation(tuple (function(false --> -1 != -6, false --> 9 = 8, true --> false -> false, false --> false /\ false) - intersect (function(false --> false, true --> true) intersect function(-4 != -8 --> -4 != 9))), - tuple (function(true --> false, false --> false, false --> -3 = 3, true <-> false --> 4 = 6) intersect - function(false --> true, false <-> false --> true != true, false -> false --> 4 = 8)), - tuple (function(false <-> -5 = -7 --> (true -> false) /\ false = false, - var2 = var2 --> toInt(false) in mset(-8, -5), - together(false != false, true <-> true) --> var2 supsetEq var2))), - relation(tuple (function(false --> true, true --> true) - function(true --> true, false --> true) - - function(true --> false, false --> true) intersect - function(true = false --> true, false -> false --> true, false --> false \/ true)), - tuple (function(true --> true) intersect function(true --> false, false --> false) intersect - function(true \/ true --> true -> false, false --> false, true = false --> false)), - tuple (function(false \/ true --> -5 != 7, true /\ true --> false -> true) - - function(false --> false, true --> false) intersect function(false --> true)))}, - false, - relation(tuple (function(var2 --> partition({true})) - function({false, false} --> partition({true}))), - tuple (function({false, true} --> partition({true, false}), var2 --> partition({true}), - var2 --> partition({false})) - intersect - function(var2 --> partition({true, false}), var2 --> partition({true}, {true}), - var2 --> partition({false}), var2 --> partition({false, true}))), - tuple (function(var2 --> partition({false}), ({} : `set of bool`) --> partition({false, false})) - - function({false} --> partition({true})))) - - - relation(tuple (function(var2 --> partition({true = true}, {false}, {true -> true, 5 = 3}), - {false, true != false, false} --> partition({true}))), - tuple (function(var2 --> partition({7 = 5, -6 = -1}), - var2 --> partition({false \/ true}, {false <-> false, true}), - participants(partition({false, false})) - --> partition({true}, {false}, {9 != -2}, {false <-> true}), - var2 --> partition({true <-> false, true = false, true != true}), - {false, true -> true, true, false} --> partition({true = false}))), - tuple (function(var2 --> partition({true, true}), {true} --> partition({false})) - - function({false, true} --> partition({false}, {true}), ({} : `set of bool`) --> partition({true}), - {false, true} --> partition({true})))) - = - relation(tuple (function(var2 --> partition({true}, {true}), var2 --> partition({false}, {false})) intersect - function(var2 --> partition({true}), {false} --> partition({false, true}), - var2 --> partition({true}, {true})) - intersect function(var2 --> partition({false})) - intersect - function({true, -10 = -6} --> partition({false -> true}, {false /\ true, 10 != -4, true}), - toSet(mset(false, true)) --> partition({6 != 6}, {10 != -1}))), - tuple (function(var2 --> partition({true <-> true, false \/ false}), - toSet(mset(false, false)) --> partition({true -> true, false}), - {false, true} --> partition({false /\ false, true -> false}, {6 != 4})) - - - function({true, true} --> partition({true}), var2 --> partition({false}, {true}), - {false, true} --> partition({true}), ({} : `set of bool`) --> partition({true, false})) - - - function(var2 --> partition({false, false /\ false, true}, {true -> false}), - var2 --> partition({false \/ true, false != true, false}, {false \/ true}), - toSet((mset() : `mset of bool`)) --> partition({true -> false, false, false}), - {false \/ false, true -> true, false \/ true} --> partition({9 = -1}))), - tuple (function(party(true, partition({true, false})) intersect - party(false in mset(false), partition({true, true})) - --> partition({false -> false -> (false -> true), (true -> false) = (-8 = 9)}, - {var3 != var3}), - range(function(0 = -10 --> false = true, -5 = -7 --> -6 = -3)) - --> partition({(mset() : `mset of int`) = mset(-10), false}, - {function(false --> 9) != function(true --> -10, false --> 6), - (false \/ true) /\ true = true}), - var2 - --> partition({6 in mset(6, -2)}, {false, (false <-> false) in {true}}, {var6 = var6}, - {var3 = var3}, {var6 != var6})))), - and([function({partition({false}, {false}), partition({false, true}), partition({false}, {true}), - partition({false})} - --> {tuple (5), tuple (5), tuple (-6)}) - = - function({partition({false}), partition({false}, {true}), partition({true, true})} - --> ({} : `set of tuple(int)`), - {partition({true}), partition({false}), partition({false, true}), partition({true, true})} - --> {tuple (-2), tuple (-2), tuple (-1)}, - {partition({false}), partition({false}), partition({true})} --> {tuple (-10), tuple (7)}, - {partition({true, true})} --> {tuple (-10)}) - | q_7 : set of bool, -10 >= |q_7|]), - min(party(var4(partition({false})) / (-5 * -9 * toInt(true)), partition({10, -4})) union {-9 * 5 / (-9 % -1), 1}) = - -4 diff --git a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/typecheck.expected deleted file mode 100644 index 6baa0833ab..0000000000 --- a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/typecheck.expected +++ /dev/null @@ -1,89 +0,0 @@ -Error: - In a 'such that' statement: - participants(partition({relation(tuple (function(false --> 2 != -3, false = true --> true, - false --> true /\ false)), - tuple (function(true --> 7 = -7)), - tuple (function(true /\ false --> -6 != -3)))}, - {relation(tuple (function(true --> true)), - tuple (function(false --> false, false --> true) - function(false --> true)), - tuple (function(false \/ false --> false, true -> false --> false, - false /\ false --> false = false)))}, - {relation(tuple (function(true --> false) intersect - function(true --> true, true --> false)), - tuple (function(true --> false) - function(false --> true, true --> false)), - tuple (function(false --> false, true --> false) - - function(false --> true, true --> true)))}, - {relation(tuple (function(true /\ false --> true /\ false)), - tuple (function(true --> true -> true)), - tuple (function(false --> true, true --> true) intersect - function(false --> true, false --> false)))}, - {relation(tuple (function(true != true --> true \/ true, true --> true = true, - true --> true = true, false --> true = true)), - tuple (function(false \/ true --> true, true = true --> false \/ true, - true != false --> -6 = 2, true --> true /\ false)), - tuple (function(true --> true = true))), - relation(tuple (function(true -> false --> false \/ false)), - tuple (function(false --> true) intersect function(true --> true)), - tuple (function(false != true --> true -> false, true --> -3 = -6)))})) - = - {relation(tuple (function(false --> false, false --> false) - function(false --> false)), - tuple (function(false --> true) intersect function(true --> true)), - tuple (function(false --> false, true --> false) intersect function(false --> true))) - union - relation(tuple (function(5 = 5 --> true /\ false, true <-> false --> -2 != 0)), - tuple (function(true --> false) - function(false --> true, true --> true)), - tuple (function(false --> false) - function(true --> true, true --> true))), - relation(tuple (function(false <-> false --> true, true = false --> false, true -> true --> false, - false --> true)), - tuple (function(true \/ false --> 9 != -9)), - tuple (function(false --> false) intersect function(false --> true, false --> false))) - intersect - relation(tuple (function(true = false --> true = true, false -> true --> false \/ false, -4 != -1 --> true, - true -> false --> 4 = -6)), - tuple (function(-2 != -3 --> false -> true, true <-> true --> true)), - tuple (function(false --> false, false --> false) - function(false --> true, false --> true))), - relation(tuple (function(partition({-6}, {2}) = partition({-4}) --> false, - (false /\ true) in mset(true, false) --> true \/ false -> true \/ false, - {2, 8} = ({} : `set of int`) --> false, true --> partition({-4}) != partition({-3}))), - tuple (function((true != false) = (true \/ false) --> var3 != var3)), - tuple (function(true --> true, false --> 7 != -3, false -> true --> true \/ true) intersect - (function(true --> false, true --> false) - - (function(false --> true, false --> true) - function(false --> false, false --> true))))), - relation(tuple (function(3 != -6 --> true, true --> true <-> true)), - tuple (function(true --> false) intersect function(true --> false)), - tuple (function(-8 = -5 --> false <-> true))) - intersect - relation(tuple (function(false --> true) - function(true --> true, false --> false)), - tuple (function(true --> false) - function(true --> false, true --> true)), - tuple (function(false --> true, false --> true) - function(false --> true))), - relation(tuple (function(-3 = -1 --> false)), - tuple (function(true --> false, false --> false) intersect function(false --> false)), - tuple (function(true --> true, true --> false) - function(true --> false))) - - - relation(tuple (function(true --> false, false /\ true --> true != true, 9 != 9 --> -2 = 0, - true \/ false --> true)), - tuple (function(2 = -8 --> false = false, true --> -6 = -8, true --> true, true --> true /\ true)), - tuple (function(false --> false) - function(true --> true))), - relation(tuple (function(false = false --> false)), - tuple (function(false --> true, true --> false) intersect function(false --> false)), - tuple (function(false --> true <-> false, true --> 5 != 3, true --> false != false))) - - - relation(tuple (function(false --> true, false --> true) - function(true --> true)), - tuple (function(true --> true, true --> false) - function(true --> true)), - tuple (function(true \/ false --> false))), - relation(tuple (function(false --> -1 != -6, false --> 9 = 8, true --> false -> false, - false --> false /\ false) - intersect (function(false --> false, true --> true) intersect function(-4 != -8 --> -4 != 9))), - tuple (function(true --> false, false --> false, false --> -3 = 3, true <-> false --> 4 = 6) intersect - function(false --> true, false <-> false --> true != true, false -> false --> 4 = 8)), - tuple (function(false <-> -5 = -7 --> (true -> false) /\ false = false, - var2 = var2 --> toInt(false) in mset(-8, -5), - together(false != false, true <-> true) --> var2 supsetEq var2))), - relation(tuple (function(false --> true, true --> true) - function(true --> true, false --> true) - - function(true --> false, false --> true) intersect - function(true = false --> true, false -> false --> true, false --> false \/ true)), - tuple (function(true --> true) intersect function(true --> false, false --> false) intersect - function(true \/ true --> true -> false, false --> false, true = false --> false)), - tuple (function(false \/ true --> -5 != 7, true /\ true --> false -> true) - - function(false --> false, true --> false) intersect function(false --> true)))} - Error: Type error in together(false != false, true <-> true) \ No newline at end of file diff --git a/tests/parse_print/autogen/315~1435148451_38/stderr.expected b/tests/parse_print/autogen/315~1435148451_38/stderr.expected new file mode 100644 index 0000000000..495ffaa6a2 --- /dev/null +++ b/tests/parse_print/autogen/315~1435148451_38/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/315~1435148451_38/spec.essence Error is: +ValidatorError tests/parse_print/autogen/315~1435148451_38/spec.essence:19:44: + | +19 | tuple (true); int(1..4)] --> partition({false, true, true}, {false, false}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/315~1435148451_38/spec.essence:22:44: + | +22 | partition({false, false, true, true, true}, {false, true, true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/315~1435148451_38/stdout.expected b/tests/parse_print/autogen/315~1435148451_38/stdout.expected deleted file mode 100644 index 860f103cd5..0000000000 --- a/tests/parse_print/autogen/315~1435148451_38/stdout.expected +++ /dev/null @@ -1,95 +0,0 @@ -language Essence 1.3 - -find var1: set (minSize 0, maxSize 1) of mset (maxSize 1) of bool -find var2: set (maxSize -3) of matrix indexed by [int(3, 3)] of bool -find var3: partition (maxNumParts 0 / 5, minPartSize 1 / 0) from function (minSize 1, maxSize 3) bool --> bool -such that - !true, - function([tuple (true), tuple (false), tuple (true); int(5, 4, 1)] - --> partition({false, false, true}, {true}, {false, true, false, false, true}, {true}, - {true, true, false}), - [tuple (true), tuple (false); int(3..4)] - --> partition({true <= true, false > true, false < false, true < false, false < true}, - {true, false >= true, true < true, false -> true}), - [tuple (false), tuple (false), tuple (true), tuple (true); int(1..4)] - --> partition({false, true, true}, {false, false}, {true, true, false, false}) - - partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true}), - [tuple (false), tuple (true), tuple (true); int(9, 1..2)] - --> partition({true < true, false < false, false > true}, - {true > true, true <-> false, false <= false, true, true != false}, {!true, false})) - supset function([tuple (true), tuple (false); int(1, 0)] --> partition({true, false, true, true, true})), - false, - apart({relation((({} : `set of int`), partition({true, true, true, true}))), - (relation() : `relation of (set of int * partition from bool)`)}, - partition({(relation() : `relation of (set of int * partition from bool)`), - relation(({0, 4}, - partition({false, false, true, true, false}, {true, false, false, true, true}, - {false, true, false}, {true, true, true})), - ({4, 1}, - partition({false, true, false, false, false}, {false, false, false, false, true}, - {false, false}, {false, false, true}, {true, false})), - ({1, 1, 4}, partition({false, false, false, false})), - ({0}, (partition() : `partition from bool`))), - relation(({1, 5}, partition({true, true}, {true})), - ({3, 4}, partition({false, false, true, false, true})), - ({2, 1}, partition({true, false, false}, {false, false}, {true, true})), - ({5}, partition({false, false, false, false, false}, {true}))), - relation((({} : `set of int`), - partition({false, true, false, true, true}, {true, false, false, false}))), - relation((({} : `set of int`), - partition({false, false, false, true, true}, {false, false, false, false, false}, - {false, true}, {true})), - ({4, 0}, - partition({true, false, true, true}, {true, true}, {false}, - {true, false, true, true, false}, {true, false, true})), - ({4, 4}, (partition() : `partition from bool`)))}, - {(relation() : `relation of (set of int * partition from bool)`), - relation(({0, 1, 1}, partition({true, false}, {true})), - ({5, 4, 5}, - partition({true}, {true, true, true, false, true}, {false, false, false, false}, - {true, true})), - ({2, 4, 4}, - partition({false, false, true, false, true}, {false}, {false, true, true, false, false}, - {true, true, false})), - ({4}, - partition({false, true}, {true, true, false, false}, {false, true}, - {false, true, false, false}, {true, false, false, false}))), - relation((({} : `set of int`), - partition({true, true, false}, {false, false, false}, {false, false, true, false, false}, - {false, true}))), - relation(({2, 3, 3}, partition({false, false, true}))), - relation(({4, 5, 4}, partition({true, false, false, true, false}, {false, true, true})), - ({2}, - partition({false, false, true}, {true, true}, {false, true, true}, - {false, false, false})))}, - {relation(({5, 4}, - partition({false, true, false, true, true}, {true, false}, {true, true, false}, - {false, false, false, false, true})), - ({1, 1, 4}, - partition({false}, {false, false}, {true, false, true, false, false}, {false}, - {false, true, true, true})), - ({1, 5}, - partition({true, true, true, true, false}, {false, false, true, false, false}, - {true, false}, {false}))), - relation(({3, 5, 3}, partition({false, false, true, false, false}, {true, true, true})), - ({1, 5, 1}, - partition({true, false}, {false, true}, {true, true, true, true}, - {true, true, true, false, false}, {true})), - ({4, 5}, - partition({false, true}, {true}, {false, false, true}, {true, true, true, false, false}, - {true, true, false, false, false})), - ({5, 2, 1}, partition({false}, {true, true, true, true}, {false, true, false}))), - relation(({5, 3, 5}, (partition() : `partition from bool`)), - (({} : `set of int`), (partition() : `partition from bool`)), - ({0}, partition({false, false, false}, {false, true, true, false}, {true, true, true}))), - (relation() : `relation of (set of int * partition from bool)`), - (relation() : `relation of (set of int * partition from bool)`)}, - {relation(({2}, partition({false, true, false, false, true})), - ({4, 5, 1}, (partition() : `partition from bool`)), - ({3, 4, 5}, partition({false, false, true, false, true})), - ({0}, - partition({false, true, true, false}, {false, false, true}, {true, false, false, false}, - {false, true})))})), - mset((mset() : `mset of tuple(bool)`)) subset - mset((mset() : `mset of tuple(bool)`), mset(tuple (false), tuple (false))) diff --git a/tests/parse_print/autogen/316~final/stderr.expected b/tests/parse_print/autogen/316~final/stderr.expected new file mode 100644 index 0000000000..14613db154 --- /dev/null +++ b/tests/parse_print/autogen/316~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/316~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/316~final/spec.essence:14:44: + | +14 | tuple (true); int(1..4)] --> partition({false, true, true}, {false, false}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/316~final/spec.essence:17:44: + | +17 | partition({false, false, true, true, true}, {false, true, true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/316~final/stdout.expected b/tests/parse_print/autogen/316~final/stdout.expected deleted file mode 100644 index c714fd71a5..0000000000 --- a/tests/parse_print/autogen/316~final/stdout.expected +++ /dev/null @@ -1,15 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that - function([tuple (true), tuple (false), tuple (true); int(5, 4, 1)] - --> partition({false, false, true}, {true}, {false, true, false, false, true}, {true}, - {true, true, false}), - [tuple (true), tuple (false); int(3..4)] - --> partition({true <= true, false > true, false < false, true < false, false < true}, - {true, false >= true, true < true, false -> true}), - [tuple (false), tuple (false), tuple (true), tuple (true); int(1..4)] - --> partition({false, true, true}, {false, false}, {true, true, false, false}) - - partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true})) - supset function([tuple (true), tuple (false); int(1, 0)] --> partition({true, false, true, true, true})) diff --git a/tests/parse_print/autogen/317~1435132020_93/stderr.expected b/tests/parse_print/autogen/317~1435132020_93/stderr.expected new file mode 100644 index 0000000000..d3d2471bab --- /dev/null +++ b/tests/parse_print/autogen/317~1435132020_93/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/317~1435132020_93/spec.essence Error is: +ValidatorError tests/parse_print/autogen/317~1435132020_93/spec.essence:8:18: + | +8 | participants(partition({4, 0, 3}, {0, 0, 2, 4}) - + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int + +tests/parse_print/autogen/317~1435132020_93/spec.essence:9:18: + | +9 | partition({2, 1, 2}, {2, 1, 3, 0, 1}, {1, 5, 0, 5}, {3, 2})) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int diff --git a/tests/parse_print/autogen/317~1435132020_93/stdout.expected b/tests/parse_print/autogen/317~1435132020_93/stdout.expected deleted file mode 100644 index f00077f1f4..0000000000 --- a/tests/parse_print/autogen/317~1435132020_93/stdout.expected +++ /dev/null @@ -1,11 +0,0 @@ -language Essence 1.3 - -find var1: bool -such that - var1, - var1, - var1, - participants(partition({4, 0, 3}, {0, 0, 2, 4}) - partition({2, 1, 2}, {2, 1, 3, 0, 1}, {1, 5, 0, 5}, {3, 2})) = - {4, 5}, - var1, - false diff --git a/tests/parse_print/autogen/318~final/stderr.expected b/tests/parse_print/autogen/318~final/stderr.expected new file mode 100644 index 0000000000..ed3efaf227 --- /dev/null +++ b/tests/parse_print/autogen/318~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/318~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/318~final/spec.essence:4:24: + | +4 | such that participants(partition({0}) - partition({4})) = {5} + | ^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int + +tests/parse_print/autogen/318~final/spec.essence:4:41: + | +4 | such that participants(partition({0}) - partition({4})) = {5} + | ^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int diff --git a/tests/parse_print/autogen/318~final/stdout.expected b/tests/parse_print/autogen/318~final/stdout.expected deleted file mode 100644 index 2d5c0f8845..0000000000 --- a/tests/parse_print/autogen/318~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that participants(partition({0}) - partition({4})) = {5} diff --git a/tests/parse_print/autogen/319~1435138340_66/stderr.expected b/tests/parse_print/autogen/319~1435138340_66/stderr.expected new file mode 100644 index 0000000000..a8403dea6a --- /dev/null +++ b/tests/parse_print/autogen/319~1435138340_66/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/319~1435138340_66/spec.essence Error is: +ValidatorError tests/parse_print/autogen/319~1435138340_66/spec.essence:9:5: + | +9 | (partition() : `partition from bool`) - + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/319~1435138340_66/spec.essence:10:5: + | +10 | partition({false, false, true}, {false, true, false, true, false}, {false}) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/319~1435138340_66/stdout.expected b/tests/parse_print/autogen/319~1435138340_66/stdout.expected deleted file mode 100644 index 792c823245..0000000000 --- a/tests/parse_print/autogen/319~1435138340_66/stdout.expected +++ /dev/null @@ -1,11 +0,0 @@ -language Essence 1.3 - -find var1: function (minSize 5, maxSize 5, bijective) bool --> bool -find var2: (bool, bool, bool) -such that - [false; int(0)] <=lex [false, false; int(0..1)] <-> ({} : `set of bool`) subsetEq {false, false, true}, - (mset(true, false, false) supset (mset() : `mset of bool`)) > !(true < false), - (partition() : `partition from bool`) - partition({false, false, true}, {false, true, false, true, false}, {false}) - in - {partition({true, true, false, true, true}), - partition({true, true, true, false, true}, {false, true, false, false})} diff --git a/tests/parse_print/autogen/320~final/stderr.expected b/tests/parse_print/autogen/320~final/stderr.expected new file mode 100644 index 0000000000..bc8637611f --- /dev/null +++ b/tests/parse_print/autogen/320~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/320~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/320~final/spec.essence:5:5: + | +5 | (partition() : `partition from bool`) - partition({false}) in + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/320~final/spec.essence:5:45: + | +5 | (partition() : `partition from bool`) - partition({false}) in + | ^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/320~final/stdout.expected b/tests/parse_print/autogen/320~final/stdout.expected deleted file mode 100644 index 699daf4c36..0000000000 --- a/tests/parse_print/autogen/320~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that (partition() : `partition from bool`) - partition({false}) in {partition({true, true, false, true, true})} diff --git a/tests/parse_print/autogen/321~1435140010_44/stderr.expected b/tests/parse_print/autogen/321~1435140010_44/stderr.expected new file mode 100644 index 0000000000..1601343572 --- /dev/null +++ b/tests/parse_print/autogen/321~1435140010_44/stderr.expected @@ -0,0 +1,33 @@ +Error: + Parser error in file: tests/parse_print/autogen/321~1435140010_44/spec.essence Error is: +ValidatorError tests/parse_print/autogen/321~1435140010_44/spec.essence:57:14: + | +57 | partition({true -> true}, {true <= false, false <-> false, false <-> false}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/321~1435140010_44/spec.essence:62:14: + | +62 | (partition({false, false, false, true, false}, {true, true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: ? + +tests/parse_print/autogen/321~1435140010_44/spec.essence:62:15: + | +62 | (partition({false, false, false, true, false}, {true, true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/321~1435140010_44/spec.essence:65:15: + | +65 | partition({true}, {true, true, true}, {false, true, false}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/321~1435140010_44/stdout.expected b/tests/parse_print/autogen/321~1435140010_44/stdout.expected deleted file mode 100644 index a944d477dd..0000000000 --- a/tests/parse_print/autogen/321~1435140010_44/stdout.expected +++ /dev/null @@ -1,64 +0,0 @@ -language Essence 1.3 - -find var1: relation (minSize 2, maxSize 2) of (partition (maxNumParts 2, partSize 4, regular) from bool) -such that - allDiff([relation(([false, false, false, true, true; int(12, 6, 9..11)], - partition({true, true, true}, {true, true, false}, {true, true, true}, {false, true}, - {false, true}), - (mset() : `mset of bool`)), - ([false, true; int(2, 0)], partition({true}, {false, true, true}), mset(true)), - ([true, true, false, true; int(0, 4, 5..6)], partition({true, false, true, true, false}, {true}), - mset(false, false, false)), - ([false, false, false, true, false; int(10..14)], - partition({false, false}, {true, false, true, true, true}, {true, true, true, false, true}, - {false, true}, {true, false, true, false}), - (mset() : `mset of bool`)), - ([true, false, true, false; int(0, 10, 7, 11)], partition({true}, {true, false}), - mset(true, true, true))), - relation(([true, false, false, false, true; int(1..5)], partition({false, false}, {false}), - mset(true, true, false)), - ([false, false, true, false; int(9, 6..8)], - partition({true, false, false, false, false}, {true, false, true, true}, {false, true}, - {false, false, true, false}), - mset(true))), - relation(([false, false, true, false; int(10, 6..8)], - partition({true}, {true, true}, {true, false, false, false}, {false, false, false}), - mset(true, false)), - ([false, true, true; int(2, 3, 8)], - partition({true, false, false, true, false}, {false, true, false, true}, {true, false}, - {true, true, true, false, false}), - mset(false, false, true)), - ([false, true, false, true, false; int(1, 7..8, 9..10)], - partition({true, false}, {true, true, false, true}, {false}), mset(false, false, true)), - ([false, true, true; int(7..8, 6)], partition({true, true}), mset(true)), - ([true, true, true; int(5..6, 1)], - partition({true, true, true, true}, {false}, {true, true}, {true, false, false, true}, - {false, false, true, true}), - mset(false, true, true))), - relation(([true, true, true; int(8, 1, 5)], partition({true, true}, {true, false, false}), - (mset() : `mset of bool`)), - ([true, false; int(3, 5)], partition({false, false}), mset(true)), - (([] : `matrix indexed by [int] of bool`), partition({false, false}, {true, true, true, false}), - mset(false, false, true))); - int(9, 0..2)]), - image((function() : `function (bool, bool) --> matrix indexed by [int] of bool`), (true -> true, false -> false)) - [sum([l_2 % l_1 | l_1 : int(2..4, 1..5), l_2 : int(3, 2)])], - (mset() : `mset of mset of function bool --> bool`) subsetEq (mset() : `mset of mset of function bool --> bool`), - together({and([true, true, false, true; int(2, 11, 4, 3)]), false >= false <-> false >= false, - (true <-> false) < (false > false)}, - partition({true -> true}, {true <= false, false <-> false, false <-> false}, - {false -> true, true >= false, false <= true, false <-> true}, - {false -> false, true > false, true >= true, true <-> true}, - {true != true, !true, false <-> false, true <= false, true >= false}) - - - (partition({false, false, false, true, false}, {true, true}, {false, false, false, false}, - {true, true, false, false, true}) - - partition({true}, {true, true, true}, {false, true, false}, {false, true, true, true}))), - apart({({false}, mset(true)), ({true, true, true}, mset(true, false))}, - (partition() : `partition from (set of bool, mset of bool)`)), - false, - flatten([[false, false, true; int(0..2)], [false, false, false, true; int(7..10)], - [false, false, false, false, true; int(1..3, 10..11)], - [false, false, true, true, true; int(2, 10, 0, 12, 7)]; - int(9..10, 3, 7)]) - <=lex ([] : `matrix indexed by [int] of bool`) diff --git a/tests/parse_print/autogen/322~final/stderr.expected b/tests/parse_print/autogen/322~final/stderr.expected new file mode 100644 index 0000000000..289fbcbeb7 --- /dev/null +++ b/tests/parse_print/autogen/322~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/322~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/322~final/spec.essence:4:28: + | +4 | such that together({true}, partition({true}) - partition({true})) + | ^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/322~final/spec.essence:4:48: + | +4 | such that together({true}, partition({true}) - partition({true})) + | ^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/322~final/stdout.expected b/tests/parse_print/autogen/322~final/stdout.expected deleted file mode 100644 index 181e95861b..0000000000 --- a/tests/parse_print/autogen/322~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that together({true}, partition({true}) - partition({true})) diff --git a/tests/parse_print/autogen/325~1435147026_26/stderr.expected b/tests/parse_print/autogen/325~1435147026_26/stderr.expected new file mode 100644 index 0000000000..3f7a8cc279 --- /dev/null +++ b/tests/parse_print/autogen/325~1435147026_26/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/325~1435147026_26/spec.essence Error is: +ValidatorError tests/parse_print/autogen/325~1435147026_26/spec.essence:99:14: + | +99 | partition({[false; int(0..0)], + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from matrix indexed by [int] of bool + +tests/parse_print/autogen/325~1435147026_26/spec.essence:107:14: + | +107 | partition({[true, false; int(4, 2..2)], [false, false, true, false; int(5..8)], + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from matrix indexed by [int] of bool diff --git a/tests/parse_print/autogen/325~1435147026_26/stdout.expected b/tests/parse_print/autogen/325~1435147026_26/stdout.expected deleted file mode 100644 index a86b0d5198..0000000000 --- a/tests/parse_print/autogen/325~1435147026_26/stdout.expected +++ /dev/null @@ -1,80 +0,0 @@ -language Essence 1.3 - -find var1: mset (minSize 3, maxSize 4, minOccur 3, maxOccur 4) of bool -such that - (function() : `function function bool --> bool --> partition from int`) in - mset(function(function(false --> false, false --> false) --> partition({0, 0, 0, 5}, {4, 1}), - function(true --> false, true --> true) --> partition({0}), - function(false --> true, false --> true, true --> true, true --> true) - --> partition({4, 2, 4}, {5}, {4, 1, 4, 1, 0})), - function(function(false --> true, true --> false, false --> true, false --> false, false --> false) - --> partition({4, 3, 4, 0, 4}, {2, 0, 2, 2, 5}, {2, 0, 0, 5, 4}, {2, 5, 2, 5}), - function(true --> true) --> partition({2, 1, 0}, {4, 2, 3, 5}, {0, 5, 0}, {5, 1, 3}), - function(true --> false) --> partition({0, 1, 4}, {1, 1, 2}), - function(false --> false, true --> false) --> partition({0, 1, 4, 1, 4}, {3, 2, 4, 5, 0}), - function(false --> false, false --> false, true --> true) - --> partition({2, 5, 5, 0}, {2, 4, 2, 4, 1}))), - allDiff([relation((({} : `set of bool`), (false, true, true, true)), ({false}, (false, false, false, false)), - (({} : `set of bool`), (true, false, true, true))), - (relation() : `relation of (set of bool * (bool, bool, bool, bool))`), - relation(({false, true}, (false, false, false, false)), ({false}, (false, false, false, false)), - ({true}, (true, true, false, true)), ({true, true, true}, (false, true, false, false))); - int(3, 6, 4)]), - {partition({partition({false, true, true, true}, {true, true, true}, {true}, {true, false}, {true, false}), - partition({false}, {true}, {false}, {true, true}, {true, false, true, true, true}), - partition({true, true, true, false}, {false, false, true}, {false, true}), - partition({false, true, false, false}, {true, true, false}, {false, false, false, false}), - partition({true}, {true, false, false, true}, {false, true}, {false, true, false, true})}, - {partition({true, true, true}, {false, true}, {false, false, false}, {false, true, true, false}, - {true, false, false}), - partition({false, true, false, false, true}, {true, true, false, true}, {false, false, false, true}, - {true}), - partition({true, true, false}, {true, true, false}, {false, false, false, true, true}, - {true, false, true, true, true}, {true, false, true, true}), - partition({false, false, true, true, false}, {true, true, false, false, false})}, - {partition({false, true, true, true, true}, {true, false, false, true, true}, {false, false}, {true}), - partition({false, true, false, true}, {false, false, true, false}, {true, true, true, false, true}), - partition({true, true, true}, {false, true, true, true}, {true, false, false, false, true}, {false}), - partition({true, true, true}, {true, true, true, false, true}, {true}, {true}, {false})}), - partition({partition({false}), partition({true, true}, {true, false, false, true}, {false, true, false, false})}, - {partition({false, true, true, true, true}, {true, true, true, false, true}, {true, true, true}, - {true, true}), - partition({false, false, true, false}), partition({true}, {true, false, false, false}), - partition({true, true, true}, {false, true, true, false, true}, {false, true, false, true, false})}, - {partition({false, true, false}, {true, false, false}, {true, false, true, false}, {true}, {false}), - partition({false, true}, {false, true, true}, {true, true, true}, {true, false, false, false, false})})} - = - {partition({partition({false}, {true, false, false, true, false}, {true, false, true}, {true, true, true, true}, - {true}), - partition({false, true, true})}, - {partition({true, false, false, false}, {true}), - partition({false, true, false, false}, {true, true, true, true, false}, {false, false}, - {true, false, true, true}), - partition({false}, {true}, {false, true, false, true}, {false, false, true})}, - {partition({true}, {false}, {false, false, false, true, false}, {false, true, true}, - {true, true, false, true, false}), - partition({false, false, true, false, true}), - partition({true}, {false, false, true}, {false, false, false}, {false, true})}), - (partition() : `partition from partition from bool`), - partition({(partition() : `partition from bool`), partition({true, false}), - partition({true, false}, {false}, {false, true}), - partition({true, true, true, true}, {false, true, false, true}, {false, false, true, true, true}, - {true, true, true, true})}, - {partition({false, true, true, true}, {true, true, false, true, true}, {true, true}, - {false, false, false, false}, {true, true, false, false, false}), - partition({true, false, false, true}, {true, true, false, false}, {false}, {true, true, true, true}, - {true, true, false}), - partition({true, true, false, false, true}, {true}), partition({true, false, false, true}), - partition({false}, {true, true, true}, {false, true, true, true, true}, {false, false})}, - {partition({false, false}, {false, true}, {false}), partition({false}), - partition({false, true, false}, {true, true, false, true}, {true, true}, {false, true})})}, - together({[l_1 | l_1 : bool], flatten([true; int(1)])}, - partition({[false; int(0)], [false, false, false, false, true; int(1..2, 8, 9, 5)]}, - {([] : `matrix indexed by [int] of bool`)}, - {[false, false, true, false; int(6, 2..4)], ([] : `matrix indexed by [int] of bool`)}, - {[false; int(1)], [true; int(0)], [true, true, false; int(4..6)], - [false, false, false, false; int(6, 3..4, 8)]}) - - - partition({[true, false; int(4, 2)], [false, false, true, false; int(5..8)], - [false, true, true, false; int(8..10, 2)]}, - {([] : `matrix indexed by [int] of bool`), [true, false, false, true; int(7..8, 3, 1)]})) diff --git a/tests/parse_print/autogen/326~final/stderr.expected b/tests/parse_print/autogen/326~final/stderr.expected new file mode 100644 index 0000000000..4956a71c17 --- /dev/null +++ b/tests/parse_print/autogen/326~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/326~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/326~final/spec.essence:6:14: + | +6 | partition({[true; int(1..1)]}) - partition({[false; int(1..1)]})) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from matrix indexed by [int] of bool + +tests/parse_print/autogen/326~final/spec.essence:6:47: + | +6 | partition({[true; int(1..1)]}) - partition({[false; int(1..1)]})) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from matrix indexed by [int] of bool diff --git a/tests/parse_print/autogen/326~final/stdout.expected b/tests/parse_print/autogen/326~final/stdout.expected deleted file mode 100644 index 4641286059..0000000000 --- a/tests/parse_print/autogen/326~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that together({[true; int(1)]}, partition({[true; int(1)]}) - partition({[false; int(1)]})) diff --git a/tests/parse_print/autogen/427~1435209539_80/stderr.expected b/tests/parse_print/autogen/427~1435209539_80/stderr.expected new file mode 100644 index 0000000000..16bcd342eb --- /dev/null +++ b/tests/parse_print/autogen/427~1435209539_80/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/427~1435209539_80/spec.essence Error is: +ValidatorError tests/parse_print/autogen/427~1435209539_80/spec.essence:18:11: + | +18 | partition({true, false, true}) - (partition() : `partition from bool`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/427~1435209539_80/spec.essence:18:44: + | +18 | partition({true, false, true}) - (partition() : `partition from bool`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/427~1435209539_80/stdout.expected b/tests/parse_print/autogen/427~1435209539_80/stdout.expected deleted file mode 100644 index bba70f2ab2..0000000000 --- a/tests/parse_print/autogen/427~1435209539_80/stdout.expected +++ /dev/null @@ -1,17 +0,0 @@ -language Essence 1.3 - -find var1: bool -find var2: bool -such that - mset([var1, var1; int(3, 4)], [var2, var1, var1, var2, var1; int(1, 8..9, 5..6)]) supset - mset([var2, var2; int(1..2)], ([] : `matrix indexed by [int] of bool`), [var2; int(1)]), - false <= var1, - image(function(partition({false}, {true, false}) --> !false, - partition({true}, {true, false, true, false}, {false, false}) --> !false, - partition({false}, {true, false, false, false}, {true, false}, {true}) --> true = false, - partition({false}, {true, false}, {true}, {true, true}, {false, false, false}) --> true), - partition({true, false, true}) - (partition() : `partition from bool`)), - image(function(function(false --> false, false --> true, true --> true, true --> true) --> true, - function(true --> false, true --> true) --> false <-> true), - function(true <= true --> false = true, false <-> true --> true = false)), - (({} : `set of bool`) supsetEq {var2}) > (mset(var1) supsetEq mset(var1, var1, var2)) diff --git a/tests/parse_print/autogen/441~1435208191_85/stderr.expected b/tests/parse_print/autogen/441~1435208191_85/stderr.expected new file mode 100644 index 0000000000..4bcafbf671 --- /dev/null +++ b/tests/parse_print/autogen/441~1435208191_85/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/441~1435208191_85/spec.essence Error is: +ValidatorError tests/parse_print/autogen/441~1435208191_85/spec.essence:16:14: + | +16 | partition({false, true, true, true}) - (partition() : `partition from bool`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/441~1435208191_85/spec.essence:16:53: + | +16 | partition({false, true, true, true}) - (partition() : `partition from bool`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/441~1435208191_85/stdout.expected b/tests/parse_print/autogen/441~1435208191_85/stdout.expected deleted file mode 100644 index 42b4ef4d54..0000000000 --- a/tests/parse_print/autogen/441~1435208191_85/stdout.expected +++ /dev/null @@ -1,20 +0,0 @@ -language Essence 1.3 - -find var1: - (partition (maxNumParts 3, minPartSize 4) from bool, - mset (minSize 0, maxSize 4, minOccur 2, maxOccur 4) of bool, - function (minSize 4, maxSize 5, surjective) bool --> bool) -find var2: - (bool, matrix indexed by [int(5, 4)] of bool, set (minSize 1) of bool, - mset (maxSize 0, minOccur 0, maxOccur 5) of bool) -find var3: tuple (mset (size 3, minOccur 5, maxOccur 5) of bool) -such that - !!false > image(function(true --> true, false --> false, false --> true, false --> false), false != false), - together({false, true, false}, partition({false, true, true, true}) - (partition() : `partition from bool`)), - allDiff([[false, true; int(1..2)], [true, false, true; int(3, 8, 6)]; int(3..4)]), - apart({function(true --> false), function(true --> false), function(true --> false, false --> true)}, - partition({function(true --> true, false --> false, true --> false, true --> true), - function(true --> false, false --> true), (function() : `function bool --> bool`), - (function() : `function bool --> bool`)})), - [l_1 | l_1 : bool][freq(mset(false), true >= true)], - true diff --git a/tests/parse_print/autogen/442~final/stderr.expected b/tests/parse_print/autogen/442~final/stderr.expected new file mode 100644 index 0000000000..30ce546a06 --- /dev/null +++ b/tests/parse_print/autogen/442~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/442~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/442~final/spec.essence:5:23: + | +5 | together({false}, partition({false}) - (partition() : `partition from bool`)) + | ^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/442~final/spec.essence:5:44: + | +5 | together({false}, partition({false}) - (partition() : `partition from bool`)) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/442~final/stdout.expected b/tests/parse_print/autogen/442~final/stdout.expected deleted file mode 100644 index 8de662fa5c..0000000000 --- a/tests/parse_print/autogen/442~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that together({false}, partition({false}) - (partition() : `partition from bool`)) diff --git a/tests/parse_print/autogen/445~1435212982_68/stderr.expected b/tests/parse_print/autogen/445~1435212982_68/stderr.expected new file mode 100644 index 0000000000..fdacaf87d2 --- /dev/null +++ b/tests/parse_print/autogen/445~1435212982_68/stderr.expected @@ -0,0 +1,33 @@ +Error: + Parser error in file: tests/parse_print/autogen/445~1435212982_68/spec.essence Error is: +ValidatorError tests/parse_print/autogen/445~1435212982_68/spec.essence:15:5: + | +15 | partition({false}) - (partition() : `partition from bool`) = + | ^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/445~1435212982_68/spec.essence:15:26: + | +15 | partition({false}) - (partition() : `partition from bool`) = + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/445~1435212982_68/spec.essence:16:5: + | +16 | partition({false, true, true}) - + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/445~1435212982_68/spec.essence:17:5: + | +17 | partition({false, false}, {false, true, false, true}, {true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/445~1435212982_68/stdout.expected b/tests/parse_print/autogen/445~1435212982_68/stdout.expected deleted file mode 100644 index 9c133cd8f7..0000000000 --- a/tests/parse_print/autogen/445~1435212982_68/stdout.expected +++ /dev/null @@ -1,17 +0,0 @@ -language Essence 1.3 - -find var1: - mset (maxSize -2 / toInt(true), maxOccur 5 / 1 - -3) of - function (maxSize 0 / 4, total, bijective) (bool, bool, bool, bool) --> - function (size 3, total, surjective) bool --> bool -such that - ([] : `matrix indexed by [int] of bool`)[5] <= - (function(false --> true, true --> true, false --> false) = function(false --> false)), - function([false, false, false; int(0, 2, 1)] --> {false, false}, [false, true; int(3, 2)] --> {true}, - [true, false; int(4..5)] --> {true}, [false, true, true; int(8, 0, 2)] --> {false, false, true}) - subset function([true; int(0)] --> {true}, [true; int(2)] --> {false}), - partition({false}) - (partition() : `partition from bool`) = - partition({false, true, true}) - partition({false, false}, {false, true, false, true}, {true}, {true, false, true}), - true, - and([true, false, false, false, false; int(1..5)]) >= allDiff(([] : `matrix indexed by [int] of bool`)), - !false diff --git a/tests/parse_print/autogen/446~final/stderr.expected b/tests/parse_print/autogen/446~final/stderr.expected new file mode 100644 index 0000000000..dfffa8c2cd --- /dev/null +++ b/tests/parse_print/autogen/446~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/446~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/446~final/spec.essence:5:45: + | +5 | (partition() : `partition from bool`) = partition({true}) - partition({false}) + | ^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/446~final/spec.essence:5:65: + | +5 | (partition() : `partition from bool`) = partition({true}) - partition({false}) + | ^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/446~final/stdout.expected b/tests/parse_print/autogen/446~final/stdout.expected deleted file mode 100644 index 576555d6c2..0000000000 --- a/tests/parse_print/autogen/446~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that (partition() : `partition from bool`) = partition({true}) - partition({false}) diff --git a/tests/parse_print/autogen/447~1435213364_36/stderr.expected b/tests/parse_print/autogen/447~1435213364_36/stderr.expected new file mode 100644 index 0000000000..8e6e9f67fa --- /dev/null +++ b/tests/parse_print/autogen/447~1435213364_36/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/447~1435213364_36/spec.essence Error is: +ValidatorError tests/parse_print/autogen/447~1435213364_36/spec.essence:8:14: + | +8 | partition({false, false, false}, {false, true, true, true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/447~1435213364_36/spec.essence:10:16: + | +10 | - partition({false, false, true, false, true}, {true})) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/447~1435213364_36/stdout.expected b/tests/parse_print/autogen/447~1435213364_36/stdout.expected deleted file mode 100644 index d533f42adc..0000000000 --- a/tests/parse_print/autogen/447~1435213364_36/stdout.expected +++ /dev/null @@ -1,8 +0,0 @@ -language Essence 1.3 - -find var1: bool -such that - [l_2 | l_1 : bool, l_2 : bool, l_2] bool) -find var2: set (maxSize 5) of set (minSize 1 - 4) of relation (size 0) of (bool) -such that - together(participants(partition({0, 3, 0}, {3, 4, 1, 3, 1}, {5, 5, 4, 5, 4}, {4}, {5, 5, 0, 5})), - partition({5, 5, 4, 3, 1}, {1}) - partition({0, 1, 4, 1, 4}, {1})), - 5 >= 3, - false, - false diff --git a/tests/parse_print/autogen/561~final/stderr.expected b/tests/parse_print/autogen/561~final/stderr.expected new file mode 100644 index 0000000000..723c3992d0 --- /dev/null +++ b/tests/parse_print/autogen/561~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/561~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/561~final/spec.essence:4:25: + | +4 | such that together({2}, partition({0}) - partition({3})) + | ^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int + +tests/parse_print/autogen/561~final/spec.essence:4:42: + | +4 | such that together({2}, partition({0}) - partition({3})) + | ^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int diff --git a/tests/parse_print/autogen/561~final/stdout.expected b/tests/parse_print/autogen/561~final/stdout.expected deleted file mode 100644 index 282f3a484b..0000000000 --- a/tests/parse_print/autogen/561~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that together({2}, partition({0}) - partition({3})) diff --git a/tests/parse_print/autogen/562~1436556139_51/stderr.expected b/tests/parse_print/autogen/562~1436556139_51/stderr.expected new file mode 100644 index 0000000000..91c06c7d18 --- /dev/null +++ b/tests/parse_print/autogen/562~1436556139_51/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/562~1436556139_51/spec.essence Error is: +ValidatorError tests/parse_print/autogen/562~1436556139_51/spec.essence:10:11: + | +10 | partition({5}, {2, 2, 2, 4}, {2, 3, 2, 5}, {3}) - + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int + +tests/parse_print/autogen/562~1436556139_51/spec.essence:11:11: + | +11 | partition({5, 2, 5, 4}, {1, 2, 0, 1, 3}, {3, 5, 1, 4, 3})), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int diff --git a/tests/parse_print/autogen/562~1436556139_51/stdout.expected b/tests/parse_print/autogen/562~1436556139_51/stdout.expected deleted file mode 100644 index db163fdc2a..0000000000 --- a/tests/parse_print/autogen/562~1436556139_51/stdout.expected +++ /dev/null @@ -1,23 +0,0 @@ -language Essence 1.3 - -find var1: set of bool -find var2: mset (minSize 5, maxSize 5, maxOccur 3) of int(0, 5) -find var3: partition (maxNumParts 1, maxPartSize 4, regular) from bool -find var4: mset (minOccur 1, maxOccur 4) of bool -such that - (mset(false) subsetEq mset(false)) < (!false > (5 < 5)), - apart({0, 1} union {2, 3}, - partition({5}, {2, 2, 2, 4}, {2, 3, 2, 5}, {3}) - partition({5, 2, 5, 4}, {1, 2, 0, 1, 3}, {3, 5, 1, 4, 3})), - inverse(function(mset(false) - --> partition({false, true, true, false}, {true, false, false, false}, - {false, true, false, false, true}, {false}), - mset(true, true, true) --> partition({false}, {false, false, true, false, false}), - (mset() : `mset of bool`) --> partition({true, true, true, true}, {false, false, false})), - function(partition({false, true, true}) --> mset(false, false), - partition({false, true}, {false, false}, {true}, {false, false, true}, - {false, true, false, true, true}) - --> mset(true))), - inverse(function(true --> tuple (true)), (function() : `function tuple(bool) --> bool`)), - mset((false, false), (true, true), (true, true)) subsetEq mset((true, false), (true, false)), - true, - false diff --git a/tests/parse_print/autogen/563~final/stderr.expected b/tests/parse_print/autogen/563~final/stderr.expected new file mode 100644 index 0000000000..1d9a3ad55c --- /dev/null +++ b/tests/parse_print/autogen/563~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/563~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/563~final/spec.essence:4:22: + | +4 | such that apart({3}, partition({5}) - partition({5})) + | ^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int + +tests/parse_print/autogen/563~final/spec.essence:4:39: + | +4 | such that apart({3}, partition({5}) - partition({5})) + | ^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from int diff --git a/tests/parse_print/autogen/563~final/stdout.expected b/tests/parse_print/autogen/563~final/stdout.expected deleted file mode 100644 index 5785a3c7d5..0000000000 --- a/tests/parse_print/autogen/563~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that apart({3}, partition({5}) - partition({5})) diff --git a/tests/parse_print/autogen/613~1436580506_52/stderr.expected b/tests/parse_print/autogen/613~1436580506_52/stderr.expected new file mode 100644 index 0000000000..b130a40527 --- /dev/null +++ b/tests/parse_print/autogen/613~1436580506_52/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/613~1436580506_52/spec.essence Error is: +ValidatorError tests/parse_print/autogen/613~1436580506_52/spec.essence:14:11: + | +14 | partition({true, true, true, false, false}, {true}, {false}, {true, false}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/613~1436580506_52/spec.essence:17:11: + | +17 | partition({true, false, false, true, true}, {false, true, true}, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/613~1436580506_52/stdout.expected b/tests/parse_print/autogen/613~1436580506_52/stdout.expected deleted file mode 100644 index 32279cde18..0000000000 --- a/tests/parse_print/autogen/613~1436580506_52/stdout.expected +++ /dev/null @@ -1,17 +0,0 @@ -language Essence 1.3 - -find var1: bool -find var2: bool -such that - var2 -> - function(false --> false, false --> true, false --> true, true --> false) supset - (function() : `function bool --> bool`), - var2, - [1, 3 / 5; int(4, 0)] = l_2, false <= false], - apart({false}, - partition({true, true, true, false, false}, {true}, {false}, {true, false}, - {false, false, false, false, true}) - - - partition({true, false, false, true, true}, {false, true, true}, {false, true, true, true}, - {true, true, true}, {false, false})), - mset(1, 2) - (mset() : `mset of int`) supsetEq mset(1) union mset(0, 0, 3) diff --git a/tests/parse_print/autogen/614~final/stderr.expected b/tests/parse_print/autogen/614~final/stderr.expected new file mode 100644 index 0000000000..12ddff2e50 --- /dev/null +++ b/tests/parse_print/autogen/614~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/614~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/614~final/spec.essence:4:26: + | +4 | such that apart({false}, partition({true}) - partition({false})) + | ^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/614~final/spec.essence:4:46: + | +4 | such that apart({false}, partition({true}) - partition({false})) + | ^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/614~final/stdout.expected b/tests/parse_print/autogen/614~final/stdout.expected deleted file mode 100644 index 7661e2e708..0000000000 --- a/tests/parse_print/autogen/614~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that apart({false}, partition({true}) - partition({false})) diff --git a/tests/parse_print/autogen/615~1436587408_39/stderr.expected b/tests/parse_print/autogen/615~1436587408_39/stderr.expected new file mode 100644 index 0000000000..3289f6315f --- /dev/null +++ b/tests/parse_print/autogen/615~1436587408_39/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/615~1436587408_39/spec.essence Error is: +ValidatorError tests/parse_print/autogen/615~1436587408_39/spec.essence:6:11: + | +6 | (partition() : `partition from bool`) - + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/615~1436587408_39/spec.essence:7:11: + | +7 | partition({false, false}, {false}, {true, false}, {true}, {true, false, true})), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/615~1436587408_39/stdout.expected b/tests/parse_print/autogen/615~1436587408_39/stdout.expected deleted file mode 100644 index 128ed99760..0000000000 --- a/tests/parse_print/autogen/615~1436587408_39/stdout.expected +++ /dev/null @@ -1,12 +0,0 @@ -language Essence 1.3 - -find var1: bool -such that - image(function((partition() : `partition from bool`) --> false -> true), - (partition() : `partition from bool`) - - partition({false, false}, {false}, {true, false}, {true}, {true, false, true})), - var1, - apart({(var1, var1), (var1, var1)}, - partition({(true, true), (false, true), (false, false), (true, false), (true, true)}, - {(true, false), (true, true), (true, false)}, {(false, true)}, {(false, false), (false, true)}, - {(false, true), (false, true), (false, false)})) diff --git a/tests/parse_print/autogen/616~final/stderr.expected b/tests/parse_print/autogen/616~final/stderr.expected new file mode 100644 index 0000000000..519e3bf899 --- /dev/null +++ b/tests/parse_print/autogen/616~final/stderr.expected @@ -0,0 +1,17 @@ +Error: + Parser error in file: tests/parse_print/autogen/616~final/spec.essence Error is: +ValidatorError tests/parse_print/autogen/616~final/spec.essence:6:11: + | +6 | (partition() : `partition from bool`) - partition({false})) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool + +tests/parse_print/autogen/616~final/spec.essence:6:51: + | +6 | (partition() : `partition from bool`) - partition({false})) + | ^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number / set/ mset / relation / function" + Got: partition from bool diff --git a/tests/parse_print/autogen/616~final/stdout.expected b/tests/parse_print/autogen/616~final/stdout.expected deleted file mode 100644 index 90b5e0ba03..0000000000 --- a/tests/parse_print/autogen/616~final/stdout.expected +++ /dev/null @@ -1,6 +0,0 @@ -language Essence 1.3 - -find unused: bool -such that - image(function((partition() : `partition from bool`) --> false -> true), - (partition() : `partition from bool`) - partition({false})) From 1ed6490017c428e964ff1860c34371cc08767d10 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 16:23:17 +0000 Subject: [PATCH 136/378] Updates further tests to new errors --- .../stderr.expected | 179 +++++++++++++- .../stderr.expected | 161 ++++++++++++- .../stderr.expected | 119 ++++++++- .../stderr.expected | 71 +++++- .../stderr.expected | 113 ++++++++- .../stderr.expected | 131 +++++++++- .../stderr.expected | 77 +++++- .../stderr.expected | 227 +++++++++++++++++- .../basic/typeErrorInDecl/stderr.expected | 9 + .../basic/typeErrorInDecl/stdout.expected | 3 - .../heuristic/heuristic_magic/stderr.expected | 7 + .../heuristic/heuristic_magic/stdout.expected | 5 - .../heuristic_magic/typecheck.expected | 3 - tests/parse_print/issues/130/stderr.expected | 13 + tests/parse_print/issues/130/stdout.expected | 5 - .../parse_print/issues/130/typecheck.expected | 4 +- .../parse_print/issues/133/1/stderr.expected | 23 +- .../parse_print/issues/133/2/stderr.expected | 11 +- .../parse_print/issues/133/3/stderr.expected | 11 +- tests/parse_print/issues/207/stderr.expected | 33 +++ tests/parse_print/issues/207/stdout.expected | 19 -- .../parse_print/issues/361/1/stderr.expected | 7 + .../parse_print/issues/361/1/stdout.expected | 5 - .../parse_print/issues/361/2/stderr.expected | 29 ++- .../parse_print/issues/363/1/stderr.expected | 11 +- .../parse_print/issues/363/2/stderr.expected | 11 +- .../parse_print/issues/425/1/stderr.expected | 17 +- .../parse_print/issues/425/2/stderr.expected | 17 +- tests/parse_print/parsing01/stderr.expected | 11 +- .../parsing03_nonassoc/stderr.expected | 17 +- .../enum_liberated/change-01/stderr.expected | 17 +- .../enum_liberated/change-02/stderr.expected | 10 +- .../enum_liberated/change-03/stderr.expected | 17 +- .../enum_liberated/change-05/stderr.expected | 7 + .../enum_liberated/change-05/stdout.expected | 13 - .../change-05/typecheck.expected | 6 +- .../enum_liberated/change-06/stderr.expected | 29 ++- .../enum_liberated/change-07/stderr.expected | 7 + .../enum_liberated/change-07/stdout.expected | 13 - .../enum_liberated/change-08/stderr.expected | 16 +- .../enum_liberated/change-10/stderr.expected | 59 ++++- .../enum_liberated/delete-01/stderr.expected | 11 +- .../enum_liberated/delete-02/stderr.expected | 17 +- .../enum_liberated/delete-03/stderr.expected | 19 +- .../enum_liberated/delete-04/stderr.expected | 7 + .../enum_liberated/delete-04/stdout.expected | 13 - .../delete-04/typecheck.expected | 1 - .../enum_liberated/delete-05/stderr.expected | 35 ++- .../delete-05/typecheck.expected | 5 + .../enum_liberated/delete-06/stderr.expected | 17 +- .../enum_liberated/delete-07/stderr.expected | 35 ++- .../enum_liberated/delete-08/stderr.expected | 11 +- .../enum_liberated/delete-09/stderr.expected | 11 +- .../enum_liberated/delete-10/stderr.expected | 59 ++++- .../set01/change-02/stderr.expected | 11 +- .../set01/change-03/stderr.expected | 10 +- .../set01/change-04/stderr.expected | 10 +- .../set01/change-05/stderr.expected | 11 +- .../set01/change-06/stderr.expected | 10 +- .../set01/change-07/stderr.expected | 29 ++- .../set01/change-08/stderr.expected | 11 +- .../set01/change-09/stderr.expected | 10 +- .../set01/change-10/stderr.expected | 16 +- .../set01/delete-01/stderr.expected | 11 +- .../set01/delete-02/stderr.expected | 29 ++- .../set01/delete-03/stderr.expected | 29 ++- .../set01/delete-04/stderr.expected | 10 +- .../set01/delete-05/stderr.expected | 10 +- .../set01/delete-06/stderr.expected | 10 +- .../set01/delete-07/stderr.expected | 17 +- .../set01/delete-08/stderr.expected | 35 ++- .../set01/delete-09/stderr.expected | 10 +- .../set01/delete-10/stderr.expected | 11 +- 73 files changed, 1740 insertions(+), 334 deletions(-) create mode 100644 tests/parse_print/basic/typeErrorInDecl/stderr.expected delete mode 100644 tests/parse_print/basic/typeErrorInDecl/stdout.expected create mode 100644 tests/parse_print/heuristic/heuristic_magic/stderr.expected delete mode 100644 tests/parse_print/heuristic/heuristic_magic/stdout.expected delete mode 100644 tests/parse_print/heuristic/heuristic_magic/typecheck.expected create mode 100644 tests/parse_print/issues/130/stderr.expected delete mode 100644 tests/parse_print/issues/130/stdout.expected create mode 100644 tests/parse_print/issues/207/stderr.expected delete mode 100644 tests/parse_print/issues/207/stdout.expected create mode 100644 tests/parse_print/issues/361/1/stderr.expected delete mode 100644 tests/parse_print/issues/361/1/stdout.expected create mode 100644 tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/change-05/stdout.expected create mode 100644 tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/change-07/stdout.expected create mode 100644 tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/delete-04/stdout.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/delete-04/typecheck.expected create mode 100644 tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected diff --git a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected index 6480954100..27f4e17365 100644 --- a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected @@ -1,6 +1,175 @@ Error: - tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:35: -unexpected undefined -expecting ), comma, or rest of range - matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:53: + | +4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: + | +4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: + | +4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: + | +4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: + | +4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:53: + | +6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:7:87: + | +7 | 0..5) + | ^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:53: + | +9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:53: + | +11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: + | +11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: + | +11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: + | +11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: + | +11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:12:87: + | +12 | 5..5) + | ^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:53: + | +14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: + | +14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: + | +14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: + | +14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: + | +14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:15:87: + | +15 | 5) + | ^^ +Skipped tokens diff --git a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected index ba26764214..9e856c487f 100644 --- a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected @@ -1,6 +1,157 @@ Error: - tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:16: -unexpected undefined -expecting ), comma, or rest of range - int(0..undefined(modulo zero: 0 % 0 : `int`)) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:33: + | +4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: + | +4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: + | +4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: + | +4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:38: + | +4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:39: + | +4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) + | ^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:52: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:57: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:58: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:52: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:57: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:58: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:9:28: + | +9 | int(0..1, 5..5)] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected index 9d0a04b3e9..529c651301 100644 --- a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected @@ -1,6 +1,115 @@ Error: - tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:35: -unexpected undefined -expecting ), comma, or rest of range - matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:52: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:57: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:58: + | +22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:52: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:57: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:58: + | +24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected index 5517dd3d63..4ef6dbcbe2 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected @@ -1,6 +1,67 @@ Error: - tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:35: -unexpected undefined -expecting ), comma, or rest of range - matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:53: + | +10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:53: + | +12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool + | ^ +Missing of diff --git a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected index b2a826221b..b301829141 100644 --- a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected @@ -1,6 +1,109 @@ Error: - tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:35: -unexpected undefined -expecting ), comma, or rest of range - matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:53: + | +20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: + | +20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: + | +20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: + | +20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: + | +20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:53: + | +22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: + | +22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: + | +22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: + | +22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: + | +22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:23:28: + | +23 | int(1..3)] of int(0..4) + | ^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:53: + | +25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: + | +25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: + | +25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: + | +25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: + | +25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:26:28: + | +26 | int(1..3)] of bool + | ^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected index 57c9ded365..584e0f6460 100644 --- a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected @@ -1,6 +1,127 @@ Error: - tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:4:16: -unexpected undefined -expecting ), comma, or rest of range - int(0..undefined(division by zero: 2 / 0 : `int`)) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:4:35: + | +4 | int(0..undefined(division by zero: 2 / 0 : `int`)) + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:4:35: + | +4 | int(0..undefined(division by zero: 2 / 0 : `int`)) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:53: + | +6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:7:28: + | +7 | int(2, 0)] of bool + | ^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:53: + | +9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: + | +9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:10:28: + | +10 | int(1..0)] of int(0..0) + | ^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:53: + | +12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:13:28: + | +13 | int(1..0)] of bool + | ^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected index 9748ee377b..6beb3eceac 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected @@ -1,6 +1,73 @@ Error: - tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:35: -unexpected undefined -expecting ), comma, or rest of range - matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:53: + | +8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: + | +8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: + | +8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: + | +8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: + | +8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:53: + | +10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: + | +10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:11:28: + | +11 | bool, bool, bool] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected index f9b4d51219..78266a6bf9 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected @@ -1,6 +1,223 @@ Error: - tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:35: -unexpected undefined -expecting ), comma, or rest of range - matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence Error is: +ValidatorError tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:1:1: + | +1 | language ESSENCE' 1.0 + | ^^^^^^^^^^^^^^^^^^^^^ +Warning: Essence prime file detected, type checking is off + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:52: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:57: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:58: + | +4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:52: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:57: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:58: + | +6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:52: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:57: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:58: + | +8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:52: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing ) + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing ] + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing of + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing , + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:57: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^ +Missing Domain + +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:58: + | +10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/basic/typeErrorInDecl/stderr.expected b/tests/parse_print/basic/typeErrorInDecl/stderr.expected new file mode 100644 index 0000000000..693002a7f5 --- /dev/null +++ b/tests/parse_print/basic/typeErrorInDecl/stderr.expected @@ -0,0 +1,9 @@ +Error: + Parser error in file: tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence Error is: +ValidatorError tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence:3:19: + | +3 | find x : int(1..2+false) + | ^^^^^ +Type error: + Expected:"Number or Enum" + Got: bool diff --git a/tests/parse_print/basic/typeErrorInDecl/stdout.expected b/tests/parse_print/basic/typeErrorInDecl/stdout.expected deleted file mode 100644 index 590ea1ab52..0000000000 --- a/tests/parse_print/basic/typeErrorInDecl/stdout.expected +++ /dev/null @@ -1,3 +0,0 @@ -language Essence 1.3 - -find x: int(1..2 + false) diff --git a/tests/parse_print/heuristic/heuristic_magic/stderr.expected b/tests/parse_print/heuristic/heuristic_magic/stderr.expected new file mode 100644 index 0000000000..c2e231d318 --- /dev/null +++ b/tests/parse_print/heuristic/heuristic_magic/stderr.expected @@ -0,0 +1,7 @@ +Error: + Parser error in file: tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence Error is: +ValidatorError tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence:5:11: + | +5 | heuristic magic + | ^^^^^ +Error: Invalid heuristic magic Expected one of: ["static","sdf","conflict","srf","ldf","wdeg","domoverwdeg"] diff --git a/tests/parse_print/heuristic/heuristic_magic/stdout.expected b/tests/parse_print/heuristic/heuristic_magic/stdout.expected deleted file mode 100644 index 7a32f6ce38..0000000000 --- a/tests/parse_print/heuristic/heuristic_magic/stdout.expected +++ /dev/null @@ -1,5 +0,0 @@ -language Essence 1.3 - -find a: int(1..3) -find b: int(1..2) -heuristic magic diff --git a/tests/parse_print/heuristic/heuristic_magic/typecheck.expected b/tests/parse_print/heuristic/heuristic_magic/typecheck.expected deleted file mode 100644 index 3fab95c215..0000000000 --- a/tests/parse_print/heuristic/heuristic_magic/typecheck.expected +++ /dev/null @@ -1,3 +0,0 @@ -Error: - Invalid heuristic: magic - Allowed values are: static, sdf, conflict, srf, ldf, wdeg, domoverwdeg \ No newline at end of file diff --git a/tests/parse_print/issues/130/stderr.expected b/tests/parse_print/issues/130/stderr.expected new file mode 100644 index 0000000000..11450d6cb9 --- /dev/null +++ b/tests/parse_print/issues/130/stderr.expected @@ -0,0 +1,13 @@ +Error: + Parser error in file: tests/parse_print/issues/130/130.essence Error is: +ValidatorError tests/parse_print/issues/130/130.essence:3:33: + | +3 | letting Looper be domain (bool, Looper) + | ^^^^^^ +Error: Symbol not found "Looper" + +tests/parse_print/issues/130/130.essence:6:16: + | +6 | such that loop[0] = true + | ^ +Error: Tuple index 0 out of bounds diff --git a/tests/parse_print/issues/130/stdout.expected b/tests/parse_print/issues/130/stdout.expected deleted file mode 100644 index be6747d2a0..0000000000 --- a/tests/parse_print/issues/130/stdout.expected +++ /dev/null @@ -1,5 +0,0 @@ -language Essence 1.3 - -letting Looper be domain (bool, Looper) -find loop: Looper -such that loop[0] = true diff --git a/tests/parse_print/issues/130/typecheck.expected b/tests/parse_print/issues/130/typecheck.expected index 037ba194b6..6fc659b111 100644 --- a/tests/parse_print/issues/130/typecheck.expected +++ b/tests/parse_print/issues/130/typecheck.expected @@ -1 +1,3 @@ -Error: Undefined reference to a domain: Looper \ No newline at end of file +Error: + In a 'such that' statement: loop[0] = true + Error: Out of bounds tuple indexing: loop[0] \ No newline at end of file diff --git a/tests/parse_print/issues/133/1/stderr.expected b/tests/parse_print/issues/133/1/stderr.expected index 7117bffa91..ae5dc7cdbc 100644 --- a/tests/parse_print/issues/133/1/stderr.expected +++ b/tests/parse_print/issues/133/1/stderr.expected @@ -1,6 +1,19 @@ Error: - tests/parse_print/issues/133/1/133_1.essence:3:8: -unexpected be -expecting colon or comma - find a be int(1..9) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/133/1/133_1.essence Error is: +ValidatorError tests/parse_print/issues/133/1/133_1.essence:3:7: + | +3 | find a be int(1..9) + | ^ +Missing Domain + +tests/parse_print/issues/133/1/133_1.essence:3:8: + | +3 | find a be int(1..9) + | ^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/issues/133/1/133_1.essence:3:8: + | +3 | find a be int(1..9) + | ^ +Missing : diff --git a/tests/parse_print/issues/133/2/stderr.expected b/tests/parse_print/issues/133/2/stderr.expected index e8c71c111c..c83e4951e9 100644 --- a/tests/parse_print/issues/133/2/stderr.expected +++ b/tests/parse_print/issues/133/2/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/issues/133/2/133_2.essence:6:6: -unexpected int -expecting ) or comma - int(1,3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/133/2/133_2.essence Error is: +ValidatorError tests/parse_print/issues/133/2/133_2.essence:6:6: + | +6 | int(1,3) + | ^ +Missing , diff --git a/tests/parse_print/issues/133/3/stderr.expected b/tests/parse_print/issues/133/3/stderr.expected index fc15c39074..a7b23a42c1 100644 --- a/tests/parse_print/issues/133/3/stderr.expected +++ b/tests/parse_print/issues/133/3/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/issues/133/3/133_3.essence:7:10: -unexpected 3 -expecting expression - m = [1,2 3] - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/133/3/133_3.essence Error is: +ValidatorError tests/parse_print/issues/133/3/133_3.essence:7:10: + | +7 | m = [1,2 3] + | ^ +Missing , diff --git a/tests/parse_print/issues/207/stderr.expected b/tests/parse_print/issues/207/stderr.expected new file mode 100644 index 0000000000..4c3debcfb2 --- /dev/null +++ b/tests/parse_print/issues/207/stderr.expected @@ -0,0 +1,33 @@ +Error: + Parser error in file: tests/parse_print/issues/207/207.essence Error is: +ValidatorError tests/parse_print/issues/207/207.essence:16:53: + | +16 | . (v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 1]) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number or Enum" + Got: bool + +tests/parse_print/issues/207/207.essence:16:108: + | +16 | . (v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 1]) + | ^^^^^^^^^^ +Type error: + Expected: bool + Got: int + +tests/parse_print/issues/207/207.essence:21:53: + | +21 | . (v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 2]) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Type error: + Expected:"Number or Enum" + Got: bool + +tests/parse_print/issues/207/207.essence:21:108: + | +21 | . (v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 2]) + | ^^^^^^^^^^ +Type error: + Expected: bool + Got: int diff --git a/tests/parse_print/issues/207/stdout.expected b/tests/parse_print/issues/207/stdout.expected deleted file mode 100644 index 1b6ada11f0..0000000000 --- a/tests/parse_print/issues/207/stdout.expected +++ /dev/null @@ -1,19 +0,0 @@ -language Essence 1.3 - -find path_AsReln_RelationAsSet: - matrix indexed by [int(0..30)] of set (size 1) of ((int(0..6), int(0..6)), (int(0..6), int(0..6))) -given lookup_AsReln_RelationAsSet: set (size 76) of ((int(0..6), int(0..6)), (int(0..6), int(0..6))) -such that - and([or([or([or([or([and([sum([(v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 1] - | v__6 <- path_AsReln_RelationAsSet[v__0]]) - = function((v__1, v__2) --> (v__3, v__4))(v__5[1])[1] - /\ - sum([(v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 2] - | v__6 <- path_AsReln_RelationAsSet[v__0]]) - = function((v__1, v__2) --> (v__3, v__4))(v__5[1])[2] - | v__5 <- path_AsReln_RelationAsSet[v__0]]) - | v__4 : int(0..6)]) - | v__3 : int(0..6)]) - | v__2 : int(0..6)]) - | v__1 : int(0..6)]) - | v__0 : int(0..30)]) diff --git a/tests/parse_print/issues/361/1/stderr.expected b/tests/parse_print/issues/361/1/stderr.expected new file mode 100644 index 0000000000..21c988cdb5 --- /dev/null +++ b/tests/parse_print/issues/361/1/stderr.expected @@ -0,0 +1,7 @@ +Error: + Parser error in file: tests/parse_print/issues/361/1/361_1.essence Error is: +ValidatorError tests/parse_print/issues/361/1/361_1.essence:3:34: + | +3 | find x : V such that forAll j in V . x <= j + | ^ +Tried to use a Domain where Value was expected diff --git a/tests/parse_print/issues/361/1/stdout.expected b/tests/parse_print/issues/361/1/stdout.expected deleted file mode 100644 index 35c6ef881e..0000000000 --- a/tests/parse_print/issues/361/1/stdout.expected +++ /dev/null @@ -1,5 +0,0 @@ -language Essence 1.3 - -letting V be domain int(1..2) -find x: V -such that and([x <= j | j <- V]) diff --git a/tests/parse_print/issues/361/2/stderr.expected b/tests/parse_print/issues/361/2/stderr.expected index d5ce373586..095b77ed11 100644 --- a/tests/parse_print/issues/361/2/stderr.expected +++ b/tests/parse_print/issues/361/2/stderr.expected @@ -1,6 +1,25 @@ Error: - tests/parse_print/issues/361/2/361_2.essence:2:42: -unexpected int -expecting expression - find x : int(1..2) such that forAll j in int(1..2) . x <= j - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/361/2/361_2.essence Error is: +ValidatorError tests/parse_print/issues/361/2/361_2.essence:2:41: + | +2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j + | ^ +Missing Expr + +tests/parse_print/issues/361/2/361_2.essence:2:41: + | +2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j + | ^ +Missing Expr + +tests/parse_print/issues/361/2/361_2.essence:2:42: + | +2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j + | ^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/issues/361/2/361_2.essence:2:42: + | +2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j + | ^ +Missing . diff --git a/tests/parse_print/issues/363/1/stderr.expected b/tests/parse_print/issues/363/1/stderr.expected index a47108d49e..ab767ac372 100644 --- a/tests/parse_print/issues/363/1/stderr.expected +++ b/tests/parse_print/issues/363/1/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/issues/363/1/363_1.essence:2:40: -unexpected union -expecting end of input, rest of statement, or statement - letting S be domain set of int(-10..0) union int(0..10) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/363/1/363_1.essence Error is: +ValidatorError tests/parse_print/issues/363/1/363_1.essence:2:40: + | +2 | letting S be domain set of int(-10..0) union int(0..10) + | ^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/issues/363/2/stderr.expected b/tests/parse_print/issues/363/2/stderr.expected index cd2cd804af..dd9cee11a9 100644 --- a/tests/parse_print/issues/363/2/stderr.expected +++ b/tests/parse_print/issues/363/2/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/issues/363/2/363_2.essence:2:29: -unexpected union -expecting end of input, rest of statement, or statement - find S : set of int(-10..0) union int(0..10) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/363/2/363_2.essence Error is: +ValidatorError tests/parse_print/issues/363/2/363_2.essence:2:29: + | +2 | find S : set of int(-10..0) union int(0..10) + | ^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/issues/425/1/stderr.expected b/tests/parse_print/issues/425/1/stderr.expected index 6dca59e41a..73c620a079 100644 --- a/tests/parse_print/issues/425/1/stderr.expected +++ b/tests/parse_print/issues/425/1/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/issues/425/1/425.essence:1:15: -unexpected : -expecting expression - letting s be {:} - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/425/1/425.essence Error is: +ValidatorError tests/parse_print/issues/425/1/425.essence:1:15: + | +1 | letting s be {:} + | ^^ +Skipped tokens + +tests/parse_print/issues/425/1/425.essence:1:15: + | +1 | letting s be {:} + | ^ +Missing } diff --git a/tests/parse_print/issues/425/2/stderr.expected b/tests/parse_print/issues/425/2/stderr.expected index bd68f8f316..2f0fbf231a 100644 --- a/tests/parse_print/issues/425/2/stderr.expected +++ b/tests/parse_print/issues/425/2/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/issues/425/2/425.essence:2:15: -unexpected : -expecting expression - letting s be {:} - ^ \ No newline at end of file + Parser error in file: tests/parse_print/issues/425/2/425.essence Error is: +ValidatorError tests/parse_print/issues/425/2/425.essence:2:15: + | +2 | letting s be {:} + | ^^ +Skipped tokens + +tests/parse_print/issues/425/2/425.essence:2:15: + | +2 | letting s be {:} + | ^ +Missing } diff --git a/tests/parse_print/parsing01/stderr.expected b/tests/parse_print/parsing01/stderr.expected index af71255d41..bd3f75e6cd 100644 --- a/tests/parse_print/parsing01/stderr.expected +++ b/tests/parse_print/parsing01/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/parsing01/parsing01.essence:3:15: -unexpected end of input -expecting ), expression, or range - given g : int( - ^ \ No newline at end of file + Parser error in file: tests/parse_print/parsing01/parsing01.essence Error is: +ValidatorError tests/parse_print/parsing01/parsing01.essence:4:1: + | +4 | + | ^ +Missing ) diff --git a/tests/parse_print/parsing03_nonassoc/stderr.expected b/tests/parse_print/parsing03_nonassoc/stderr.expected index eaf13a9b44..6a039afb36 100644 --- a/tests/parse_print/parsing03_nonassoc/stderr.expected +++ b/tests/parse_print/parsing03_nonassoc/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:17: -unexpected = -expecting <->, comma, end of input, operator, rest of statement, or statement - such that x = y = z - ^ \ No newline at end of file + Parser error in file: tests/parse_print/parsing03_nonassoc/nonassoc.essence Error is: +ValidatorError tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:16: + | +2 | such that x = y = z + | ^ +Missing Expr + +tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:17: + | +2 | such that x = y = z + | ^ +Missing , diff --git a/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected index 7c735658ef..0c2c5c83c4 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence:13:11: -unexpected ) -expecting end of input, rest of statement, or statement - find k : E) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence:13:10: + | +13 | find k : E) + | ^ +Error: Symbol not found "E" + +tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence:13:11: + | +13 | find k : E) + | ^ +Unexpected L_CloseParen diff --git a/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected index 374a0fcb69..09d2e5afa7 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence:1:10: -language name has to be Essence, but given: EssBnce - language EssBnce 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence:1:10: + | +1 | language EssBnce 1.3 + | ^^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected index f2202cf026..68015234ea 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:6:29: -unexpected ma -expecting comma, end of input, rest of statement, or statement - letting E2 be new type enum ma, b, c, d, "hoh hoh hooo"} - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:6:29: + | +6 | letting E2 be new type enum ma, b, c, d, "hoh hoh hooo"} + | ^ +Missing { + +tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:8:13: + | +8 | find z : E2(a..c) + | ^ +Error: Symbol not found "a" diff --git a/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected new file mode 100644 index 0000000000..1187761ebf --- /dev/null +++ b/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected @@ -0,0 +1,7 @@ +Error: + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence:14:20: + | +14 | such that k = max(`g2`) + | ^^ +Error: Symbol not found "g2" diff --git a/tests/parse_print/random_perturb/enum_liberated/change-05/stdout.expected b/tests/parse_print/random_perturb/enum_liberated/change-05/stdout.expected deleted file mode 100644 index 44502102ab..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/change-05/stdout.expected +++ /dev/null @@ -1,13 +0,0 @@ -language Essence 1.3 - -given E1 new type enum -find x: E1 -letting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} -find y: E2 -find z: E2(a..c) -find t: E2(b, d) -such that - y = z, - z = t -find k: E2 -such that k = max(`g2`) diff --git a/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected b/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected index 6899497889..06cf5168bd 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected @@ -1 +1,5 @@ -Error: Undefined reference to a domain: g2 \ No newline at end of file +Error: + In a 'such that' statement: k = max(`?`) + Error: + Type error in max(`?`) + Unexpected type inside min: ? \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected index c99c935c15..09573c47c2 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected @@ -1,6 +1,25 @@ Error: - tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: -unexpected Knum -expecting enum - given E1 new type Knum - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: + | +3 | given E1 new type Knum + | ^ +Missing enum + +tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: + | +3 | given E1 new type Knum + | ^ +Missing , + +tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:23: + | +3 | given E1 new type Knum + | ^ +Missing Domain + +tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:4:1: + | +4 | find x : E1 + | ^ +Missing : diff --git a/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected new file mode 100644 index 0000000000..ea9f5a01da --- /dev/null +++ b/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected @@ -0,0 +1,7 @@ +Error: + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence:8:16: + | +8 | find z : E2(a..z) + | ^ +Error: Symbol not found "z" diff --git a/tests/parse_print/random_perturb/enum_liberated/change-07/stdout.expected b/tests/parse_print/random_perturb/enum_liberated/change-07/stdout.expected deleted file mode 100644 index 39b1c87339..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/change-07/stdout.expected +++ /dev/null @@ -1,13 +0,0 @@ -language Essence 1.3 - -given E1 new type enum -find x: E1 -letting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} -find y: E2 -find z: E2(a..z) -find t: E2(b, d) -such that - y = z, - z = t -find k: E2 -such that k = max(`E2`) diff --git a/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected index 8e4fec2e98..d70011212c 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected @@ -1,5 +1,13 @@ Error: - tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence:1:10: -language name has to be Essence, but given: Essen - language Essen`e 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence:1:10: + | +1 | language Essen`e 1.3 + | ^^^^^ +Syntax Error: Not a valid language name + +tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence:1:15: + | +1 | language Essen`e 1.3 + | ^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected index 6c1703b8fd..a18a046585 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected @@ -1,6 +1,55 @@ Error: - tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:1: -unexpected l -expecting comma, end of input, rest of statement, or statement - l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:1: + | +6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} + | ^ +Missing , + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: + | +6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: + | +6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} + | ^ +Missing Domain + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: + | +6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} + | ^ +Missing : + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:7:10: + | +7 | find y : E2 + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:8:10: + | +8 | find z : E2(a..c) + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:9:10: + | +9 | find t : E2(b,d) + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:13:10: + | +13 | find k : E2 + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:14:20: + | +14 | such that k = max(`E2`) + | ^^ +Error: Symbol not found "E2" diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected index d8750157d6..fa162f4d16 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence:1:1: -unexpected lanuage -expecting end of input, language, or statement - lanuage Essence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence:1:1: + | +1 | lanuage Essence 1.3 + | ^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected index 1deae35d2f..1810ae10d7 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence:3:1: -unexpected givn -expecting dot, end of input, or statement - givn E1 new type enum - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence:3:1: + | +3 | givn E1 new type enum + | ^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence:4:10: + | +4 | find x : E1 + | ^^ +Error: Symbol not found "E1" diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected index 5473d5e7ce..0b755f928c 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected @@ -1,10 +1,13 @@ Error: - Lexing error: "hoh hoh hooo} -find y : E2 -find z : E2(a..c) -find t : E2(b,d) + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence:6:42: + | +6 | letting E2 be new type enum {a, b, c, d, "hoh hoh hooo} + | ^^^^^^^^^^^^^^ +Skipped tokens -such that y = z, z = t - -find k : E2 -such that k = max(`E2`) +tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence:6:42: + | +6 | letting E2 be new type enum {a, b, c, d, "hoh hoh hooo} + | ^ +Missing } diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected new file mode 100644 index 0000000000..ad12f2282b --- /dev/null +++ b/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected @@ -0,0 +1,7 @@ +Error: + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence:4:10: + | +4 | find x : E + | ^ +Error: Symbol not found "E" diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-04/stdout.expected b/tests/parse_print/random_perturb/enum_liberated/delete-04/stdout.expected deleted file mode 100644 index e07c076f3a..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/delete-04/stdout.expected +++ /dev/null @@ -1,13 +0,0 @@ -language Essence 1.3 - -given E1 new type enum -find x: E -letting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} -find y: E2 -find z: E2(a..c) -find t: E2(b, d) -such that - y = z, - z = t -find k: E2 -such that k = max(`E2`) diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-04/typecheck.expected b/tests/parse_print/random_perturb/enum_liberated/delete-04/typecheck.expected deleted file mode 100644 index 196a94f5ea..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/delete-04/typecheck.expected +++ /dev/null @@ -1 +0,0 @@ -Error: Undefined reference to a domain: E \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected index 897f0c5706..61966f00d2 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected @@ -1,6 +1,31 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:8:12: -unexpected ( -expecting end of input, rest of statement, or statement - find z : E2(a..c) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:7:10: + | +7 | find y : E2 + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:8:10: + | +8 | find z : E2(a..c) + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:9:10: + | +9 | find t : E2(b,d) + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:13:10: + | +13 | find k : E2 + | ^^ +Error: Symbol not found "E2" + +tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:14:20: + | +14 | such that k = max(`E2`) + | ^^ +Error: Symbol not found "E2" diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected b/tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected new file mode 100644 index 0000000000..06cf5168bd --- /dev/null +++ b/tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected @@ -0,0 +1,5 @@ +Error: + In a 'such that' statement: k = max(`?`) + Error: + Type error in max(`?`) + Unexpected type inside min: ? \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected index 0baf446b2b..6b6869cf00 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:10: -unexpected 2 -expecting domain - find k : 2 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:9: + | +13 | find k : 2 + | ^ +Missing Domain + +tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:10: + | +13 | find k : 2 + | ^ +Unexpected LIntLiteral 2 diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected index b883f3196e..c831610318 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected @@ -1,6 +1,31 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: -unexpected tpe -expecting type - given E1 new tpe enum - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: + | +3 | given E1 new tpe enum + | ^ +Missing enum + +tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: + | +3 | given E1 new tpe enum + | ^ +Missing type + +tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: + | +3 | given E1 new tpe enum + | ^ +Missing , + +tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:18: + | +3 | given E1 new tpe enum + | ^ +Missing type + +tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:18: + | +3 | given E1 new tpe enum + | ^ +Missing new diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected index a42da9440c..99f01245b1 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence:1:1: -unexpected languae -expecting end of input, language, or statement - languae Essence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence:1:1: + | +1 | languae Essence 1.3 + | ^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected index 0e10fe14e9..cb48ad81fa 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence:1:1: -unexpected lnguage -expecting end of input, language, or statement - lnguage Essence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence:1:1: + | +1 | lnguage Essence 1.3 + | ^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected index 27213959c2..e252f3af33 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected @@ -1,6 +1,55 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:7:9: -unexpected E2 -expecting colon or comma - find y E2 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence Error is: +ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:7:9: + | +7 | find y E2 + | ^ +Missing , + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:7:11: + | +7 | find y E2 + | ^ +Missing Domain + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:1: + | +8 | find z : E2(a..c) + | ^ +Missing : + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:10: + | +8 | find z : E2(a..c) + | ^^ +Error: range not supported on non enum ranges + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:10: + | +8 | find z : E2(a..c) + | ^^ +Tried to use a Value where Domain was expected + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:9:10: + | +9 | find t : E2(b,d) + | ^^ +Error: range not supported on non enum ranges + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:9:10: + | +9 | find t : E2(b,d) + | ^^ +Tried to use a Value where Domain was expected + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:13:10: + | +13 | find k : E2 + | ^^ +Tried to use a Value where Domain was expected + +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:14:20: + | +14 | such that k = max(`E2`) + | ^^ +Tried to use a Value where Domain was expected diff --git a/tests/parse_print/random_perturb/set01/change-02/stderr.expected b/tests/parse_print/random_perturb/set01/change-02/stderr.expected index fa01b54760..652cd925bc 100644 --- a/tests/parse_print/random_perturb/set01/change-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-02/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-02/change-02.essence:1:19: -unexpected X3 -expecting dot, end of input, or statement - language Essence 1X3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-02/change-02.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-02/change-02.essence:1:19: + | +1 | language Essence 1X3 + | ^^ +Unexpected LIdentifier "X3" diff --git a/tests/parse_print/random_perturb/set01/change-03/stderr.expected b/tests/parse_print/random_perturb/set01/change-03/stderr.expected index d6ada719c4..de2da12c0a 100644 --- a/tests/parse_print/random_perturb/set01/change-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-03/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-03/change-03.essence:1:10: -language name has to be Essence, but given: EsZence - language EsZence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-03/change-03.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-03/change-03.essence:1:10: + | +1 | language EsZence 1.3 + | ^^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/change-04/stderr.expected b/tests/parse_print/random_perturb/set01/change-04/stderr.expected index 97dc333779..549ad67ebc 100644 --- a/tests/parse_print/random_perturb/set01/change-04/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-04/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-04/change-04.essence:1:10: -language name has to be Essence, but given: Essenle - language Essenle 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-04/change-04.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-04/change-04.essence:1:10: + | +1 | language Essenle 1.3 + | ^^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/change-05/stderr.expected b/tests/parse_print/random_perturb/set01/change-05/stderr.expected index f51def434a..244067d8cd 100644 --- a/tests/parse_print/random_perturb/set01/change-05/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-05/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-05/change-05.essence:3:1: -unexpected finO -expecting dot, end of input, or statement - finO x : set (size 2) of int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-05/change-05.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-05/change-05.essence:3:1: + | +3 | finO x : set (size 2) of int(1..3) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/set01/change-06/stderr.expected b/tests/parse_print/random_perturb/set01/change-06/stderr.expected index 5fdface9a2..acea8f2843 100644 --- a/tests/parse_print/random_perturb/set01/change-06/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-06/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-06/change-06.essence:1:10: -language name has to be Essence, but given: Essencx - language Essencx 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-06/change-06.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-06/change-06.essence:1:10: + | +1 | language Essencx 1.3 + | ^^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/change-07/stderr.expected b/tests/parse_print/random_perturb/set01/change-07/stderr.expected index 799c61b485..c032092dfb 100644 --- a/tests/parse_print/random_perturb/set01/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-07/stderr.expected @@ -1,6 +1,25 @@ Error: - tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:14: -Unsupported attributes for set: sizo -Only these are supported: size, minSize, maxSize - find x : set (sizo 2) of int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-07/change-07.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:14: + | +3 | find x : set (sizo 2) of int(1..3) + | ^ +Missing of + +tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:15: + | +3 | find x : set (sizo 2) of int(1..3) + | ^^^^ +Error: Symbol not found "sizo" + +tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: + | +3 | find x : set (sizo 2) of int(1..3) + | ^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: + | +3 | find x : set (sizo 2) of int(1..3) + | ^ +Missing ) diff --git a/tests/parse_print/random_perturb/set01/change-08/stderr.expected b/tests/parse_print/random_perturb/set01/change-08/stderr.expected index 87c18737e5..4ad731c0c7 100644 --- a/tests/parse_print/random_perturb/set01/change-08/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-08/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-08/change-08.essence:3:29: -unexpected ( -expecting end of input, rest of statement, or statement - find x : set (size 2) of inN(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-08/change-08.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-08/change-08.essence:3:26: + | +3 | find x : set (size 2) of inN(1..3) + | ^^^ +Error: Symbol not found "inN" diff --git a/tests/parse_print/random_perturb/set01/change-09/stderr.expected b/tests/parse_print/random_perturb/set01/change-09/stderr.expected index 783eac3804..d03e71b192 100644 --- a/tests/parse_print/random_perturb/set01/change-09/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-09/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/change-09/change-09.essence:1:10: -language name has to be Essence, but given: xssence - language xssence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-09/change-09.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-09/change-09.essence:1:10: + | +1 | language xssence 1.3 + | ^^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/change-10/stderr.expected b/tests/parse_print/random_perturb/set01/change-10/stderr.expected index b3af7dab4d..dfe86ec9e0 100644 --- a/tests/parse_print/random_perturb/set01/change-10/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-10/stderr.expected @@ -1,5 +1,13 @@ Error: - tests/parse_print/random_perturb/set01/change-10/change-10.essence:1:10: -language name has to be Essence, but given: E - language E@sence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/change-10/change-10.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/change-10/change-10.essence:1:10: + | +1 | language E@sence 1.3 + | ^ +Syntax Error: Not a valid language name + +tests/parse_print/random_perturb/set01/change-10/change-10.essence:1:11: + | +1 | language E@sence 1.3 + | ^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/set01/delete-01/stderr.expected b/tests/parse_print/random_perturb/set01/delete-01/stderr.expected index 6dc7106e5b..d562720190 100644 --- a/tests/parse_print/random_perturb/set01/delete-01/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-01/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/delete-01/delete-01.essence:1:1: -unexpected laguage -expecting end of input, language, or statement - laguage Essence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-01/delete-01.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-01/delete-01.essence:1:1: + | +1 | laguage Essence 1.3 + | ^^^^^^^^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected index 743d0fb8ca..4ab3864827 100644 --- a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected @@ -1,6 +1,25 @@ Error: - tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:14: -Unsupported attributes for set: siz -Only these are supported: size, minSize, maxSize - find x : set (siz 2) of int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-02/delete-02.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:14: + | +3 | find x : set (siz 2) of int(1..3) + | ^ +Missing of + +tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:15: + | +3 | find x : set (siz 2) of int(1..3) + | ^^^ +Error: Symbol not found "siz" + +tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: + | +3 | find x : set (siz 2) of int(1..3) + | ^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: + | +3 | find x : set (siz 2) of int(1..3) + | ^ +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected index 4c6c5c6327..f4ae2cf405 100644 --- a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected @@ -1,6 +1,25 @@ Error: - tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:14: -Unsupported attributes for set: sze -Only these are supported: size, minSize, maxSize - find x : set (sze 2) of int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-03/delete-03.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:14: + | +3 | find x : set (sze 2) of int(1..3) + | ^ +Missing of + +tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:15: + | +3 | find x : set (sze 2) of int(1..3) + | ^^^ +Error: Symbol not found "sze" + +tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: + | +3 | find x : set (sze 2) of int(1..3) + | ^^^^^^^^^^^^^^^ +Skipped tokens + +tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: + | +3 | find x : set (sze 2) of int(1..3) + | ^ +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-04/stderr.expected b/tests/parse_print/random_perturb/set01/delete-04/stderr.expected index 6aac646b04..0aced0c4b7 100644 --- a/tests/parse_print/random_perturb/set01/delete-04/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-04/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/delete-04/delete-04.essence:3:7: -unexpected : - find : set (size 2) of int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-04/delete-04.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-04/delete-04.essence:3:7: + | +3 | find : set (size 2) of int(1..3) + | ^ +Missing diff --git a/tests/parse_print/random_perturb/set01/delete-05/stderr.expected b/tests/parse_print/random_perturb/set01/delete-05/stderr.expected index 112935f470..697d06a0c0 100644 --- a/tests/parse_print/random_perturb/set01/delete-05/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-05/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/delete-05/delete-05.essence:1:10: -language name has to be Essence, but given: Essene - language Essene 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-05/delete-05.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-05/delete-05.essence:1:10: + | +1 | language Essene 1.3 + | ^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/delete-06/stderr.expected b/tests/parse_print/random_perturb/set01/delete-06/stderr.expected index ce8ac3519f..b3e4d4bbf6 100644 --- a/tests/parse_print/random_perturb/set01/delete-06/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-06/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/delete-06/delete-06.essence:1:10: -language name has to be Essence, but given: Essece - language Essece 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-06/delete-06.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-06/delete-06.essence:1:10: + | +1 | language Essece 1.3 + | ^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/delete-07/stderr.expected b/tests/parse_print/random_perturb/set01/delete-07/stderr.expected index 185e668a2f..07f1ed3aa6 100644 --- a/tests/parse_print/random_perturb/set01/delete-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-07/stderr.expected @@ -1,6 +1,13 @@ Error: - tests/parse_print/random_perturb/set01/delete-07/delete-07.essence:3:13: -unexpected ( -expecting end of input, rest of statement, or statement - find x : et (size 2) of int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-07/delete-07.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-07/delete-07.essence:3:10: + | +3 | find x : et (size 2) of int(1..3) + | ^^ +Error: Symbol not found "et" + +tests/parse_print/random_perturb/set01/delete-07/delete-07.essence:3:22: + | +3 | find x : et (size 2) of int(1..3) + | ^^^^^^^^^^^^ +Skipped tokens diff --git a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected index a8e69fbe03..646b86c896 100644 --- a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected @@ -1,6 +1,31 @@ Error: - tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: -unexpected o -expecting of - find x : set (size 2) o int(1..3) - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-08/delete-08.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: + | +3 | find x : set (size 2) o int(1..3) + | ^ +Error: Symbol not found "o" + +tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: + | +3 | find x : set (size 2) o int(1..3) + | ^ +Missing of + +tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: + | +3 | find x : set (size 2) o int(1..3) + | ^ +Missing + +tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: + | +3 | find x : set (size 2) o int(1..3) + | ^ +Missing : + +tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: + | +3 | find x : set (size 2) o int(1..3) + | ^ +Missing , diff --git a/tests/parse_print/random_perturb/set01/delete-09/stderr.expected b/tests/parse_print/random_perturb/set01/delete-09/stderr.expected index 2ac763e5b6..86446cbebf 100644 --- a/tests/parse_print/random_perturb/set01/delete-09/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-09/stderr.expected @@ -1,5 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/delete-09/delete-09.essence:1:10: -language name has to be Essence, but given: Essnce - language Essnce 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-09/delete-09.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-09/delete-09.essence:1:10: + | +1 | language Essnce 1.3 + | ^^^^^^ +Syntax Error: Not a valid language name diff --git a/tests/parse_print/random_perturb/set01/delete-10/stderr.expected b/tests/parse_print/random_perturb/set01/delete-10/stderr.expected index e14826bed9..36fe7a6c5e 100644 --- a/tests/parse_print/random_perturb/set01/delete-10/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-10/stderr.expected @@ -1,6 +1,7 @@ Error: - tests/parse_print/random_perturb/set01/delete-10/delete-10.essence:1:1: -unexpected lnguage -expecting end of input, language, or statement - lnguage Essence 1.3 - ^ \ No newline at end of file + Parser error in file: tests/parse_print/random_perturb/set01/delete-10/delete-10.essence Error is: +ValidatorError tests/parse_print/random_perturb/set01/delete-10/delete-10.essence:1:1: + | +1 | lnguage Essence 1.3 + | ^^^^^^^^^^^^^^^^^^^ +Skipped tokens From f7298f7c77f04b35cac70d0fbb898cdbd5bad79d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 17:33:13 +0000 Subject: [PATCH 137/378] Updates further test results --- src/test/Conjure/ParsePrint.hs | 76 ++++++++++--------- tests/parse_print/parsing02/stdout.expected | 8 +- .../comprehensions/comprehension.essence | 3 +- .../comprehensions/model.expected.json | 46 +---------- .../comprehensions/stdout.expected | 3 +- .../comprehensions/typecheck.expected | 8 -- .../expressions/literals/literals.essence | 6 +- .../expressions/literals/model.expected.json | 14 ++-- .../expressions/literals/stdout.expected | 5 +- .../expressions/literals/typecheck.expected | 9 --- .../expressions/operators/stdout.expected | 21 ++++- .../expressions/operators/typecheck.expected | 12 --- .../quantifications/model.expected.json | 52 ++++++++----- .../quantifications/quantifications.essence | 5 ++ .../quantifications/qunatifications.essence | 5 -- .../quantifications/stdout.expected | 10 +-- .../quantifications/typecheck.expected | 25 ------ 17 files changed, 122 insertions(+), 186 deletions(-) delete mode 100644 tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected delete mode 100644 tests/parse_print/syntax_test/expressions/literals/typecheck.expected create mode 100644 tests/parse_print/syntax_test/expressions/quantifications/quantifications.essence delete mode 100644 tests/parse_print/syntax_test/expressions/quantifications/qunatifications.essence diff --git a/src/test/Conjure/ParsePrint.hs b/src/test/Conjure/ParsePrint.hs index 842420d2c9..b846c95b41 100644 --- a/src/test/Conjure/ParsePrint.hs +++ b/src/test/Conjure/ParsePrint.hs @@ -105,7 +105,7 @@ testSingleDir TestDirFiles{..} = testCaseSteps (map (\ch -> if ch == '/' then '. readIfExists :: FilePath -> IO String readIfExists f = fromMaybe "" <$> readFileIfExists f - do + e <- do step "Checking stderr" stderrG <- fixWindowsPaths <$> readIfExists (tBaseDir "stderr") stderrE <- readIfExists (tBaseDir "stderr.expected") @@ -116,42 +116,44 @@ testSingleDir TestDirFiles{..} = testCaseSteps (map (\ch -> if ch == '/' then '. [ "unexpected stderr:" <++> pretty stderrG , "was expecting: " <++> pretty stderrE ] - do - step "Checking Generated Representation" - stdoutG <- fixWindowsPaths <$> readIfExists (tBaseDir "model.json") - stdoutE <- readIfExists (tBaseDir "model.expected.json") - let diffs = do - jGiven <- stringToJson stdoutG - jReference <- stringToJson stdoutE - let Patch ds = diff jGiven jReference - return ds - case diffs of - Nothing -> assertFailure $ "JSON parser error in" ++ stdoutE - Just [] -> return () - Just ops -> assertFailure $ renderNormal $ vcat ["Difference in json:" <++> vcat (map (stringToDoc . show) ops)] - - do - step "Checking stdout" - stdoutG <- fixWindowsPaths <$> readIfExists (tBaseDir "stdout") - stdoutE <- readIfExists (tBaseDir "stdout.expected") - unless (stdoutE == stdoutG) $ - assertFailure $ - renderNormal $ - vcat - [ "unexpected stdout:" <++> pretty stdoutG - , "was expecting: " <++> pretty stdoutE - ] - do - step "Checking Types" - stdoutE <- fixWindowsPaths <$> readIfExists (tBaseDir "typecheck") - stdoutG <- readIfExists (tBaseDir "typecheck.expected") - unless (stdoutE == stdoutG) $ - assertFailure $ - renderNormal $ - vcat - [ "unexpected typeError:" <++> pretty stdoutG - , "was expecting: " <++> pretty stdoutE - ] + return stderrE + unless (e /= "") $ do + do + step "Checking Generated Representation" + stdoutG <- fixWindowsPaths <$> readIfExists (tBaseDir "model.json") + stdoutE <- readIfExists (tBaseDir "model.expected.json") + let diffs = do + jGiven <- stringToJson stdoutG + jReference <- stringToJson stdoutE + let Patch ds = diff jGiven jReference + return ds + case diffs of + Nothing -> assertFailure $ "JSON parser error in" ++ stdoutE + Just [] -> return () + Just ops -> assertFailure $ renderNormal $ vcat ["Difference in json:" <++> vcat (map (stringToDoc . show) ops)] + + do + step "Checking stdout" + stdoutG <- fixWindowsPaths <$> readIfExists (tBaseDir "stdout") + stdoutE <- readIfExists (tBaseDir "stdout.expected") + unless (stdoutE == stdoutG) $ + assertFailure $ + renderNormal $ + vcat + [ "unexpected stdout:" <++> pretty stdoutG + , "was expecting: " <++> pretty stdoutE + ] + do + step "Checking Types" + stdoutE <- fixWindowsPaths <$> readIfExists (tBaseDir "typecheck") + stdoutG <- readIfExists (tBaseDir "typecheck.expected") + unless (stdoutE == stdoutG) $ + assertFailure $ + renderNormal $ + vcat + [ "unexpected typeError:" <++> pretty stdoutG + , "was expecting: " <++> pretty stdoutE + ] stringToJson :: String -> Maybe JSON.Value stringToJson "" = Just JSON.emptyObject diff --git a/tests/parse_print/parsing02/stdout.expected b/tests/parse_print/parsing02/stdout.expected index c393d0db45..4ab8f40abf 100644 --- a/tests/parse_print/parsing02/stdout.expected +++ b/tests/parse_print/parsing02/stdout.expected @@ -6,12 +6,12 @@ given n_periods: int(1..100) letting Boat be domain int(1..n_boats) given capacity: function (total) Boat --> int(1..n_upper) given crew: function (total) Boat --> int(1..n_upper) -where and([crew(i) <= capacity(i) | i : Boat]) +where and([image(crew, i) <= image(capacity, i) | i : Boat]) find hosts: set of Boat find sched: set (size n_periods) of function (total) Boat --> Boat minimising |hosts| such that and([range(p) subsetEq hosts | p <- sched]), - and([and([p(h) = h | h <- hosts]) | p <- sched]), - and([and([sum([crew(b) | b <- preImage(p, h)]) <= capacity(h) | h <- hosts]) | p <- sched]), - and([sum([toInt(p(b1) = p(b2)) | p <- sched]) <= 1 | b1 : Boat, b2 : Boat, b1 != b2]) + and([and([image(p, h) = h | h <- hosts]) | p <- sched]), + and([and([sum([image(crew, b) | b <- preImage(p, h)]) <= image(capacity, h) | h <- hosts]) | p <- sched]), + and([sum([toInt(image(p, b1) = image(p, b2)) | p <- sched]) <= 1 | b1 : Boat, b2 : Boat, b1 != b2]) diff --git a/tests/parse_print/syntax_test/expressions/comprehensions/comprehension.essence b/tests/parse_print/syntax_test/expressions/comprehensions/comprehension.essence index 0f2e7e3dec..7e1a6f373c 100644 --- a/tests/parse_print/syntax_test/expressions/comprehensions/comprehension.essence +++ b/tests/parse_print/syntax_test/expressions/comprehensions/comprehension.essence @@ -1,9 +1,8 @@ letting s be domain set (size 5) of int letting c1 be [x | x : s] -letting c2 be [x + y | x , y : s] +letting c2 be [x - y | x , y : s] letting c3 be [x | x <- {1,2,3,4}] letting c4 be [x | x <- {1,2,3,4},x<2] -letting c5 be [x + y | x<2, x <- {1,2,3,4}] letting c5 be [y + z | x <- {1,2,3,4},letting y be 2 + x, z <- {7,8}] diff --git a/tests/parse_print/syntax_test/expressions/comprehensions/model.expected.json b/tests/parse_print/syntax_test/expressions/comprehensions/model.expected.json index c690d7399d..e59941e2d5 100644 --- a/tests/parse_print/syntax_test/expressions/comprehensions/model.expected.json +++ b/tests/parse_print/syntax_test/expressions/comprehensions/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -25,16 +25,8 @@ [{"Name": "c2"}, {"Comprehension": [{"Op": - {"MkOpSum": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Reference": [{"Name": "x"}, null]}, - {"Reference": [{"Name": "y"}, null]}]]}}}}, + {"MkOpMinus": + [{"Reference": [{"Name": "x"}, null]}, {"Reference": [{"Name": "y"}, null]}]}}, [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "x"}}, {"DomainReference": [{"Name": "s"}, null]}]}}, @@ -76,36 +68,6 @@ {"MkOpLt": [{"Reference": [{"Name": "x"}, null]}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}}]]}]}}, - {"Declaration": - {"Letting": - [{"Name": "c5"}, - {"Comprehension": - [{"Op": - {"MkOpSum": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Reference": [{"Name": "x"}, null]}, - {"Reference": [{"Name": "y"}, null]}]]}}}}, - [{"Condition": - {"Op": - {"MkOpLt": - [{"Reference": [{"Name": "x"}, null]}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}}, - {"Generator": - {"GenInExpr": - [{"Single": {"Name": "x"}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}]}}]]}]}}, {"Declaration": {"Letting": [{"Name": "c5"}, diff --git a/tests/parse_print/syntax_test/expressions/comprehensions/stdout.expected b/tests/parse_print/syntax_test/expressions/comprehensions/stdout.expected index deb2ca3403..82ec2d1e6a 100644 --- a/tests/parse_print/syntax_test/expressions/comprehensions/stdout.expected +++ b/tests/parse_print/syntax_test/expressions/comprehensions/stdout.expected @@ -2,8 +2,7 @@ language Essence 1.3 letting s be domain set (size 5) of int letting c1 be [x | x : s] -letting c2 be [x + y | x : s, y : s] +letting c2 be [x - y | x : s, y : s] letting c3 be [x | x <- {1, 2, 3, 4}] letting c4 be [x | x <- {1, 2, 3, 4}, x < 2] -letting c5 be [x + y | x < 2, x <- {1, 2, 3, 4}] letting c5 be [y + z | x <- {1, 2, 3, 4}, letting y be 2 + x, z <- {7, 8}] diff --git a/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected b/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected deleted file mode 100644 index f9e6f65ae0..0000000000 --- a/tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected +++ /dev/null @@ -1,8 +0,0 @@ -Error: - Undefined reference: x - Bindings in context: - c4: an alias for [x | x <- {1, 2, 3, 4}, x < 2] - c3: an alias for [x | x <- {1, 2, 3, 4}] - c2: an alias for [x + y | x : s, y : s] - c1: an alias for [x | x : s] - s: an alias for `set (size 5) of int` \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/literals/literals.essence b/tests/parse_print/syntax_test/expressions/literals/literals.essence index 4c3938ad50..c4b2d10084 100644 --- a/tests/parse_print/syntax_test/expressions/literals/literals.essence +++ b/tests/parse_print/syntax_test/expressions/literals/literals.essence @@ -1,6 +1,6 @@ letting anEnum be new type enum {a,b,c,d} -letting _ref_enum be anEnum -letting _ref_name be _ref_enum +letting _ref_enum be domain anEnum +letting _ref_name be a letting _bool be true letting _int be 1 @@ -9,7 +9,7 @@ letting _matrix_explicit_dom be [1,2,3;int(1..3)] letting _short_tuple be (1,2,3) letting _long_tuple be tuple(1) letting _record be record {a=1,b=3} -letting _variant be variant {q=3} +$ not allowed -- letting _variant be variant {q=3} letting _set be {1,2,3,4} letting _mset be mset (1,1,2,2) letting _func be function (1-->2,2-->1) diff --git a/tests/parse_print/syntax_test/expressions/literals/model.expected.json b/tests/parse_print/syntax_test/expressions/literals/model.expected.json index ae8bab43ab..95bb89b88e 100644 --- a/tests/parse_print/syntax_test/expressions/literals/model.expected.json +++ b/tests/parse_print/syntax_test/expressions/literals/model.expected.json @@ -1,15 +1,16 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"LettingDomainDefnEnum": [{"Name": "anEnum"}, [{"Name": "a"}, {"Name": "b"}, {"Name": "c"}, {"Name": "d"}]]}}, - {"Declaration": {"Letting": [{"Name": "_ref_enum"}, {"Reference": [{"Name": "anEnum"}, null]}]}}, - {"Declaration": {"Letting": [{"Name": "_ref_name"}, {"Reference": [{"Name": "_ref_enum"}, null]}]}}, + {"Declaration": + {"Letting": [{"Name": "_ref_enum"}, {"Domain": {"DomainEnum": [{"Name": "anEnum"}, null, null]}}]}}, + {"Declaration": {"Letting": [{"Name": "_ref_name"}, {"Reference": [{"Name": "a"}, null]}]}}, {"Declaration": {"Letting": [{"Name": "_bool"}, {"Constant": {"ConstantBool": true}}]}}, {"Declaration": {"Letting": [{"Name": "_int"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, {"Declaration": @@ -58,11 +59,6 @@ {"AbsLitRecord": [[{"Name": "a"}, {"ConstantInt": [{"TagInt": []}, 1]}], [{"Name": "b"}, {"ConstantInt": [{"TagInt": []}, 3]}]]}}}]}}, - {"Declaration": - {"Letting": - [{"Name": "_variant"}, - {"AbstractLiteral": - {"AbsLitVariant": [null, {"Name": "q"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}]}}, {"Declaration": {"Letting": [{"Name": "_set"}, diff --git a/tests/parse_print/syntax_test/expressions/literals/stdout.expected b/tests/parse_print/syntax_test/expressions/literals/stdout.expected index 130cdb67ca..1dd71ba0a5 100644 --- a/tests/parse_print/syntax_test/expressions/literals/stdout.expected +++ b/tests/parse_print/syntax_test/expressions/literals/stdout.expected @@ -1,8 +1,8 @@ language Essence 1.3 letting anEnum be new type enum {a, b, c, d} -letting _ref_enum be anEnum -letting _ref_name be _ref_enum +letting _ref_enum be domain anEnum +letting _ref_name be a letting _bool be true letting _int be 1 letting _matrix be [1, 2, 3; int(1..3)] @@ -10,7 +10,6 @@ letting _matrix_explicit_dom be [1, 2, 3; int(1..3)] letting _short_tuple be (1, 2, 3) letting _long_tuple be tuple (1) letting _record be record {a = 1, b = 3} -letting _variant be variant {q = 3} letting _set be {1, 2, 3, 4} letting _mset be mset(1, 1, 2, 2) letting _func be function(1 --> 2, 2 --> 1) diff --git a/tests/parse_print/syntax_test/expressions/literals/typecheck.expected b/tests/parse_print/syntax_test/expressions/literals/typecheck.expected deleted file mode 100644 index 3c200023f9..0000000000 --- a/tests/parse_print/syntax_test/expressions/literals/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error 1: - In a letting statement: letting _ref_enum be anEnum - Error: Expected an expression, but got a domain: int(1..4) -Error 2: - In a letting statement: letting _ref_name be _ref_enum - Error: Expected an expression, but got a domain: int(1..4) -Error 3: - In a letting statement: letting _variant be variant {q = 3} - Error: Cannot calculate the type of variant literal. \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/operators/stdout.expected b/tests/parse_print/syntax_test/expressions/operators/stdout.expected index 0d2df43c52..299c3e0670 100644 --- a/tests/parse_print/syntax_test/expressions/operators/stdout.expected +++ b/tests/parse_print/syntax_test/expressions/operators/stdout.expected @@ -9,9 +9,24 @@ letting _paren be 1 letting _aac be minSize({1, 2, 3, 4}, 2) letting _postFixFactorial be factorial(4) letting _doublePostFixFactorial be factorial(factorial(2)) +letting a be [1, 2, 3, 4, 5; int(1..5)] letting _indexing be a[1] +letting b be [[[1; int(1)]; int(1)], [[1; int(1)]; int(1)], [[1; int(1)]; int(1)]; int(1..3)] +$ Visualisation for b +$ 1 +$ +$ 1 +$ +$ 1 +$ + letting _multiIndex be b[1, 2, 3] -letting _functionUser be f(1) -letting _functionUserMulti be f(1)(2) +letting f be function(1 --> function(1 --> 2)) +$ Visualisation for f +$ 2 + +letting _functionUser be image(f, 1) +letting _functionUserMulti be image(image(f, 1), 2) +letting x be 1 letting _functionFactorial be factorial(x) -letting _functionInbuilt be allDiff(x) +letting _functionInbuilt be allDiff([1, 2, 3; int(1..3)]) diff --git a/tests/parse_print/syntax_test/expressions/operators/typecheck.expected b/tests/parse_print/syntax_test/expressions/operators/typecheck.expected index d253b3b743..e69de29bb2 100644 --- a/tests/parse_print/syntax_test/expressions/operators/typecheck.expected +++ b/tests/parse_print/syntax_test/expressions/operators/typecheck.expected @@ -1,12 +0,0 @@ -Error: - Undefined reference: a - Bindings in context: - _doublePostFixFactorial: an alias for factorial(factorial(2)) - _postFixFactorial: an alias for factorial(4) - _aac: an alias for minSize({1, 2, 3, 4}, 2) - _paren: an alias for 1 - _doubleUnaryNegate: an alias for --1 - _unaryNegage: an alias for -1 - _doubleUnaryNot: an alias for !!true - _unaryNot: an alias for !true - _binary: an alias for 1 + 2 \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/quantifications/model.expected.json b/tests/parse_print/syntax_test/expressions/quantifications/model.expected.json index f669608d3b..8c501a3363 100644 --- a/tests/parse_print/syntax_test/expressions/quantifications/model.expected.json +++ b/tests/parse_print/syntax_test/expressions/quantifications/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": @@ -11,7 +11,10 @@ {"Op": {"MkOpAnd": {"Comprehension": - [{"Reference": [{"Name": "x"}, null]}, + [{"Op": + {"MkOpEq": + [{"Reference": [{"Name": "x"}, null]}, + {"Reference": [{"Name": "y"}, null]}]}}, [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "x"}}, @@ -43,7 +46,10 @@ {"Op": {"MkOpAnd": {"Comprehension": - [{"Reference": [{"Name": "x"}, null]}, + [{"Op": + {"MkOpLt": + [{"Reference": [{"Name": "x"}, null]}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "x"}}, @@ -64,17 +70,23 @@ {"MkOpAnd": {"Comprehension": [{"Op": - {"MkOpSum": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Reference": [{"Name": "x"}, null]}, - {"Reference": [{"Name": "y"}, null]}]]}}}}, + {"MkOpEq": + [{"Op": + {"MkOpSum": + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 2]}}]}]]}, + [{"Reference": [{"Name": "x"}, null]}, + {"Reference": [{"Name": "y"}, null]}]]}}}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "x"}}, @@ -98,7 +110,10 @@ {"Op": {"MkOpAnd": {"Comprehension": - [{"Reference": [{"Name": "x"}, null]}, + [{"Op": + {"MkOpLt": + [{"Reference": [{"Name": "x"}, null]}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, [{"Generator": {"GenInExpr": [{"Single": {"Name": "x"}}, @@ -120,7 +135,10 @@ {"Op": {"MkOpAnd": {"Comprehension": - [{"Reference": [{"Name": "x"}, null]}, + [{"Op": + {"MkOpIn": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, + {"Reference": [{"Name": "x"}, null]}]}}, [{"Generator": {"GenInExpr": [{"Single": {"Name": "x"}}, diff --git a/tests/parse_print/syntax_test/expressions/quantifications/quantifications.essence b/tests/parse_print/syntax_test/expressions/quantifications/quantifications.essence new file mode 100644 index 0000000000..7eb0aa55ed --- /dev/null +++ b/tests/parse_print/syntax_test/expressions/quantifications/quantifications.essence @@ -0,0 +1,5 @@ +letting p be forAll x ,y,z : int(1..4) . x = y +letting q be forAll x : int(1..4) , x<2 . x < 2 +letting r be forAll x , y : int (1..4) . x + y = 1 +letting s be forAll x in [1,2,3,4] . x < 5 +letting t be forAll x subsetEq {1,2,3,4} . 1 in x \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/quantifications/qunatifications.essence b/tests/parse_print/syntax_test/expressions/quantifications/qunatifications.essence deleted file mode 100644 index c21ec85dd4..0000000000 --- a/tests/parse_print/syntax_test/expressions/quantifications/qunatifications.essence +++ /dev/null @@ -1,5 +0,0 @@ -letting p be forAll x ,y,z : int(1..4) . x -letting q be forAll x : int(1..4) , x<2 . x -letting r be forAll x , y : int (1..4) . x + y -letting s be forAll x in [1,2,3,4] . x -letting t be forAll x subsetEq {1,2,3,4} . x \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/quantifications/stdout.expected b/tests/parse_print/syntax_test/expressions/quantifications/stdout.expected index e6108090b9..d9937ab7dc 100644 --- a/tests/parse_print/syntax_test/expressions/quantifications/stdout.expected +++ b/tests/parse_print/syntax_test/expressions/quantifications/stdout.expected @@ -1,7 +1,7 @@ language Essence 1.3 -letting p be and([x | x : int(1..4), y : int(1..4), z : int(1..4)]) -letting q be and([x | x : int(1..4), x < 2]) -letting r be and([x + y | x : int(1..4), y : int(1..4)]) -letting s be and([x | x <- [1, 2, 3, 4; int(1..4)]]) -letting t be and([x | x <- powerSet({1, 2, 3, 4})]) +letting p be and([x = y | x : int(1..4), y : int(1..4), z : int(1..4)]) +letting q be and([x < 2 | x : int(1..4), x < 2]) +letting r be and([x + y = 1 | x : int(1..4), y : int(1..4)]) +letting s be and([x < 5 | x <- [1, 2, 3, 4; int(1..4)]]) +letting t be and([1 in x | x <- powerSet({1, 2, 3, 4})]) diff --git a/tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected b/tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected index 119658fbd4..e69de29bb2 100644 --- a/tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected +++ b/tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected @@ -1,25 +0,0 @@ -Error 1: - In a letting statement: letting p be and([x | x : int(1..4), y : int(1..4), z : int(1..4)]) - Error: - Type error in and([x | x : int(1..4), y : int(1..4), z : int(1..4)]) - The argument has type: [int] -Error 2: - In a letting statement: letting q be and([x | x : int(1..4), x < 2]) - Error: - Type error in and([x | x : int(1..4), x < 2]) - The argument has type: [int] -Error 3: - In a letting statement: letting r be and([x + y | x : int(1..4), y : int(1..4)]) - Error: - Type error in and([x + y | x : int(1..4), y : int(1..4)]) - The argument has type: [int] -Error 4: - In a letting statement: letting s be and([x | x <- [1, 2, 3, 4; int(1..4)]]) - Error: - Type error in and([x | x <- [1, 2, 3, 4; int(1..4)]]) - The argument has type: [int] -Error 5: - In a letting statement: letting t be and([x | x <- powerSet({1, 2, 3, 4})]) - Error: - Type error in and([x | x <- powerSet({1, 2, 3, 4})]) - The argument has type: [set of int] \ No newline at end of file From 3877dab08103e747927d1b66e5f4b0128b22a671 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 17:52:23 +0000 Subject: [PATCH 138/378] Cleans up parser fuzz tests --- src/test/Conjure/ParserFuzz.hs | 10 +- tests/allfiles.txt | 17008 ------------------------------- tests/genAllFiles.sh | 2 - 3 files changed, 6 insertions(+), 17014 deletions(-) delete mode 100644 tests/allfiles.txt delete mode 100644 tests/genAllFiles.sh diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 32d6113e86..ee370e39f3 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -15,20 +15,22 @@ import Test.Tasty.HUnit (assertFailure, testCaseSteps, assertEqual) import Conjure.Language.Parser (runLexerAndParser) import Conjure.Language.AST.ASTParser (runASTParser, parseProgram) import Conjure.Language.NewLexer (runLexer, Reformable (reform), reformList) -import qualified Data.Text as T (pack, lines) +import qualified Data.Text as T (pack, lines, unpack) import qualified Data.Text.Lazy as L -import Data.ByteString.Char8(hPutStrLn, pack) +import Data.ByteString.Char8(hPutStrLn, pack, unpack) import Conjure.Language.AST.Reformer (Flattenable(flatten)) import Data.Algorithm.Diff (getDiff, getGroupedDiff) import Data.Algorithm.DiffOutput (ppDiff) import GHC.IO.Handle.FD (stderr) +import System.Console.CmdArgs.Helper (execute) +import Shelly (run, shelly, silently) tests :: IO TestTree tests = do let baseDir = "tests" - allFiles <- readFileIfExists "tests/allfiles.txt" - let allFileList = lines $ fromMaybe "" allFiles + allFiles <- shelly $ silently $ run "git" ["ls-tree", "--full-tree", "--name-only", "-r", "HEAD"] + let allFileList = lines $ T.unpack allFiles contents <- mapM readFileIfExists allFileList let testCases = [testFile fp fd | (fp,Just fd) <-zip allFileList contents,False] return (testGroup "parse_fuzz" testCases) diff --git a/tests/allfiles.txt b/tests/allfiles.txt deleted file mode 100644 index 59dba9467e..0000000000 --- a/tests/allfiles.txt +++ /dev/null @@ -1,17008 +0,0 @@ -.github/workflows/docker-publish.yml -.gitignore -.tm_properties -.vimrc -CHANGELOG.md -CONTRIBUTORS.md -LICENSE -Makefile -README.md -azure-pipelines.yml -conjure-cp.cabal -docs/.tm_properties -docs/BNFLexer.py -docs/EssenceLexer.py -docs/Makefile -docs/authors.sh -docs/cli.rst -docs/conf.py -docs/conjure-help.html -docs/conjure-help.txt -docs/contact.rst -docs/essence.rst -docs/features.rst -docs/index.rst -docs/installation.rst -docs/introduction.rst -docs/make.bat -docs/refs.bib -docs/requirements.txt -docs/tutorials.rst -docs/tutorials/BIBD.rst -docs/tutorials/Groups.rst -docs/tutorials/LabelledConnectedGraphs.rst -docs/tutorials/NumberPuzzle.rst -docs/tutorials/NurseRostering.rst -docs/tutorials/futoshiki/Futoshiki.rst -docs/tutorials/futoshiki/example.png -docs/tutorials/futoshiki/futoshiki.essence -docs/tutorials/futoshiki/futoshiki.essence-param -docs/tutorials/knapsack.rst -docs/tutorials/knapsack_generator/KnapGen.rst -docs/tutorials/knapsack_generator/generator.essence -docs/tutorials/knapsack_generator/items.param -docs/tutorials/knapsack_generator/knapsack.essence -docs/tutorials/simple_perm/simple_perm.param -docs/tutorials/simple_perm/simple_perm.rst -docs/tutorials/simple_perm/simple_perm_checker.essence -docs/tutorials/simple_perm/simple_perm_checker_false.essence-param -docs/tutorials/simple_perm/simple_perm_checker_true.essence-param -docs/tutorials/simple_perm/simple_perm_generator.essence -docs/tutorials/simple_perm/simple_perm_generator.essence-param -docs/welcome.rst -docs/zreferences.rst -etc/build/clean.sh -etc/build/copy-conjure-branch.sh -etc/build/docker/Dockerfile -etc/build/docker/README.md -etc/build/docker/sudoku.essence -etc/build/docker/sudoku.param -etc/build/download.sh -etc/build/freeze-deps.sh -etc/build/gen_Expression.hs -etc/build/gen_Operator.hs -etc/build/ghc_urls.txt -etc/build/install-bc_minisat_all.sh -etc/build/install-boolector.sh -etc/build/install-cadical.sh -etc/build/install-chuffed.sh -etc/build/install-gecode.sh -etc/build/install-glasgow-subgraph-solver.sh -etc/build/install-glucose.sh -etc/build/install-gnu-parallel.sh -etc/build/install-kissat.sh -etc/build/install-lingeling.sh -etc/build/install-minion.sh -etc/build/install-nbc_minisat_all.sh -etc/build/install-open-wbo.sh -etc/build/install-oscar-cbls.sh -etc/build/install-savilerow.sh -etc/build/install-stack.sh -etc/build/install-yices.sh -etc/build/install-z3.sh -etc/build/install.sh -etc/build/record-coverage.sh -etc/build/silent-wrapper.sh -etc/build/test-parallel.sh -etc/build/version.sh -etc/conjure.figlet -etc/dev/gen.mset.attributes.hs -etc/dev/gen.set.attributes.hs -etc/dev/ghc-optimisation-flags/info.txt -etc/dev/ghc-optimisation-flags/options.hs -etc/dev/live_build -etc/dev/live_compile -etc/dev/live_diff -etc/dev/live_hgstatus -etc/dev/live_uptests -etc/dev/profile.sh -etc/dev/watch-helpers/actionOnSingleFile -etc/dev/watch-helpers/ghcOnSingleFile -etc/dev/watch-helpers/hlintOnSingleFile -etc/dev/watch-helpers/unescapelines.rb -etc/dev/watch-helpers/upTestOnSingleFile -etc/discussion/Essence Operators.txt -etc/discussion/EssenceAttributes.hs -etc/discussion/TODOs -etc/discussion/bindings.txt -etc/discussion/diffs.txt -etc/discussion/notes.txt -etc/empty.param -etc/figlets/do.sh -etc/figlets/index-footer.html -etc/figlets/index-header.html -etc/figlets/one.sh -etc/hs-deps/stack-8.4.yaml -etc/hs-deps/stack-8.6.yaml -etc/hs-deps/stack-9.0.yaml -etc/htags -etc/htags-vi -etc/mkparam -etc/other/copy_tests.sh -etc/other/identical_params.rb -etc/other/save_choices.sh -etc/rules/refns/horizontal/DotLeq-bools.rule -etc/rules/refns/horizontal/DotLeq-ints.rule -etc/rules/refns/horizontal/DotLt-bools.rule -etc/rules/refns/horizontal/DotLt-ints.rule -etc/rules/refns/horizontal/bubbly-quantification.rule -etc/rules/refns/horizontal/dontcare/abstract.rule -etc/rules/refns/horizontal/dontcare/matrix.rule -etc/rules/refns/horizontal/flip-lexgeq.rule -etc/rules/refns/horizontal/flip-lexgt.rule -etc/rules/refns/horizontal/function-apply-eq-1.rule -etc/rules/refns/horizontal/function-apply-eq-2.rule -etc/rules/refns/horizontal/function-card.rule -etc/rules/refns/horizontal/function-defined-quantified.rule -etc/rules/refns/horizontal/function-eq.rule -etc/rules/refns/horizontal/function-intersect-toSet.rule -etc/rules/refns/horizontal/function-inverse.rule -etc/rules/refns/horizontal/function-preImage-quantified.rule -etc/rules/refns/horizontal/function-range-quantified.rule -etc/rules/refns/horizontal/function/toRelation-apply.rule -etc/rules/refns/horizontal/functions-setlike/card.rule -etc/rules/refns/horizontal/functions-setlike/in.rule -etc/rules/refns/horizontal/functions-setlike/subset-both.rule -etc/rules/refns/horizontal/functions-setlike/subset-first.rule -etc/rules/refns/horizontal/functions-setlike/subset-second.rule -etc/rules/refns/horizontal/functions-setlike/subsetEq-both.rule -etc/rules/refns/horizontal/functions-setlike/subsetEq-first.rule -etc/rules/refns/horizontal/functions-setlike/subsetEq-second.rule -etc/rules/refns/horizontal/functions-setlike/supset-both.rule -etc/rules/refns/horizontal/functions-setlike/supset-first.rule -etc/rules/refns/horizontal/functions-setlike/supset-second.rule -etc/rules/refns/horizontal/functions-setlike/supsetEq-both.rule -etc/rules/refns/horizontal/functions-setlike/supsetEq-first.rule -etc/rules/refns/horizontal/functions-setlike/supsetEq-second.rule -etc/rules/refns/horizontal/functions-setlike/toSet.rule -etc/rules/refns/horizontal/matrix/DotLeq.rule -etc/rules/refns/horizontal/matrix/DotLt.rule -etc/rules/refns/horizontal/matrix/allDiff.rule -etc/rules/refns/horizontal/matrix/freq.rule -etc/rules/refns/horizontal/matrix/hist.rule -etc/rules/refns/horizontal/mset/card.rule -etc/rules/refns/horizontal/mset/eq-to-subsets.rule -etc/rules/refns/horizontal/mset/freq-to-sum.rule -etc/rules/refns/horizontal/mset/in.rule -etc/rules/refns/horizontal/mset/intersect-exists.rule -etc/rules/refns/horizontal/mset/intersect-forAll.rule -etc/rules/refns/horizontal/mset/intersect-sum.rule -etc/rules/refns/horizontal/mset/subset-to-subsetEq.rule -etc/rules/refns/horizontal/mset/subseteq-to-quantified.rule -etc/rules/refns/horizontal/mset/supset-to-subset.rule -etc/rules/refns/horizontal/mset/supseteq-to-subseteq.rule -etc/rules/refns/horizontal/mset/toset-exists.rule -etc/rules/refns/horizontal/mset/toset-forAll.rule -etc/rules/refns/horizontal/mset/toset-quantified-intersect.rule -etc/rules/refns/horizontal/mset/toset-quantified.rule -etc/rules/refns/horizontal/mset/union-exists.rule -etc/rules/refns/horizontal/mset/union-forAll.rule -etc/rules/refns/horizontal/mset/union-sum.rule -etc/rules/refns/horizontal/neq-to-eq.rule -etc/rules/refns/horizontal/partition-eq.rule -etc/rules/refns/horizontal/relations-setlike/card.rule -etc/rules/refns/horizontal/relations-setlike/eq.rule -etc/rules/refns/horizontal/relations-setlike/in.rule -etc/rules/refns/horizontal/relations-setlike/neq.rule -etc/rules/refns/horizontal/relations-setlike/quantified.rule -etc/rules/refns/horizontal/relations-setlike/subset-both.rule -etc/rules/refns/horizontal/relations-setlike/subset-first.rule -etc/rules/refns/horizontal/relations-setlike/subset-second.rule -etc/rules/refns/horizontal/relations-setlike/subsetEq-both.rule -etc/rules/refns/horizontal/relations-setlike/subsetEq-first.rule -etc/rules/refns/horizontal/relations-setlike/subsetEq-second.rule -etc/rules/refns/horizontal/relations-setlike/supset-both.rule -etc/rules/refns/horizontal/relations-setlike/supset-first.rule -etc/rules/refns/horizontal/relations-setlike/supset-second.rule -etc/rules/refns/horizontal/relations-setlike/supsetEq-both.rule -etc/rules/refns/horizontal/relations-setlike/supsetEq-first.rule -etc/rules/refns/horizontal/relations-setlike/supsetEq-second.rule -etc/rules/refns/horizontal/set/card-fixed-size.rule -etc/rules/refns/horizontal/set/card.rule -etc/rules/refns/horizontal/set/eq-better.rule -etc/rules/refns/horizontal/set/eq-to-subsets.rule -etc/rules/refns/horizontal/set/freq-to-in.rule -etc/rules/refns/horizontal/set/in-to-quantified.rule -etc/rules/refns/horizontal/set/intersect-quantifier.rule -etc/rules/refns/horizontal/set/max-union.rule -etc/rules/refns/horizontal/set/max.rule -etc/rules/refns/horizontal/set/min-union.rule -etc/rules/refns/horizontal/set/min.rule -etc/rules/refns/horizontal/set/minus-quantifier.rule -etc/rules/refns/horizontal/set/quantification-subset.rule -etc/rules/refns/horizontal/set/quantification-subsetEq.rule -etc/rules/refns/horizontal/set/subset-to-subsetEq.rule -etc/rules/refns/horizontal/set/subset-to-subsetEq2.rule -etc/rules/refns/horizontal/set/subseteq-to-quantified.rule -etc/rules/refns/horizontal/set/supset-to-subset.rule -etc/rules/refns/horizontal/set/supseteq-to-subseteq.rule -etc/rules/refns/horizontal/set/toMSet-to-quantified.rule -etc/rules/refns/horizontal/set/union-exists.rule -etc/rules/refns/horizontal/set/union-forAll.rule -etc/rules/refns/horizontal/set/union-sum.rule -etc/rules/refns/horizontal/toInt-eq-0.rule -etc/rules/refns/horizontal/toInt-eq-1.rule -etc/rules/refns/horizontal/toInt-geq-1.rule -etc/rules/refns/vertical/Function~1D/DotLeq.rule -etc/rules/refns/vertical/Function~1D/DotLt.rule -etc/rules/refns/vertical/Function~1D/image.rule -etc/rules/refns/vertical/Function~1D/toMSet-quantified.rule -etc/rules/refns/vertical/Function~1D/toSet-exists.rule -etc/rules/refns/vertical/Function~1D/toSet-forAll.rule -etc/rules/refns/vertical/Function~1D/toSet-sum.rule -etc/rules/refns/vertical/Function~1DPartial/DotLeq.rule -etc/rules/refns/vertical/Function~1DPartial/DotLt.rule -etc/rules/refns/vertical/Function~1DPartial/defined.rule -etc/rules/refns/vertical/Function~1DPartial/image.rule -etc/rules/refns/vertical/Function~1DPartial/toMSet-quantified.rule -etc/rules/refns/vertical/Function~1DPartial/toSet-quantified.rule -etc/rules/refns/vertical/Function~AsReln/DotLeq.rule -etc/rules/refns/vertical/Function~AsReln/DotLt.rule -etc/rules/refns/vertical/Function~AsReln/image-bool.rule -etc/rules/refns/vertical/Function~AsReln/image-function0.rule -etc/rules/refns/vertical/Function~AsReln/image-function1.rule -etc/rules/refns/vertical/Function~AsReln/image-function2.rule -etc/rules/refns/vertical/Function~AsReln/image-int.rule -etc/rules/refns/vertical/Function~AsReln/image-mset.rule -etc/rules/refns/vertical/Function~AsReln/image-set.rule -etc/rules/refns/vertical/Function~AsReln/image-tuple.rule -etc/rules/refns/vertical/Function~AsReln/quantified.rule -etc/rules/refns/vertical/Function~AsReln/toMSet-quantified.rule -etc/rules/refns/vertical/Function~IntPair2D/DotLeq.rule -etc/rules/refns/vertical/Function~IntPair2D/DotLt.rule -etc/rules/refns/vertical/Function~IntPair2D/image.rule -etc/rules/refns/vertical/Function~IntPair2D/toMSet-quantified.rule -etc/rules/refns/vertical/Function~IntPair2D/toSet-quantified.rule -etc/rules/refns/vertical/Function~IntPair2DPartial/DotLeq.rule -etc/rules/refns/vertical/Function~IntPair2DPartial/DotLt.rule -etc/rules/refns/vertical/Function~IntPair2DPartial/image.rule -etc/rules/refns/vertical/Function~IntPair2DPartial/toMSet-quantified.rule -etc/rules/refns/vertical/Function~IntPair2DPartial/toSet-quantified.rule -etc/rules/refns/vertical/MSet~Explicit/DotLeq.rule -etc/rules/refns/vertical/MSet~Explicit/DotLt.rule -etc/rules/refns/vertical/MSet~Explicit/quantified.rule -etc/rules/refns/vertical/MSet~ExplicitVarSize/DotLeq.rule -etc/rules/refns/vertical/MSet~ExplicitVarSize/DotLt.rule -etc/rules/refns/vertical/MSet~ExplicitVarSize/exists.rule -etc/rules/refns/vertical/MSet~ExplicitVarSize/forAll.rule -etc/rules/refns/vertical/MSet~ExplicitVarSize/sum.rule -etc/rules/refns/vertical/MSet~Occurrence/DotLeq.rule -etc/rules/refns/vertical/MSet~Occurrence/DotLt.rule -etc/rules/refns/vertical/MSet~Occurrence/exists.rule -etc/rules/refns/vertical/MSet~Occurrence/forAll.rule -etc/rules/refns/vertical/MSet~Occurrence/sum.rule -etc/rules/refns/vertical/Partition~SetOfSets/DotLeq.rule -etc/rules/refns/vertical/Partition~SetOfSets/DotLt.rule -etc/rules/refns/vertical/Partition~SetOfSets/quantification-over-part.rule -etc/rules/refns/vertical/Partition~SetOfSets/quantification-over-part2.rule -etc/rules/refns/vertical/Relation~AsSet/DotLeq.rule -etc/rules/refns/vertical/Relation~AsSet/DotLt.rule -etc/rules/refns/vertical/Relation~AsSet/relation-RelationAsSet-toMSet.rule -etc/rules/refns/vertical/Relation~AsSet/relation-RelationAsSet-toSet.rule -etc/rules/refns/vertical/Relation~IntMatrix2/DotLeq.rule -etc/rules/refns/vertical/Relation~IntMatrix2/DotLt.rule -etc/rules/refns/vertical/Relation~IntMatrix2/apply.rule -etc/rules/refns/vertical/Relation~IntMatrix2/leftProject.rule -etc/rules/refns/vertical/Relation~IntMatrix2/rightProject.rule -etc/rules/refns/vertical/Relation~IntMatrix2/toSet.rule -etc/rules/refns/vertical/Relation~IntMatrix3/DotLeq.rule -etc/rules/refns/vertical/Relation~IntMatrix3/DotLt.rule -etc/rules/refns/vertical/Relation~IntMatrix3/apply.rule -etc/rules/refns/vertical/Relation~IntMatrix3/project_1_1.rule -etc/rules/refns/vertical/Relation~IntMatrix3/project_1_2.rule -etc/rules/refns/vertical/Relation~IntMatrix3/project_1_3.rule -etc/rules/refns/vertical/Relation~IntMatrix3/project_2_12.rule -etc/rules/refns/vertical/Relation~IntMatrix3/project_2_13.rule -etc/rules/refns/vertical/Relation~IntMatrix3/project_2_23.rule -etc/rules/refns/vertical/Relation~IntMatrix3/toSet.rule -etc/rules/refns/vertical/Set~Explicit/DotLeq.rule -etc/rules/refns/vertical/Set~Explicit/DotLt.rule -etc/rules/refns/vertical/Set~Explicit/eq.rule -etc/rules/refns/vertical/Set~Explicit/neq.rule -etc/rules/refns/vertical/Set~Explicit/quantified-subsetEq-2.rule -etc/rules/refns/vertical/Set~Explicit/quantified-subsetEq-3.rule -etc/rules/refns/vertical/Set~Explicit/quantified-subsetEq-4.rule -etc/rules/refns/vertical/Set~Explicit/quantified.rule -etc/rules/refns/vertical/Set~Explicit/quantified2lt.rule -etc/rules/refns/vertical/Set~Explicit/quantified2neq.rule -etc/rules/refns/vertical/Set~ExplicitVarSize/DotLeq.rule -etc/rules/refns/vertical/Set~ExplicitVarSize/DotLt.rule -etc/rules/refns/vertical/Set~ExplicitVarSize/quantified.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithDefault/DotLeq.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithDefault/DotLt.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithDefault/quantified.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/DotLeq.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/DotLt.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/card.rule -etc/rules/refns/vertical/Set~ExplicitVarSizeWithMarker/quantified.rule -etc/rules/refns/vertical/Set~Gent/DotLeq.rule -etc/rules/refns/vertical/Set~Gent/DotLt.rule -etc/rules/refns/vertical/Set~Gent/in.rule -etc/rules/refns/vertical/Set~Gent/quantified.rule -etc/rules/refns/vertical/Set~Occurrence/DotLeq.rule -etc/rules/refns/vertical/Set~Occurrence/DotLt.rule -etc/rules/refns/vertical/Set~Occurrence/in.rule -etc/rules/refns/vertical/Set~Occurrence/quantified.rule -etc/rules/refns/vertical/channelling/SetExplicitVarSize-SetExplicitVarSizeWithMarker.rule -etc/rules/refns/vertical/channelling/SetExplicitVarSizeWithMarker-SetExplicitVarSize.rule -etc/rules/reprs/Function~1D.repr -etc/rules/reprs/Function~1DPartial.repr -etc/rules/reprs/Function~AsReln.repr -etc/rules/reprs/Function~AsReln_withMaxSize.repr -etc/rules/reprs/Function~AsReln_withMinSize.repr -etc/rules/reprs/Function~AsReln_withSize.repr -etc/rules/reprs/Function~IntPair2D.repr -etc/rules/reprs/Function~IntPair2DPartial.repr -etc/rules/reprs/MSet~Explicit.repr -etc/rules/reprs/MSet~ExplicitVarSize.repr -etc/rules/reprs/MSet~Occurrence.repr -etc/rules/reprs/Partition~SetOfSets-0.repr -etc/rules/reprs/Partition~SetOfSets-1.repr -etc/rules/reprs/Partition~SetOfSets-2.repr -etc/rules/reprs/Partition~SetOfSets-3.repr -etc/rules/reprs/Relation~IntMatrix2.repr -etc/rules/reprs/Relation~IntMatrix3.repr -etc/rules/reprs/Set~Explicit.repr -etc/rules/reprs/Set~ExplicitVarSize.repr -etc/rules/reprs/Set~ExplicitVarSizeWithDefault.repr -etc/rules/reprs/Set~ExplicitVarSizeWithMarker.repr -etc/rules/reprs/Set~Gent.repr -etc/rules/reprs/Set~Occurrence.repr -etc/savilerow/lib/trove.jar -etc/savilerow/savilerow -etc/savilerow/savilerow.bat -etc/savilerow/savilerow.jar -etc/syntax/textmate/Essence.tmbundle/Preferences/line-comment.tmPreferences -etc/syntax/textmate/Essence.tmbundle/Syntaxes/Essence.tmLanguage -etc/syntax/textmate/Essence.tmbundle/info.plist -etc/syntax/vim/essence/ftdetect/essence.vim -etc/syntax/vim/essence/ftplugin/essence.vim -etc/syntax/vim/essence/snippets/essence.snippets -etc/syntax/vim/essence/syntax/essence.vim -etc/syntax/vim/essence/syntax/keywords -experiments/dontcare/Function-Partial/01/01.essence -experiments/dontcare/Function-Partial/02/02.essence -experiments/dontcare/Function-Partial/03/03.essence -experiments/dontcare/MSet-VarSize/01-optimisation/01.essence -experiments/dontcare/MSet-VarSize/01-satisfaction/01.essence -experiments/dontcare/MSet-VarSize/02-optimisation/02.essence -experiments/dontcare/MSet-VarSize/02-satisfaction/02.essence -experiments/dontcare/MSet-VarSize/03-optimisation/03.essence -experiments/dontcare/MSet-VarSize/03-satisfaction/03.essence -experiments/dontcare/MSet-VarSize/04-optimisation/04.essence -experiments/dontcare/MSet-VarSize/04-satisfaction/04.essence -experiments/dontcare/MSet-VarSize/05-optimisation/05.essence -experiments/dontcare/MSet-VarSize/05-satisfaction/05.essence -experiments/dontcare/MSet-VarSize/06-optimisation/06.essence -experiments/dontcare/MSet-VarSize/06-satisfaction/06.essence -experiments/dontcare/Nested-Types/01/01.essence -experiments/dontcare/Nested-Types/02/02.essence -experiments/dontcare/Partition-VarSize/01/01.essence -experiments/dontcare/Relation-VarSize/01/01.essence -experiments/dontcare/Relation-VarSize/02/02.essence -experiments/dontcare/Set-VarSize/01-optimisation/01.essence -experiments/dontcare/Set-VarSize/01-satisfaction/01.essence -experiments/dontcare/Set-VarSize/02-optimisation/02.essence -experiments/dontcare/Set-VarSize/02-satisfaction/02.essence -experiments/dontcare/Set-VarSize/03-optimisation/03.essence -experiments/dontcare/Set-VarSize/03-satisfaction/03.essence -experiments/dontcare/Set-VarSize/04-optimisation/04.essence -experiments/dontcare/Set-VarSize/04-satisfaction/04.essence -experiments/dontcare/Set-VarSize/05-optimisation/05.essence -experiments/dontcare/Set-VarSize/05-satisfaction/05.essence -experiments/dontcare/Set-VarSize/06-optimisation/06.essence -experiments/dontcare/Set-VarSize/06-satisfaction/06.essence -experiments/dontcare/all-combinations/create_essences.hs -experiments/dontcare/allsols/01-relation/01.essence -experiments/dontcare/allsols/01-relation/expected.txt -experiments/dontcare/allsols/02-relation-partition/02.essence -experiments/dontcare/allsols/02-relation-partition/expected.txt -experiments/dontcare/allsols/README -experiments/dontcare/dominating-queens/04.param -experiments/dontcare/dominating-queens/05.param -experiments/dontcare/dominating-queens/06.param -experiments/dontcare/dominating-queens/07.param -experiments/dontcare/dominating-queens/08.param -experiments/dontcare/dominating-queens/09.param -experiments/dontcare/dominating-queens/10.param -experiments/dontcare/dominating-queens/11.param -experiments/dontcare/dominating-queens/12.param -experiments/dontcare/dominating-queens/13.param -experiments/dontcare/dominating-queens/14.param -experiments/dontcare/dominating-queens/15.param -experiments/dontcare/dominating-queens/dominating-queens.essence -experiments/dontcare/dominating-queens/mkParams.sh -experiments/dontcare/numbers/MinionNodes.txt -experiments/dontcare/numbers/MinionSolveTime.txt -experiments/dontcare/numbers/MinionTimeOut.txt -experiments/dontcare/numbers/SavileRowTotalTime.txt -experiments/dontcare/numbers/forTable_minionNodes.txt -experiments/dontcare/numbers/forTable_minionSolutions.txt -experiments/dontcare/numbers/forTable_minionTimedOut.txt -experiments/dontcare/recompute.sh -experiments/dontcare/remote/build_db.hs -experiments/dontcare/remote/build_db.sh -experiments/dontcare/remote/recomputation/commands.sh -experiments/dontcare/remote/recomputation/noted.txt -experiments/scaling/mset-fixed/00int.essence -experiments/scaling/mset-fixed/01set.essence -experiments/scaling/mset-fixed/02set.essence -experiments/scaling/mset-fixed/03set.essence -experiments/scaling/mset-fixed/04set.essence -experiments/scaling/mset-fixed/05set.essence -experiments/scaling/mset-fixed/06set.essence -experiments/scaling/mset-fixed/07set.essence -experiments/scaling/mset-fixed/08set.essence -experiments/scaling/mset-fixed/09set.essence -experiments/scaling/mset-fixed/10set.essence -experiments/scaling/mset-maxOccur/00int.essence -experiments/scaling/mset-maxOccur/01set.essence -experiments/scaling/mset-maxOccur/02set.essence -experiments/scaling/mset-maxOccur/03set.essence -experiments/scaling/mset-maxOccur/04set.essence -experiments/scaling/mset-maxOccur/05set.essence -experiments/scaling/mset-maxOccur/06set.essence -experiments/scaling/mset-maxOccur/07set.essence -experiments/scaling/mset-maxOccur/08set.essence -experiments/scaling/mset-maxOccur/09set.essence -experiments/scaling/mset-maxOccur/10set.essence -experiments/scaling/mset-maxSize/00int.essence -experiments/scaling/mset-maxSize/01set.essence -experiments/scaling/mset-maxSize/02set.essence -experiments/scaling/mset-maxSize/03set.essence -experiments/scaling/mset-maxSize/04set.essence -experiments/scaling/mset-maxSize/05set.essence -experiments/scaling/mset-maxSize/06set.essence -experiments/scaling/mset-maxSize/07set.essence -experiments/scaling/mset-maxSize/08set.essence -experiments/scaling/mset-maxSize/09set.essence -experiments/scaling/mset-maxSize/10set.essence -experiments/scaling/numberOfCons/gen.hs -experiments/scaling/numberOfCons/run.sh -experiments/scaling/run.sh -experiments/scaling/set-fixed/00int.essence -experiments/scaling/set-fixed/01set.essence -experiments/scaling/set-fixed/02set.essence -experiments/scaling/set-fixed/03set.essence -experiments/scaling/set-fixed/04set.essence -experiments/scaling/set-fixed/05set.essence -experiments/scaling/set-fixed/06set.essence -experiments/scaling/set-fixed/07set.essence -experiments/scaling/set-fixed/08set.essence -experiments/scaling/set-fixed/09set.essence -experiments/scaling/set-fixed/10set.essence -experiments/scaling/set-maxSize/00int.essence -experiments/scaling/set-maxSize/01set.essence -experiments/scaling/set-maxSize/02set.essence -experiments/scaling/set-maxSize/03set.essence -experiments/scaling/set-maxSize/04set.essence -experiments/scaling/set-maxSize/05set.essence -experiments/scaling/set-maxSize/06set.essence -experiments/scaling/set-maxSize/07set.essence -experiments/scaling/set-maxSize/08set.essence -experiments/scaling/set-maxSize/09set.essence -experiments/scaling/set-maxSize/10set.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/mset-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-complete/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-complete/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-maxPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-minPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-numParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-numParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-partSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-partSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-regular/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/partition-regular/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/3.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/relation-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/3.essence -experiments/type-strengthening/attribute-acquisition/nested1-mset/set-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/mset-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-complete/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-complete/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-maxPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-minPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-numParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-numParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-partSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-partSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-regular/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/partition-regular/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/3.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/relation-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/3.essence -experiments/type-strengthening/attribute-acquisition/nested1-set/set-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-mset/set-mset/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-mset/set-mset/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/mset-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-complete/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-complete/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-maxPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-minPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-numParts/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-numParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-partSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-partSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-regular/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/partition-regular/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/3.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/relation-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/1.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/2.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/3.essence -experiments/type-strengthening/attribute-acquisition/nested2-set-set/set-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/function-total/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/function-total/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-maxOccur/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-maxOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minOccur/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/mset-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-complete/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-complete/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-maxPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-minNumParts/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-minNumParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-minPartSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-minPartSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-numParts/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-numParts/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-partSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-partSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/partition-regular/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/partition-regular/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/3.essence -experiments/type-strengthening/attribute-acquisition/not-nested/relation-size/3.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize-maxSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-minSize/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-size/1.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-size/1.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-size/2.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-size/2.essence.expected -experiments/type-strengthening/attribute-acquisition/not-nested/set-size/3.essence -experiments/type-strengthening/attribute-acquisition/not-nested/set-size/3.essence.expected -experiments/type-strengthening/recompute.sh -experiments/type-strengthening/type-change/mset-to-set/1.essence -experiments/type-strengthening/type-change/mset-to-set/1.essence.expected -experiments/type-strengthening/type-change/mset-to-set/2.essence -experiments/type-strengthening/type-change/mset-to-set/2.essence.expected -experiments/type-strengthening/type-change/mset-to-set/3.essence -experiments/type-strengthening/type-change/mset-to-set/3.essence.expected -experiments/type-strengthening/type-change/relation-to-function/because-assigned-1.essence -experiments/type-strengthening/type-change/relation-to-function/because-assigned-1.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1-andMaxSize.essence -experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1-andMaxSize.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1.essence -experiments/type-strengthening/type-change/relation-to-function/partial-functional-on1.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-functional-on2.essence -experiments/type-strengthening/type-change/relation-to-function/partial-functional-on2.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-1.essence -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-1.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-12.essence -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-12.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-13.essence -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-13.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-2.essence -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-2.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-23.essence -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-23.essence.expected -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-3.essence -experiments/type-strengthening/type-change/relation-to-function/partial-relation-123-3.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-functional-on1.essence -experiments/type-strengthening/type-change/relation-to-function/total-functional-on1.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-functional-on2.essence -experiments/type-strengthening/type-change/relation-to-function/total-functional-on2.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-1.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-1.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-12.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-12.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13-andStuff.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13-andStuff.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-13.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-2.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-2.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-23.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-23.essence.expected -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-3.essence -experiments/type-strengthening/type-change/relation-to-function/total-relation-123-3.essence.expected -src/Conjure/Bug.hs -src/Conjure/Compute/DomainOf.hs -src/Conjure/Compute/DomainUnion.hs -src/Conjure/Language.hs -src/Conjure/Language/AST/ASTParser.hs -src/Conjure/Language/AST/Expression.hs -src/Conjure/Language/AST/Helpers.hs -src/Conjure/Language/AST/Reformer.hs -src/Conjure/Language/AST/Syntax.hs -src/Conjure/Language/AbstractLiteral.hs -src/Conjure/Language/AdHoc.hs -src/Conjure/Language/Arbitrary.hs -src/Conjure/Language/Attributes.hs -src/Conjure/Language/CategoryOf.hs -src/Conjure/Language/Constant.hs -src/Conjure/Language/Definition.hs -src/Conjure/Language/Domain.hs -src/Conjure/Language/Domain/AddAttributes.hs -src/Conjure/Language/DomainSizeOf.hs -src/Conjure/Language/EvaluateOp.hs -src/Conjure/Language/Expression.hs -src/Conjure/Language/Expression/DomainSizeOf.hs -src/Conjure/Language/Expression/Op.hs -src/Conjure/Language/Expression/Op/Active.hs -src/Conjure/Language/Expression/Op/AllDiff.hs -src/Conjure/Language/Expression/Op/AllDiffExcept.hs -src/Conjure/Language/Expression/Op/And.hs -src/Conjure/Language/Expression/Op/Apart.hs -src/Conjure/Language/Expression/Op/AtLeast.hs -src/Conjure/Language/Expression/Op/AtMost.hs -src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs -src/Conjure/Language/Expression/Op/CatchUndef.hs -src/Conjure/Language/Expression/Op/Defined.hs -src/Conjure/Language/Expression/Op/Div.hs -src/Conjure/Language/Expression/Op/DontCare.hs -src/Conjure/Language/Expression/Op/DotLeq.hs -src/Conjure/Language/Expression/Op/DotLt.hs -src/Conjure/Language/Expression/Op/Eq.hs -src/Conjure/Language/Expression/Op/Factorial.hs -src/Conjure/Language/Expression/Op/Flatten.hs -src/Conjure/Language/Expression/Op/Freq.hs -src/Conjure/Language/Expression/Op/GCC.hs -src/Conjure/Language/Expression/Op/Geq.hs -src/Conjure/Language/Expression/Op/Gt.hs -src/Conjure/Language/Expression/Op/Hist.hs -src/Conjure/Language/Expression/Op/Iff.hs -src/Conjure/Language/Expression/Op/Image.hs -src/Conjure/Language/Expression/Op/ImageSet.hs -src/Conjure/Language/Expression/Op/Imply.hs -src/Conjure/Language/Expression/Op/In.hs -src/Conjure/Language/Expression/Op/Indexing.hs -src/Conjure/Language/Expression/Op/Internal/Common.hs -src/Conjure/Language/Expression/Op/Intersect.hs -src/Conjure/Language/Expression/Op/Inverse.hs -src/Conjure/Language/Expression/Op/Leq.hs -src/Conjure/Language/Expression/Op/LexLeq.hs -src/Conjure/Language/Expression/Op/LexLt.hs -src/Conjure/Language/Expression/Op/Lt.hs -src/Conjure/Language/Expression/Op/MakeTable.hs -src/Conjure/Language/Expression/Op/Max.hs -src/Conjure/Language/Expression/Op/Min.hs -src/Conjure/Language/Expression/Op/Minus.hs -src/Conjure/Language/Expression/Op/Mod.hs -src/Conjure/Language/Expression/Op/Negate.hs -src/Conjure/Language/Expression/Op/Neq.hs -src/Conjure/Language/Expression/Op/Not.hs -src/Conjure/Language/Expression/Op/Or.hs -src/Conjure/Language/Expression/Op/Participants.hs -src/Conjure/Language/Expression/Op/Parts.hs -src/Conjure/Language/Expression/Op/Party.hs -src/Conjure/Language/Expression/Op/Pow.hs -src/Conjure/Language/Expression/Op/PowerSet.hs -src/Conjure/Language/Expression/Op/PreImage.hs -src/Conjure/Language/Expression/Op/Pred.hs -src/Conjure/Language/Expression/Op/Product.hs -src/Conjure/Language/Expression/Op/Range.hs -src/Conjure/Language/Expression/Op/RelationProj.hs -src/Conjure/Language/Expression/Op/Restrict.hs -src/Conjure/Language/Expression/Op/Slicing.hs -src/Conjure/Language/Expression/Op/Subsequence.hs -src/Conjure/Language/Expression/Op/Subset.hs -src/Conjure/Language/Expression/Op/SubsetEq.hs -src/Conjure/Language/Expression/Op/Substring.hs -src/Conjure/Language/Expression/Op/Succ.hs -src/Conjure/Language/Expression/Op/Sum.hs -src/Conjure/Language/Expression/Op/Supset.hs -src/Conjure/Language/Expression/Op/SupsetEq.hs -src/Conjure/Language/Expression/Op/Table.hs -src/Conjure/Language/Expression/Op/TildeLeq.hs -src/Conjure/Language/Expression/Op/TildeLt.hs -src/Conjure/Language/Expression/Op/ToInt.hs -src/Conjure/Language/Expression/Op/ToMSet.hs -src/Conjure/Language/Expression/Op/ToRelation.hs -src/Conjure/Language/Expression/Op/ToSet.hs -src/Conjure/Language/Expression/Op/Together.hs -src/Conjure/Language/Expression/Op/Transform.hs -src/Conjure/Language/Expression/Op/True.hs -src/Conjure/Language/Expression/Op/TwoBars.hs -src/Conjure/Language/Expression/Op/Union.hs -src/Conjure/Language/Expression/Op/Xor.hs -src/Conjure/Language/Expression/OpTypes.hs -src/Conjure/Language/Instantiate.hs -src/Conjure/Language/Instantiate.hs-boot -src/Conjure/Language/Lenses.hs -src/Conjure/Language/Lexemes.hs -src/Conjure/Language/Lexer.hs -src/Conjure/Language/ModelDiff.hs -src/Conjure/Language/ModelStats.hs -src/Conjure/Language/Name.hs -src/Conjure/Language/NameGen.hs -src/Conjure/Language/NameResolution.hs -src/Conjure/Language/NewLexer.hs -src/Conjure/Language/Parser.hs -src/Conjure/Language/ParserC.hs -src/Conjure/Language/Pretty.hs -src/Conjure/Language/RepresentationOf.hs -src/Conjure/Language/TH.hs -src/Conjure/Language/Type.hs -src/Conjure/Language/TypeOf.hs -src/Conjure/Language/Validator.hs -src/Conjure/Language/ZeroVal.hs -src/Conjure/Prelude.hs -src/Conjure/Process/AttributeAsConstraints.hs -src/Conjure/Process/Boost.hs -src/Conjure/Process/DealWithCuts.hs -src/Conjure/Process/Enumerate.hs -src/Conjure/Process/Enumerate.hs-boot -src/Conjure/Process/Enums.hs -src/Conjure/Process/FiniteGivens.hs -src/Conjure/Process/InferAttributes.hs -src/Conjure/Process/LettingsForComplexInDoms.hs -src/Conjure/Process/Sanity.hs -src/Conjure/Process/Unnameds.hs -src/Conjure/Process/ValidateConstantForDomain.hs -src/Conjure/Process/ValidateConstantForDomain.hs-boot -src/Conjure/Representations.hs -src/Conjure/Representations/Combined.hs -src/Conjure/Representations/Common.hs -src/Conjure/Representations/Function/Function1D.hs -src/Conjure/Representations/Function/Function1DPartial.hs -src/Conjure/Representations/Function/FunctionAsRelation.hs -src/Conjure/Representations/Function/FunctionND.hs -src/Conjure/Representations/Function/FunctionNDPartial.hs -src/Conjure/Representations/Function/FunctionNDPartialDummy.hs -src/Conjure/Representations/Internal.hs -src/Conjure/Representations/MSet/ExplicitWithFlags.hs -src/Conjure/Representations/MSet/ExplicitWithRepetition.hs -src/Conjure/Representations/MSet/Occurrence.hs -src/Conjure/Representations/Matrix.hs -src/Conjure/Representations/Partition/Occurrence.hs -src/Conjure/Representations/Partition/PartitionAsSet.hs -src/Conjure/Representations/Primitive.hs -src/Conjure/Representations/Record.hs -src/Conjure/Representations/Relation/RelationAsMatrix.hs -src/Conjure/Representations/Relation/RelationAsSet.hs -src/Conjure/Representations/Sequence/ExplicitBounded.hs -src/Conjure/Representations/Set/Explicit.hs -src/Conjure/Representations/Set/ExplicitVarSizeWithDummy.hs -src/Conjure/Representations/Set/ExplicitVarSizeWithFlags.hs -src/Conjure/Representations/Set/ExplicitVarSizeWithMarker.hs -src/Conjure/Representations/Set/Occurrence.hs -src/Conjure/Representations/Tuple.hs -src/Conjure/Representations/Variant.hs -src/Conjure/Rules/BubbleUp.hs -src/Conjure/Rules/Definition.hs -src/Conjure/Rules/DontCare.hs -src/Conjure/Rules/Horizontal/Function.hs -src/Conjure/Rules/Horizontal/MSet.hs -src/Conjure/Rules/Horizontal/Partition.hs -src/Conjure/Rules/Horizontal/Relation.hs -src/Conjure/Rules/Horizontal/Sequence.hs -src/Conjure/Rules/Horizontal/Set.hs -src/Conjure/Rules/Import.hs -src/Conjure/Rules/TildeOrdering.hs -src/Conjure/Rules/Transform.hs -src/Conjure/Rules/Vertical/Function/Function1D.hs -src/Conjure/Rules/Vertical/Function/Function1DPartial.hs -src/Conjure/Rules/Vertical/Function/FunctionAsRelation.hs -src/Conjure/Rules/Vertical/Function/FunctionND.hs -src/Conjure/Rules/Vertical/Function/FunctionNDPartial.hs -src/Conjure/Rules/Vertical/Function/FunctionNDPartialDummy.hs -src/Conjure/Rules/Vertical/MSet/ExplicitWithFlags.hs -src/Conjure/Rules/Vertical/MSet/ExplicitWithRepetition.hs -src/Conjure/Rules/Vertical/MSet/Occurrence.hs -src/Conjure/Rules/Vertical/Matrix.hs -src/Conjure/Rules/Vertical/Partition/Occurrence.hs -src/Conjure/Rules/Vertical/Partition/PartitionAsSet.hs -src/Conjure/Rules/Vertical/Record.hs -src/Conjure/Rules/Vertical/Relation/RelationAsMatrix.hs -src/Conjure/Rules/Vertical/Relation/RelationAsSet.hs -src/Conjure/Rules/Vertical/Sequence/ExplicitBounded.hs -src/Conjure/Rules/Vertical/Set/Explicit.hs -src/Conjure/Rules/Vertical/Set/ExplicitVarSizeWithDummy.hs -src/Conjure/Rules/Vertical/Set/ExplicitVarSizeWithFlags.hs -src/Conjure/Rules/Vertical/Set/ExplicitVarSizeWithMarker.hs -src/Conjure/Rules/Vertical/Set/Occurrence.hs -src/Conjure/Rules/Vertical/Tuple.hs -src/Conjure/Rules/Vertical/Variant.hs -src/Conjure/UI.hs -src/Conjure/UI/ErrorDisplay.hs -src/Conjure/UI/IO.hs -src/Conjure/UI/MainHelper.hs -src/Conjure/UI/MainHelper.hs-boot -src/Conjure/UI/Model.hs -src/Conjure/UI/NormaliseQuantified.hs -src/Conjure/UI/ParameterGenerator.hs -src/Conjure/UI/Split.hs -src/Conjure/UI/TranslateParameter.hs -src/Conjure/UI/TranslateSolution.hs -src/Conjure/UI/TypeCheck.hs -src/Conjure/UI/TypeScript.hs -src/Conjure/UI/ValidateSolution.hs -src/Conjure/UI/VarSymBreaking.hs -src/Conjure/UserError.hs -src/exec/Main.hs -src/test/Conjure/Custom.hs -src/test/Conjure/Language/DomainSizeTest.hs -src/test/Conjure/ModelAllSolveAll.hs -src/test/Conjure/ParsePrint.hs -src/test/Conjure/RepresentationsTest.hs -src/test/Conjure/TypeCheckAll.hs -src/test/TestsMain.hs -tests/README.md -tests/acceptAllOutputs.sh -tests/allsolvers/run.sh -tests/allsolvers/test.essence -tests/allsolvers/testo.essence -tests/custom/README.md -tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/product.essence -tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/run.sh -tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected -tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stdout.expected -tests/custom/STARIS_2022/basic/bool-xor/run.sh -tests/custom/STARIS_2022/basic/bool-xor/stdout.expected -tests/custom/STARIS_2022/basic/bool-xor/xor.essence -tests/custom/STARIS_2022/basic/bool-xor/xor.solution -tests/custom/STARIS_2022/basic/decision-where-error/decision-where.essence -tests/custom/STARIS_2022/basic/decision-where-error/run.sh -tests/custom/STARIS_2022/basic/decision-where-error/stderr.expected -tests/custom/STARIS_2022/basic/decision-where-error/stdout.expected -tests/custom/STARIS_2022/basic/enum-directions/directions.essence -tests/custom/STARIS_2022/basic/enum-directions/directions.solution -tests/custom/STARIS_2022/basic/enum-directions/run.sh -tests/custom/STARIS_2022/basic/enum-directions/stdout.expected -tests/custom/STARIS_2022/basic/enum-operators/pred-basic/pred-basic.essence -tests/custom/STARIS_2022/basic/enum-operators/pred-basic/pred-basic.solution -tests/custom/STARIS_2022/basic/enum-operators/pred-basic/run.sh -tests/custom/STARIS_2022/basic/enum-operators/pred-basic/stdout.expected -tests/custom/STARIS_2022/basic/enum-operators/succ-basic/run.sh -tests/custom/STARIS_2022/basic/enum-operators/succ-basic/stdout.expected -tests/custom/STARIS_2022/basic/enum-operators/succ-basic/succ-basic.essence -tests/custom/STARIS_2022/basic/enum-operators/succ-basic/succ-basic.solution -tests/custom/STARIS_2022/basic/enum-spaces-error/enum-spaces.essence -tests/custom/STARIS_2022/basic/enum-spaces-error/run.sh -tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected -tests/custom/STARIS_2022/basic/enum-spaces-error/stdout.expected -tests/custom/STARIS_2022/basic/factor/factor.essence -tests/custom/STARIS_2022/basic/factor/factor.solution -tests/custom/STARIS_2022/basic/factor/run.sh -tests/custom/STARIS_2022/basic/factor/stdout.expected -tests/custom/STARIS_2022/basic/greatest-common-factor/gcf-inputs.solution -tests/custom/STARIS_2022/basic/greatest-common-factor/gcf.essence -tests/custom/STARIS_2022/basic/greatest-common-factor/inputs.param -tests/custom/STARIS_2022/basic/greatest-common-factor/run.sh -tests/custom/STARIS_2022/basic/greatest-common-factor/stdout.expected -tests/custom/STARIS_2022/basic/letting-arithmetic/letting.essence -tests/custom/STARIS_2022/basic/letting-arithmetic/letting.solution -tests/custom/STARIS_2022/basic/letting-arithmetic/run.sh -tests/custom/STARIS_2022/basic/letting-arithmetic/stdout.expected -tests/custom/STARIS_2022/basic/list-operations/exists/exists.essence -tests/custom/STARIS_2022/basic/list-operations/exists/exists.solution -tests/custom/STARIS_2022/basic/list-operations/exists/run.sh -tests/custom/STARIS_2022/basic/list-operations/exists/stdout.expected -tests/custom/STARIS_2022/basic/list-operations/forAll/forAll.essence -tests/custom/STARIS_2022/basic/list-operations/forAll/forAll.solution -tests/custom/STARIS_2022/basic/list-operations/forAll/run.sh -tests/custom/STARIS_2022/basic/list-operations/forAll/stdout.expected -tests/custom/STARIS_2022/basic/list-operations/sum-basic/run.sh -tests/custom/STARIS_2022/basic/list-operations/sum-basic/stdout.expected -tests/custom/STARIS_2022/basic/list-operations/sum-basic/sum.essence -tests/custom/STARIS_2022/basic/list-operations/sum-basic/sum.solution -tests/custom/STARIS_2022/basic/list-operations/sum-matrix/run.sh -tests/custom/STARIS_2022/basic/list-operations/sum-matrix/stdout.expected -tests/custom/STARIS_2022/basic/list-operations/sum-matrix/sum-matrix.essence -tests/custom/STARIS_2022/basic/list-operations/sum-matrix/sum-matrix.solution -tests/custom/STARIS_2022/basic/matrices/allDiff-basic/allDiff.essence -tests/custom/STARIS_2022/basic/matrices/allDiff-basic/allDiff.solution -tests/custom/STARIS_2022/basic/matrices/allDiff-basic/run.sh -tests/custom/STARIS_2022/basic/matrices/allDiff-basic/stdout.expected -tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/allDiff-type-error.essence -tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/run.sh -tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected -tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stdout.expected -tests/custom/STARIS_2022/basic/matrices/alldifferent_except/alldifferent_except.essence -tests/custom/STARIS_2022/basic/matrices/alldifferent_except/alldifferent_except.solution -tests/custom/STARIS_2022/basic/matrices/alldifferent_except/run.sh -tests/custom/STARIS_2022/basic/matrices/alldifferent_except/stdout.expected -tests/custom/STARIS_2022/basic/matrices/flatten/flatten.essence -tests/custom/STARIS_2022/basic/matrices/flatten/flatten.solution -tests/custom/STARIS_2022/basic/matrices/flatten/run.sh -tests/custom/STARIS_2022/basic/matrices/flatten/stdout.expected -tests/custom/STARIS_2022/basic/matrices/matrix-basic/matrix-basic.essence -tests/custom/STARIS_2022/basic/matrices/matrix-basic/matrix-basic.solution -tests/custom/STARIS_2022/basic/matrices/matrix-basic/run.sh -tests/custom/STARIS_2022/basic/matrices/matrix-basic/stdout.expected -tests/custom/STARIS_2022/basic/matrices/matrix-bool/matrix-bool.essence -tests/custom/STARIS_2022/basic/matrices/matrix-bool/matrix-bool.solution -tests/custom/STARIS_2022/basic/matrices/matrix-bool/run.sh -tests/custom/STARIS_2022/basic/matrices/matrix-bool/stdout.expected -tests/custom/STARIS_2022/basic/matrices/matrix-flatten/matrix-flatten.essence -tests/custom/STARIS_2022/basic/matrices/matrix-flatten/matrix-flatten.solution -tests/custom/STARIS_2022/basic/matrices/matrix-flatten/run.sh -tests/custom/STARIS_2022/basic/matrices/matrix-flatten/stdout.expected -tests/custom/STARIS_2022/basic/matrices/matrix-forAll/matrix-forAll.essence -tests/custom/STARIS_2022/basic/matrices/matrix-forAll/run.sh -tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected -tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stdout.expected -tests/custom/STARIS_2022/basic/matrices/matrix-index-error/matrix-index-error.essence -tests/custom/STARIS_2022/basic/matrices/matrix-index-error/run.sh -tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected -tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stdout.expected -tests/custom/STARIS_2022/basic/maximising/max.essence -tests/custom/STARIS_2022/basic/maximising/max.solution -tests/custom/STARIS_2022/basic/maximising/run.sh -tests/custom/STARIS_2022/basic/maximising/stdout.expected -tests/custom/STARIS_2022/basic/modulus/mod01-000001.solution -tests/custom/STARIS_2022/basic/modulus/mod01-000002.solution -tests/custom/STARIS_2022/basic/modulus/mod01-000003.solution -tests/custom/STARIS_2022/basic/modulus/mod01-000004.solution -tests/custom/STARIS_2022/basic/modulus/mod01-000005.solution -tests/custom/STARIS_2022/basic/modulus/mod01.essence -tests/custom/STARIS_2022/basic/modulus/run.sh -tests/custom/STARIS_2022/basic/modulus/stdout.expected -tests/custom/STARIS_2022/basic/multiple-objective-error/multiple-objective.essence -tests/custom/STARIS_2022/basic/multiple-objective-error/run.sh -tests/custom/STARIS_2022/basic/multiple-objective-error/stderr.expected -tests/custom/STARIS_2022/basic/multiple-objective-error/stdout.expected -tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/hist-type-error.essence -tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/run.sh -tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected -tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stdout.expected -tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.essence -tests/custom/STARIS_2022/basic/multiset-operators/hist/hist.solution -tests/custom/STARIS_2022/basic/multiset-operators/hist/run.sh -tests/custom/STARIS_2022/basic/multiset-operators/hist/stdout.expected -tests/custom/STARIS_2022/basic/multiset-operators/max/max.essence -tests/custom/STARIS_2022/basic/multiset-operators/max/max.solution -tests/custom/STARIS_2022/basic/multiset-operators/max/run.sh -tests/custom/STARIS_2022/basic/multiset-operators/max/stdout.expected -tests/custom/STARIS_2022/basic/multiset-operators/min/min.essence -tests/custom/STARIS_2022/basic/multiset-operators/min/min.solution -tests/custom/STARIS_2022/basic/multiset-operators/min/run.sh -tests/custom/STARIS_2022/basic/multiset-operators/min/stdout.expected -tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/multiset-basic.essence -tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/multiset-basic.solution -tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/run.sh -tests/custom/STARIS_2022/basic/multiset-operators/multiset-basic/stdout.expected -tests/custom/STARIS_2022/basic/parameter-error/input.param -tests/custom/STARIS_2022/basic/parameter-error/parameter-error.essence -tests/custom/STARIS_2022/basic/parameter-error/run.sh -tests/custom/STARIS_2022/basic/parameter-error/stderr.expected -tests/custom/STARIS_2022/basic/parameter-error/stdout.expected -tests/custom/STARIS_2022/basic/parameter-simple/parameter.param -tests/custom/STARIS_2022/basic/parameter-simple/run.sh -tests/custom/STARIS_2022/basic/parameter-simple/simple-parameter.solution -tests/custom/STARIS_2022/basic/parameter-simple/simple.essence -tests/custom/STARIS_2022/basic/parameter-simple/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-01/apart.essence -tests/custom/STARIS_2022/basic/partitions/partition-01/apart.solution -tests/custom/STARIS_2022/basic/partitions/partition-01/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-01/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-02/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-02/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-02/union.essence -tests/custom/STARIS_2022/basic/partitions/partition-02/union.solution -tests/custom/STARIS_2022/basic/partitions/partition-03/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-03/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-03/union-nosolution.essence -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/set-apart.essence -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/set-participant.essence -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/set-parts-together.essence -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stdout.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/run.sh -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/set-party.essence -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected -tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stdout.expected -tests/custom/STARIS_2022/basic/pretty/pretty.essence -tests/custom/STARIS_2022/basic/pretty/run.sh -tests/custom/STARIS_2022/basic/pretty/stdout.expected -tests/custom/STARIS_2022/basic/record-simple/record.essence -tests/custom/STARIS_2022/basic/record-simple/record.solution -tests/custom/STARIS_2022/basic/record-simple/run.sh -tests/custom/STARIS_2022/basic/record-simple/stdout.expected -tests/custom/STARIS_2022/basic/record-type-error/record.essence -tests/custom/STARIS_2022/basic/record-type-error/run.sh -tests/custom/STARIS_2022/basic/record-type-error/stderr.expected -tests/custom/STARIS_2022/basic/record-type-error/stdout.expected -tests/custom/STARIS_2022/basic/set-comprehension/run.sh -tests/custom/STARIS_2022/basic/set-comprehension/set.essence -tests/custom/STARIS_2022/basic/set-comprehension/set.solution -tests/custom/STARIS_2022/basic/set-comprehension/stdout.expected -tests/custom/STARIS_2022/basic/set-operators/basic-set/basic-set.essence -tests/custom/STARIS_2022/basic/set-operators/basic-set/basic-set.solution -tests/custom/STARIS_2022/basic/set-operators/basic-set/run.sh -tests/custom/STARIS_2022/basic/set-operators/basic-set/stdout.expected -tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/in-type-error.essence -tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/run.sh -tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stderr.expected -tests/custom/STARIS_2022/basic/set-operators/in-type-error-01/stdout.expected -tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/in.essence -tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/run.sh -tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected -tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stdout.expected -tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/in.essence -tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/run.sh -tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected -tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stdout.expected -tests/custom/STARIS_2022/basic/set-with-attributes/run.sh -tests/custom/STARIS_2022/basic/set-with-attributes/set.essence -tests/custom/STARIS_2022/basic/set-with-attributes/set.solution -tests/custom/STARIS_2022/basic/set-with-attributes/stdout.expected -tests/custom/STARIS_2022/basic/set01/run.sh -tests/custom/STARIS_2022/basic/set01/set.essence -tests/custom/STARIS_2022/basic/set01/set.solution -tests/custom/STARIS_2022/basic/set01/stdout.expected -tests/custom/STARIS_2022/basic/simple-assignment/run.sh -tests/custom/STARIS_2022/basic/simple-assignment/simple.essence -tests/custom/STARIS_2022/basic/simple-assignment/simple.solution -tests/custom/STARIS_2022/basic/simple-assignment/stdout.expected -tests/custom/STARIS_2022/basic/such-that/run.sh -tests/custom/STARIS_2022/basic/such-that/stdout.expected -tests/custom/STARIS_2022/basic/such-that/such-that.essence -tests/custom/STARIS_2022/basic/such-that/such-that.solution -tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/addition.essence -tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/run.sh -tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected -tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stdout.expected -tests/custom/STARIS_2022/basic/tuples/tuple-basic/run.sh -tests/custom/STARIS_2022/basic/tuples/tuple-basic/stdout.expected -tests/custom/STARIS_2022/basic/tuples/tuple-basic/tuple.essence -tests/custom/STARIS_2022/basic/tuples/tuple-basic/tuple.solution -tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/bound.essence -tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/run.sh -tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected -tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stdout.expected -tests/custom/STARIS_2022/basic/tuples/tuple-index/run.sh -tests/custom/STARIS_2022/basic/tuples/tuple-index/stdout.expected -tests/custom/STARIS_2022/basic/tuples/tuple-index/tuple.essence -tests/custom/STARIS_2022/basic/tuples/tuple-index/tuple.solution -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/run.sh -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/stdout.expected -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/toInt.essence -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-basic/toInt.solution -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/run.sh -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stdout.expected -tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/toInt-error.essence -tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/run.sh -tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/stdout.expected -tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/toMSet.essence -tests/custom/STARIS_2022/basic/type-conversion-operators/toMSet/toMSet.solution -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/run.sh -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/stdout.expected -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/toSet.essence -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-basic/toSet.solution -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/run.sh -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/stdout.expected -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/toSet-sum.essence -tests/custom/STARIS_2022/basic/type-conversion-operators/toSet-sum/toSet-sum.solution -tests/custom/STARIS_2022/demo/first_test/first.essence -tests/custom/STARIS_2022/demo/first_test/first.solution -tests/custom/STARIS_2022/demo/first_test/run.sh -tests/custom/STARIS_2022/demo/first_test/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/allDiff-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/allDiffExcept-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/allDiffExcept-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/and-type-error/and-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/and-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/and-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/apart-type-error/apart-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/apart-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/defined-type-error/defined-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/defined-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/factorial-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/flatten-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/flatten-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/freq-type-error/freq-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/freq-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/hist-type-error/hist-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/hist-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/in-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/in-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/inverse-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/max-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/max-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/min-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/min-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/negate-type-error/negate-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/negate-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/not-type-error/not-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/not-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/not-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/or-type-error/or-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/or-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/or-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/participants-type-error/participants-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/participants-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/parts-type-error/parts-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/parts-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/party-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/party-type-error.solution -tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/party-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/party-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/party-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/run.sh -tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/powerSet-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/pred-type-error/pred-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/pred-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/product-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/product-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/range-type-error/range-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/range-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/range-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/restrict-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/subsequence-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/substring-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/substring-type-error/substring-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/succ-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/succ-type-error/succ-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/run.sh -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/sum-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/run.sh -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/sum-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/toInt-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/toMSet-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/toSet-type-error.essence -tests/custom/STARIS_2022/operation-type-errors/xor-type-error/run.sh -tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected -tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stdout.expected -tests/custom/STARIS_2022/operation-type-errors/xor-type-error/xor-type-error.essence -tests/custom/STARIS_2022/symmetry-detection/allDiff-symmetry-detection/allDiff-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/allDiff-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/allDiff-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/allDiffExcept-symmetry-detection/allDiffExcept-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/allDiffExcept-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/allDiffExcept-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/and-symmetry-detection/and-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/and-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/and-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/apart-symmetry-detection/apart-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/apart-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/apart-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/defined-symmetry-detection/defined-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/defined-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/defined-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/div-symmetry-detection/div-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/div-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/div-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/eq-symmetry-detection/eq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/eq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/eq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/factorial-symmetry-detection/factorial-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/factorial-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/factorial-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/flatten-symmetry-detection/flatten-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/flatten-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/flatten-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/freq-symmetry-detection/freq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/freq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/freq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/geq-symmetry-detection/geq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/geq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/geq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/gt-symmetry-detection/gt-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/gt-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/gt-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/hist-symmetry-detection/hist-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/hist-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/hist-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/in-symmetry-detection/in-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/in-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/in-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/intersect-symmetry-detection/intersect-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/intersect-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/intersect-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/inverse-symmetry-detection/inverse-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/inverse-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/inverse-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/leq-symmetry-detection/leq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/leq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/leq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/lt-symmetry-detection/lt-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/lt-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/lt-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/max-symmetry-detection/max-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/max-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/max-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/min-symmetry-detection/min-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/min-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/min-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/minus-symmetry-detection/minus-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/minus-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/minus-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/mod-symmetry-detection/mod-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/mod-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/mod-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/negate-symmetry-detection/negate-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/negate-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/negate-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/neq-symmetry-detection/neq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/neq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/neq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/not-symmetry-detection/not-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/not-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/not-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/or-symmetry-detection/or-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/or-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/or-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/participants-symmetry-detection/participants-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/participants-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/participants-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/parts-symmetry-detection/parts-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/parts-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/parts-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/party-symmetry-detection/party-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/party-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/party-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/pow-symmetry-detection/pow-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/pow-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/pow-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/powerSet-symmetry-detection/powerSet-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/powerSet-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/powerSet-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/pred-symmetry-detection/pred-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/pred-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/pred-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/product-symmetry-detection/product-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/product-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/product-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/range-symmetry-detection/range-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/range-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/range-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/restrict-symmetry-detection/restrict-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/restrict-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/restrict-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/subsequence-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/subsequence-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/subsequence-symmetry-detection/subsequence-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/subset-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/subset-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/subset-symmetry-detection/subset-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/subsetEq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/subsetEq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/subsetEq-symmetry-detection/subsetEq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/substring-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/substring-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/substring-symmetry-detection/substring-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/succ-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/succ-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/succ-symmetry-detection/succ-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/sum-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/sum-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/sum-symmetry-detection/sum-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/supset-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/supset-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/supset-symmetry-detection/supset-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/supsetEq-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/supsetEq-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/supsetEq-symmetry-detection/supsetEq-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/toInt-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/toInt-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/toInt-symmetry-detection/toInt-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/toMSet-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/toMSet-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/toMSet-symmetry-detection/toMSet-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/toRelation-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/toRelation-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/toRelation-symmetry-detection/toRelation-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/toSet-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/toSet-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/toSet-symmetry-detection/toSet-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/together-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/together-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/together-symmetry-detection/together-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/union-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/union-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/union-symmetry-detection/union-symmetry-detection.essence -tests/custom/STARIS_2022/symmetry-detection/xor-symmetry-detection/run.sh -tests/custom/STARIS_2022/symmetry-detection/xor-symmetry-detection/stdout.expected -tests/custom/STARIS_2022/symmetry-detection/xor-symmetry-detection/xor-symmetry-detection.essence -tests/custom/acceptOutput.sh -tests/custom/allDiffDecomp/1/allDiffDecomp.essence -tests/custom/allDiffDecomp/1/run.sh -tests/custom/allDiffDecomp/1/stdout.expected -tests/custom/allDiffDecomp/2/allDiffDecomp.essence -tests/custom/allDiffDecomp/2/run.sh -tests/custom/allDiffDecomp/2/stdout.expected -tests/custom/autoig/generator-to-irace/warns/run.sh -tests/custom/autoig/generator-to-irace/warns/stderr.expected -tests/custom/autoig/generator-to-irace/warns/warns.essence -tests/custom/autoig/generator-to-irace/works/run.sh -tests/custom/autoig/generator-to-irace/works/stdout.expected -tests/custom/autoig/generator-to-irace/works/works.essence -tests/custom/basic/comprehension-cardinality/comp.essence -tests/custom/basic/comprehension-cardinality/comp.solution -tests/custom/basic/comprehension-cardinality/run.sh -tests/custom/basic/comprehension-cardinality/stdout.expected -tests/custom/basic/enum_duplicate_name/e.essence -tests/custom/basic/enum_duplicate_name/run.sh -tests/custom/basic/enum_duplicate_name/stderr.expected -tests/custom/basic/enum_duplicate_name/stdout.expected -tests/custom/basic/enum_functions/enum_functions.essence -tests/custom/basic/enum_functions/expected-time.txt -tests/custom/basic/enum_functions/p1.param -tests/custom/basic/enum_functions/run.sh -tests/custom/basic/enum_functions/stdout.expected -tests/custom/basic/enumerate_enum_domain/e.essence -tests/custom/basic/enumerate_enum_domain/run.sh -tests/custom/basic/enumerate_enum_domain/stdout.expected -tests/custom/basic/function-literal-suggestion/func.essence -tests/custom/basic/function-literal-suggestion/p.param -tests/custom/basic/function-literal-suggestion/run.sh -tests/custom/basic/function-literal-suggestion/stderr.expected -tests/custom/basic/function-literal-suggestion/stdout.expected -tests/custom/basic/function_card_01/function_card_01.essence -tests/custom/basic/function_card_01/run.sh -tests/custom/basic/function_card_01/stdout.expected -tests/custom/basic/function_card_02/function_card_02.essence -tests/custom/basic/function_card_02/run.sh -tests/custom/basic/function_card_02/stdout.expected -tests/custom/basic/function_imageSet01/expected-time.txt -tests/custom/basic/function_imageSet01/function_imageSet01.essence -tests/custom/basic/function_imageSet01/run.sh -tests/custom/basic/function_imageSet01/stdout.expected -tests/custom/basic/function_inverse_01/expected-time.txt -tests/custom/basic/function_inverse_01/function_inverse_01.essence -tests/custom/basic/function_inverse_01/run.sh -tests/custom/basic/function_inverse_01/stdout.expected -tests/custom/basic/function_partial_int_01/function_partial_int_01.essence -tests/custom/basic/function_partial_int_01/run.sh -tests/custom/basic/function_partial_int_01/stdout.expected -tests/custom/basic/function_partial_int_02/function_partial_int_02.essence -tests/custom/basic/function_partial_int_02/run.sh -tests/custom/basic/function_partial_int_02/stdout.expected -tests/custom/basic/function_partial_int_03/function_partial_int_03.essence -tests/custom/basic/function_partial_int_03/run.sh -tests/custom/basic/function_partial_int_03/stdout.expected -tests/custom/basic/function_partial_int_04/function_partial_int_04.essence -tests/custom/basic/function_partial_int_04/run.sh -tests/custom/basic/function_partial_int_04/stdout.expected -tests/custom/basic/function_partial_int_05/function_partial_int_05.essence -tests/custom/basic/function_partial_int_05/run.sh -tests/custom/basic/function_partial_int_05/stdout.expected -tests/custom/basic/function_partial_int_06/function_partial_int_06.essence -tests/custom/basic/function_partial_int_06/run.sh -tests/custom/basic/function_partial_int_06/stderr.expected -tests/custom/basic/function_partial_int_06/stdout.expected -tests/custom/basic/function_partial_int_param/function_partial_int_param.essence -tests/custom/basic/function_partial_int_param/param000181.param -tests/custom/basic/function_partial_int_param/run.sh -tests/custom/basic/function_partial_int_param/stdout.expected -tests/custom/basic/function_partial_tuple_01/function_partial_tuple_01.essence -tests/custom/basic/function_partial_tuple_01/run.sh -tests/custom/basic/function_partial_tuple_01/stdout.expected -tests/custom/basic/given-seq-seq/run.sh -tests/custom/basic/given-seq-seq/seqseq.essence -tests/custom/basic/given-seq-seq/seqseq.param -tests/custom/basic/given-seq-seq/stdout.expected -tests/custom/basic/matrix-slicing/run.sh -tests/custom/basic/matrix-slicing/slice.essence -tests/custom/basic/matrix-slicing/stdout.expected -tests/custom/basic/modelling-cache/2.param -tests/custom/basic/modelling-cache/example.essence -tests/custom/basic/modelling-cache/run.sh -tests/custom/basic/modelling-cache/stdout.expected -tests/custom/basic/multiple-branching-on/run.sh -tests/custom/basic/multiple-branching-on/stderr.expected -tests/custom/basic/multiple-branching-on/test.essence -tests/custom/basic/multiple-heuristic/run.sh -tests/custom/basic/multiple-heuristic/stderr.expected -tests/custom/basic/multiple-heuristic/test.essence -tests/custom/basic/multiple-objectives/run.sh -tests/custom/basic/multiple-objectives/stderr.expected -tests/custom/basic/multiple-objectives/test.essence -tests/custom/basic/parsing-enums-in-param/knapsack.essence -tests/custom/basic/parsing-enums-in-param/knapsack.param -tests/custom/basic/parsing-enums-in-param/run.sh -tests/custom/basic/parsing-enums-in-param/stdout.expected -tests/custom/basic/parsing-imply/1_noparens.essence -tests/custom/basic/parsing-imply/2_leftparens.essence -tests/custom/basic/parsing-imply/3_rightparens.essence -tests/custom/basic/parsing-imply/4_mixparens.essence -tests/custom/basic/parsing-imply/run.sh -tests/custom/basic/parsing-imply/stdout.expected -tests/custom/basic/partition_together_apart/expected-time.txt -tests/custom/basic/partition_together_apart/partition_together_apart.essence -tests/custom/basic/partition_together_apart/run.sh -tests/custom/basic/partition_together_apart/stdout.expected -tests/custom/basic/restricted01/restricted01.essence -tests/custom/basic/restricted01/run.sh -tests/custom/basic/restricted01/stdout.expected -tests/custom/basic/restricted02/restricted02.essence -tests/custom/basic/restricted02/run.sh -tests/custom/basic/restricted02/stdout.expected -tests/custom/basic/restricted03/restricted03.essence -tests/custom/basic/restricted03/run.sh -tests/custom/basic/restricted03/stdout.expected -tests/custom/basic/restricted04/restricted04.essence -tests/custom/basic/restricted04/run.sh -tests/custom/basic/restricted04/stdout.expected -tests/custom/basic/sat-branching-on/run.sh -tests/custom/basic/sat-branching-on/sbo.essence -tests/custom/basic/sat-branching-on/stdout.expected -tests/custom/basic/seqset/run.sh -tests/custom/basic/seqset/seqset.essence -tests/custom/basic/seqset/stdout.expected -tests/custom/basic/sequence-injective/run.sh -tests/custom/basic/sequence-injective/sequence-injective.essence -tests/custom/basic/sequence-injective/stdout.expected -tests/custom/basic/set-of-tuples-of-enum/run.sh -tests/custom/basic/set-of-tuples-of-enum/set-of-tuples.essence -tests/custom/basic/set-of-tuples-of-enum/stdout.expected -tests/custom/basic/set-of-tuples-of-int/run.sh -tests/custom/basic/set-of-tuples-of-int/set-of-tuples.essence -tests/custom/basic/set-of-tuples-of-int/stdout.expected -tests/custom/basic/set-of-tuples-of-unnamed/run.sh -tests/custom/basic/set-of-tuples-of-unnamed/set-of-tuples.essence -tests/custom/basic/set-of-tuples-of-unnamed/stdout.expected -tests/custom/basic/set-size-fixed-of-tuples-of-enum/run.sh -tests/custom/basic/set-size-fixed-of-tuples-of-enum/set-of-tuples.essence -tests/custom/basic/set-size-fixed-of-tuples-of-enum/stdout.expected -tests/custom/basic/solutionsInOneFile/run.sh -tests/custom/basic/solutionsInOneFile/stdout.expected -tests/custom/basic/solutionsInOneFile/test.essence -tests/custom/basic/streamline01/expected-time.txt -tests/custom/basic/streamline01/run.sh -tests/custom/basic/streamline01/stdout.expected -tests/custom/basic/streamline01/streamline01.essence -tests/custom/boost/domain/nested1-mset/mset-maxOccur/1.essence -tests/custom/boost/domain/nested1-mset/mset-maxOccur/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-maxSize/1.essence -tests/custom/boost/domain/nested1-mset/mset-maxSize/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-maxSize/2.essence -tests/custom/boost/domain/nested1-mset/mset-maxSize/2.output.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur-maxOccur/1.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur-maxOccur/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/1.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/2.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur-minSize/2.output.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur/1.essence -tests/custom/boost/domain/nested1-mset/mset-minOccur/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/1.essence -tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/2.essence -tests/custom/boost/domain/nested1-mset/mset-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested1-mset/mset-minSize/1.essence -tests/custom/boost/domain/nested1-mset/mset-minSize/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-minSize/2.essence -tests/custom/boost/domain/nested1-mset/mset-minSize/2.output.essence -tests/custom/boost/domain/nested1-mset/mset-size/1.essence -tests/custom/boost/domain/nested1-mset/mset-size/1.output.essence -tests/custom/boost/domain/nested1-mset/mset-size/2.essence -tests/custom/boost/domain/nested1-mset/mset-size/2.output.essence -tests/custom/boost/domain/nested1-mset/partition-maxNumParts/1.essence -tests/custom/boost/domain/nested1-mset/partition-maxNumParts/1.output.essence -tests/custom/boost/domain/nested1-mset/partition-maxPartSize/1.essence -tests/custom/boost/domain/nested1-mset/partition-maxPartSize/1.output.essence -tests/custom/boost/domain/nested1-mset/partition-minNumParts/1.essence -tests/custom/boost/domain/nested1-mset/partition-minNumParts/1.output.essence -tests/custom/boost/domain/nested1-mset/partition-minPartSize/1.essence -tests/custom/boost/domain/nested1-mset/partition-minPartSize/1.output.essence -tests/custom/boost/domain/nested1-mset/partition-numParts/1.essence -tests/custom/boost/domain/nested1-mset/partition-numParts/1.output.essence -tests/custom/boost/domain/nested1-mset/partition-partSize/1.essence -tests/custom/boost/domain/nested1-mset/partition-partSize/1.output.essence -tests/custom/boost/domain/nested1-mset/partition-regular/1.essence -tests/custom/boost/domain/nested1-mset/partition-regular/1.output.essence -tests/custom/boost/domain/nested1-mset/relation-maxSize/1.essence -tests/custom/boost/domain/nested1-mset/relation-maxSize/1.output.essence -tests/custom/boost/domain/nested1-mset/relation-maxSize/2.essence -tests/custom/boost/domain/nested1-mset/relation-maxSize/2.output.essence -tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/1.essence -tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/2.essence -tests/custom/boost/domain/nested1-mset/relation-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested1-mset/relation-minSize/1.essence -tests/custom/boost/domain/nested1-mset/relation-minSize/1.output.essence -tests/custom/boost/domain/nested1-mset/relation-minSize/2.essence -tests/custom/boost/domain/nested1-mset/relation-minSize/2.output.essence -tests/custom/boost/domain/nested1-mset/relation-size/1.essence -tests/custom/boost/domain/nested1-mset/relation-size/1.output.essence -tests/custom/boost/domain/nested1-mset/relation-size/2.essence -tests/custom/boost/domain/nested1-mset/relation-size/2.output.essence -tests/custom/boost/domain/nested1-mset/relation-size/3.essence -tests/custom/boost/domain/nested1-mset/relation-size/3.output.essence -tests/custom/boost/domain/nested1-mset/set-maxSize/1.essence -tests/custom/boost/domain/nested1-mset/set-maxSize/1.output.essence -tests/custom/boost/domain/nested1-mset/set-maxSize/2.essence -tests/custom/boost/domain/nested1-mset/set-maxSize/2.output.essence -tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/1.essence -tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/2.essence -tests/custom/boost/domain/nested1-mset/set-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested1-mset/set-minSize/1.essence -tests/custom/boost/domain/nested1-mset/set-minSize/1.output.essence -tests/custom/boost/domain/nested1-mset/set-minSize/2.essence -tests/custom/boost/domain/nested1-mset/set-minSize/2.output.essence -tests/custom/boost/domain/nested1-mset/set-size/1.essence -tests/custom/boost/domain/nested1-mset/set-size/1.output.essence -tests/custom/boost/domain/nested1-mset/set-size/2.essence -tests/custom/boost/domain/nested1-mset/set-size/2.output.essence -tests/custom/boost/domain/nested1-mset/set-size/3.essence -tests/custom/boost/domain/nested1-mset/set-size/3.output.essence -tests/custom/boost/domain/nested1-set/mset-maxOccur/1.essence -tests/custom/boost/domain/nested1-set/mset-maxOccur/1.output.essence -tests/custom/boost/domain/nested1-set/mset-maxSize/1.essence -tests/custom/boost/domain/nested1-set/mset-maxSize/1.output.essence -tests/custom/boost/domain/nested1-set/mset-maxSize/2.essence -tests/custom/boost/domain/nested1-set/mset-maxSize/2.output.essence -tests/custom/boost/domain/nested1-set/mset-minOccur-maxOccur/1.essence -tests/custom/boost/domain/nested1-set/mset-minOccur-maxOccur/1.output.essence -tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/1.essence -tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/1.output.essence -tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/2.essence -tests/custom/boost/domain/nested1-set/mset-minOccur-minSize/2.output.essence -tests/custom/boost/domain/nested1-set/mset-minOccur/1.essence -tests/custom/boost/domain/nested1-set/mset-minOccur/1.output.essence -tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/1.essence -tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/2.essence -tests/custom/boost/domain/nested1-set/mset-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested1-set/mset-minSize/1.essence -tests/custom/boost/domain/nested1-set/mset-minSize/1.output.essence -tests/custom/boost/domain/nested1-set/mset-minSize/2.essence -tests/custom/boost/domain/nested1-set/mset-minSize/2.output.essence -tests/custom/boost/domain/nested1-set/mset-size/1.essence -tests/custom/boost/domain/nested1-set/mset-size/1.output.essence -tests/custom/boost/domain/nested1-set/mset-size/2.essence -tests/custom/boost/domain/nested1-set/mset-size/2.output.essence -tests/custom/boost/domain/nested1-set/partition-maxNumParts/1.essence -tests/custom/boost/domain/nested1-set/partition-maxNumParts/1.output.essence -tests/custom/boost/domain/nested1-set/partition-maxPartSize/1.essence -tests/custom/boost/domain/nested1-set/partition-maxPartSize/1.output.essence -tests/custom/boost/domain/nested1-set/partition-minNumParts/1.essence -tests/custom/boost/domain/nested1-set/partition-minNumParts/1.output.essence -tests/custom/boost/domain/nested1-set/partition-minPartSize/1.essence -tests/custom/boost/domain/nested1-set/partition-minPartSize/1.output.essence -tests/custom/boost/domain/nested1-set/partition-numParts/1.essence -tests/custom/boost/domain/nested1-set/partition-numParts/1.output.essence -tests/custom/boost/domain/nested1-set/partition-partSize/1.essence -tests/custom/boost/domain/nested1-set/partition-partSize/1.output.essence -tests/custom/boost/domain/nested1-set/partition-regular/1.essence -tests/custom/boost/domain/nested1-set/partition-regular/1.output.essence -tests/custom/boost/domain/nested1-set/relation-maxSize/1.essence -tests/custom/boost/domain/nested1-set/relation-maxSize/1.output.essence -tests/custom/boost/domain/nested1-set/relation-maxSize/2.essence -tests/custom/boost/domain/nested1-set/relation-maxSize/2.output.essence -tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/1.essence -tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/2.essence -tests/custom/boost/domain/nested1-set/relation-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested1-set/relation-minSize/1.essence -tests/custom/boost/domain/nested1-set/relation-minSize/1.output.essence -tests/custom/boost/domain/nested1-set/relation-minSize/2.essence -tests/custom/boost/domain/nested1-set/relation-minSize/2.output.essence -tests/custom/boost/domain/nested1-set/relation-size/1.essence -tests/custom/boost/domain/nested1-set/relation-size/1.output.essence -tests/custom/boost/domain/nested1-set/relation-size/2.essence -tests/custom/boost/domain/nested1-set/relation-size/2.output.essence -tests/custom/boost/domain/nested1-set/relation-size/3.essence -tests/custom/boost/domain/nested1-set/relation-size/3.output.essence -tests/custom/boost/domain/nested1-set/set-maxSize/1.essence -tests/custom/boost/domain/nested1-set/set-maxSize/1.output.essence -tests/custom/boost/domain/nested1-set/set-maxSize/2.essence -tests/custom/boost/domain/nested1-set/set-maxSize/2.output.essence -tests/custom/boost/domain/nested1-set/set-minSize-maxSize/1.essence -tests/custom/boost/domain/nested1-set/set-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested1-set/set-minSize-maxSize/2.essence -tests/custom/boost/domain/nested1-set/set-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested1-set/set-minSize/1.essence -tests/custom/boost/domain/nested1-set/set-minSize/1.output.essence -tests/custom/boost/domain/nested1-set/set-minSize/2.essence -tests/custom/boost/domain/nested1-set/set-minSize/2.output.essence -tests/custom/boost/domain/nested1-set/set-size/1.essence -tests/custom/boost/domain/nested1-set/set-size/1.output.essence -tests/custom/boost/domain/nested1-set/set-size/2.essence -tests/custom/boost/domain/nested1-set/set-size/2.output.essence -tests/custom/boost/domain/nested1-set/set-size/3.essence -tests/custom/boost/domain/nested1-set/set-size/3.output.essence -tests/custom/boost/domain/nested2-set-mset/set-mset/1.essence -tests/custom/boost/domain/nested2-set-mset/set-mset/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-maxOccur/1.essence -tests/custom/boost/domain/nested2-set-set/mset-maxOccur/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-maxSize/1.essence -tests/custom/boost/domain/nested2-set-set/mset-maxSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-maxSize/2.essence -tests/custom/boost/domain/nested2-set-set/mset-maxSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur-maxOccur/1.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur-maxOccur/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/1.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/2.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur-minSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur/1.essence -tests/custom/boost/domain/nested2-set-set/mset-minOccur/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/1.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/2.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize/1.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize/2.essence -tests/custom/boost/domain/nested2-set-set/mset-minSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/mset-size/1.essence -tests/custom/boost/domain/nested2-set-set/mset-size/1.output.essence -tests/custom/boost/domain/nested2-set-set/mset-size/2.essence -tests/custom/boost/domain/nested2-set-set/mset-size/2.output.essence -tests/custom/boost/domain/nested2-set-set/partition-maxNumParts/1.essence -tests/custom/boost/domain/nested2-set-set/partition-maxNumParts/1.output.essence -tests/custom/boost/domain/nested2-set-set/partition-maxPartSize/1.essence -tests/custom/boost/domain/nested2-set-set/partition-maxPartSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/partition-minNumParts/1.essence -tests/custom/boost/domain/nested2-set-set/partition-minNumParts/1.output.essence -tests/custom/boost/domain/nested2-set-set/partition-minPartSize/1.essence -tests/custom/boost/domain/nested2-set-set/partition-minPartSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/partition-numParts/1.essence -tests/custom/boost/domain/nested2-set-set/partition-numParts/1.output.essence -tests/custom/boost/domain/nested2-set-set/partition-partSize/1.essence -tests/custom/boost/domain/nested2-set-set/partition-partSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/partition-regular/1.essence -tests/custom/boost/domain/nested2-set-set/partition-regular/1.output.essence -tests/custom/boost/domain/nested2-set-set/relation-maxSize/1.essence -tests/custom/boost/domain/nested2-set-set/relation-maxSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/relation-maxSize/2.essence -tests/custom/boost/domain/nested2-set-set/relation-maxSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/1.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/2.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize/1.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize/2.essence -tests/custom/boost/domain/nested2-set-set/relation-minSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/relation-size/1.essence -tests/custom/boost/domain/nested2-set-set/relation-size/1.output.essence -tests/custom/boost/domain/nested2-set-set/relation-size/2.essence -tests/custom/boost/domain/nested2-set-set/relation-size/2.output.essence -tests/custom/boost/domain/nested2-set-set/relation-size/3.essence -tests/custom/boost/domain/nested2-set-set/relation-size/3.output.essence -tests/custom/boost/domain/nested2-set-set/set-maxSize/1.essence -tests/custom/boost/domain/nested2-set-set/set-maxSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/set-maxSize/2.essence -tests/custom/boost/domain/nested2-set-set/set-maxSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/1.essence -tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/2.essence -tests/custom/boost/domain/nested2-set-set/set-minSize-maxSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/set-minSize/1.essence -tests/custom/boost/domain/nested2-set-set/set-minSize/1.output.essence -tests/custom/boost/domain/nested2-set-set/set-minSize/2.essence -tests/custom/boost/domain/nested2-set-set/set-minSize/2.output.essence -tests/custom/boost/domain/nested2-set-set/set-size/1.essence -tests/custom/boost/domain/nested2-set-set/set-size/1.output.essence -tests/custom/boost/domain/nested2-set-set/set-size/2.essence -tests/custom/boost/domain/nested2-set-set/set-size/2.output.essence -tests/custom/boost/domain/nested2-set-set/set-size/3.essence -tests/custom/boost/domain/nested2-set-set/set-size/3.output.essence -tests/custom/boost/domain/not-nested/function-total/1.essence -tests/custom/boost/domain/not-nested/function-total/1.output.essence -tests/custom/boost/domain/not-nested/mset-maxOccur/1.essence -tests/custom/boost/domain/not-nested/mset-maxOccur/1.output.essence -tests/custom/boost/domain/not-nested/mset-maxSize/1.essence -tests/custom/boost/domain/not-nested/mset-maxSize/1.output.essence -tests/custom/boost/domain/not-nested/mset-maxSize/2.essence -tests/custom/boost/domain/not-nested/mset-maxSize/2.output.essence -tests/custom/boost/domain/not-nested/mset-minOccur-maxOccur/1.essence -tests/custom/boost/domain/not-nested/mset-minOccur-maxOccur/1.output.essence -tests/custom/boost/domain/not-nested/mset-minOccur-minSize/1.essence -tests/custom/boost/domain/not-nested/mset-minOccur-minSize/1.output.essence -tests/custom/boost/domain/not-nested/mset-minOccur-minSize/2.essence -tests/custom/boost/domain/not-nested/mset-minOccur-minSize/2.output.essence -tests/custom/boost/domain/not-nested/mset-minOccur/1.essence -tests/custom/boost/domain/not-nested/mset-minOccur/1.output.essence -tests/custom/boost/domain/not-nested/mset-minSize-maxSize/1.essence -tests/custom/boost/domain/not-nested/mset-minSize-maxSize/1.output.essence -tests/custom/boost/domain/not-nested/mset-minSize-maxSize/2.essence -tests/custom/boost/domain/not-nested/mset-minSize-maxSize/2.output.essence -tests/custom/boost/domain/not-nested/mset-minSize/1.essence -tests/custom/boost/domain/not-nested/mset-minSize/1.output.essence -tests/custom/boost/domain/not-nested/mset-minSize/2.essence -tests/custom/boost/domain/not-nested/mset-minSize/2.output.essence -tests/custom/boost/domain/not-nested/mset-size/1.essence -tests/custom/boost/domain/not-nested/mset-size/1.output.essence -tests/custom/boost/domain/not-nested/mset-size/2.essence -tests/custom/boost/domain/not-nested/mset-size/2.output.essence -tests/custom/boost/domain/not-nested/partition-maxNumParts/1.essence -tests/custom/boost/domain/not-nested/partition-maxNumParts/1.output.essence -tests/custom/boost/domain/not-nested/partition-maxPartSize/1.essence -tests/custom/boost/domain/not-nested/partition-maxPartSize/1.output.essence -tests/custom/boost/domain/not-nested/partition-minNumParts/1.essence -tests/custom/boost/domain/not-nested/partition-minNumParts/1.output.essence -tests/custom/boost/domain/not-nested/partition-minPartSize/1.essence -tests/custom/boost/domain/not-nested/partition-minPartSize/1.output.essence -tests/custom/boost/domain/not-nested/partition-numParts/1.essence -tests/custom/boost/domain/not-nested/partition-numParts/1.output.essence -tests/custom/boost/domain/not-nested/partition-partSize/1.essence -tests/custom/boost/domain/not-nested/partition-partSize/1.output.essence -tests/custom/boost/domain/not-nested/partition-regular/1.essence -tests/custom/boost/domain/not-nested/partition-regular/1.output.essence -tests/custom/boost/domain/not-nested/relation-maxSize/1.essence -tests/custom/boost/domain/not-nested/relation-maxSize/1.output.essence -tests/custom/boost/domain/not-nested/relation-maxSize/2.essence -tests/custom/boost/domain/not-nested/relation-maxSize/2.output.essence -tests/custom/boost/domain/not-nested/relation-minSize-maxSize/1.essence -tests/custom/boost/domain/not-nested/relation-minSize-maxSize/1.output.essence -tests/custom/boost/domain/not-nested/relation-minSize-maxSize/2.essence -tests/custom/boost/domain/not-nested/relation-minSize-maxSize/2.output.essence -tests/custom/boost/domain/not-nested/relation-minSize/1.essence -tests/custom/boost/domain/not-nested/relation-minSize/1.output.essence -tests/custom/boost/domain/not-nested/relation-minSize/2.essence -tests/custom/boost/domain/not-nested/relation-minSize/2.output.essence -tests/custom/boost/domain/not-nested/relation-size/1.essence -tests/custom/boost/domain/not-nested/relation-size/1.output.essence -tests/custom/boost/domain/not-nested/relation-size/2.essence -tests/custom/boost/domain/not-nested/relation-size/2.output.essence -tests/custom/boost/domain/not-nested/relation-size/3.essence -tests/custom/boost/domain/not-nested/relation-size/3.output.essence -tests/custom/boost/domain/not-nested/set-maxSize/1.essence -tests/custom/boost/domain/not-nested/set-maxSize/1.output.essence -tests/custom/boost/domain/not-nested/set-maxSize/2.essence -tests/custom/boost/domain/not-nested/set-maxSize/2.output.essence -tests/custom/boost/domain/not-nested/set-minSize-maxSize/1.essence -tests/custom/boost/domain/not-nested/set-minSize-maxSize/1.output.essence -tests/custom/boost/domain/not-nested/set-minSize-maxSize/2.essence -tests/custom/boost/domain/not-nested/set-minSize-maxSize/2.output.essence -tests/custom/boost/domain/not-nested/set-minSize/1.essence -tests/custom/boost/domain/not-nested/set-minSize/1.output.essence -tests/custom/boost/domain/not-nested/set-minSize/2.essence -tests/custom/boost/domain/not-nested/set-minSize/2.output.essence -tests/custom/boost/domain/not-nested/set-size/1.essence -tests/custom/boost/domain/not-nested/set-size/1.output.essence -tests/custom/boost/domain/not-nested/set-size/2.essence -tests/custom/boost/domain/not-nested/set-size/2.output.essence -tests/custom/boost/domain/not-nested/set-size/3.essence -tests/custom/boost/domain/not-nested/set-size/3.output.essence -tests/custom/boost/eval.sh -tests/custom/boost/expected-time.txt -tests/custom/boost/run.sh -tests/custom/boost/type/mset-to-set/1.essence -tests/custom/boost/type/mset-to-set/1.output.essence -tests/custom/boost/type/mset-to-set/2.essence -tests/custom/boost/type/mset-to-set/2.output.essence -tests/custom/boost/type/mset-to-set/3.essence -tests/custom/boost/type/mset-to-set/3.output.essence -tests/custom/boost/type/relation-to-function/because-assigned-1.essence -tests/custom/boost/type/relation-to-function/because-assigned-1.output.essence -tests/custom/boost/type/relation-to-function/partial-functional-on1-andMaxSize.essence -tests/custom/boost/type/relation-to-function/partial-functional-on1-andMaxSize.output.essence -tests/custom/boost/type/relation-to-function/partial-functional-on1.essence -tests/custom/boost/type/relation-to-function/partial-functional-on1.output.essence -tests/custom/boost/type/relation-to-function/partial-functional-on2.essence -tests/custom/boost/type/relation-to-function/partial-functional-on2.output.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-1.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-1.output.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-12.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-12.output.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-13.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-13.output.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-2.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-2.output.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-23.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-23.output.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-3.essence -tests/custom/boost/type/relation-to-function/partial-relation-123-3.output.essence -tests/custom/boost/type/relation-to-function/total-functional-on1.essence -tests/custom/boost/type/relation-to-function/total-functional-on1.output.essence -tests/custom/boost/type/relation-to-function/total-functional-on2.essence -tests/custom/boost/type/relation-to-function/total-functional-on2.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-1.essence -tests/custom/boost/type/relation-to-function/total-relation-123-1.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-12.essence -tests/custom/boost/type/relation-to-function/total-relation-123-12.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-13-andStuff.essence -tests/custom/boost/type/relation-to-function/total-relation-123-13-andStuff.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-13.essence -tests/custom/boost/type/relation-to-function/total-relation-123-13.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-2.essence -tests/custom/boost/type/relation-to-function/total-relation-123-2.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-23.essence -tests/custom/boost/type/relation-to-function/total-relation-123-23.output.essence -tests/custom/boost/type/relation-to-function/total-relation-123-3.essence -tests/custom/boost/type/relation-to-function/total-relation-123-3.output.essence -tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/matrix.essence -tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_bools/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/matrix.essence -tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/matrix_2_mixed/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/matrix.essence -tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/matrix_of_matrix/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_2_bools/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bool_boolmat_int/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_and_ints/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_3_bools_only/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_matrices_and_tuples/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/run.sh -tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_find/tuple_of_tuples/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/matrix.essence -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/matrix.param -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_bools/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/matrix.essence -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/matrix.param -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/matrix_2_mixed/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/matrix.essence -tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/matrix.param -tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/matrix_of_matrix/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/tuple_2_bools/tuple.param -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bool_boolmat_int/tuple.param -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_and_ints/tuple.param -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/tuple_3_bools_only/tuple.param -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_matrices_and_tuples/tuple.param -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/run.sh -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/stdout.expected -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/tuple.essence -tests/custom/flatten_lex/tree_core/find_v_given/tuple_of_tuples/tuple.param -tests/custom/graphs/shortest_path/01/graph_connected.essence -tests/custom/graphs/shortest_path/01/run.sh -tests/custom/graphs/shortest_path/01/stdout.expected -tests/custom/graphs/shortest_path/02/graph_connected.essence -tests/custom/graphs/shortest_path/02/run.sh -tests/custom/graphs/shortest_path/02/stdout.expected -tests/custom/graphs/shortest_path/03/graph_connected.essence -tests/custom/graphs/shortest_path/03/run.sh -tests/custom/graphs/shortest_path/03/stdout.expected -tests/custom/graphs/shortest_path/04/graph_connected.essence -tests/custom/graphs/shortest_path/04/run.sh -tests/custom/graphs/shortest_path/04/stdout.expected -tests/custom/help-text/run.sh -tests/custom/ide/basic/category.essence -tests/custom/ide/basic/lexer.essence -tests/custom/ide/basic/parser.essence -tests/custom/ide/basic/run.sh -tests/custom/ide/basic/stdout.expected -tests/custom/ide/basic/type.essence -tests/custom/ide/basic/wellformed.essence -tests/custom/ide/dump-decl/run.sh -tests/custom/ide/dump-decl/stdout.expected -tests/custom/ide/dump-decl/t.essence -tests/custom/ide/dump-repr/run.sh -tests/custom/ide/dump-repr/stdout.expected -tests/custom/ide/dump-repr/t.essence -tests/custom/issues/119/1/_old_issues_118_smaller.essence -tests/custom/issues/119/1/expected-time.txt -tests/custom/issues/119/1/run.sh -tests/custom/issues/119/1/stdout.expected -tests/custom/issues/119/2/_old_issues_118_smaller2.essence -tests/custom/issues/119/2/expected-time.txt -tests/custom/issues/119/2/run.sh -tests/custom/issues/119/2/stdout.expected -tests/custom/issues/284/_issue_13.essence -tests/custom/issues/284/run.sh -tests/custom/issues/284/stdout.expected -tests/custom/issues/298/298.essence -tests/custom/issues/298/run.sh -tests/custom/issues/298/stderr.expected -tests/custom/issues/298/stdout.expected -tests/custom/issues/345/345.essence -tests/custom/issues/345/p.param -tests/custom/issues/345/run.sh -tests/custom/issues/345/stderr.expected -tests/custom/issues/345/stdout.expected -tests/custom/issues/346/given.solution -tests/custom/issues/346/givens_as_finds.essence -tests/custom/issues/346/run.sh -tests/custom/issues/346/stderr.expected -tests/custom/issues/351/351.essence -tests/custom/issues/351/run.sh -tests/custom/issues/351/stderr.expected -tests/custom/issues/351/stdout.expected -tests/custom/issues/358/358.essence -tests/custom/issues/358/run.sh -tests/custom/issues/358/stdout.expected -tests/custom/issues/365/365.essence -tests/custom/issues/365/run.sh -tests/custom/issues/365/stderr.expected -tests/custom/issues/366/366.essence -tests/custom/issues/366/run.sh -tests/custom/issues/370/01/370.essence -tests/custom/issues/370/01/expected-time.txt -tests/custom/issues/370/01/run.sh -tests/custom/issues/370/01/stdout.expected -tests/custom/issues/370/02/370.essence -tests/custom/issues/370/02/expected-time.txt -tests/custom/issues/370/02/run.sh -tests/custom/issues/370/02/stdout.expected -tests/custom/issues/370/03/370.essence -tests/custom/issues/370/03/expected-time.txt -tests/custom/issues/370/03/run.sh -tests/custom/issues/370/03/stdout.expected -tests/custom/issues/371/371-1.essence -tests/custom/issues/371/371-2.essence -tests/custom/issues/371/run.sh -tests/custom/issues/371/stdout.expected -tests/custom/issues/383/383-1.essence -tests/custom/issues/383/383-2.essence -tests/custom/issues/383/383-3.essence -tests/custom/issues/383/run.sh -tests/custom/issues/383/stdout.expected -tests/custom/issues/387/int01/387.essence -tests/custom/issues/387/int01/run.sh -tests/custom/issues/387/int01/stdout.expected -tests/custom/issues/387/int02/387.essence -tests/custom/issues/387/int02/run.sh -tests/custom/issues/387/int02/stdout.expected -tests/custom/issues/387/int03/387.essence -tests/custom/issues/387/int03/run.sh -tests/custom/issues/387/int03/stdout.expected -tests/custom/issues/387/int04/387.essence -tests/custom/issues/387/int04/run.sh -tests/custom/issues/387/int04/stdout.expected -tests/custom/issues/388/1/388-1.essence -tests/custom/issues/388/1/expected-time.txt -tests/custom/issues/388/1/run.sh -tests/custom/issues/388/1/stdout.expected -tests/custom/issues/388/2/388-2.essence -tests/custom/issues/388/2/expected-time.txt -tests/custom/issues/388/2/run.sh -tests/custom/issues/388/2/stdout.expected -tests/custom/issues/390/390.essence -tests/custom/issues/390/run.sh -tests/custom/issues/390/stderr.expected -tests/custom/issues/390/stdout.expected -tests/custom/issues/395/1.essence -tests/custom/issues/395/2.essence -tests/custom/issues/395/3.essence -tests/custom/issues/395/m_is_3.param -tests/custom/issues/395/run.sh -tests/custom/issues/395/stdout.expected -tests/custom/issues/396/396.essence -tests/custom/issues/396/run.sh -tests/custom/issues/396/stderr.expected -tests/custom/issues/400/400.essence -tests/custom/issues/400/run.sh -tests/custom/issues/400/stdout.expected -tests/custom/issues/401/401-1.essence -tests/custom/issues/401/401-2.essence -tests/custom/issues/401/401-3.essence -tests/custom/issues/401/run.sh -tests/custom/issues/401/stdout.expected -tests/custom/issues/402/402.essence -tests/custom/issues/402/run.sh -tests/custom/issues/402/stdout.expected -tests/custom/issues/404/run.sh -tests/custom/issues/404/stderr.expected -tests/custom/issues/404/stdout.expected -tests/custom/issues/404/test.essence -tests/custom/issues/404/test.param -tests/custom/issues/405/405.essence -tests/custom/issues/405/run.sh -tests/custom/issues/405/stderr.expected -tests/custom/issues/408/408.essence -tests/custom/issues/408/run.sh -tests/custom/issues/408/stdout.expected -tests/custom/issues/409/409.essence -tests/custom/issues/409/run.sh -tests/custom/issues/409/stderr.expected -tests/custom/issues/419/419.essence -tests/custom/issues/419/run.sh -tests/custom/issues/419/stdout.expected -tests/custom/issues/424/expected-time.txt -tests/custom/issues/424/knapsack.essence -tests/custom/issues/424/large.param.gz -tests/custom/issues/424/run.sh -tests/custom/issues/424/stdout.expected -tests/custom/issues/430/430.essence -tests/custom/issues/430/p.param -tests/custom/issues/430/run.sh -tests/custom/issues/430/stdout.expected -tests/custom/issues/431/431.essence -tests/custom/issues/431/run.sh -tests/custom/issues/431/stderr.expected -tests/custom/issues/432/4col.essence -tests/custom/issues/432/p.param -tests/custom/issues/432/run.sh -tests/custom/issues/432/stderr.expected -tests/custom/issues/432/stdout.expected -tests/custom/issues/438/1.essence -tests/custom/issues/438/1.param -tests/custom/issues/438/run.sh -tests/custom/issues/438/stdout.expected -tests/custom/issues/439/439.essence -tests/custom/issues/439/run.sh -tests/custom/issues/439/stderr.expected -tests/custom/issues/439/stdout.expected -tests/custom/issues/440/440.essence -tests/custom/issues/440/p.param -tests/custom/issues/440/run.sh -tests/custom/issues/440/stderr.expected -tests/custom/issues/440/stdout.expected -tests/custom/issues/443/443-bool-typed.essence -tests/custom/issues/443/443-bool.essence -tests/custom/issues/443/443-workaround.essence -tests/custom/issues/443/443.essence -tests/custom/issues/443/run.sh -tests/custom/issues/443/stdout.expected -tests/custom/issues/448/448-1.essence -tests/custom/issues/448/448-2.essence -tests/custom/issues/448/448-3.essence -tests/custom/issues/448/run.sh -tests/custom/issues/448/stdout.expected -tests/custom/issues/452/452.essence -tests/custom/issues/452/452.solution -tests/custom/issues/452/run.sh -tests/custom/issues/453/run.sh -tests/custom/issues/453/stdout.expected -tests/custom/issues/453/test.eprime-param -tests/custom/issues/453/test.essence -tests/custom/issues/453/test.param -tests/custom/issues/459/459.essence -tests/custom/issues/459/run.sh -tests/custom/issues/459/stderr.expected -tests/custom/issues/465/1/ex.essence -tests/custom/issues/465/1/run.sh -tests/custom/issues/465/1/stdout.expected -tests/custom/issues/465/2/ex.essence -tests/custom/issues/465/2/run.sh -tests/custom/issues/465/2/stdout.expected -tests/custom/issues/465/3/ex.essence -tests/custom/issues/465/3/run.sh -tests/custom/issues/465/3/stdout.expected -tests/custom/issues/465/4/ex.essence -tests/custom/issues/465/4/run.sh -tests/custom/issues/465/4/stdout.expected -tests/custom/issues/465/5/ex.essence -tests/custom/issues/465/5/run.sh -tests/custom/issues/465/5/stdout.expected -tests/custom/issues/465/6/ex.essence -tests/custom/issues/465/6/run.sh -tests/custom/issues/465/6/stdout.expected -tests/custom/issues/465/7/ex.essence -tests/custom/issues/465/7/run.sh -tests/custom/issues/465/7/stdout.expected -tests/custom/issues/465/8/ex.essence -tests/custom/issues/465/8/run.sh -tests/custom/issues/465/8/stdout.expected -tests/custom/issues/465/9/ex.essence -tests/custom/issues/465/9/run.sh -tests/custom/issues/465/9/stdout.expected -tests/custom/issues/470/470.essence -tests/custom/issues/470/run.sh -tests/custom/issues/470/stdout.expected -tests/custom/issues/471/471-ppp.essence -tests/custom/issues/471/run.sh -tests/custom/issues/471/stdout.expected -tests/custom/issues/473/regression.essence -tests/custom/issues/473/run.sh -tests/custom/issues/473/stdout.expected -tests/custom/issues/473/test.param -tests/custom/issues/473/works.essence -tests/custom/issues/478/run.sh -tests/custom/issues/478/sol.solution -tests/custom/issues/478/stderr.expected -tests/custom/issues/478/stdout.expected -tests/custom/issues/479/model.essence -tests/custom/issues/479/p.param -tests/custom/issues/479/run.sh -tests/custom/issues/479/stdout.expected -tests/custom/issues/480/model.essence -tests/custom/issues/480/p.param -tests/custom/issues/480/run.sh -tests/custom/issues/480/stdout.expected -tests/custom/issues/481/barman.essence -tests/custom/issues/481/expected-time.txt -tests/custom/issues/481/model.essence -tests/custom/issues/481/run.sh -tests/custom/issues/481/stdout.expected -tests/custom/issues/482/model.essence -tests/custom/issues/482/run.sh -tests/custom/issues/482/stdout.expected -tests/custom/issues/485/model.essence -tests/custom/issues/485/run.sh -tests/custom/issues/485/stdout.expected -tests/custom/issues/486/model.essence -tests/custom/issues/486/run.sh -tests/custom/issues/486/stdout.expected -tests/custom/issues/501/501.essence -tests/custom/issues/501/501.param -tests/custom/issues/501/run.sh -tests/custom/issues/501/stdout.expected -tests/custom/issues/502/502.essence -tests/custom/issues/502/run.sh -tests/custom/issues/502/stdout.expected -tests/custom/issues/503/503.essence -tests/custom/issues/503/run.sh -tests/custom/issues/503/stdout.expected -tests/custom/issues/506/model.essence -tests/custom/issues/506/run.sh -tests/custom/issues/506/stdout.expected -tests/custom/issues/506/test.param -tests/custom/issues/511/511.essence -tests/custom/issues/511/run.sh -tests/custom/issues/511/stdout.expected -tests/custom/issues/517/517.essence -tests/custom/issues/517/run.sh -tests/custom/json-integration/json-in/README -tests/custom/json-integration/json-in/param.json -tests/custom/json-integration/json-in/run.sh -tests/custom/json-integration/json-in/stdout.expected -tests/custom/json-integration/json-in/test.essence -tests/custom/json-integration/json-out/run.sh -tests/custom/json-integration/json-out/stdout.expected -tests/custom/json-integration/json-out/test.essence -tests/custom/json-integration/json-solution/json-solution.essence -tests/custom/json-integration/json-solution/n4.param -tests/custom/json-integration/json-solution/run.sh -tests/custom/json-integration/json-solution/stdout.expected -tests/custom/json-integration/jsons-out/jsons.essence -tests/custom/json-integration/jsons-out/run.sh -tests/custom/json-integration/jsons-out/stdout.expected -tests/custom/json-integration/jsons-streaming-out/jsons.essence -tests/custom/json-integration/jsons-streaming-out/run.sh -tests/custom/json-integration/jsons-streaming-out/stdout.expected -tests/custom/lex_less_untouched/example1/example.essence -tests/custom/lex_less_untouched/example1/run.sh -tests/custom/lex_less_untouched/example1/stdout.expected -tests/custom/lex_less_untouched/example2/example.essence -tests/custom/lex_less_untouched/example2/run.sh -tests/custom/lex_less_untouched/example2/stdout.expected -tests/custom/lex_less_untouched/hamiltonian/hamiltonian.essence -tests/custom/lex_less_untouched/hamiltonian/run.sh -tests/custom/lex_less_untouched/hamiltonian/stdout.expected -tests/custom/logfollow/01/model.essence -tests/custom/logfollow/01/model2.essence -tests/custom/logfollow/01/run.sh -tests/custom/logfollow/01/stdout.expected -tests/custom/matrixNoIndexedBy/matrixQ.essence -tests/custom/matrixNoIndexedBy/run.sh -tests/custom/matrixNoIndexedBy/stdout.expected -tests/custom/mildly_interesting/footballtennis_riddle/riddle1.essence -tests/custom/mildly_interesting/footballtennis_riddle/riddle2.essence -tests/custom/mildly_interesting/footballtennis_riddle/run.sh -tests/custom/mildly_interesting/footballtennis_riddle/stdout.expected -tests/custom/minizinc-out/inst.param -tests/custom/minizinc-out/run.sh -tests/custom/minizinc-out/stderr.expected -tests/custom/minizinc-out/stdout.expected -tests/custom/paramgen/function01/expected-time.txt -tests/custom/paramgen/function01/problem.essence -tests/custom/paramgen/function01/run.sh -tests/custom/paramgen/function01/stdout.expected -tests/custom/paramgen/function01/test.param -tests/custom/paramgen/int01/problem.essence -tests/custom/paramgen/int01/run.sh -tests/custom/paramgen/int01/stdout.expected -tests/custom/paramgen/mset01/expected-time.txt -tests/custom/paramgen/mset01/problem.essence -tests/custom/paramgen/mset01/run.sh -tests/custom/paramgen/mset01/stdout.expected -tests/custom/paramgen/mset01/test.param -tests/custom/paramgen/record01/expected-time.txt -tests/custom/paramgen/record01/problem.essence -tests/custom/paramgen/record01/run.sh -tests/custom/paramgen/record01/stdout.expected -tests/custom/paramgen/relation01/expected-time.txt -tests/custom/paramgen/relation01/problem.essence -tests/custom/paramgen/relation01/run.sh -tests/custom/paramgen/relation01/stdout.expected -tests/custom/paramgen/relation01/test.param -tests/custom/paramgen/set01/expected-time.txt -tests/custom/paramgen/set01/problem.essence -tests/custom/paramgen/set01/run.sh -tests/custom/paramgen/set01/stdout.expected -tests/custom/paramgen/set01/test.param -tests/custom/peg/peg.essence -tests/custom/transform/function/matrix/const_01/function.essence -tests/custom/transform/function/matrix/const_01/run.sh -tests/custom/transform/function/matrix/const_01/stdout.expected -tests/custom/transform/function/matrix/var_01/function.essence -tests/custom/transform/function/matrix/var_01/run.sh -tests/custom/transform/function/matrix/var_01/stdout.expected -tests/custom/transform/function/partition/const_01/function.essence -tests/custom/transform/function/partition/const_01/run.sh -tests/custom/transform/function/partition/const_01/stdout.expected -tests/custom/transform/function/partition/var_01/function.essence -tests/custom/transform/function/partition/var_01/run.sh -tests/custom/transform/function/partition/var_01/stdout.expected -tests/custom/transform/function/record/const_01/function.essence -tests/custom/transform/function/record/const_01/run.sh -tests/custom/transform/function/record/const_01/stdout.expected -tests/custom/transform/function/record/var_01/function.essence -tests/custom/transform/function/record/var_01/run.sh -tests/custom/transform/function/record/var_01/stdout.expected -tests/custom/transform/function/record/var_02/expected-time.txt -tests/custom/transform/function/record/var_02/function.essence -tests/custom/transform/function/record/var_02/run.sh -tests/custom/transform/function/record/var_02/stdout.expected -tests/custom/transform/function/sequence/const_01/function.essence -tests/custom/transform/function/sequence/const_01/run.sh -tests/custom/transform/function/sequence/const_01/stdout.expected -tests/custom/transform/function/sequence/var_01/function.essence -tests/custom/transform/function/sequence/var_01/run.sh -tests/custom/transform/function/sequence/var_01/stdout.expected -tests/custom/transform/function/set/const_01/function.essence -tests/custom/transform/function/set/const_01/run.sh -tests/custom/transform/function/set/const_01/stdout.expected -tests/custom/transform/function/set/var_01/function.essence -tests/custom/transform/function/set/var_01/run.sh -tests/custom/transform/function/set/var_01/stdout.expected -tests/custom/transform/function/set/var_02/function.essence -tests/custom/transform/function/set/var_02/run.sh -tests/custom/transform/function/set/var_02/stdout.expected -tests/custom/transform/function/tuple/const_01/function.essence -tests/custom/transform/function/tuple/const_01/run.sh -tests/custom/transform/function/tuple/const_01/stdout.expected -tests/custom/transform/function/tuple/var_01/function.essence -tests/custom/transform/function/tuple/var_01/run.sh -tests/custom/transform/function/tuple/var_01/stdout.expected -tests/custom/transform/function/variant/const_01/function.essence -tests/custom/transform/function/variant/const_01/run.sh -tests/custom/transform/function/variant/const_01/stdout.expected -tests/custom/transform/function/variant/var_01/function.essence -tests/custom/transform/function/variant/var_01/run.sh -tests/custom/transform/function/variant/var_01/stdout.expected -tests/custom/transform/function/variant/var_02/function.essence -tests/custom/transform/function/variant/var_02/run.sh -tests/custom/transform/function/variant/var_02/stdout.expected -tests/custom/transform/function/variant/var_03/function.essence -tests/custom/transform/function/variant/var_03/run.sh -tests/custom/transform/function/variant/var_03/stdout.expected -tests/custom/transform/function/variant/var_04/function.essence -tests/custom/transform/function/variant/var_04/run.sh -tests/custom/transform/function/variant/var_04/stdout.expected -tests/custom/tsdef/run.sh -tests/custom/tsdef/stdout.expected -tests/custom/variant-motif/data/zkc.param -tests/custom/variant-motif/motif.essence -tests/custom/variant-motif/readConjureSolution.py -tests/custom/variant-motif/run.sh -tests/custom/variant-motif/stdout.expected -tests/custom/variant-motif/zkc.param -tests/exhaustive/README.md -tests/exhaustive/acceptOutput.sh -tests/exhaustive/autogen/gen01/expected/model-solution000001.solution -tests/exhaustive/autogen/gen01/expected/model-solution000002.solution -tests/exhaustive/autogen/gen01/expected/model.eprime -tests/exhaustive/autogen/gen01/gen01.essence -tests/exhaustive/autogen/gen02/expected-time.txt -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_1_1-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_1_1.eprime -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_1_2-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_1_2.eprime -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_1_3-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_1_3.eprime -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_1_4-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_1_4.eprime -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_2_1-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_2_1.eprime -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_2_2-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_2_2.eprime -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_2_3-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_2_3.eprime -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_2_4-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_2_4.eprime -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_3_1-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_3_1.eprime -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_3_2-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_3_2.eprime -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_3_3-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_3_3.eprime -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_3_4-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_3_4.eprime -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_4_1-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_4_1.eprime -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_4_2-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_4_2.eprime -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_4_3-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_4_3.eprime -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000001.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000002.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000003.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000004.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000005.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000006.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000007.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000008.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000009.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000010.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000011.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000012.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000013.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000014.solution -tests/exhaustive/autogen/gen02/expected/model_4_4-solution000015.solution -tests/exhaustive/autogen/gen02/expected/model_4_4.eprime -tests/exhaustive/autogen/gen02/gen02.essence -tests/exhaustive/autogen/gen03/expected/model-solution000001.solution -tests/exhaustive/autogen/gen03/expected/model.eprime -tests/exhaustive/autogen/gen03/gen03.essence -tests/exhaustive/autogen/gen04/expected/model-solution000001.solution -tests/exhaustive/autogen/gen04/expected/model-solution000002.solution -tests/exhaustive/autogen/gen04/expected/model.eprime -tests/exhaustive/autogen/gen04/gen04.essence -tests/exhaustive/autogen/gen05/expected/model-solution000001.solution -tests/exhaustive/autogen/gen05/expected/model.eprime -tests/exhaustive/autogen/gen05/gen05.essence -tests/exhaustive/autogen/gen06/expected/model-solution000001.solution -tests/exhaustive/autogen/gen06/expected/model-solution000002.solution -tests/exhaustive/autogen/gen06/expected/model.eprime -tests/exhaustive/autogen/gen06/gen06.essence -tests/exhaustive/autogen/gen07/expected/model-solution000001.solution -tests/exhaustive/autogen/gen07/expected/model-solution000002.solution -tests/exhaustive/autogen/gen07/expected/model.eprime -tests/exhaustive/autogen/gen07/gen07.essence -tests/exhaustive/autogen/gen08/expected/model.eprime -tests/exhaustive/autogen/gen08/gen08.essence -tests/exhaustive/autogen/gen09/expected/model-solution000001.solution -tests/exhaustive/autogen/gen09/expected/model-solution000002.solution -tests/exhaustive/autogen/gen09/expected/model-solution000003.solution -tests/exhaustive/autogen/gen09/expected/model-solution000004.solution -tests/exhaustive/autogen/gen09/expected/model-solution000005.solution -tests/exhaustive/autogen/gen09/expected/model-solution000006.solution -tests/exhaustive/autogen/gen09/expected/model-solution000007.solution -tests/exhaustive/autogen/gen09/expected/model-solution000008.solution -tests/exhaustive/autogen/gen09/expected/model.eprime -tests/exhaustive/autogen/gen09/gen09.essence -tests/exhaustive/autogen/gen10/expected-time.txt -tests/exhaustive/autogen/gen10/expected/model_1_1-solution000001.solution -tests/exhaustive/autogen/gen10/expected/model_1_1-solution000002.solution -tests/exhaustive/autogen/gen10/expected/model_1_1-solution000003.solution -tests/exhaustive/autogen/gen10/expected/model_1_1-solution000004.solution -tests/exhaustive/autogen/gen10/expected/model_1_1.eprime -tests/exhaustive/autogen/gen10/expected/model_1_2-solution000001.solution -tests/exhaustive/autogen/gen10/expected/model_1_2-solution000002.solution -tests/exhaustive/autogen/gen10/expected/model_1_2-solution000003.solution -tests/exhaustive/autogen/gen10/expected/model_1_2-solution000004.solution -tests/exhaustive/autogen/gen10/expected/model_1_2.eprime -tests/exhaustive/autogen/gen10/expected/model_2_1-solution000001.solution -tests/exhaustive/autogen/gen10/expected/model_2_1-solution000002.solution -tests/exhaustive/autogen/gen10/expected/model_2_1-solution000003.solution -tests/exhaustive/autogen/gen10/expected/model_2_1-solution000004.solution -tests/exhaustive/autogen/gen10/expected/model_2_1.eprime -tests/exhaustive/autogen/gen10/expected/model_2_2-solution000001.solution -tests/exhaustive/autogen/gen10/expected/model_2_2-solution000002.solution -tests/exhaustive/autogen/gen10/expected/model_2_2-solution000003.solution -tests/exhaustive/autogen/gen10/expected/model_2_2-solution000004.solution -tests/exhaustive/autogen/gen10/expected/model_2_2.eprime -tests/exhaustive/autogen/gen10/gen10.essence -tests/exhaustive/autogen/gen11/expected/model-solution000001.solution -tests/exhaustive/autogen/gen11/expected/model-solution000002.solution -tests/exhaustive/autogen/gen11/expected/model.eprime -tests/exhaustive/autogen/gen11/gen11.essence -tests/exhaustive/autogen/gen12/expected/model.eprime -tests/exhaustive/autogen/gen12/gen12.essence -tests/exhaustive/autogen/gen13/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen13/expected/model_1-solution000002.solution -tests/exhaustive/autogen/gen13/expected/model_1.eprime -tests/exhaustive/autogen/gen13/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen13/expected/model_2-solution000002.solution -tests/exhaustive/autogen/gen13/expected/model_2.eprime -tests/exhaustive/autogen/gen13/expected/model_3-solution000001.solution -tests/exhaustive/autogen/gen13/expected/model_3-solution000002.solution -tests/exhaustive/autogen/gen13/expected/model_3.eprime -tests/exhaustive/autogen/gen13/expected/model_4-solution000001.solution -tests/exhaustive/autogen/gen13/expected/model_4-solution000002.solution -tests/exhaustive/autogen/gen13/expected/model_4.eprime -tests/exhaustive/autogen/gen13/gen13.essence -tests/exhaustive/autogen/gen14_1/additional-arguments.txt -tests/exhaustive/autogen/gen14_1/expected-time.txt -tests/exhaustive/autogen/gen14_1/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen14_1/expected/model_1-solution000002.solution -tests/exhaustive/autogen/gen14_1/expected/model_1.eprime -tests/exhaustive/autogen/gen14_1/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen14_1/expected/model_2-solution000002.solution -tests/exhaustive/autogen/gen14_1/expected/model_2.eprime -tests/exhaustive/autogen/gen14_1/expected/model_3-solution000001.solution -tests/exhaustive/autogen/gen14_1/expected/model_3-solution000002.solution -tests/exhaustive/autogen/gen14_1/expected/model_3.eprime -tests/exhaustive/autogen/gen14_1/expected/model_4-solution000001.solution -tests/exhaustive/autogen/gen14_1/expected/model_4-solution000002.solution -tests/exhaustive/autogen/gen14_1/expected/model_4.eprime -tests/exhaustive/autogen/gen14_1/gen14_1.essence -tests/exhaustive/autogen/gen14_2/additional-arguments.txt -tests/exhaustive/autogen/gen14_2/expected-time.txt -tests/exhaustive/autogen/gen14_2/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen14_2/expected/model_1-solution000002.solution -tests/exhaustive/autogen/gen14_2/expected/model_1.eprime -tests/exhaustive/autogen/gen14_2/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen14_2/expected/model_2-solution000002.solution -tests/exhaustive/autogen/gen14_2/expected/model_2.eprime -tests/exhaustive/autogen/gen14_2/expected/model_3-solution000001.solution -tests/exhaustive/autogen/gen14_2/expected/model_3-solution000002.solution -tests/exhaustive/autogen/gen14_2/expected/model_3.eprime -tests/exhaustive/autogen/gen14_2/expected/model_4-solution000001.solution -tests/exhaustive/autogen/gen14_2/expected/model_4-solution000002.solution -tests/exhaustive/autogen/gen14_2/expected/model_4.eprime -tests/exhaustive/autogen/gen14_2/gen14_2.essence -tests/exhaustive/autogen/gen15/expected/model-solution000001.solution -tests/exhaustive/autogen/gen15/expected/model.eprime -tests/exhaustive/autogen/gen15/gen15.essence -tests/exhaustive/autogen/gen16/expected/model-solution000001.solution -tests/exhaustive/autogen/gen16/expected/model.eprime -tests/exhaustive/autogen/gen16/gen16.essence -tests/exhaustive/autogen/gen17/expected/model_1.eprime -tests/exhaustive/autogen/gen17/expected/model_2.eprime -tests/exhaustive/autogen/gen17/gen17.essence -tests/exhaustive/autogen/gen18/expected/model-solution000001.solution -tests/exhaustive/autogen/gen18/expected/model-solution000002.solution -tests/exhaustive/autogen/gen18/expected/model.eprime -tests/exhaustive/autogen/gen18/gen18.essence -tests/exhaustive/autogen/gen19/expected/model.eprime -tests/exhaustive/autogen/gen19/gen19.essence -tests/exhaustive/autogen/gen20_1/expected/model.eprime -tests/exhaustive/autogen/gen20_1/gen20_1.essence -tests/exhaustive/autogen/gen20_2/expected/model-solution000001.solution -tests/exhaustive/autogen/gen20_2/expected/model.eprime -tests/exhaustive/autogen/gen20_2/gen20_2.essence -tests/exhaustive/autogen/gen21_1/expected/model.eprime -tests/exhaustive/autogen/gen21_1/gen21_1.essence -tests/exhaustive/autogen/gen21_2/expected/model.eprime -tests/exhaustive/autogen/gen21_2/gen21_2.essence -tests/exhaustive/autogen/gen22/expected/model-solution000001.solution -tests/exhaustive/autogen/gen22/expected/model-solution000002.solution -tests/exhaustive/autogen/gen22/expected/model-solution000003.solution -tests/exhaustive/autogen/gen22/expected/model.eprime -tests/exhaustive/autogen/gen22/gen22.essence -tests/exhaustive/autogen/gen23/expected/model-solution000001.solution -tests/exhaustive/autogen/gen23/expected/model.eprime -tests/exhaustive/autogen/gen23/gen23.essence -tests/exhaustive/autogen/gen24/expected/model-solution000001.solution -tests/exhaustive/autogen/gen24/expected/model.eprime -tests/exhaustive/autogen/gen24/gen24.essence -tests/exhaustive/autogen/gen25/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen25/expected/model_1-solution000002.solution -tests/exhaustive/autogen/gen25/expected/model_1-solution000003.solution -tests/exhaustive/autogen/gen25/expected/model_1-solution000004.solution -tests/exhaustive/autogen/gen25/expected/model_1.eprime -tests/exhaustive/autogen/gen25/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen25/expected/model_2-solution000002.solution -tests/exhaustive/autogen/gen25/expected/model_2-solution000003.solution -tests/exhaustive/autogen/gen25/expected/model_2-solution000004.solution -tests/exhaustive/autogen/gen25/expected/model_2.eprime -tests/exhaustive/autogen/gen25/gen25.essence -tests/exhaustive/autogen/gen26_1/expected/model.eprime -tests/exhaustive/autogen/gen26_1/gen26_1.essence -tests/exhaustive/autogen/gen26_2/expected/model_1.eprime -tests/exhaustive/autogen/gen26_2/expected/model_2.eprime -tests/exhaustive/autogen/gen26_2/gen26_2.essence -tests/exhaustive/autogen/gen26_3/expected/model.eprime -tests/exhaustive/autogen/gen26_3/gen26_3.essence -tests/exhaustive/autogen/gen27/expected/model-solution000001.solution -tests/exhaustive/autogen/gen27/expected/model.eprime -tests/exhaustive/autogen/gen27/gen27.essence -tests/exhaustive/autogen/gen28/expected/model.eprime -tests/exhaustive/autogen/gen28/gen28.essence -tests/exhaustive/autogen/gen29/expected/model.eprime -tests/exhaustive/autogen/gen29/gen29.essence -tests/exhaustive/autogen/gen30/expected/model-solution000001.solution -tests/exhaustive/autogen/gen30/expected/model-solution000002.solution -tests/exhaustive/autogen/gen30/expected/model.eprime -tests/exhaustive/autogen/gen30/gen30.essence -tests/exhaustive/autogen/gen31/expected/model-solution000001.solution -tests/exhaustive/autogen/gen31/expected/model.eprime -tests/exhaustive/autogen/gen31/gen31.essence -tests/exhaustive/autogen/gen32/expected-time.txt -tests/exhaustive/autogen/gen32/expected/model_1_1_1.eprime -tests/exhaustive/autogen/gen32/expected/model_1_1_2.eprime -tests/exhaustive/autogen/gen32/expected/model_1_1_3.eprime -tests/exhaustive/autogen/gen32/expected/model_1_1_4.eprime -tests/exhaustive/autogen/gen32/expected/model_1_2_1.eprime -tests/exhaustive/autogen/gen32/expected/model_1_2_3.eprime -tests/exhaustive/autogen/gen32/expected/model_1_2_4.eprime -tests/exhaustive/autogen/gen32/expected/model_1_3_1.eprime -tests/exhaustive/autogen/gen32/expected/model_1_3_2.eprime -tests/exhaustive/autogen/gen32/expected/model_1_3_4.eprime -tests/exhaustive/autogen/gen32/expected/model_1_4_1.eprime -tests/exhaustive/autogen/gen32/expected/model_1_4_2.eprime -tests/exhaustive/autogen/gen32/expected/model_1_4_3.eprime -tests/exhaustive/autogen/gen32/expected/model_2_1_1.eprime -tests/exhaustive/autogen/gen32/expected/model_2_1_3.eprime -tests/exhaustive/autogen/gen32/expected/model_2_1_4.eprime -tests/exhaustive/autogen/gen32/expected/model_2_2_1.eprime -tests/exhaustive/autogen/gen32/expected/model_2_2_2.eprime -tests/exhaustive/autogen/gen32/expected/model_2_2_3.eprime -tests/exhaustive/autogen/gen32/expected/model_2_2_4.eprime -tests/exhaustive/autogen/gen32/expected/model_2_3_1.eprime -tests/exhaustive/autogen/gen32/expected/model_2_3_2.eprime -tests/exhaustive/autogen/gen32/expected/model_2_3_4.eprime -tests/exhaustive/autogen/gen32/expected/model_2_4_1.eprime -tests/exhaustive/autogen/gen32/expected/model_2_4_2.eprime -tests/exhaustive/autogen/gen32/expected/model_2_4_3.eprime -tests/exhaustive/autogen/gen32/expected/model_3_1_1.eprime -tests/exhaustive/autogen/gen32/expected/model_3_1_2.eprime -tests/exhaustive/autogen/gen32/expected/model_3_1_4.eprime -tests/exhaustive/autogen/gen32/expected/model_3_2_1.eprime -tests/exhaustive/autogen/gen32/expected/model_3_2_2.eprime -tests/exhaustive/autogen/gen32/expected/model_3_2_4.eprime -tests/exhaustive/autogen/gen32/expected/model_3_3_1.eprime -tests/exhaustive/autogen/gen32/expected/model_3_3_2.eprime -tests/exhaustive/autogen/gen32/expected/model_3_3_3.eprime -tests/exhaustive/autogen/gen32/expected/model_3_3_4.eprime -tests/exhaustive/autogen/gen32/expected/model_3_4_1.eprime -tests/exhaustive/autogen/gen32/expected/model_3_4_2.eprime -tests/exhaustive/autogen/gen32/expected/model_3_4_3.eprime -tests/exhaustive/autogen/gen32/expected/model_4_1_1.eprime -tests/exhaustive/autogen/gen32/expected/model_4_1_2.eprime -tests/exhaustive/autogen/gen32/expected/model_4_1_3.eprime -tests/exhaustive/autogen/gen32/expected/model_4_2_1.eprime -tests/exhaustive/autogen/gen32/expected/model_4_2_2.eprime -tests/exhaustive/autogen/gen32/expected/model_4_2_3.eprime -tests/exhaustive/autogen/gen32/expected/model_4_3_1.eprime -tests/exhaustive/autogen/gen32/expected/model_4_3_2.eprime -tests/exhaustive/autogen/gen32/expected/model_4_3_3.eprime -tests/exhaustive/autogen/gen32/expected/model_4_4_1.eprime -tests/exhaustive/autogen/gen32/expected/model_4_4_2.eprime -tests/exhaustive/autogen/gen32/expected/model_4_4_3.eprime -tests/exhaustive/autogen/gen32/expected/model_4_4_4.eprime -tests/exhaustive/autogen/gen32/gen32.essence -tests/exhaustive/autogen/gen33/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen33/expected/model_1.eprime -tests/exhaustive/autogen/gen33/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen33/expected/model_2.eprime -tests/exhaustive/autogen/gen33/gen33.essence -tests/exhaustive/autogen/gen34_1/expected/model-solution000001.solution -tests/exhaustive/autogen/gen34_1/expected/model-solution000002.solution -tests/exhaustive/autogen/gen34_1/expected/model.eprime -tests/exhaustive/autogen/gen34_1/gen34.essence -tests/exhaustive/autogen/gen34_2/expected-time.txt -tests/exhaustive/autogen/gen34_2/expected/model-solution000001.solution -tests/exhaustive/autogen/gen34_2/expected/model-solution000002.solution -tests/exhaustive/autogen/gen34_2/expected/model.eprime -tests/exhaustive/autogen/gen34_2/gen34_2.essence -tests/exhaustive/autogen/gen35/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen35/expected/model_1.eprime -tests/exhaustive/autogen/gen35/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen35/expected/model_2.eprime -tests/exhaustive/autogen/gen35/gen35.essence -tests/exhaustive/autogen/gen36/expected-time.txt -tests/exhaustive/autogen/gen36/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen36/expected/model_1.eprime -tests/exhaustive/autogen/gen36/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen36/expected/model_2.eprime -tests/exhaustive/autogen/gen36/expected/model_3-solution000001.solution -tests/exhaustive/autogen/gen36/expected/model_3.eprime -tests/exhaustive/autogen/gen36/expected/model_4-solution000001.solution -tests/exhaustive/autogen/gen36/expected/model_4.eprime -tests/exhaustive/autogen/gen36/expected/model_5-solution000001.solution -tests/exhaustive/autogen/gen36/expected/model_5.eprime -tests/exhaustive/autogen/gen36/expected/model_6-solution000001.solution -tests/exhaustive/autogen/gen36/expected/model_6.eprime -tests/exhaustive/autogen/gen36/gen36.essence -tests/exhaustive/autogen/gen37/expected-time.txt -tests/exhaustive/autogen/gen37/expected/model_1-solution000001.solution -tests/exhaustive/autogen/gen37/expected/model_1-solution000002.solution -tests/exhaustive/autogen/gen37/expected/model_1-solution000003.solution -tests/exhaustive/autogen/gen37/expected/model_1-solution000004.solution -tests/exhaustive/autogen/gen37/expected/model_1-solution000005.solution -tests/exhaustive/autogen/gen37/expected/model_1-solution000006.solution -tests/exhaustive/autogen/gen37/expected/model_1.eprime -tests/exhaustive/autogen/gen37/expected/model_2-solution000001.solution -tests/exhaustive/autogen/gen37/expected/model_2-solution000002.solution -tests/exhaustive/autogen/gen37/expected/model_2-solution000003.solution -tests/exhaustive/autogen/gen37/expected/model_2-solution000004.solution -tests/exhaustive/autogen/gen37/expected/model_2-solution000005.solution -tests/exhaustive/autogen/gen37/expected/model_2-solution000006.solution -tests/exhaustive/autogen/gen37/expected/model_2.eprime -tests/exhaustive/autogen/gen37/expected/model_3-solution000001.solution -tests/exhaustive/autogen/gen37/expected/model_3-solution000002.solution -tests/exhaustive/autogen/gen37/expected/model_3-solution000003.solution -tests/exhaustive/autogen/gen37/expected/model_3-solution000004.solution -tests/exhaustive/autogen/gen37/expected/model_3-solution000005.solution -tests/exhaustive/autogen/gen37/expected/model_3-solution000006.solution -tests/exhaustive/autogen/gen37/expected/model_3.eprime -tests/exhaustive/autogen/gen37/expected/model_4-solution000001.solution -tests/exhaustive/autogen/gen37/expected/model_4-solution000002.solution -tests/exhaustive/autogen/gen37/expected/model_4-solution000003.solution -tests/exhaustive/autogen/gen37/expected/model_4-solution000004.solution -tests/exhaustive/autogen/gen37/expected/model_4-solution000005.solution -tests/exhaustive/autogen/gen37/expected/model_4-solution000006.solution -tests/exhaustive/autogen/gen37/expected/model_4.eprime -tests/exhaustive/autogen/gen37/gen37.essence -tests/exhaustive/autogen/gen38/expected/model.eprime -tests/exhaustive/autogen/gen38/gen38.essence -tests/exhaustive/basic/alldifferent_except_01/alldifferent_except.essence -tests/exhaustive/basic/alldifferent_except_01/expected/model-solution000001.solution -tests/exhaustive/basic/alldifferent_except_01/expected/model.eprime -tests/exhaustive/basic/binrel01/binrel01.essence -tests/exhaustive/basic/binrel01/expected/model-solution000001.solution -tests/exhaustive/basic/binrel01/expected/model-solution000002.solution -tests/exhaustive/basic/binrel01/expected/model-solution000003.solution -tests/exhaustive/basic/binrel01/expected/model-solution000004.solution -tests/exhaustive/basic/binrel01/expected/model-solution000005.solution -tests/exhaustive/basic/binrel01/expected/model-solution000006.solution -tests/exhaustive/basic/binrel01/expected/model-solution000007.solution -tests/exhaustive/basic/binrel01/expected/model-solution000008.solution -tests/exhaustive/basic/binrel01/expected/model.eprime -tests/exhaustive/basic/binrel02/binrel02.essence -tests/exhaustive/basic/binrel02/expected/model-solution000001.solution -tests/exhaustive/basic/binrel02/expected/model-solution000002.solution -tests/exhaustive/basic/binrel02/expected/model-solution000003.solution -tests/exhaustive/basic/binrel02/expected/model-solution000004.solution -tests/exhaustive/basic/binrel02/expected/model-solution000005.solution -tests/exhaustive/basic/binrel02/expected/model.eprime -tests/exhaustive/basic/binrel03/binrel03.essence -tests/exhaustive/basic/binrel03/expected/model-solution000001.solution -tests/exhaustive/basic/binrel03/expected/model-solution000002.solution -tests/exhaustive/basic/binrel03/expected/model-solution000003.solution -tests/exhaustive/basic/binrel03/expected/model-solution000004.solution -tests/exhaustive/basic/binrel03/expected/model-solution000005.solution -tests/exhaustive/basic/binrel03/expected/model-solution000006.solution -tests/exhaustive/basic/binrel03/expected/model-solution000007.solution -tests/exhaustive/basic/binrel03/expected/model-solution000008.solution -tests/exhaustive/basic/binrel03/expected/model-solution000009.solution -tests/exhaustive/basic/binrel03/expected/model-solution000010.solution -tests/exhaustive/basic/binrel03/expected/model-solution000011.solution -tests/exhaustive/basic/binrel03/expected/model-solution000012.solution -tests/exhaustive/basic/binrel03/expected/model-solution000013.solution -tests/exhaustive/basic/binrel03/expected/model-solution000014.solution -tests/exhaustive/basic/binrel03/expected/model-solution000015.solution -tests/exhaustive/basic/binrel03/expected/model-solution000016.solution -tests/exhaustive/basic/binrel03/expected/model-solution000017.solution -tests/exhaustive/basic/binrel03/expected/model-solution000018.solution -tests/exhaustive/basic/binrel03/expected/model-solution000019.solution -tests/exhaustive/basic/binrel03/expected/model.eprime -tests/exhaustive/basic/binrel04/binrel04.essence -tests/exhaustive/basic/binrel04/expected/model-solution000001.solution -tests/exhaustive/basic/binrel04/expected/model-solution000002.solution -tests/exhaustive/basic/binrel04/expected/model-solution000003.solution -tests/exhaustive/basic/binrel04/expected/model-solution000004.solution -tests/exhaustive/basic/binrel04/expected/model-solution000005.solution -tests/exhaustive/basic/binrel04/expected/model-solution000006.solution -tests/exhaustive/basic/binrel04/expected/model-solution000007.solution -tests/exhaustive/basic/binrel04/expected/model-solution000008.solution -tests/exhaustive/basic/binrel04/expected/model-solution000009.solution -tests/exhaustive/basic/binrel04/expected/model-solution000010.solution -tests/exhaustive/basic/binrel04/expected/model.eprime -tests/exhaustive/basic/bool_is_false/bool_is_false.essence -tests/exhaustive/basic/bool_is_false/expected/model-solution000001.solution -tests/exhaustive/basic/bool_is_false/expected/model.eprime -tests/exhaustive/basic/bool_is_free1/bool_is_free.essence -tests/exhaustive/basic/bool_is_free1/expected/model-solution000001.solution -tests/exhaustive/basic/bool_is_free1/expected/model-solution000002.solution -tests/exhaustive/basic/bool_is_free1/expected/model.eprime -tests/exhaustive/basic/bool_is_free2/bool_is_free2.essence -tests/exhaustive/basic/bool_is_free2/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/bool_is_free2/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/bool_is_free2/expected/model-param000001.eprime-param -tests/exhaustive/basic/bool_is_free2/expected/model-param000002-solution000001.solution -tests/exhaustive/basic/bool_is_free2/expected/model-param000002-solution000002.solution -tests/exhaustive/basic/bool_is_free2/expected/model-param000002.eprime-param -tests/exhaustive/basic/bool_is_free2/expected/model.eprime -tests/exhaustive/basic/bool_is_free2/param000001.param -tests/exhaustive/basic/bool_is_free2/param000002.param -tests/exhaustive/basic/bool_is_param/bool_is_param.essence -tests/exhaustive/basic/bool_is_param/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/bool_is_param/expected/model-param000001.eprime-param -tests/exhaustive/basic/bool_is_param/expected/model-param000002-solution000001.solution -tests/exhaustive/basic/bool_is_param/expected/model-param000002.eprime-param -tests/exhaustive/basic/bool_is_param/expected/model.eprime -tests/exhaustive/basic/bool_is_param/param000001.param -tests/exhaustive/basic/bool_is_param/param000002.param -tests/exhaustive/basic/bubble_01/bubble_01.essence -tests/exhaustive/basic/bubble_01/expected/model-solution000001.solution -tests/exhaustive/basic/bubble_01/expected/model-solution000002.solution -tests/exhaustive/basic/bubble_01/expected/model-solution000003.solution -tests/exhaustive/basic/bubble_01/expected/model.eprime -tests/exhaustive/basic/comprehension_01_1/comprehension_01.essence -tests/exhaustive/basic/comprehension_01_1/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_01_1/expected/model.eprime -tests/exhaustive/basic/comprehension_01_2/comprehension_01_2.essence -tests/exhaustive/basic/comprehension_01_2/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_01_2/expected/model-solution000002.solution -tests/exhaustive/basic/comprehension_01_2/expected/model.eprime -tests/exhaustive/basic/comprehension_02_1/comprehension_02.essence -tests/exhaustive/basic/comprehension_02_1/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_02_1/expected/model.eprime -tests/exhaustive/basic/comprehension_02_2/comprehension_02_2.essence -tests/exhaustive/basic/comprehension_02_2/expected-time.txt -tests/exhaustive/basic/comprehension_02_2/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_02_2/expected/model-solution000002.solution -tests/exhaustive/basic/comprehension_02_2/expected/model.eprime -tests/exhaustive/basic/comprehension_03_1/comprehension_03.essence -tests/exhaustive/basic/comprehension_03_1/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_03_1/expected/model.eprime -tests/exhaustive/basic/comprehension_03_2/comprehension_03_2.essence -tests/exhaustive/basic/comprehension_03_2/expected-time.txt -tests/exhaustive/basic/comprehension_03_2/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_03_2/expected/model-solution000002.solution -tests/exhaustive/basic/comprehension_03_2/expected/model.eprime -tests/exhaustive/basic/comprehension_04_1/comprehension_04.essence -tests/exhaustive/basic/comprehension_04_1/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_04_1/expected/model.eprime -tests/exhaustive/basic/comprehension_04_2/comprehension_04_2.essence -tests/exhaustive/basic/comprehension_04_2/expected-time.txt -tests/exhaustive/basic/comprehension_04_2/expected/model-solution000001.solution -tests/exhaustive/basic/comprehension_04_2/expected/model-solution000002.solution -tests/exhaustive/basic/comprehension_04_2/expected/model-solution000003.solution -tests/exhaustive/basic/comprehension_04_2/expected/model-solution000004.solution -tests/exhaustive/basic/comprehension_04_2/expected/model.eprime -tests/exhaustive/basic/comprehension_letting/comprehension_letting.essence -tests/exhaustive/basic/comprehension_letting/expected-time.txt -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_1_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_2_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_3_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_1_4_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_1_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_2_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_3_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_2_4_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_1_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_2_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_3_4.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_3_4_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_1_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_2_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_3_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_1.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_2.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_3.eprime -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000002.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000003.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000004.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000005.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000006.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4-solution000007.solution -tests/exhaustive/basic/comprehension_letting/expected/model_4_4_4.eprime -tests/exhaustive/basic/cut_01_off/cut_01_nocut.essence -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000001.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000002.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000003.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000004.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000005.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000006.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000007.solution -tests/exhaustive/basic/cut_01_off/expected/model_1-solution000008.solution -tests/exhaustive/basic/cut_01_off/expected/model_1.eprime -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000001.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000002.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000003.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000004.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000005.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000006.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000007.solution -tests/exhaustive/basic/cut_01_off/expected/model_2-solution000008.solution -tests/exhaustive/basic/cut_01_off/expected/model_2.eprime -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000001.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000002.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000003.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000004.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000005.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000006.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000007.solution -tests/exhaustive/basic/cut_01_off/expected/model_3-solution000008.solution -tests/exhaustive/basic/cut_01_off/expected/model_3.eprime -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000001.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000002.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000003.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000004.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000005.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000006.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000007.solution -tests/exhaustive/basic/cut_01_off/expected/model_4-solution000008.solution -tests/exhaustive/basic/cut_01_off/expected/model_4.eprime -tests/exhaustive/basic/cut_01_on/cut_01.essence -tests/exhaustive/basic/cut_01_on/expected-time.txt -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_1_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_2_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_3_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_1_4_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_1_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_2_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_3_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_2_4_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_1_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_2_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_3_4.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_3_4_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_1_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_2_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_3_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_1.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_2.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_3.eprime -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000002.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000003.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000004.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000005.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000006.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000007.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4-solution000008.solution -tests/exhaustive/basic/cut_01_on/expected/model_4_4_4.eprime -tests/exhaustive/basic/domainRefAsIndex/domainRefAsIndex.essence -tests/exhaustive/basic/domainRefAsIndex/expected/model-solution000001.solution -tests/exhaustive/basic/domainRefAsIndex/expected/model-solution000002.solution -tests/exhaustive/basic/domainRefAsIndex/expected/model-solution000003.solution -tests/exhaustive/basic/domainRefAsIndex/expected/model.eprime -tests/exhaustive/basic/empty_matrix/empty_matrix.essence -tests/exhaustive/basic/empty_matrix/expected/model.eprime -tests/exhaustive/basic/enum01/enum01.essence -tests/exhaustive/basic/enum01/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/enum01/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/enum01/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/enum01/expected/model-param000001.eprime-param -tests/exhaustive/basic/enum01/expected/model.eprime -tests/exhaustive/basic/enum01/param000001.param -tests/exhaustive/basic/enum02/enum02.essence -tests/exhaustive/basic/enum02/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/enum02/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/enum02/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/enum02/expected/model-param000001.eprime-param -tests/exhaustive/basic/enum02/expected/model.eprime -tests/exhaustive/basic/enum02/param000001.param -tests/exhaustive/basic/enum03/enum03.essence -tests/exhaustive/basic/enum03/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/enum03/expected/model-param000001.eprime-param -tests/exhaustive/basic/enum03/expected/model.eprime -tests/exhaustive/basic/enum03/param000001.param -tests/exhaustive/basic/enum04/01.param -tests/exhaustive/basic/enum04/Crossfigures.essence -tests/exhaustive/basic/enum04/expected/model-01-solution000001.solution -tests/exhaustive/basic/enum04/expected/model-01.eprime-param -tests/exhaustive/basic/enum04/expected/model.eprime -tests/exhaustive/basic/enum05-enum/enum05/SetOfEnum.essence -tests/exhaustive/basic/enum05-enum/enum05/expected-time.txt -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_1.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_2.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_3.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_1_4.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_1.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_2.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_3.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_2_4.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_1.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_2.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_3.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_3_4.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_1.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_2.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_3.eprime -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4-solution000002.solution -tests/exhaustive/basic/enum05-enum/enum05/expected/model_4_4.eprime -tests/exhaustive/basic/enum05-unnamed/SetOfEnum.essence -tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000001.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000002.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000003.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_1-solution000004.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_1.eprime -tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000001.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000002.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000003.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_2-solution000004.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_2.eprime -tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000001.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000002.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000003.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_3-solution000004.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_3.eprime -tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000001.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000002.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000003.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_4-solution000004.solution -tests/exhaustive/basic/enum05-unnamed/expected/model_4.eprime -tests/exhaustive/basic/enum06/MSetOfEnum.essence -tests/exhaustive/basic/enum06/expected-time.txt -tests/exhaustive/basic/enum06/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_1_1-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_1_1.eprime -tests/exhaustive/basic/enum06/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_1_2-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_1_2.eprime -tests/exhaustive/basic/enum06/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_1_3-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_1_3.eprime -tests/exhaustive/basic/enum06/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_2_1-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_2_1.eprime -tests/exhaustive/basic/enum06/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_2_2-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_2_2.eprime -tests/exhaustive/basic/enum06/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_2_3-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_2_3.eprime -tests/exhaustive/basic/enum06/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_3_1-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_3_1.eprime -tests/exhaustive/basic/enum06/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_3_2-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_3_2.eprime -tests/exhaustive/basic/enum06/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000002.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000003.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000004.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000005.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000006.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000007.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000008.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000009.solution -tests/exhaustive/basic/enum06/expected/model_3_3-solution000010.solution -tests/exhaustive/basic/enum06/expected/model_3_3.eprime -tests/exhaustive/basic/enum_card_01/enum_card.essence -tests/exhaustive/basic/enum_card_01/expected/model-p-solution000001.solution -tests/exhaustive/basic/enum_card_01/expected/model-p.eprime-param -tests/exhaustive/basic/enum_card_01/expected/model.eprime -tests/exhaustive/basic/enum_card_01/p.param -tests/exhaustive/basic/enum_card_02/enum_card_02.essence -tests/exhaustive/basic/enum_card_02/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/enum_card_02/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/enum_card_02/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/enum_card_02/expected/model-param000001.eprime-param -tests/exhaustive/basic/enum_card_02/expected/model.eprime -tests/exhaustive/basic/enum_card_02/param000001.param -tests/exhaustive/basic/enum_liberated/enum_liberated.essence -tests/exhaustive/basic/enum_liberated/expected/model-p1-solution000001.solution -tests/exhaustive/basic/enum_liberated/expected/model-p1-solution000002.solution -tests/exhaustive/basic/enum_liberated/expected/model-p1.eprime-param -tests/exhaustive/basic/enum_liberated/expected/model.eprime -tests/exhaustive/basic/enum_liberated/p1.param -tests/exhaustive/basic/enum_onlyDefn/enum.essence -tests/exhaustive/basic/enum_onlyDefn/expected/model-solution000001.solution -tests/exhaustive/basic/enum_onlyDefn/expected/model.eprime -tests/exhaustive/basic/finiteGivens_relation01/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_relation01/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_relation01/expected/model.eprime -tests/exhaustive/basic/finiteGivens_relation01/finiteGivens_relation01.essence -tests/exhaustive/basic/finiteGivens_relation01/p1.param -tests/exhaustive/basic/finiteGivens_set01/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set01/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set01/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set01/finiteGivens_set01.essence -tests/exhaustive/basic/finiteGivens_set01/p1.param -tests/exhaustive/basic/finiteGivens_set02/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set02/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set02/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set02/finiteGivens_set02.essence -tests/exhaustive/basic/finiteGivens_set02/p1.param -tests/exhaustive/basic/finiteGivens_set03/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set03/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set03/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set03/finiteGivens_set03.essence -tests/exhaustive/basic/finiteGivens_set03/p1.param -tests/exhaustive/basic/finiteGivens_set04/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set04/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set04/expected/model-p2-solution000001.solution -tests/exhaustive/basic/finiteGivens_set04/expected/model-p2.eprime-param -tests/exhaustive/basic/finiteGivens_set04/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set04/finiteGivens_set04.essence -tests/exhaustive/basic/finiteGivens_set04/p1.param -tests/exhaustive/basic/finiteGivens_set04/p2.param -tests/exhaustive/basic/finiteGivens_set05/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set05/expected/model-p1-solution000002.solution -tests/exhaustive/basic/finiteGivens_set05/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set05/expected/model-p2-solution000001.solution -tests/exhaustive/basic/finiteGivens_set05/expected/model-p2-solution000002.solution -tests/exhaustive/basic/finiteGivens_set05/expected/model-p2-solution000003.solution -tests/exhaustive/basic/finiteGivens_set05/expected/model-p2.eprime-param -tests/exhaustive/basic/finiteGivens_set05/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set05/p1.param -tests/exhaustive/basic/finiteGivens_set05/p2.param -tests/exhaustive/basic/finiteGivens_set05/set-given.essence -tests/exhaustive/basic/finiteGivens_set_of_record/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set_of_record/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set_of_record/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set_of_record/finite.essence -tests/exhaustive/basic/finiteGivens_set_of_record/p1.param -tests/exhaustive/basic/finiteGivens_set_of_tuple/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set_of_tuple/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set_of_tuple/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set_of_tuple/finite.essence -tests/exhaustive/basic/finiteGivens_set_of_tuple/p1.param -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p1-solution000001.solution -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p1.eprime-param -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p2-solution000001.solution -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p2.eprime-param -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p3-solution000001.solution -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p3.eprime-param -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p4-solution000001.solution -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model-p4.eprime-param -tests/exhaustive/basic/finiteGivens_set_of_variant/expected/model.eprime -tests/exhaustive/basic/finiteGivens_set_of_variant/finite.essence -tests/exhaustive/basic/finiteGivens_set_of_variant/p1.param -tests/exhaustive/basic/finiteGivens_set_of_variant/p2.param -tests/exhaustive/basic/finiteGivens_set_of_variant/p3.param -tests/exhaustive/basic/finiteGivens_set_of_variant/p4.param -tests/exhaustive/basic/function_complex_01/expected-time.txt -tests/exhaustive/basic/function_complex_01/expected/model_1-solution000001.solution -tests/exhaustive/basic/function_complex_01/expected/model_1-solution000002.solution -tests/exhaustive/basic/function_complex_01/expected/model_1-solution000003.solution -tests/exhaustive/basic/function_complex_01/expected/model_1-solution000004.solution -tests/exhaustive/basic/function_complex_01/expected/model_1-solution000005.solution -tests/exhaustive/basic/function_complex_01/expected/model_1-solution000006.solution -tests/exhaustive/basic/function_complex_01/expected/model_1.eprime -tests/exhaustive/basic/function_complex_01/expected/model_2-solution000001.solution -tests/exhaustive/basic/function_complex_01/expected/model_2-solution000002.solution -tests/exhaustive/basic/function_complex_01/expected/model_2-solution000003.solution -tests/exhaustive/basic/function_complex_01/expected/model_2-solution000004.solution -tests/exhaustive/basic/function_complex_01/expected/model_2-solution000005.solution -tests/exhaustive/basic/function_complex_01/expected/model_2-solution000006.solution -tests/exhaustive/basic/function_complex_01/expected/model_2.eprime -tests/exhaustive/basic/function_complex_01/function_complex_01.essence -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000004.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000005.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000006.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000007.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000008.solution -tests/exhaustive/basic/function_defined/expected/model_1_1-solution000009.solution -tests/exhaustive/basic/function_defined/expected/model_1_1.eprime -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000004.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000005.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000006.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000007.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000008.solution -tests/exhaustive/basic/function_defined/expected/model_1_2-solution000009.solution -tests/exhaustive/basic/function_defined/expected/model_1_2.eprime -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000004.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000005.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000006.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000007.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000008.solution -tests/exhaustive/basic/function_defined/expected/model_2_1-solution000009.solution -tests/exhaustive/basic/function_defined/expected/model_2_1.eprime -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000004.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000005.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000006.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000007.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000008.solution -tests/exhaustive/basic/function_defined/expected/model_2_2-solution000009.solution -tests/exhaustive/basic/function_defined/expected/model_2_2.eprime -tests/exhaustive/basic/function_defined/function_defined.essence -tests/exhaustive/basic/function_image_01/expected/model-solution000001.solution -tests/exhaustive/basic/function_image_01/expected/model-solution000002.solution -tests/exhaustive/basic/function_image_01/expected/model-solution000003.solution -tests/exhaustive/basic/function_image_01/expected/model-solution000004.solution -tests/exhaustive/basic/function_image_01/expected/model.eprime -tests/exhaustive/basic/function_image_01/function_image_01.essence -tests/exhaustive/basic/function_image_02/expected/model_1-solution000001.solution -tests/exhaustive/basic/function_image_02/expected/model_1-solution000002.solution -tests/exhaustive/basic/function_image_02/expected/model_1-solution000003.solution -tests/exhaustive/basic/function_image_02/expected/model_1.eprime -tests/exhaustive/basic/function_image_02/function_image_02.essence -tests/exhaustive/basic/function_image_03/expected/model-solution000001.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000002.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000003.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000004.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000005.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000006.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000007.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000008.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000009.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000010.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000011.solution -tests/exhaustive/basic/function_image_03/expected/model-solution000012.solution -tests/exhaustive/basic/function_image_03/expected/model.eprime -tests/exhaustive/basic/function_image_03/function_image_03.essence -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000001.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000002.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000003.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000004.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000005.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000006.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000007.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1-solution000008.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_1.eprime -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000001.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000002.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000003.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000004.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000005.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000006.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000007.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2-solution000008.solution -tests/exhaustive/basic/function_partial_int_set_01/expected/model_2.eprime -tests/exhaustive/basic/function_partial_int_set_01/function_partial_int_set_01.essence -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000003.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000004.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000005.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000006.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000007.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000008.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1-solution000009.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_1.eprime -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000003.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000004.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000005.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000006.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000007.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000008.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2-solution000009.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_1_2.eprime -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000002.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000003.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000004.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000005.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000006.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000007.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000008.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1-solution000009.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_1_2_1.eprime -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000003.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000004.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000005.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000006.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000007.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000008.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1-solution000009.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_1_1.eprime -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000002.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000003.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000004.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000005.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000006.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000007.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000008.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1-solution000009.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_1.eprime -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000003.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000004.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000005.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000006.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000007.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000008.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2-solution000009.solution -tests/exhaustive/basic/function_partial_record_01/expected/model_2_2_2.eprime -tests/exhaustive/basic/function_partial_record_01/function_partial_record_01.essence -tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000007.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_1_1-param000012.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_1_1.eprime -tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000007.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_1_2-param000012.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_1_2.eprime -tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000007.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_2_1-param000012.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_2_1.eprime -tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000007.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_record_param/expected/model_2_2-param000012.eprime-param -tests/exhaustive/basic/function_partial_record_param/expected/model_2_2.eprime -tests/exhaustive/basic/function_partial_record_param/function_partial_record_param.essence -tests/exhaustive/basic/function_partial_record_param/param000007.param -tests/exhaustive/basic/function_partial_record_param/param000012.param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000007.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1-param000012.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_1.eprime -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000007.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2-param000012.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_1_2.eprime -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000007.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1-param000012.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_1.eprime -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000007-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000007.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000012-solution000001.solution -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2-param000012.eprime-param -tests/exhaustive/basic/function_partial_tuple_param/expected/model_2_2.eprime -tests/exhaustive/basic/function_partial_tuple_param/function_partial_tuple_param.essence -tests/exhaustive/basic/function_partial_tuple_param/param000007.param -tests/exhaustive/basic/function_partial_tuple_param/param000012.param -tests/exhaustive/basic/function_preImage/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/function_preImage/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/function_preImage/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/function_preImage/expected/model_1_1.eprime -tests/exhaustive/basic/function_preImage/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/function_preImage/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/function_preImage/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/function_preImage/expected/model_1_2.eprime -tests/exhaustive/basic/function_preImage/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/function_preImage/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/function_preImage/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/function_preImage/expected/model_2_1.eprime -tests/exhaustive/basic/function_preImage/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/function_preImage/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/function_preImage/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/function_preImage/expected/model_2_2.eprime -tests/exhaustive/basic/function_preImage/function_preImage.essence -tests/exhaustive/basic/function_range/expected-time.txt -tests/exhaustive/basic/function_range/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000004.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000005.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000006.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000007.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000008.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000009.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000010.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000011.solution -tests/exhaustive/basic/function_range/expected/model_1_1-solution000012.solution -tests/exhaustive/basic/function_range/expected/model_1_1.eprime -tests/exhaustive/basic/function_range/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000004.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000005.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000006.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000007.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000008.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000009.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000010.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000011.solution -tests/exhaustive/basic/function_range/expected/model_1_2-solution000012.solution -tests/exhaustive/basic/function_range/expected/model_1_2.eprime -tests/exhaustive/basic/function_range/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000004.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000005.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000006.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000007.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000008.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000009.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000010.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000011.solution -tests/exhaustive/basic/function_range/expected/model_2_1-solution000012.solution -tests/exhaustive/basic/function_range/expected/model_2_1.eprime -tests/exhaustive/basic/function_range/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000004.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000005.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000006.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000007.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000008.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000009.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000010.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000011.solution -tests/exhaustive/basic/function_range/expected/model_2_2-solution000012.solution -tests/exhaustive/basic/function_range/expected/model_2_2.eprime -tests/exhaustive/basic/function_range/function_range.essence -tests/exhaustive/basic/function_record_injective_aac/expected/model.eprime -tests/exhaustive/basic/function_record_injective_aac/function_record_injective_aac.essence -tests/exhaustive/basic/function_record_injective_attr/expected/model.eprime -tests/exhaustive/basic/function_record_injective_attr/function_record_injective.essence -tests/exhaustive/basic/function_total_bool_01/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_bool_01/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_bool_01/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_bool_01/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_bool_01/expected/model.eprime -tests/exhaustive/basic/function_total_bool_01/function_total_bool_01.essence -tests/exhaustive/basic/function_total_bool_02/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_bool_02/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_bool_02/expected/model.eprime -tests/exhaustive/basic/function_total_bool_02/function_total_bool_02.essence -tests/exhaustive/basic/function_total_bool_03/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_bool_03/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_bool_03/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_bool_03/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_bool_03/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_bool_03/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_bool_03/expected/model.eprime -tests/exhaustive/basic/function_total_bool_03/function_total_bool_03.essence -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000009.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000010.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000011.solution -tests/exhaustive/basic/function_total_bool_04/expected/model-solution000012.solution -tests/exhaustive/basic/function_total_bool_04/expected/model.eprime -tests/exhaustive/basic/function_total_bool_04/function_total_bool_04.essence -tests/exhaustive/basic/function_total_bool_05/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_bool_05/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_bool_05/expected/model.eprime -tests/exhaustive/basic/function_total_bool_05/function_total_bool_05.essence -tests/exhaustive/basic/function_total_bool_06/expected/model.eprime -tests/exhaustive/basic/function_total_bool_06/function_total_bool_06.essence -tests/exhaustive/basic/function_total_bool_param/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_bool_param/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_bool_param/expected/model-param000002-solution000001.solution -tests/exhaustive/basic/function_total_bool_param/expected/model-param000002.eprime-param -tests/exhaustive/basic/function_total_bool_param/expected/model-param000003-solution000001.solution -tests/exhaustive/basic/function_total_bool_param/expected/model-param000003.eprime-param -tests/exhaustive/basic/function_total_bool_param/expected/model-param000004-solution000001.solution -tests/exhaustive/basic/function_total_bool_param/expected/model-param000004.eprime-param -tests/exhaustive/basic/function_total_bool_param/expected/model.eprime -tests/exhaustive/basic/function_total_bool_param/function_total_bool_param.essence -tests/exhaustive/basic/function_total_bool_param/param000001.param -tests/exhaustive/basic/function_total_bool_param/param000002.param -tests/exhaustive/basic/function_total_bool_param/param000003.param -tests/exhaustive/basic/function_total_bool_param/param000004.param -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000004.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000005.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000006.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000007.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001-solution000008.solution -tests/exhaustive/basic/function_total_enumGiven_01/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_01/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_01/function_total_enumGiven_01.essence -tests/exhaustive/basic/function_total_enumGiven_01/param000001.param -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000004.solution -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000005.solution -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001-solution000006.solution -tests/exhaustive/basic/function_total_enumGiven_02/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_02/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_02/function_total_enumGiven_02.essence -tests/exhaustive/basic/function_total_enumGiven_02/param000001.param -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000004.solution -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000005.solution -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001-solution000006.solution -tests/exhaustive/basic/function_total_enumGiven_03/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_03/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_03/function_total_enumGiven_03.essence -tests/exhaustive/basic/function_total_enumGiven_03/param000001.param -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000004.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000005.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000006.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000007.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000008.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000009.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000010.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000011.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000012.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000013.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000014.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000015.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000016.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000017.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000018.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000019.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000020.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000021.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000022.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000023.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001-solution000024.solution -tests/exhaustive/basic/function_total_enumGiven_04/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_04/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_04/function_total_enumGiven_04.essence -tests/exhaustive/basic/function_total_enumGiven_04/param000001.param -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000002.solution -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000003.solution -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000004.solution -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000005.solution -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001-solution000006.solution -tests/exhaustive/basic/function_total_enumGiven_05/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_05/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_05/function_total_enumGiven_05.essence -tests/exhaustive/basic/function_total_enumGiven_05/param000001.param -tests/exhaustive/basic/function_total_enumGiven_06/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_06/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_06/function_total_enumGiven_06.essence -tests/exhaustive/basic/function_total_enumGiven_06/param000001.param -tests/exhaustive/basic/function_total_enumGiven_param/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumGiven_param/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumGiven_param/expected/model.eprime -tests/exhaustive/basic/function_total_enumGiven_param/function_total_enumGiven_param.essence -tests/exhaustive/basic/function_total_enumGiven_param/param000001.param -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_enumLetting_01/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_01/function_total_enumLetting_01.essence -tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_enumLetting_02/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_enumLetting_02/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_02/function_total_enumLetting_02.essence -tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_enumLetting_03/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_enumLetting_03/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_03/function_total_enumLetting_03.essence -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000009.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000010.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000011.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000012.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000013.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000014.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000015.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000016.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000017.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000018.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000019.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000020.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000021.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000022.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000023.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model-solution000024.solution -tests/exhaustive/basic/function_total_enumLetting_04/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_04/function_total_enumLetting_04.essence -tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_enumLetting_05/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_enumLetting_05/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_05/function_total_enumLetting_05.essence -tests/exhaustive/basic/function_total_enumLetting_06/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_06/function_total_enumLetting_06.essence -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000002-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000002.eprime-param -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000003-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000003.eprime-param -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000004-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000004.eprime-param -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000005-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000005.eprime-param -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000006-solution000001.solution -tests/exhaustive/basic/function_total_enumLetting_param/expected/model-param000006.eprime-param -tests/exhaustive/basic/function_total_enumLetting_param/expected/model.eprime -tests/exhaustive/basic/function_total_enumLetting_param/function_total_enumLetting_param.essence -tests/exhaustive/basic/function_total_enumLetting_param/param000001.param -tests/exhaustive/basic/function_total_enumLetting_param/param000002.param -tests/exhaustive/basic/function_total_enumLetting_param/param000003.param -tests/exhaustive/basic/function_total_enumLetting_param/param000004.param -tests/exhaustive/basic/function_total_enumLetting_param/param000005.param -tests/exhaustive/basic/function_total_enumLetting_param/param000006.param -tests/exhaustive/basic/function_total_int_01/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_int_01/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_int_01/expected/model.eprime -tests/exhaustive/basic/function_total_int_01/function_total_int_01.essence -tests/exhaustive/basic/function_total_int_02/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_int_02/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_int_02/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_int_02/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_int_02/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_int_02/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_int_02/expected/model.eprime -tests/exhaustive/basic/function_total_int_02/function_total_int_02.essence -tests/exhaustive/basic/function_total_int_03/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_int_03/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_int_03/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_int_03/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_int_03/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_int_03/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_int_03/expected/model.eprime -tests/exhaustive/basic/function_total_int_03/function_total_int_03.essence -tests/exhaustive/basic/function_total_int_04/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000009.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000010.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000011.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000012.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000013.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000014.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000015.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000016.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000017.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000018.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000019.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000020.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000021.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000022.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000023.solution -tests/exhaustive/basic/function_total_int_04/expected/model-solution000024.solution -tests/exhaustive/basic/function_total_int_04/expected/model.eprime -tests/exhaustive/basic/function_total_int_04/function_total_int_04.essence -tests/exhaustive/basic/function_total_int_05/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_int_05/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_int_05/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_int_05/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_int_05/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_int_05/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_int_05/expected/model.eprime -tests/exhaustive/basic/function_total_int_05/function_total_int_05.essence -tests/exhaustive/basic/function_total_int_06/expected/model.eprime -tests/exhaustive/basic/function_total_int_06/function_total_int_06.essence -tests/exhaustive/basic/function_total_int_param/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/function_total_int_param/expected/model-param000001.eprime-param -tests/exhaustive/basic/function_total_int_param/expected/model-param000002-solution000001.solution -tests/exhaustive/basic/function_total_int_param/expected/model-param000002.eprime-param -tests/exhaustive/basic/function_total_int_param/expected/model-param000003-solution000001.solution -tests/exhaustive/basic/function_total_int_param/expected/model-param000003.eprime-param -tests/exhaustive/basic/function_total_int_param/expected/model-param000004-solution000001.solution -tests/exhaustive/basic/function_total_int_param/expected/model-param000004.eprime-param -tests/exhaustive/basic/function_total_int_param/expected/model-param000005-solution000001.solution -tests/exhaustive/basic/function_total_int_param/expected/model-param000005.eprime-param -tests/exhaustive/basic/function_total_int_param/expected/model-param000006-solution000001.solution -tests/exhaustive/basic/function_total_int_param/expected/model-param000006.eprime-param -tests/exhaustive/basic/function_total_int_param/expected/model.eprime -tests/exhaustive/basic/function_total_int_param/function_total_int_param.essence -tests/exhaustive/basic/function_total_int_param/param000001.param -tests/exhaustive/basic/function_total_int_param/param000002.param -tests/exhaustive/basic/function_total_int_param/param000003.param -tests/exhaustive/basic/function_total_int_param/param000004.param -tests/exhaustive/basic/function_total_int_param/param000005.param -tests/exhaustive/basic/function_total_int_param/param000006.param -tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000001.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000002.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000003.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000004.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000005.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_1-solution000006.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_1.eprime -tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000001.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000002.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000003.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000004.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000005.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_2-solution000006.solution -tests/exhaustive/basic/function_total_int_set_01/expected/model_2.eprime -tests/exhaustive/basic/function_total_int_set_01/function_total_int_set_01.essence -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000009.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000010.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000011.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000012.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000013.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000014.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000015.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model-solution000016.solution -tests/exhaustive/basic/function_total_record_01_find/expected/model.eprime -tests/exhaustive/basic/function_total_record_01_find/function_total_record_01.essence -tests/exhaustive/basic/function_total_record_01_param/expected/model-param02-solution000001.solution -tests/exhaustive/basic/function_total_record_01_param/expected/model-param02.eprime-param -tests/exhaustive/basic/function_total_record_01_param/expected/model-param13-solution000001.solution -tests/exhaustive/basic/function_total_record_01_param/expected/model-param13.eprime-param -tests/exhaustive/basic/function_total_record_01_param/expected/model.eprime -tests/exhaustive/basic/function_total_record_01_param/function_total_record_01_param.essence -tests/exhaustive/basic/function_total_record_01_param/param02.param -tests/exhaustive/basic/function_total_record_01_param/param13.param -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000001.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000002.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000003.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000004.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000005.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000006.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000007.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000008.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000009.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000010.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000011.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000012.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000013.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000014.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000015.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model-solution000016.solution -tests/exhaustive/basic/function_total_tuple_01_find/expected/model.eprime -tests/exhaustive/basic/function_total_tuple_01_find/function_total_tuple_01.essence -tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param02-solution000001.solution -tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param02.eprime-param -tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param13-solution000001.solution -tests/exhaustive/basic/function_total_tuple_01_param/expected/model-param13.eprime-param -tests/exhaustive/basic/function_total_tuple_01_param/expected/model.eprime -tests/exhaustive/basic/function_total_tuple_01_param/function_total_tuple_01_param.essence -tests/exhaustive/basic/function_total_tuple_01_param/param02.param -tests/exhaustive/basic/function_total_tuple_01_param/param13.param -tests/exhaustive/basic/function_tuple_injective_aac/expected/model.eprime -tests/exhaustive/basic/function_tuple_injective_aac/function_tuple_injective_aac.essence -tests/exhaustive/basic/function_tuple_injective_attr/expected/model.eprime -tests/exhaustive/basic/function_tuple_injective_attr/function_tuple_injective.essence -tests/exhaustive/basic/heuristic_conflict/expected/model-solution000001.solution -tests/exhaustive/basic/heuristic_conflict/expected/model-solution000002.solution -tests/exhaustive/basic/heuristic_conflict/expected/model-solution000003.solution -tests/exhaustive/basic/heuristic_conflict/expected/model-solution000004.solution -tests/exhaustive/basic/heuristic_conflict/expected/model-solution000005.solution -tests/exhaustive/basic/heuristic_conflict/expected/model-solution000006.solution -tests/exhaustive/basic/heuristic_conflict/expected/model.eprime -tests/exhaustive/basic/heuristic_conflict/heuristic_conflict.essence -tests/exhaustive/basic/heuristic_sdf/expected/model-solution000001.solution -tests/exhaustive/basic/heuristic_sdf/expected/model-solution000002.solution -tests/exhaustive/basic/heuristic_sdf/expected/model-solution000003.solution -tests/exhaustive/basic/heuristic_sdf/expected/model-solution000004.solution -tests/exhaustive/basic/heuristic_sdf/expected/model-solution000005.solution -tests/exhaustive/basic/heuristic_sdf/expected/model-solution000006.solution -tests/exhaustive/basic/heuristic_sdf/expected/model.eprime -tests/exhaustive/basic/heuristic_sdf/heuristic_sdf.essence -tests/exhaustive/basic/heuristic_srf/expected/model-solution000001.solution -tests/exhaustive/basic/heuristic_srf/expected/model-solution000002.solution -tests/exhaustive/basic/heuristic_srf/expected/model-solution000003.solution -tests/exhaustive/basic/heuristic_srf/expected/model-solution000004.solution -tests/exhaustive/basic/heuristic_srf/expected/model-solution000005.solution -tests/exhaustive/basic/heuristic_srf/expected/model-solution000006.solution -tests/exhaustive/basic/heuristic_srf/expected/model.eprime -tests/exhaustive/basic/heuristic_srf/heuristic_srf.essence -tests/exhaustive/basic/heuristic_static/expected/model-solution000001.solution -tests/exhaustive/basic/heuristic_static/expected/model-solution000002.solution -tests/exhaustive/basic/heuristic_static/expected/model-solution000003.solution -tests/exhaustive/basic/heuristic_static/expected/model-solution000004.solution -tests/exhaustive/basic/heuristic_static/expected/model-solution000005.solution -tests/exhaustive/basic/heuristic_static/expected/model-solution000006.solution -tests/exhaustive/basic/heuristic_static/expected/model.eprime -tests/exhaustive/basic/heuristic_static/heuristic_static.essence -tests/exhaustive/basic/int_from_comprehension/1.param -tests/exhaustive/basic/int_from_comprehension/expected/model-1-solution000001.solution -tests/exhaustive/basic/int_from_comprehension/expected/model-1-solution000002.solution -tests/exhaustive/basic/int_from_comprehension/expected/model-1-solution000003.solution -tests/exhaustive/basic/int_from_comprehension/expected/model-1.eprime-param -tests/exhaustive/basic/int_from_comprehension/expected/model.eprime -tests/exhaustive/basic/int_from_comprehension/int_from_comprehension.essence -tests/exhaustive/basic/int_is_fixed/expected/model-solution000001.solution -tests/exhaustive/basic/int_is_fixed/expected/model.eprime -tests/exhaustive/basic/int_is_fixed/int_is_fixed.essence -tests/exhaustive/basic/int_is_free/expected/model-solution000001.solution -tests/exhaustive/basic/int_is_free/expected/model-solution000002.solution -tests/exhaustive/basic/int_is_free/expected/model-solution000003.solution -tests/exhaustive/basic/int_is_free/expected/model-solution000004.solution -tests/exhaustive/basic/int_is_free/expected/model-solution000005.solution -tests/exhaustive/basic/int_is_free/expected/model.eprime -tests/exhaustive/basic/int_is_free/int_is_free.essence -tests/exhaustive/basic/int_is_param/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/int_is_param/expected/model-param000001.eprime-param -tests/exhaustive/basic/int_is_param/expected/model-param000002-solution000001.solution -tests/exhaustive/basic/int_is_param/expected/model-param000002.eprime-param -tests/exhaustive/basic/int_is_param/expected/model-param1-solution000001.solution -tests/exhaustive/basic/int_is_param/expected/model-param1.eprime-param -tests/exhaustive/basic/int_is_param/expected/model-param2-solution000001.solution -tests/exhaustive/basic/int_is_param/expected/model-param2.eprime-param -tests/exhaustive/basic/int_is_param/expected/model.eprime -tests/exhaustive/basic/int_is_param/int_is_param.essence -tests/exhaustive/basic/int_is_param/param000001.param -tests/exhaustive/basic/int_is_param/param000002.param -tests/exhaustive/basic/int_is_param/param1.param -tests/exhaustive/basic/int_is_param/param2.param -tests/exhaustive/basic/int_param_domain_01/a1_b5_c3.param -tests/exhaustive/basic/int_param_domain_01/expected/model-a1_b5_c3-solution000001.solution -tests/exhaustive/basic/int_param_domain_01/expected/model-a1_b5_c3.eprime-param -tests/exhaustive/basic/int_param_domain_01/expected/model.eprime -tests/exhaustive/basic/int_param_domain_01/int_param_domain_01.essence -tests/exhaustive/basic/int_param_domain_02/a1_b5_c3.param -tests/exhaustive/basic/int_param_domain_02/expected/model-a1_b5_c3-solution000001.solution -tests/exhaustive/basic/int_param_domain_02/expected/model-a1_b5_c3.eprime-param -tests/exhaustive/basic/int_param_domain_02/expected/model.eprime -tests/exhaustive/basic/int_param_domain_02/int_param_domain_02.essence -tests/exhaustive/basic/int_param_domain_03/a1_b5_c3.param -tests/exhaustive/basic/int_param_domain_03/expected/model-a1_b5_c3-solution000001.solution -tests/exhaustive/basic/int_param_domain_03/expected/model-a1_b5_c3.eprime-param -tests/exhaustive/basic/int_param_domain_03/expected/model.eprime -tests/exhaustive/basic/int_param_domain_03/int_param_domain_03.essence -tests/exhaustive/basic/int_param_domain_04/a1_b5_c3.param -tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000001.solution -tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000002.solution -tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000003.solution -tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000004.solution -tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3-solution000005.solution -tests/exhaustive/basic/int_param_domain_04/expected/model-a1_b5_c3.eprime-param -tests/exhaustive/basic/int_param_domain_04/expected/model.eprime -tests/exhaustive/basic/int_param_domain_04/int_param_domain_04.essence -tests/exhaustive/basic/letting_shadowing/expected/model-p1-solution000001.solution -tests/exhaustive/basic/letting_shadowing/expected/model-p1.eprime-param -tests/exhaustive/basic/letting_shadowing/expected/model.eprime -tests/exhaustive/basic/letting_shadowing/letting_shadowing.essence -tests/exhaustive/basic/letting_shadowing/p1.param -tests/exhaustive/basic/matrix01_bools/expected/model-solution000001.solution -tests/exhaustive/basic/matrix01_bools/expected/model-solution000002.solution -tests/exhaustive/basic/matrix01_bools/expected/model.eprime -tests/exhaustive/basic/matrix01_bools/matrix01_bools.essence -tests/exhaustive/basic/matrix02_tuple/expected/model-solution000001.solution -tests/exhaustive/basic/matrix02_tuple/expected/model-solution000002.solution -tests/exhaustive/basic/matrix02_tuple/expected/model.eprime -tests/exhaustive/basic/matrix02_tuple/matrix02_tuple.essence -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000002.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000003.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000004.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000005.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000006.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000007.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000008.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000009.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000010.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000011.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000012.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000013.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000014.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000015.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000016.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000017.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000018.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000019.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000020.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000021.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000022.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000023.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000024.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000025.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000026.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000027.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000028.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000029.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000030.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000031.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000032.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000033.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model-solution000034.solution -tests/exhaustive/basic/matrix_atmost_atleast/expected/model.eprime -tests/exhaustive/basic/matrix_atmost_atleast/matrix_atmost_atleast.essence -tests/exhaustive/basic/matrix_comprehension_nested_01/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_comprehension_nested_01/expected/model.eprime -tests/exhaustive/basic/matrix_comprehension_nested_01/matrix_comprehension_nested_01.essence -tests/exhaustive/basic/matrix_freq/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_freq/expected/model-solution000002.solution -tests/exhaustive/basic/matrix_freq/expected/model-solution000003.solution -tests/exhaustive/basic/matrix_freq/expected/model.eprime -tests/exhaustive/basic/matrix_freq/matrix_freq.essence -tests/exhaustive/basic/matrix_hist_01/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_hist_01/expected/model.eprime -tests/exhaustive/basic/matrix_hist_01/matrix_hist_01.essence -tests/exhaustive/basic/matrix_indexing_identical/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_indexing_identical/expected/model-solution000002.solution -tests/exhaustive/basic/matrix_indexing_identical/expected/model-solution000003.solution -tests/exhaustive/basic/matrix_indexing_identical/expected/model.eprime -tests/exhaustive/basic/matrix_indexing_identical/matrix_indexing_identical.essence -tests/exhaustive/basic/matrix_literal_comprehension/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_literal_comprehension/expected/model.eprime -tests/exhaustive/basic/matrix_literal_comprehension/matrix_literal_comprehension.essence -tests/exhaustive/basic/matrix_literal_contains_set/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_literal_contains_set/expected/model.eprime -tests/exhaustive/basic/matrix_literal_contains_set/matrix_literal_contains_set.essence -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000002.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000003.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000004.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000005.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000006.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000007.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000008.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1-solution000009.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_1.eprime -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000002.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000003.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000004.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000005.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000006.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000007.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000008.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2-solution000009.solution -tests/exhaustive/basic/matrix_of_set_01/expected/model_2.eprime -tests/exhaustive/basic/matrix_of_set_01/matrix_of_set_01.essence -tests/exhaustive/basic/matrix_of_set_02/expected-time.txt -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_1.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_2.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_3.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_1_4.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_1.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_2.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_3.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_2_4.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_1.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_2.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_3.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_3_4.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_1.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_2.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_3.eprime -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000002.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000003.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4-solution000004.solution -tests/exhaustive/basic/matrix_of_set_02/expected/model_4_4.eprime -tests/exhaustive/basic/matrix_of_set_02/matrix_of_set_02.essence -tests/exhaustive/basic/matrix_of_set_03_2d/expected-time.txt -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_1.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_2.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_3.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_1_4.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_1.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_2.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_3.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_2_4.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_1.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_2.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_3.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_3_4.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_1.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_2.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_3.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/matrix_of_set_03_2d/expected/model_4_4.eprime -tests/exhaustive/basic/matrix_of_set_03_2d/matrix_of_set_03_2d.essence -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected-time.txt -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_1_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_1_2_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_1_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_1_2_2_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_1_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_1_2_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_1_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_1.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_04_2dLit/expected/model_2_2_2_2.eprime -tests/exhaustive/basic/matrix_of_set_04_2dLit/matrix_of_set_04_2dLit.essence -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected-time.txt -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_1_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_1_2_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_1_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_1_2_2_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_1_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_1_2_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_1_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_1.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/basic/matrix_of_set_05_2dLit/expected/model_2_2_2_2.eprime -tests/exhaustive/basic/matrix_of_set_05_2dLit/matrix_of_set_05_2dLit.essence -tests/exhaustive/basic/matrix_of_tuple_eq/expected/model-solution000001.solution -tests/exhaustive/basic/matrix_of_tuple_eq/expected/model.eprime -tests/exhaustive/basic/matrix_of_tuple_eq/matrix_of_tuple_eq.essence -tests/exhaustive/basic/max_test/2-3.param -tests/exhaustive/basic/max_test/expected/model-2-3-solution000001.solution -tests/exhaustive/basic/max_test/expected/model-2-3.eprime-param -tests/exhaustive/basic/max_test/expected/model.eprime -tests/exhaustive/basic/max_test/max_test.essence -tests/exhaustive/basic/mset01_find/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000005.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000006.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000007.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000008.solution -tests/exhaustive/basic/mset01_find/expected/model_1-solution000009.solution -tests/exhaustive/basic/mset01_find/expected/model_1.eprime -tests/exhaustive/basic/mset01_find/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000005.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000006.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000007.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000008.solution -tests/exhaustive/basic/mset01_find/expected/model_2-solution000009.solution -tests/exhaustive/basic/mset01_find/expected/model_2.eprime -tests/exhaustive/basic/mset01_find/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000005.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000006.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000007.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000008.solution -tests/exhaustive/basic/mset01_find/expected/model_3-solution000009.solution -tests/exhaustive/basic/mset01_find/expected/model_3.eprime -tests/exhaustive/basic/mset01_find/mset01.essence -tests/exhaustive/basic/mset01_param/expected-time.txt -tests/exhaustive/basic/mset01_param/expected/model_1_1-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_1-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_1-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_1-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_1-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_1-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_1.eprime -tests/exhaustive/basic/mset01_param/expected/model_1_2-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_2-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_2-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_2-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_2-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_2-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_2.eprime -tests/exhaustive/basic/mset01_param/expected/model_1_3-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_3-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_3-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_3-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_3-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_1_3-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_1_3.eprime -tests/exhaustive/basic/mset01_param/expected/model_2_1-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_1-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_1-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_1-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_1-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_1-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_1.eprime -tests/exhaustive/basic/mset01_param/expected/model_2_2-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_2-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_2-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_2-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_2-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_2-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_2.eprime -tests/exhaustive/basic/mset01_param/expected/model_2_3-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_3-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_3-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_3-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_3-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_2_3-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_2_3.eprime -tests/exhaustive/basic/mset01_param/expected/model_3_1-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_1-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_1-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_1-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_1-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_1-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_1.eprime -tests/exhaustive/basic/mset01_param/expected/model_3_2-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_2-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_2-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_2-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_2-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_2-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_2.eprime -tests/exhaustive/basic/mset01_param/expected/model_3_3-param1-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_3-param1.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_3-param4-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_3-param4.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_3-param7-solution000001.solution -tests/exhaustive/basic/mset01_param/expected/model_3_3-param7.eprime-param -tests/exhaustive/basic/mset01_param/expected/model_3_3.eprime -tests/exhaustive/basic/mset01_param/mset01_param.essence -tests/exhaustive/basic/mset01_param/param1.param -tests/exhaustive/basic/mset01_param/param4.param -tests/exhaustive/basic/mset01_param/param7.param -tests/exhaustive/basic/mset02/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000005.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000006.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000007.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000008.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000009.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000010.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000011.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000012.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000013.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000014.solution -tests/exhaustive/basic/mset02/expected/model_1-solution000015.solution -tests/exhaustive/basic/mset02/expected/model_1.eprime -tests/exhaustive/basic/mset02/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000005.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000006.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000007.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000008.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000009.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000010.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000011.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000012.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000013.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000014.solution -tests/exhaustive/basic/mset02/expected/model_2-solution000015.solution -tests/exhaustive/basic/mset02/expected/model_2.eprime -tests/exhaustive/basic/mset02/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000005.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000006.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000007.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000008.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000009.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000010.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000011.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000012.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000013.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000014.solution -tests/exhaustive/basic/mset02/expected/model_3-solution000015.solution -tests/exhaustive/basic/mset02/expected/model_3.eprime -tests/exhaustive/basic/mset02/mset02.essence -tests/exhaustive/basic/mset03_1/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000005.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000006.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000007.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000008.solution -tests/exhaustive/basic/mset03_1/expected/model_1-solution000009.solution -tests/exhaustive/basic/mset03_1/expected/model_1.eprime -tests/exhaustive/basic/mset03_1/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000005.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000006.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000007.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000008.solution -tests/exhaustive/basic/mset03_1/expected/model_2-solution000009.solution -tests/exhaustive/basic/mset03_1/expected/model_2.eprime -tests/exhaustive/basic/mset03_1/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000005.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000006.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000007.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000008.solution -tests/exhaustive/basic/mset03_1/expected/model_3-solution000009.solution -tests/exhaustive/basic/mset03_1/expected/model_3.eprime -tests/exhaustive/basic/mset03_1/mset03.essence -tests/exhaustive/basic/mset03_2/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000005.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000006.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000007.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000008.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000009.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000010.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000011.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000012.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000013.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000014.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000015.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000016.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000017.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000018.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000019.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000020.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000021.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000022.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000023.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000024.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000025.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000026.solution -tests/exhaustive/basic/mset03_2/expected/model_1-solution000027.solution -tests/exhaustive/basic/mset03_2/expected/model_1.eprime -tests/exhaustive/basic/mset03_2/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000005.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000006.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000007.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000008.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000009.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000010.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000011.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000012.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000013.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000014.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000015.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000016.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000017.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000018.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000019.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000020.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000021.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000022.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000023.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000024.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000025.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000026.solution -tests/exhaustive/basic/mset03_2/expected/model_2-solution000027.solution -tests/exhaustive/basic/mset03_2/expected/model_2.eprime -tests/exhaustive/basic/mset03_2/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000005.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000006.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000007.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000008.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000009.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000010.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000011.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000012.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000013.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000014.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000015.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000016.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000017.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000018.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000019.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000020.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000021.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000022.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000023.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000024.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000025.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000026.solution -tests/exhaustive/basic/mset03_2/expected/model_3-solution000027.solution -tests/exhaustive/basic/mset03_2/expected/model_3.eprime -tests/exhaustive/basic/mset03_2/mset03_2.essence -tests/exhaustive/basic/mset04/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset04/expected/model_1.eprime -tests/exhaustive/basic/mset04/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset04/expected/model_2.eprime -tests/exhaustive/basic/mset04/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset04/expected/model_3.eprime -tests/exhaustive/basic/mset04/mset04.essence -tests/exhaustive/basic/mset05/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset05/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset05/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset05/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset05/expected/model_1-solution000005.solution -tests/exhaustive/basic/mset05/expected/model_1-solution000006.solution -tests/exhaustive/basic/mset05/expected/model_1.eprime -tests/exhaustive/basic/mset05/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset05/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset05/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset05/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset05/expected/model_2-solution000005.solution -tests/exhaustive/basic/mset05/expected/model_2-solution000006.solution -tests/exhaustive/basic/mset05/expected/model_2.eprime -tests/exhaustive/basic/mset05/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset05/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset05/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset05/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset05/expected/model_3-solution000005.solution -tests/exhaustive/basic/mset05/expected/model_3-solution000006.solution -tests/exhaustive/basic/mset05/expected/model_3.eprime -tests/exhaustive/basic/mset05/mset05.essence -tests/exhaustive/basic/mset06_1/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset06_1/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset06_1/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset06_1/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset06_1/expected/model_1.eprime -tests/exhaustive/basic/mset06_1/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset06_1/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset06_1/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset06_1/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset06_1/expected/model_2.eprime -tests/exhaustive/basic/mset06_1/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset06_1/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset06_1/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset06_1/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset06_1/expected/model_3.eprime -tests/exhaustive/basic/mset06_1/mset06.essence -tests/exhaustive/basic/mset06_2/expected/model_1-solution000001.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000002.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000003.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000004.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000005.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000006.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000007.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000008.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000009.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000010.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000011.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000012.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000013.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000014.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000015.solution -tests/exhaustive/basic/mset06_2/expected/model_1-solution000016.solution -tests/exhaustive/basic/mset06_2/expected/model_1.eprime -tests/exhaustive/basic/mset06_2/expected/model_2-solution000001.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000002.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000003.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000004.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000005.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000006.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000007.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000008.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000009.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000010.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000011.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000012.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000013.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000014.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000015.solution -tests/exhaustive/basic/mset06_2/expected/model_2-solution000016.solution -tests/exhaustive/basic/mset06_2/expected/model_2.eprime -tests/exhaustive/basic/mset06_2/expected/model_3-solution000001.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000002.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000003.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000004.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000005.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000006.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000007.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000008.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000009.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000010.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000011.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000012.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000013.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000014.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000015.solution -tests/exhaustive/basic/mset06_2/expected/model_3-solution000016.solution -tests/exhaustive/basic/mset06_2/expected/model_3.eprime -tests/exhaustive/basic/mset06_2/mset06_2.essence -tests/exhaustive/basic/mset07/a3.param -tests/exhaustive/basic/mset07/expected/model_1-a3-solution000001.solution -tests/exhaustive/basic/mset07/expected/model_1-a3-solution000002.solution -tests/exhaustive/basic/mset07/expected/model_1-a3-solution000003.solution -tests/exhaustive/basic/mset07/expected/model_1-a3-solution000004.solution -tests/exhaustive/basic/mset07/expected/model_1-a3-solution000005.solution -tests/exhaustive/basic/mset07/expected/model_1-a3-solution000006.solution -tests/exhaustive/basic/mset07/expected/model_1-a3.eprime-param -tests/exhaustive/basic/mset07/expected/model_1.eprime -tests/exhaustive/basic/mset07/expected/model_2-a3-solution000001.solution -tests/exhaustive/basic/mset07/expected/model_2-a3-solution000002.solution -tests/exhaustive/basic/mset07/expected/model_2-a3-solution000003.solution -tests/exhaustive/basic/mset07/expected/model_2-a3-solution000004.solution -tests/exhaustive/basic/mset07/expected/model_2-a3-solution000005.solution -tests/exhaustive/basic/mset07/expected/model_2-a3-solution000006.solution -tests/exhaustive/basic/mset07/expected/model_2-a3.eprime-param -tests/exhaustive/basic/mset07/expected/model_2.eprime -tests/exhaustive/basic/mset07/expected/model_3-a3-solution000001.solution -tests/exhaustive/basic/mset07/expected/model_3-a3-solution000002.solution -tests/exhaustive/basic/mset07/expected/model_3-a3-solution000003.solution -tests/exhaustive/basic/mset07/expected/model_3-a3-solution000004.solution -tests/exhaustive/basic/mset07/expected/model_3-a3-solution000005.solution -tests/exhaustive/basic/mset07/expected/model_3-a3-solution000006.solution -tests/exhaustive/basic/mset07/expected/model_3-a3.eprime-param -tests/exhaustive/basic/mset07/expected/model_3.eprime -tests/exhaustive/basic/mset07/mset07.essence -tests/exhaustive/basic/name-reuse/expected-time.txt -tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_1_1.eprime -tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_1_2.eprime -tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_1_3-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_1_3.eprime -tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_1_4-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_1_4.eprime -tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_2_1.eprime -tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_2_2.eprime -tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_2_3-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_2_3.eprime -tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_2_4-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_2_4.eprime -tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_3_1-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_3_1.eprime -tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_3_2-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_3_2.eprime -tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_3_3-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_3_3.eprime -tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_3_4-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_3_4.eprime -tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_4_1-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_4_1.eprime -tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_4_2-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_4_2.eprime -tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_4_3-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_4_3.eprime -tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/name-reuse/expected/model_4_4-solution000002.solution -tests/exhaustive/basic/name-reuse/expected/model_4_4.eprime -tests/exhaustive/basic/name-reuse/name-reuse.essence -tests/exhaustive/basic/param-min/mset/expected/model-test-solution000001.solution -tests/exhaustive/basic/param-min/mset/expected/model-test.eprime-param -tests/exhaustive/basic/param-min/mset/expected/model.eprime -tests/exhaustive/basic/param-min/mset/test.essence -tests/exhaustive/basic/param-min/mset/test.param -tests/exhaustive/basic/param-min/set/expected/model-test-solution000001.solution -tests/exhaustive/basic/param-min/set/expected/model-test.eprime-param -tests/exhaustive/basic/param-min/set/expected/model.eprime -tests/exhaustive/basic/param-min/set/test.essence -tests/exhaustive/basic/param-min/set/test.param -tests/exhaustive/basic/parameterEq/2.param -tests/exhaustive/basic/parameterEq/expected/model-2-solution000001.solution -tests/exhaustive/basic/parameterEq/expected/model-2.eprime-param -tests/exhaustive/basic/parameterEq/expected/model.eprime -tests/exhaustive/basic/parameterEq/parameterEq.essence -tests/exhaustive/basic/partition_01/expected/model_1-solution000001.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000002.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000003.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000004.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000005.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000006.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000007.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000008.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000009.solution -tests/exhaustive/basic/partition_01/expected/model_1-solution000010.solution -tests/exhaustive/basic/partition_01/expected/model_1.eprime -tests/exhaustive/basic/partition_01/expected/model_2-solution000001.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000002.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000003.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000004.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000005.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000006.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000007.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000008.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000009.solution -tests/exhaustive/basic/partition_01/expected/model_2-solution000010.solution -tests/exhaustive/basic/partition_01/expected/model_2.eprime -tests/exhaustive/basic/partition_01/expected/model_3-solution000001.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000002.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000003.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000004.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000005.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000006.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000007.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000008.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000009.solution -tests/exhaustive/basic/partition_01/expected/model_3-solution000010.solution -tests/exhaustive/basic/partition_01/expected/model_3.eprime -tests/exhaustive/basic/partition_01/partition_01.essence -tests/exhaustive/basic/partition_02/expected-time.txt -tests/exhaustive/basic/partition_02/expected/model_1-solution000001.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000002.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000003.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000004.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000005.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000006.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000007.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000008.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000009.solution -tests/exhaustive/basic/partition_02/expected/model_1-solution000010.solution -tests/exhaustive/basic/partition_02/expected/model_1.eprime -tests/exhaustive/basic/partition_02/expected/model_2-solution000001.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000002.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000003.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000004.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000005.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000006.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000007.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000008.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000009.solution -tests/exhaustive/basic/partition_02/expected/model_2-solution000010.solution -tests/exhaustive/basic/partition_02/expected/model_2.eprime -tests/exhaustive/basic/partition_02/expected/model_3-solution000001.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000002.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000003.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000004.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000005.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000006.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000007.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000008.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000009.solution -tests/exhaustive/basic/partition_02/expected/model_3-solution000010.solution -tests/exhaustive/basic/partition_02/expected/model_3.eprime -tests/exhaustive/basic/partition_02/expected/model_4-solution000001.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000002.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000003.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000004.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000005.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000006.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000007.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000008.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000009.solution -tests/exhaustive/basic/partition_02/expected/model_4-solution000010.solution -tests/exhaustive/basic/partition_02/expected/model_4.eprime -tests/exhaustive/basic/partition_02/partition_02.essence -tests/exhaustive/basic/partition_03/expected/model_1-solution000001.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000002.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000003.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000004.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000005.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000006.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000007.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000008.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000009.solution -tests/exhaustive/basic/partition_03/expected/model_1-solution000010.solution -tests/exhaustive/basic/partition_03/expected/model_1.eprime -tests/exhaustive/basic/partition_03/expected/model_2-solution000001.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000002.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000003.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000004.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000005.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000006.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000007.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000008.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000009.solution -tests/exhaustive/basic/partition_03/expected/model_2-solution000010.solution -tests/exhaustive/basic/partition_03/expected/model_2.eprime -tests/exhaustive/basic/partition_03/expected/model_3-solution000001.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000002.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000003.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000004.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000005.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000006.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000007.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000008.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000009.solution -tests/exhaustive/basic/partition_03/expected/model_3-solution000010.solution -tests/exhaustive/basic/partition_03/expected/model_3.eprime -tests/exhaustive/basic/partition_03/partition_03.essence -tests/exhaustive/basic/partition_05_1/additional-arguments.txt -tests/exhaustive/basic/partition_05_1/expected-time.txt -tests/exhaustive/basic/partition_05_1/expected/model_1-solution000001.solution -tests/exhaustive/basic/partition_05_1/expected/model_1.eprime -tests/exhaustive/basic/partition_05_1/expected/model_2-solution000001.solution -tests/exhaustive/basic/partition_05_1/expected/model_2.eprime -tests/exhaustive/basic/partition_05_1/expected/model_3-solution000001.solution -tests/exhaustive/basic/partition_05_1/expected/model_3.eprime -tests/exhaustive/basic/partition_05_1/expected/model_4-solution000001.solution -tests/exhaustive/basic/partition_05_1/expected/model_4.eprime -tests/exhaustive/basic/partition_05_1/partition_05_1.essence -tests/exhaustive/basic/partition_05_2/additional-arguments.txt -tests/exhaustive/basic/partition_05_2/expected-time.txt -tests/exhaustive/basic/partition_05_2/expected/model_1-solution000001.solution -tests/exhaustive/basic/partition_05_2/expected/model_1.eprime -tests/exhaustive/basic/partition_05_2/expected/model_2-solution000001.solution -tests/exhaustive/basic/partition_05_2/expected/model_2.eprime -tests/exhaustive/basic/partition_05_2/expected/model_3-solution000001.solution -tests/exhaustive/basic/partition_05_2/expected/model_3.eprime -tests/exhaustive/basic/partition_05_2/expected/model_4-solution000001.solution -tests/exhaustive/basic/partition_05_2/expected/model_4.eprime -tests/exhaustive/basic/partition_05_2/partition_05_2.essence -tests/exhaustive/basic/partition_06/expected-time.txt -tests/exhaustive/basic/partition_06/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_1_1.eprime -tests/exhaustive/basic/partition_06/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_1_2.eprime -tests/exhaustive/basic/partition_06/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_1_3-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_1_3-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_1_3.eprime -tests/exhaustive/basic/partition_06/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_1_4-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_1_4-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_1_4.eprime -tests/exhaustive/basic/partition_06/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_2_1.eprime -tests/exhaustive/basic/partition_06/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_2_2.eprime -tests/exhaustive/basic/partition_06/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_2_3-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_2_3-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_2_3.eprime -tests/exhaustive/basic/partition_06/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_2_4-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_2_4-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_2_4.eprime -tests/exhaustive/basic/partition_06/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_3_1-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_3_1-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_3_1.eprime -tests/exhaustive/basic/partition_06/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_3_2-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_3_2-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_3_2.eprime -tests/exhaustive/basic/partition_06/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_3_3-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_3_3-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_3_3.eprime -tests/exhaustive/basic/partition_06/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_3_4-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_3_4-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_3_4.eprime -tests/exhaustive/basic/partition_06/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_4_1-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_4_1-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_4_1.eprime -tests/exhaustive/basic/partition_06/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_4_2-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_4_2-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_4_2.eprime -tests/exhaustive/basic/partition_06/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_4_3-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_4_3-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_4_3.eprime -tests/exhaustive/basic/partition_06/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/partition_06/expected/model_4_4-solution000002.solution -tests/exhaustive/basic/partition_06/expected/model_4_4-solution000003.solution -tests/exhaustive/basic/partition_06/expected/model_4_4.eprime -tests/exhaustive/basic/partition_06/partition_06.essence -tests/exhaustive/basic/partition_07_param/expected/model-given-solution000001.solution -tests/exhaustive/basic/partition_07_param/expected/model-given.eprime-param -tests/exhaustive/basic/partition_07_param/expected/model.eprime -tests/exhaustive/basic/partition_07_param/given.param -tests/exhaustive/basic/partition_07_param/spec.essence -tests/exhaustive/basic/partition_08_param/expected/model-given-solution000001.solution -tests/exhaustive/basic/partition_08_param/expected/model-given.eprime-param -tests/exhaustive/basic/partition_08_param/expected/model.eprime -tests/exhaustive/basic/partition_08_param/given.param -tests/exhaustive/basic/partition_08_param/spec.essence -tests/exhaustive/basic/partition_lit_01/expected/model-solution000001.solution -tests/exhaustive/basic/partition_lit_01/expected/model.eprime -tests/exhaustive/basic/partition_lit_01/partition_lit_01.essence -tests/exhaustive/basic/powerSetComprehensionDirect/expected-time.txt -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_1.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_2.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_3.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_1_4.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_1.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_2.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_3.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_2_4.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_1.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_2.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_3.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_3_4.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_1.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_2.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_3.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000002.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000003.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000004.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000005.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p-solution000006.solution -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4-p.eprime-param -tests/exhaustive/basic/powerSetComprehensionDirect/expected/model_4_4.eprime -tests/exhaustive/basic/powerSetComprehensionDirect/p.param -tests/exhaustive/basic/powerSetComprehensionDirect/pow.essence -tests/exhaustive/basic/powerSetComprehensionPat/expected-time.txt -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_1.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_2.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_3.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_1_4.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_1.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_2.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_3.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_2_4.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_1.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_2.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_3.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_3_4.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_1.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_2.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_3.eprime -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/powerSetComprehensionPat/expected/model_4_4.eprime -tests/exhaustive/basic/powerSetComprehensionPat/powerSetComprehension.essence -tests/exhaustive/basic/record00/expected/model-solution000001.solution -tests/exhaustive/basic/record00/expected/model.eprime -tests/exhaustive/basic/record00/record00.essence -tests/exhaustive/basic/record01/expected-time.txt -tests/exhaustive/basic/record01/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000004.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000005.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000006.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000007.solution -tests/exhaustive/basic/record01/expected/model_1_1-solution000008.solution -tests/exhaustive/basic/record01/expected/model_1_1.eprime -tests/exhaustive/basic/record01/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000004.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000005.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000006.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000007.solution -tests/exhaustive/basic/record01/expected/model_1_2-solution000008.solution -tests/exhaustive/basic/record01/expected/model_1_2.eprime -tests/exhaustive/basic/record01/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000004.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000005.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000006.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000007.solution -tests/exhaustive/basic/record01/expected/model_2_1-solution000008.solution -tests/exhaustive/basic/record01/expected/model_2_1.eprime -tests/exhaustive/basic/record01/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000004.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000005.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000006.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000007.solution -tests/exhaustive/basic/record01/expected/model_2_2-solution000008.solution -tests/exhaustive/basic/record01/expected/model_2_2.eprime -tests/exhaustive/basic/record01/record01.essence -tests/exhaustive/basic/reflexive_rel/expected/model-solution000001.solution -tests/exhaustive/basic/reflexive_rel/expected/model-solution000002.solution -tests/exhaustive/basic/reflexive_rel/expected/model-solution000003.solution -tests/exhaustive/basic/reflexive_rel/expected/model-solution000004.solution -tests/exhaustive/basic/reflexive_rel/expected/model.eprime -tests/exhaustive/basic/reflexive_rel/reflexive_rel.essence -tests/exhaustive/basic/relation01/expected/model-solution000001.solution -tests/exhaustive/basic/relation01/expected/model-solution000002.solution -tests/exhaustive/basic/relation01/expected/model-solution000003.solution -tests/exhaustive/basic/relation01/expected/model-solution000004.solution -tests/exhaustive/basic/relation01/expected/model-solution000005.solution -tests/exhaustive/basic/relation01/expected/model-solution000006.solution -tests/exhaustive/basic/relation01/expected/model-solution000007.solution -tests/exhaustive/basic/relation01/expected/model-solution000008.solution -tests/exhaustive/basic/relation01/expected/model-solution000009.solution -tests/exhaustive/basic/relation01/expected/model-solution000010.solution -tests/exhaustive/basic/relation01/expected/model-solution000011.solution -tests/exhaustive/basic/relation01/expected/model-solution000012.solution -tests/exhaustive/basic/relation01/expected/model-solution000013.solution -tests/exhaustive/basic/relation01/expected/model-solution000014.solution -tests/exhaustive/basic/relation01/expected/model-solution000015.solution -tests/exhaustive/basic/relation01/expected/model-solution000016.solution -tests/exhaustive/basic/relation01/expected/model.eprime -tests/exhaustive/basic/relation01/relation01.essence -tests/exhaustive/basic/relation02/expected/model-param000001-solution000001.solution -tests/exhaustive/basic/relation02/expected/model-param000001.eprime-param -tests/exhaustive/basic/relation02/expected/model.eprime -tests/exhaustive/basic/relation02/param000001.param -tests/exhaustive/basic/relation02/relation02.essence -tests/exhaustive/basic/relation03_1/expected/model-solution000001.solution -tests/exhaustive/basic/relation03_1/expected/model-solution000002.solution -tests/exhaustive/basic/relation03_1/expected/model-solution000003.solution -tests/exhaustive/basic/relation03_1/expected/model-solution000004.solution -tests/exhaustive/basic/relation03_1/expected/model.eprime -tests/exhaustive/basic/relation03_1/relation03.essence -tests/exhaustive/basic/relation03_2/expected/model-solution000001.solution -tests/exhaustive/basic/relation03_2/expected/model-solution000002.solution -tests/exhaustive/basic/relation03_2/expected/model-solution000003.solution -tests/exhaustive/basic/relation03_2/expected/model-solution000004.solution -tests/exhaustive/basic/relation03_2/expected/model.eprime -tests/exhaustive/basic/relation03_2/relation03_2.essence -tests/exhaustive/basic/relation04_find/expected/model-solution000001.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000002.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000003.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000004.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000005.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000006.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000007.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000008.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000009.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000010.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000011.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000012.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000013.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000014.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000015.solution -tests/exhaustive/basic/relation04_find/expected/model-solution000016.solution -tests/exhaustive/basic/relation04_find/expected/model.eprime -tests/exhaustive/basic/relation04_find/relation04.essence -tests/exhaustive/basic/relation04_param/expected-time.txt -tests/exhaustive/basic/relation04_param/expected/model_1_1-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_1_1-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_1_1.eprime -tests/exhaustive/basic/relation04_param/expected/model_1_2-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_1_2-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_1_2.eprime -tests/exhaustive/basic/relation04_param/expected/model_1_3-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_1_3-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_1_3.eprime -tests/exhaustive/basic/relation04_param/expected/model_1_4-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_1_4-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_1_4.eprime -tests/exhaustive/basic/relation04_param/expected/model_2_1-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_2_1-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_2_1.eprime -tests/exhaustive/basic/relation04_param/expected/model_2_2-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_2_2-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_2_2.eprime -tests/exhaustive/basic/relation04_param/expected/model_2_3-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_2_3-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_2_3.eprime -tests/exhaustive/basic/relation04_param/expected/model_2_4-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_2_4-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_2_4.eprime -tests/exhaustive/basic/relation04_param/expected/model_3_1-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_3_1-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_3_1.eprime -tests/exhaustive/basic/relation04_param/expected/model_3_2-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_3_2-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_3_2.eprime -tests/exhaustive/basic/relation04_param/expected/model_3_3-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_3_3-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_3_3.eprime -tests/exhaustive/basic/relation04_param/expected/model_3_4-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_3_4-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_3_4.eprime -tests/exhaustive/basic/relation04_param/expected/model_4_1-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_4_1-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_4_1.eprime -tests/exhaustive/basic/relation04_param/expected/model_4_2-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_4_2-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_4_2.eprime -tests/exhaustive/basic/relation04_param/expected/model_4_3-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_4_3-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_4_3.eprime -tests/exhaustive/basic/relation04_param/expected/model_4_4-param4-solution000001.solution -tests/exhaustive/basic/relation04_param/expected/model_4_4-param4.eprime-param -tests/exhaustive/basic/relation04_param/expected/model_4_4.eprime -tests/exhaustive/basic/relation04_param/param4.param -tests/exhaustive/basic/relation04_param/relation04_param.essence -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000001.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000002.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000003.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000004.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000005.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000006.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000007.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000008.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000009.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000010.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000011.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000012.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000013.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000014.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1-solution000015.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_1.eprime -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000001.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000002.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000003.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000004.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000005.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000006.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000007.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000008.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000009.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000010.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000011.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000012.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000013.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000014.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2-solution000015.solution -tests/exhaustive/basic/relation05_set_fixed_direct/expected/model_2.eprime -tests/exhaustive/basic/relation05_set_fixed_direct/relation05_set_fixed.essence -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000001.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000002.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000003.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000004.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000005.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000006.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000007.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000008.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000009.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000010.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000011.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000012.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000013.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000014.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1-solution000015.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_1.eprime -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000001.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000002.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000003.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000004.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000005.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000006.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000007.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000008.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000009.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000010.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000011.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000012.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000013.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000014.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2-solution000015.solution -tests/exhaustive/basic/relation05_set_fixed_setty/expected/model_2.eprime -tests/exhaustive/basic/relation05_set_fixed_setty/relation05_set_fixed_setty.essence -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000001.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000002.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000003.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000004.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000005.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000006.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000007.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000008.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000009.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000010.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000011.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000012.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000013.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000014.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000015.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000016.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000017.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000018.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000019.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000020.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000021.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000022.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000023.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000024.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000025.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000026.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000027.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000028.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000029.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000030.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000031.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000032.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000033.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000034.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1-solution000035.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_1.eprime -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000001.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000002.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000003.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000004.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000005.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000006.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000007.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000008.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000009.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000010.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000011.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000012.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000013.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000014.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000015.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000016.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000017.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000018.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000019.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000020.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000021.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000022.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000023.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000024.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000025.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000026.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000027.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000028.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000029.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000030.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000031.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000032.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000033.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000034.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2-solution000035.solution -tests/exhaustive/basic/relation06_set_bounded_direct/expected/model_2.eprime -tests/exhaustive/basic/relation06_set_bounded_direct/relation06_set_bounded.essence -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000001.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000002.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000003.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000004.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000005.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000006.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000007.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000008.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000009.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000010.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000011.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000012.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000013.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000014.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000015.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000016.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000017.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000018.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000019.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000020.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000021.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000022.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000023.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000024.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000025.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000026.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000027.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000028.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000029.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000030.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000031.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000032.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000033.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000034.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1-solution000035.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_1.eprime -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000001.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000002.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000003.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000004.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000005.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000006.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000007.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000008.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000009.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000010.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000011.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000012.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000013.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000014.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000015.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000016.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000017.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000018.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000019.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000020.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000021.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000022.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000023.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000024.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000025.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000026.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000027.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000028.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000029.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000030.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000031.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000032.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000033.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000034.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2-solution000035.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_2.eprime -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000001.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000002.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000003.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000004.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000005.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000006.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000007.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000008.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000009.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000010.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000011.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000012.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000013.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000014.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000015.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000016.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000017.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000018.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000019.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000020.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000021.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000022.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000023.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000024.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000025.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000026.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000027.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000028.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000029.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000030.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000031.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000032.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000033.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000034.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3-solution000035.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_3.eprime -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000001.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000002.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000003.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000004.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000005.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000006.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000007.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000008.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000009.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000010.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000011.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000012.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000013.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000014.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000015.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000016.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000017.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000018.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000019.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000020.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000021.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000022.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000023.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000024.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000025.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000026.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000027.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000028.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000029.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000030.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000031.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000032.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000033.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000034.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4-solution000035.solution -tests/exhaustive/basic/relation06_set_bounded_setty/expected/model_4.eprime -tests/exhaustive/basic/relation06_set_bounded_setty/relation06_set_bounded_setty.essence -tests/exhaustive/basic/relation07_connex/expected/model-solution000001.solution -tests/exhaustive/basic/relation07_connex/expected/model.eprime -tests/exhaustive/basic/relation07_connex/relation07_connex.essence -tests/exhaustive/basic/sequence01/expected/model-solution000001.solution -tests/exhaustive/basic/sequence01/expected/model-solution000002.solution -tests/exhaustive/basic/sequence01/expected/model-solution000003.solution -tests/exhaustive/basic/sequence01/expected/model-solution000004.solution -tests/exhaustive/basic/sequence01/expected/model-solution000005.solution -tests/exhaustive/basic/sequence01/expected/model-solution000006.solution -tests/exhaustive/basic/sequence01/expected/model-solution000007.solution -tests/exhaustive/basic/sequence01/expected/model-solution000008.solution -tests/exhaustive/basic/sequence01/expected/model-solution000009.solution -tests/exhaustive/basic/sequence01/expected/model.eprime -tests/exhaustive/basic/sequence01/sequence01.essence -tests/exhaustive/basic/sequence02/expected/model-solution000001.solution -tests/exhaustive/basic/sequence02/expected/model-solution000002.solution -tests/exhaustive/basic/sequence02/expected/model-solution000003.solution -tests/exhaustive/basic/sequence02/expected/model-solution000004.solution -tests/exhaustive/basic/sequence02/expected/model-solution000005.solution -tests/exhaustive/basic/sequence02/expected/model-solution000006.solution -tests/exhaustive/basic/sequence02/expected/model-solution000007.solution -tests/exhaustive/basic/sequence02/expected/model-solution000008.solution -tests/exhaustive/basic/sequence02/expected/model-solution000009.solution -tests/exhaustive/basic/sequence02/expected/model-solution000010.solution -tests/exhaustive/basic/sequence02/expected/model-solution000011.solution -tests/exhaustive/basic/sequence02/expected/model-solution000012.solution -tests/exhaustive/basic/sequence02/expected/model-solution000013.solution -tests/exhaustive/basic/sequence02/expected/model.eprime -tests/exhaustive/basic/sequence02/sequence02.essence -tests/exhaustive/basic/sequence03/expected/model-solution000001.solution -tests/exhaustive/basic/sequence03/expected/model-solution000002.solution -tests/exhaustive/basic/sequence03/expected/model-solution000003.solution -tests/exhaustive/basic/sequence03/expected/model-solution000004.solution -tests/exhaustive/basic/sequence03/expected/model-solution000005.solution -tests/exhaustive/basic/sequence03/expected/model-solution000006.solution -tests/exhaustive/basic/sequence03/expected/model-solution000007.solution -tests/exhaustive/basic/sequence03/expected/model-solution000008.solution -tests/exhaustive/basic/sequence03/expected/model-solution000009.solution -tests/exhaustive/basic/sequence03/expected/model-solution000010.solution -tests/exhaustive/basic/sequence03/expected/model-solution000011.solution -tests/exhaustive/basic/sequence03/expected/model-solution000012.solution -tests/exhaustive/basic/sequence03/expected/model.eprime -tests/exhaustive/basic/sequence03/sequence03.essence -tests/exhaustive/basic/sequence04/expected/model-solution000001.solution -tests/exhaustive/basic/sequence04/expected/model-solution000002.solution -tests/exhaustive/basic/sequence04/expected/model-solution000003.solution -tests/exhaustive/basic/sequence04/expected/model-solution000004.solution -tests/exhaustive/basic/sequence04/expected/model-solution000005.solution -tests/exhaustive/basic/sequence04/expected/model.eprime -tests/exhaustive/basic/sequence04/sequence04.essence -tests/exhaustive/basic/sequence05/expected/model-solution000001.solution -tests/exhaustive/basic/sequence05/expected/model-solution000002.solution -tests/exhaustive/basic/sequence05/expected/model-solution000003.solution -tests/exhaustive/basic/sequence05/expected/model-solution000004.solution -tests/exhaustive/basic/sequence05/expected/model.eprime -tests/exhaustive/basic/sequence05/sequence05.essence -tests/exhaustive/basic/sequence_empty_01/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_empty_01/expected/model.eprime -tests/exhaustive/basic/sequence_empty_01/seq.essence -tests/exhaustive/basic/sequence_empty_02/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_empty_02/expected/model.eprime -tests/exhaustive/basic/sequence_empty_02/seq.essence -tests/exhaustive/basic/sequence_empty_03/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_empty_03/expected/model.eprime -tests/exhaustive/basic/sequence_empty_03/seq.essence -tests/exhaustive/basic/sequence_empty_04/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_empty_04/expected/model.eprime -tests/exhaustive/basic/sequence_empty_04/seq.essence -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000002.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000003.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000004.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000005.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000006.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000007.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000008.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000009.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000010.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000011.solution -tests/exhaustive/basic/sequence_injective_01/expected/model-solution000012.solution -tests/exhaustive/basic/sequence_injective_01/expected/model.eprime -tests/exhaustive/basic/sequence_injective_01/sequence.essence -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000002.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000003.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000004.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000005.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000006.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000007.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000008.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000009.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000010.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000011.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000012.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000013.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000014.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000015.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000016.solution -tests/exhaustive/basic/sequence_injective_02/expected/model-solution000017.solution -tests/exhaustive/basic/sequence_injective_02/expected/model.eprime -tests/exhaustive/basic/sequence_injective_02/sequence.essence -tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000002.solution -tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000003.solution -tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000004.solution -tests/exhaustive/basic/sequence_subseq_dups/expected/model-solution000005.solution -tests/exhaustive/basic/sequence_subseq_dups/expected/model.eprime -tests/exhaustive/basic/sequence_subseq_dups/seq.essence -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000002.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000003.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000004.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000005.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000006.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model-solution000007.solution -tests/exhaustive/basic/sequence_subseq_nodups/expected/model.eprime -tests/exhaustive/basic/sequence_subseq_nodups/seq.essence -tests/exhaustive/basic/sequence_substr/expected/model-solution000001.solution -tests/exhaustive/basic/sequence_substr/expected/model-solution000002.solution -tests/exhaustive/basic/sequence_substr/expected/model-solution000003.solution -tests/exhaustive/basic/sequence_substr/expected/model-solution000004.solution -tests/exhaustive/basic/sequence_substr/expected/model-solution000005.solution -tests/exhaustive/basic/sequence_substr/expected/model-solution000006.solution -tests/exhaustive/basic/sequence_substr/expected/model.eprime -tests/exhaustive/basic/sequence_substr/seq.essence -tests/exhaustive/basic/set01_1/expected/model_1-solution000001.solution -tests/exhaustive/basic/set01_1/expected/model_1-solution000002.solution -tests/exhaustive/basic/set01_1/expected/model_1-solution000003.solution -tests/exhaustive/basic/set01_1/expected/model_1.eprime -tests/exhaustive/basic/set01_1/expected/model_2-solution000001.solution -tests/exhaustive/basic/set01_1/expected/model_2-solution000002.solution -tests/exhaustive/basic/set01_1/expected/model_2-solution000003.solution -tests/exhaustive/basic/set01_1/expected/model_2.eprime -tests/exhaustive/basic/set01_1/set01.essence -tests/exhaustive/basic/set01_2/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/set01_2/expected/model_1_1.eprime -tests/exhaustive/basic/set01_2/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/set01_2/expected/model_1_2.eprime -tests/exhaustive/basic/set01_2/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/set01_2/expected/model_2_1.eprime -tests/exhaustive/basic/set01_2/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/set01_2/expected/model_2_2.eprime -tests/exhaustive/basic/set01_2/set01_2.essence -tests/exhaustive/basic/set01_3/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/set01_3/expected/model_1_1.eprime -tests/exhaustive/basic/set01_3/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/set01_3/expected/model_1_2.eprime -tests/exhaustive/basic/set01_3/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/set01_3/expected/model_2_1.eprime -tests/exhaustive/basic/set01_3/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/set01_3/expected/model_2_2.eprime -tests/exhaustive/basic/set01_3/set01_3.essence -tests/exhaustive/basic/set02/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/set02/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/set02/expected/model_1_1.eprime -tests/exhaustive/basic/set02/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/set02/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/set02/expected/model_1_2.eprime -tests/exhaustive/basic/set02/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/set02/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/set02/expected/model_2_1.eprime -tests/exhaustive/basic/set02/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/set02/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/set02/expected/model_2_2.eprime -tests/exhaustive/basic/set02/set02.essence -tests/exhaustive/basic/set03/expected-time.txt -tests/exhaustive/basic/set03/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/set03/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/set03/expected/model_1_1.eprime -tests/exhaustive/basic/set03/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/set03/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/set03/expected/model_1_2.eprime -tests/exhaustive/basic/set03/expected/model_1_3-solution000001.solution -tests/exhaustive/basic/set03/expected/model_1_3-solution000002.solution -tests/exhaustive/basic/set03/expected/model_1_3.eprime -tests/exhaustive/basic/set03/expected/model_1_4-solution000001.solution -tests/exhaustive/basic/set03/expected/model_1_4-solution000002.solution -tests/exhaustive/basic/set03/expected/model_1_4.eprime -tests/exhaustive/basic/set03/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/set03/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/set03/expected/model_2_1.eprime -tests/exhaustive/basic/set03/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/set03/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/set03/expected/model_2_2.eprime -tests/exhaustive/basic/set03/expected/model_2_3-solution000001.solution -tests/exhaustive/basic/set03/expected/model_2_3-solution000002.solution -tests/exhaustive/basic/set03/expected/model_2_3.eprime -tests/exhaustive/basic/set03/expected/model_2_4-solution000001.solution -tests/exhaustive/basic/set03/expected/model_2_4-solution000002.solution -tests/exhaustive/basic/set03/expected/model_2_4.eprime -tests/exhaustive/basic/set03/expected/model_3_1-solution000001.solution -tests/exhaustive/basic/set03/expected/model_3_1-solution000002.solution -tests/exhaustive/basic/set03/expected/model_3_1.eprime -tests/exhaustive/basic/set03/expected/model_3_2-solution000001.solution -tests/exhaustive/basic/set03/expected/model_3_2-solution000002.solution -tests/exhaustive/basic/set03/expected/model_3_2.eprime -tests/exhaustive/basic/set03/expected/model_3_3-solution000001.solution -tests/exhaustive/basic/set03/expected/model_3_3-solution000002.solution -tests/exhaustive/basic/set03/expected/model_3_3.eprime -tests/exhaustive/basic/set03/expected/model_3_4-solution000001.solution -tests/exhaustive/basic/set03/expected/model_3_4-solution000002.solution -tests/exhaustive/basic/set03/expected/model_3_4.eprime -tests/exhaustive/basic/set03/expected/model_4_1-solution000001.solution -tests/exhaustive/basic/set03/expected/model_4_1-solution000002.solution -tests/exhaustive/basic/set03/expected/model_4_1.eprime -tests/exhaustive/basic/set03/expected/model_4_2-solution000001.solution -tests/exhaustive/basic/set03/expected/model_4_2-solution000002.solution -tests/exhaustive/basic/set03/expected/model_4_2.eprime -tests/exhaustive/basic/set03/expected/model_4_3-solution000001.solution -tests/exhaustive/basic/set03/expected/model_4_3-solution000002.solution -tests/exhaustive/basic/set03/expected/model_4_3.eprime -tests/exhaustive/basic/set03/expected/model_4_4-solution000001.solution -tests/exhaustive/basic/set03/expected/model_4_4-solution000002.solution -tests/exhaustive/basic/set03/expected/model_4_4.eprime -tests/exhaustive/basic/set03/set03.essence -tests/exhaustive/basic/set04/expected-time.txt -tests/exhaustive/basic/set04/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_1_1.eprime -tests/exhaustive/basic/set04/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_1_2.eprime -tests/exhaustive/basic/set04/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_1_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_1_3.eprime -tests/exhaustive/basic/set04/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_1_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_1_4.eprime -tests/exhaustive/basic/set04/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_2_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_2_1.eprime -tests/exhaustive/basic/set04/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_2_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_2_3.eprime -tests/exhaustive/basic/set04/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_2_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_2_4.eprime -tests/exhaustive/basic/set04/expected/model_1_3_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_3_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_3_1.eprime -tests/exhaustive/basic/set04/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_3_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_3_2.eprime -tests/exhaustive/basic/set04/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_3_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_3_4.eprime -tests/exhaustive/basic/set04/expected/model_1_4_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_4_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_4_1.eprime -tests/exhaustive/basic/set04/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_4_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_4_2.eprime -tests/exhaustive/basic/set04/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_1_4_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_1_4_3.eprime -tests/exhaustive/basic/set04/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_1_1.eprime -tests/exhaustive/basic/set04/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_1_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_1_3.eprime -tests/exhaustive/basic/set04/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_1_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_1_4.eprime -tests/exhaustive/basic/set04/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_2_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_2_1.eprime -tests/exhaustive/basic/set04/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_2_2.eprime -tests/exhaustive/basic/set04/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_2_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_2_3.eprime -tests/exhaustive/basic/set04/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_2_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_2_4.eprime -tests/exhaustive/basic/set04/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_3_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_3_1.eprime -tests/exhaustive/basic/set04/expected/model_2_3_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_3_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_3_2.eprime -tests/exhaustive/basic/set04/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_3_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_3_4.eprime -tests/exhaustive/basic/set04/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_4_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_4_1.eprime -tests/exhaustive/basic/set04/expected/model_2_4_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_4_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_4_2.eprime -tests/exhaustive/basic/set04/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_2_4_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_2_4_3.eprime -tests/exhaustive/basic/set04/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_1_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_1_1.eprime -tests/exhaustive/basic/set04/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_1_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_1_2.eprime -tests/exhaustive/basic/set04/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_1_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_1_4.eprime -tests/exhaustive/basic/set04/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_2_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_2_1.eprime -tests/exhaustive/basic/set04/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_2_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_2_2.eprime -tests/exhaustive/basic/set04/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_2_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_2_4.eprime -tests/exhaustive/basic/set04/expected/model_3_3_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_3_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_3_1.eprime -tests/exhaustive/basic/set04/expected/model_3_3_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_3_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_3_2.eprime -tests/exhaustive/basic/set04/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_3_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_3_3.eprime -tests/exhaustive/basic/set04/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_3_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_3_4.eprime -tests/exhaustive/basic/set04/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_4_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_4_1.eprime -tests/exhaustive/basic/set04/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_4_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_4_2.eprime -tests/exhaustive/basic/set04/expected/model_3_4_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_3_4_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_3_4_3.eprime -tests/exhaustive/basic/set04/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_1_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_1_1.eprime -tests/exhaustive/basic/set04/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_1_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_1_2.eprime -tests/exhaustive/basic/set04/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_1_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_1_3.eprime -tests/exhaustive/basic/set04/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_2_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_2_1.eprime -tests/exhaustive/basic/set04/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_2_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_2_2.eprime -tests/exhaustive/basic/set04/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_2_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_2_3.eprime -tests/exhaustive/basic/set04/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_3_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_3_1.eprime -tests/exhaustive/basic/set04/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_3_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_3_2.eprime -tests/exhaustive/basic/set04/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_3_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_3_3.eprime -tests/exhaustive/basic/set04/expected/model_4_4_1-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_4_1-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_4_1.eprime -tests/exhaustive/basic/set04/expected/model_4_4_2-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_4_2-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_4_2.eprime -tests/exhaustive/basic/set04/expected/model_4_4_3-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_4_3-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_4_3.eprime -tests/exhaustive/basic/set04/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/set04/expected/model_4_4_4-solution000002.solution -tests/exhaustive/basic/set04/expected/model_4_4_4.eprime -tests/exhaustive/basic/set04/set04.essence -tests/exhaustive/basic/set05/expected-time.txt -tests/exhaustive/basic/set05/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_1_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_1_1.eprime -tests/exhaustive/basic/set05/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_1_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_1_2.eprime -tests/exhaustive/basic/set05/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_1_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_1_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_1_3.eprime -tests/exhaustive/basic/set05/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_1_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_1_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_1_4.eprime -tests/exhaustive/basic/set05/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_2_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_2_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_2_1.eprime -tests/exhaustive/basic/set05/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_2_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_2_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_2_3.eprime -tests/exhaustive/basic/set05/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_2_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_2_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_2_4.eprime -tests/exhaustive/basic/set05/expected/model_1_3_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_3_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_3_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_3_1.eprime -tests/exhaustive/basic/set05/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_3_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_3_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_3_2.eprime -tests/exhaustive/basic/set05/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_3_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_3_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_3_4.eprime -tests/exhaustive/basic/set05/expected/model_1_4_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_4_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_4_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_4_1.eprime -tests/exhaustive/basic/set05/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_4_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_4_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_4_2.eprime -tests/exhaustive/basic/set05/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_1_4_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_1_4_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_1_4_3.eprime -tests/exhaustive/basic/set05/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_1_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_1_1.eprime -tests/exhaustive/basic/set05/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_1_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_1_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_1_3.eprime -tests/exhaustive/basic/set05/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_1_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_1_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_1_4.eprime -tests/exhaustive/basic/set05/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_2_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_2_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_2_1.eprime -tests/exhaustive/basic/set05/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_2_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_2_2.eprime -tests/exhaustive/basic/set05/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_2_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_2_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_2_3.eprime -tests/exhaustive/basic/set05/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_2_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_2_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_2_4.eprime -tests/exhaustive/basic/set05/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_3_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_3_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_3_1.eprime -tests/exhaustive/basic/set05/expected/model_2_3_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_3_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_3_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_3_2.eprime -tests/exhaustive/basic/set05/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_3_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_3_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_3_4.eprime -tests/exhaustive/basic/set05/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_4_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_4_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_4_1.eprime -tests/exhaustive/basic/set05/expected/model_2_4_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_4_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_4_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_4_2.eprime -tests/exhaustive/basic/set05/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_2_4_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_2_4_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_2_4_3.eprime -tests/exhaustive/basic/set05/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_1_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_1_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_1_1.eprime -tests/exhaustive/basic/set05/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_1_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_1_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_1_2.eprime -tests/exhaustive/basic/set05/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_1_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_1_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_1_4.eprime -tests/exhaustive/basic/set05/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_2_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_2_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_2_1.eprime -tests/exhaustive/basic/set05/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_2_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_2_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_2_2.eprime -tests/exhaustive/basic/set05/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_2_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_2_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_2_4.eprime -tests/exhaustive/basic/set05/expected/model_3_3_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_3_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_3_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_3_1.eprime -tests/exhaustive/basic/set05/expected/model_3_3_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_3_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_3_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_3_2.eprime -tests/exhaustive/basic/set05/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_3_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_3_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_3_3.eprime -tests/exhaustive/basic/set05/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_3_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_3_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_3_4.eprime -tests/exhaustive/basic/set05/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_4_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_4_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_4_1.eprime -tests/exhaustive/basic/set05/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_4_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_4_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_4_2.eprime -tests/exhaustive/basic/set05/expected/model_3_4_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_3_4_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_3_4_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_3_4_3.eprime -tests/exhaustive/basic/set05/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_1_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_1_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_1_1.eprime -tests/exhaustive/basic/set05/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_1_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_1_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_1_2.eprime -tests/exhaustive/basic/set05/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_1_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_1_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_1_3.eprime -tests/exhaustive/basic/set05/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_2_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_2_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_2_1.eprime -tests/exhaustive/basic/set05/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_2_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_2_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_2_2.eprime -tests/exhaustive/basic/set05/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_2_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_2_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_2_3.eprime -tests/exhaustive/basic/set05/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_3_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_3_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_3_1.eprime -tests/exhaustive/basic/set05/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_3_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_3_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_3_2.eprime -tests/exhaustive/basic/set05/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_3_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_3_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_3_3.eprime -tests/exhaustive/basic/set05/expected/model_4_4_1-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_4_1-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_4_1-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_4_1.eprime -tests/exhaustive/basic/set05/expected/model_4_4_2-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_4_2-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_4_2-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_4_2.eprime -tests/exhaustive/basic/set05/expected/model_4_4_3-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_4_3-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_4_3-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_4_3.eprime -tests/exhaustive/basic/set05/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/set05/expected/model_4_4_4-solution000002.solution -tests/exhaustive/basic/set05/expected/model_4_4_4-solution000003.solution -tests/exhaustive/basic/set05/expected/model_4_4_4.eprime -tests/exhaustive/basic/set05/set05.essence -tests/exhaustive/basic/set06/expected-time.txt -tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_1.eprime -tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_2.eprime -tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_3.eprime -tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_1_4.eprime -tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_2_1.eprime -tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_2_3.eprime -tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_2_4.eprime -tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_3_1.eprime -tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_3_2.eprime -tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_3_4.eprime -tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_4_1.eprime -tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_4_2.eprime -tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_1_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_1_4_3.eprime -tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_1_1.eprime -tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_1_3.eprime -tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_1_4.eprime -tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_2_1.eprime -tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_2_3.eprime -tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_2_4.eprime -tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_3_1.eprime -tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_3_4.eprime -tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_4_1.eprime -tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_2_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_2_4_3.eprime -tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_1_1.eprime -tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_1_2.eprime -tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_1_4.eprime -tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_2_1.eprime -tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_2_4.eprime -tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_3_1.eprime -tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_3_2.eprime -tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_3_4.eprime -tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_4_1.eprime -tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_3_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_3_4_2.eprime -tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_1_1.eprime -tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_1_2.eprime -tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_1_3.eprime -tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_2_1.eprime -tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_2_3.eprime -tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_3_1.eprime -tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_3_2.eprime -tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_4_1.eprime -tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_4_2.eprime -tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_1_4_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_1_4_4_3.eprime -tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_1_1.eprime -tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_1_3.eprime -tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_1_4.eprime -tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_2_1.eprime -tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_2_3.eprime -tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_2_4.eprime -tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_3_1.eprime -tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_3_4.eprime -tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_4_1.eprime -tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_1_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_1_4_3.eprime -tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_1_1.eprime -tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_1_3.eprime -tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_1_4.eprime -tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_1.eprime -tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_2.eprime -tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_3.eprime -tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_2_4.eprime -tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_3_1.eprime -tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_3_2.eprime -tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_3_4.eprime -tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_4_1.eprime -tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_4_2.eprime -tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_2_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_2_4_3.eprime -tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_1_1.eprime -tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_1_4.eprime -tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_2_1.eprime -tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_2_2.eprime -tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_2_4.eprime -tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_3_1.eprime -tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_3_2.eprime -tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_3_4.eprime -tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_4_1.eprime -tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_3_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_3_4_2.eprime -tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_1_1.eprime -tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_1_3.eprime -tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_2_1.eprime -tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_2_2.eprime -tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_2_3.eprime -tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_3_1.eprime -tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_3_2.eprime -tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_4_1.eprime -tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_4_2.eprime -tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_2_4_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_2_4_4_3.eprime -tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_1_1.eprime -tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_1_2.eprime -tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_1_4.eprime -tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_2_1.eprime -tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_2_4.eprime -tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_3_1.eprime -tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_3_2.eprime -tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_3_4.eprime -tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_4_1.eprime -tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_1_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_1_4_2.eprime -tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_1_1.eprime -tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_1_4.eprime -tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_2_1.eprime -tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_2_2.eprime -tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_2_4.eprime -tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_3_1.eprime -tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_3_2.eprime -tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_3_4.eprime -tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_4_1.eprime -tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_2_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_2_4_2.eprime -tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_1_1.eprime -tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_1_2.eprime -tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_1_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_1_4.eprime -tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_2_1.eprime -tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_2_2.eprime -tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_2_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_2_4.eprime -tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_1.eprime -tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_2.eprime -tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_3.eprime -tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_3_4.eprime -tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_4_1.eprime -tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_4_2.eprime -tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_3_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_3_4_3.eprime -tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_1_1.eprime -tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_1_2.eprime -tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_2_1.eprime -tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_2_2.eprime -tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_3_1.eprime -tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_3_2.eprime -tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_3_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_3_3.eprime -tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_4_1.eprime -tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_4_2.eprime -tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_3_4_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_3_4_4_3.eprime -tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_1_1.eprime -tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_1_2.eprime -tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_1_3.eprime -tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_2_1.eprime -tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_2_3.eprime -tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_3_1.eprime -tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_3_2.eprime -tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_4_1.eprime -tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_4_2.eprime -tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_1_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_1_4_3.eprime -tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_1_1.eprime -tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_1_3.eprime -tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_2_1.eprime -tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_2_2.eprime -tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_2_3.eprime -tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_3_1.eprime -tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_3_2.eprime -tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_4_1.eprime -tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_4_2.eprime -tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_2_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_2_4_3.eprime -tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_1_1.eprime -tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_1_2.eprime -tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_2_1.eprime -tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_2_2.eprime -tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_3_1.eprime -tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_3_2.eprime -tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_3_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_3_3.eprime -tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_4_1.eprime -tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_4_2.eprime -tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_3_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_3_4_3.eprime -tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_1_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_1_1.eprime -tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_1_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_1_2.eprime -tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_1_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_1_3.eprime -tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_2_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_2_1.eprime -tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_2_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_2_2.eprime -tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_2_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_2_3.eprime -tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_3_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_3_1.eprime -tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_3_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_3_2.eprime -tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_3_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_3_3.eprime -tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_1-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_1.eprime -tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_2-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_2.eprime -tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_3-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_3.eprime -tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000001.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_4-solution000002.solution -tests/exhaustive/basic/set06/expected/model_4_4_4_4.eprime -tests/exhaustive/basic/set06/set06.essence -tests/exhaustive/basic/set07/expected-time.txt -tests/exhaustive/basic/set07/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_1_1.eprime -tests/exhaustive/basic/set07/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_1_2.eprime -tests/exhaustive/basic/set07/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_1_3.eprime -tests/exhaustive/basic/set07/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_1_4.eprime -tests/exhaustive/basic/set07/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_2_1.eprime -tests/exhaustive/basic/set07/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_2_3.eprime -tests/exhaustive/basic/set07/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_2_4.eprime -tests/exhaustive/basic/set07/expected/model_1_3_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_3_1.eprime -tests/exhaustive/basic/set07/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_3_2.eprime -tests/exhaustive/basic/set07/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_3_4.eprime -tests/exhaustive/basic/set07/expected/model_1_4_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_4_1.eprime -tests/exhaustive/basic/set07/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_4_2.eprime -tests/exhaustive/basic/set07/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_1_4_3.eprime -tests/exhaustive/basic/set07/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_1_1.eprime -tests/exhaustive/basic/set07/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_1_3.eprime -tests/exhaustive/basic/set07/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_1_4.eprime -tests/exhaustive/basic/set07/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_2_1.eprime -tests/exhaustive/basic/set07/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_2_2.eprime -tests/exhaustive/basic/set07/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_2_3.eprime -tests/exhaustive/basic/set07/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_2_4.eprime -tests/exhaustive/basic/set07/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_3_1.eprime -tests/exhaustive/basic/set07/expected/model_2_3_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_3_2.eprime -tests/exhaustive/basic/set07/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_3_4.eprime -tests/exhaustive/basic/set07/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_4_1.eprime -tests/exhaustive/basic/set07/expected/model_2_4_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_4_2.eprime -tests/exhaustive/basic/set07/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_2_4_3.eprime -tests/exhaustive/basic/set07/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_1_1.eprime -tests/exhaustive/basic/set07/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_1_2.eprime -tests/exhaustive/basic/set07/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_1_4.eprime -tests/exhaustive/basic/set07/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_2_1.eprime -tests/exhaustive/basic/set07/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_2_2.eprime -tests/exhaustive/basic/set07/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_2_4.eprime -tests/exhaustive/basic/set07/expected/model_3_3_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_3_1.eprime -tests/exhaustive/basic/set07/expected/model_3_3_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_3_2.eprime -tests/exhaustive/basic/set07/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_3_3.eprime -tests/exhaustive/basic/set07/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_3_4.eprime -tests/exhaustive/basic/set07/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_4_1.eprime -tests/exhaustive/basic/set07/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_4_2.eprime -tests/exhaustive/basic/set07/expected/model_3_4_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_3_4_3.eprime -tests/exhaustive/basic/set07/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_1_1.eprime -tests/exhaustive/basic/set07/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_1_2.eprime -tests/exhaustive/basic/set07/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_1_3.eprime -tests/exhaustive/basic/set07/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_2_1.eprime -tests/exhaustive/basic/set07/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_2_2.eprime -tests/exhaustive/basic/set07/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_2_3.eprime -tests/exhaustive/basic/set07/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_3_1.eprime -tests/exhaustive/basic/set07/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_3_2.eprime -tests/exhaustive/basic/set07/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_3_3.eprime -tests/exhaustive/basic/set07/expected/model_4_4_1-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_4_1.eprime -tests/exhaustive/basic/set07/expected/model_4_4_2-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_4_2.eprime -tests/exhaustive/basic/set07/expected/model_4_4_3-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_4_3.eprime -tests/exhaustive/basic/set07/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/set07/expected/model_4_4_4.eprime -tests/exhaustive/basic/set07/set07.essence -tests/exhaustive/basic/set08/expected-time.txt -tests/exhaustive/basic/set08/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/set08/expected/model_1_1.eprime -tests/exhaustive/basic/set08/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/set08/expected/model_1_2.eprime -tests/exhaustive/basic/set08/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/set08/expected/model_2_1.eprime -tests/exhaustive/basic/set08/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/set08/expected/model_2_2.eprime -tests/exhaustive/basic/set08/set08.essence -tests/exhaustive/basic/set09/expected-time.txt -tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_1.eprime -tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_2.eprime -tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_3.eprime -tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_1_4.eprime -tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_1.eprime -tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_2.eprime -tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_3.eprime -tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_2_4.eprime -tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_1.eprime -tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_2.eprime -tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_3.eprime -tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_3_4.eprime -tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_1.eprime -tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_2.eprime -tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_3.eprime -tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_1_4_4.eprime -tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_1.eprime -tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_2.eprime -tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_3.eprime -tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_1_4.eprime -tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_1.eprime -tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_2.eprime -tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_3.eprime -tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_2_4.eprime -tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_1.eprime -tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_2.eprime -tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_3.eprime -tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_3_4.eprime -tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_1.eprime -tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_2.eprime -tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_3.eprime -tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_2_4_4.eprime -tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_1.eprime -tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_2.eprime -tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_3.eprime -tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_1_4.eprime -tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_1.eprime -tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_2.eprime -tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_3.eprime -tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_2_4.eprime -tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_1.eprime -tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_2.eprime -tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_3.eprime -tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_3_4.eprime -tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_1.eprime -tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_2.eprime -tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_3.eprime -tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_3_4_4.eprime -tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_1.eprime -tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_2.eprime -tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_3.eprime -tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_1_4.eprime -tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_1.eprime -tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_2.eprime -tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_3.eprime -tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_2_4.eprime -tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_1.eprime -tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_2.eprime -tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_3.eprime -tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_3_4.eprime -tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_1.eprime -tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_2.eprime -tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_3.eprime -tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_1_4_4_4.eprime -tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_1.eprime -tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_2.eprime -tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_3.eprime -tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_1_4.eprime -tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_1.eprime -tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_2.eprime -tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_3.eprime -tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_2_4.eprime -tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_1.eprime -tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_2.eprime -tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_3.eprime -tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_3_4.eprime -tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_1.eprime -tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_2.eprime -tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_3.eprime -tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_1_4_4.eprime -tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_1.eprime -tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_2.eprime -tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_3.eprime -tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_1_4.eprime -tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_1.eprime -tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_2.eprime -tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_3.eprime -tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_2_4.eprime -tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_1.eprime -tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_2.eprime -tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_3.eprime -tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_3_4.eprime -tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_1.eprime -tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_2.eprime -tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_3.eprime -tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_2_4_4.eprime -tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_1.eprime -tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_2.eprime -tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_3.eprime -tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_1_4.eprime -tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_1.eprime -tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_2.eprime -tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_3.eprime -tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_2_4.eprime -tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_1.eprime -tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_2.eprime -tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_3.eprime -tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_3_4.eprime -tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_1.eprime -tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_2.eprime -tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_3.eprime -tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_3_4_4.eprime -tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_1.eprime -tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_2.eprime -tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_3.eprime -tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_1_4.eprime -tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_1.eprime -tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_2.eprime -tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_3.eprime -tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_2_4.eprime -tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_1.eprime -tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_2.eprime -tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_3.eprime -tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_3_4.eprime -tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_1.eprime -tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_2.eprime -tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_3.eprime -tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_2_4_4_4.eprime -tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_1.eprime -tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_2.eprime -tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_3.eprime -tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_1_4.eprime -tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_1.eprime -tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_2.eprime -tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_3.eprime -tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_2_4.eprime -tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_1.eprime -tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_2.eprime -tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_3.eprime -tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_3_4.eprime -tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_1.eprime -tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_2.eprime -tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_3.eprime -tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_1_4_4.eprime -tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_1.eprime -tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_2.eprime -tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_3.eprime -tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_1_4.eprime -tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_1.eprime -tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_2.eprime -tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_3.eprime -tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_2_4.eprime -tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_1.eprime -tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_2.eprime -tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_3.eprime -tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_3_4.eprime -tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_1.eprime -tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_2.eprime -tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_3.eprime -tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_2_4_4.eprime -tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_1.eprime -tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_2.eprime -tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_3.eprime -tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_1_4.eprime -tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_1.eprime -tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_2.eprime -tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_3.eprime -tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_2_4.eprime -tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_1.eprime -tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_2.eprime -tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_3.eprime -tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_3_4.eprime -tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_1.eprime -tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_2.eprime -tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_3.eprime -tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_3_4_4.eprime -tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_1.eprime -tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_2.eprime -tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_3.eprime -tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_1_4.eprime -tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_1.eprime -tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_2.eprime -tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_3.eprime -tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_2_4.eprime -tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_1.eprime -tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_2.eprime -tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_3.eprime -tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_3_4.eprime -tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_1.eprime -tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_2.eprime -tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_3.eprime -tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_3_4_4_4.eprime -tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_1.eprime -tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_2.eprime -tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_3.eprime -tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_1_4.eprime -tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_1.eprime -tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_2.eprime -tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_3.eprime -tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_2_4.eprime -tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_1.eprime -tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_2.eprime -tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_3.eprime -tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_3_4.eprime -tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_1.eprime -tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_2.eprime -tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_3.eprime -tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_1_4_4.eprime -tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_1.eprime -tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_2.eprime -tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_3.eprime -tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_1_4.eprime -tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_1.eprime -tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_2.eprime -tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_3.eprime -tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_2_4.eprime -tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_1.eprime -tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_2.eprime -tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_3.eprime -tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_3_4.eprime -tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_1.eprime -tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_2.eprime -tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_3.eprime -tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_2_4_4.eprime -tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_1.eprime -tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_2.eprime -tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_3.eprime -tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_1_4.eprime -tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_1.eprime -tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_2.eprime -tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_3.eprime -tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_2_4.eprime -tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_1.eprime -tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_2.eprime -tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_3.eprime -tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_3_4.eprime -tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_1.eprime -tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_2.eprime -tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_3.eprime -tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_3_4_4.eprime -tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_1.eprime -tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_2.eprime -tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_3.eprime -tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_1_4.eprime -tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_1.eprime -tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_2.eprime -tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_3.eprime -tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_2_4.eprime -tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_1.eprime -tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_2.eprime -tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_3.eprime -tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_3_4.eprime -tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_1-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_1.eprime -tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_2-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_2.eprime -tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_3-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_3.eprime -tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000001.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_4-solution000002.solution -tests/exhaustive/basic/set09/expected/model_4_4_4_4.eprime -tests/exhaustive/basic/set09/set09.essence -tests/exhaustive/basic/setOfSet01/expected-time.txt -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_1-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_1.eprime -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_2-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_2.eprime -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_3-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_3.eprime -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_4-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_4.eprime -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_5-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_5.eprime -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_6-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_6.eprime -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_7-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_7.eprime -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000001.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000002.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000003.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000004.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000005.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000006.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000007.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000008.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000009.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000010.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000011.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000012.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000013.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000014.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000015.solution -tests/exhaustive/basic/setOfSet01/expected/model_8-solution000016.solution -tests/exhaustive/basic/setOfSet01/expected/model_8.eprime -tests/exhaustive/basic/setOfSet01/setOfSet01.essence -tests/exhaustive/basic/setOfSet02/expected-time.txt -tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000001.solution -tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000002.solution -tests/exhaustive/basic/setOfSet02/expected/model_1_1-solution000003.solution -tests/exhaustive/basic/setOfSet02/expected/model_1_1.eprime -tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000001.solution -tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000002.solution -tests/exhaustive/basic/setOfSet02/expected/model_1_2-solution000003.solution -tests/exhaustive/basic/setOfSet02/expected/model_1_2.eprime -tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000001.solution -tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000002.solution -tests/exhaustive/basic/setOfSet02/expected/model_2_1-solution000003.solution -tests/exhaustive/basic/setOfSet02/expected/model_2_1.eprime -tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000001.solution -tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000002.solution -tests/exhaustive/basic/setOfSet02/expected/model_2_2-solution000003.solution -tests/exhaustive/basic/setOfSet02/expected/model_2_2.eprime -tests/exhaustive/basic/setOfSet02/setOfSet02.essence -tests/exhaustive/basic/setOfSet03/expected/model_1-solution000001.solution -tests/exhaustive/basic/setOfSet03/expected/model_1-solution000002.solution -tests/exhaustive/basic/setOfSet03/expected/model_1-solution000003.solution -tests/exhaustive/basic/setOfSet03/expected/model_1-solution000004.solution -tests/exhaustive/basic/setOfSet03/expected/model_1-solution000005.solution -tests/exhaustive/basic/setOfSet03/expected/model_1-solution000006.solution -tests/exhaustive/basic/setOfSet03/expected/model_1.eprime -tests/exhaustive/basic/setOfSet03/expected/model_2-solution000001.solution -tests/exhaustive/basic/setOfSet03/expected/model_2-solution000002.solution -tests/exhaustive/basic/setOfSet03/expected/model_2-solution000003.solution -tests/exhaustive/basic/setOfSet03/expected/model_2-solution000004.solution -tests/exhaustive/basic/setOfSet03/expected/model_2-solution000005.solution -tests/exhaustive/basic/setOfSet03/expected/model_2-solution000006.solution -tests/exhaustive/basic/setOfSet03/expected/model_2.eprime -tests/exhaustive/basic/setOfSet03/setOfSet03.essence -tests/exhaustive/basic/setOfSet04/expected-time.txt -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_1_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_2_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_3_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_1_4_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_1_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_2_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_3_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_2_4_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_1_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_2_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_3_4.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_3_4_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_1_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_2_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_1.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_2.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_3_3.eprime -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000002.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000003.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000004.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000005.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4-solution000006.solution -tests/exhaustive/basic/setOfSet04/expected/model_4_4_4.eprime -tests/exhaustive/basic/setOfSet04/setOfSet04.essence -tests/exhaustive/basic/set_card_00/expected-time.txt -tests/exhaustive/basic/set_card_00/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_1_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_1_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_1_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_2_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_2_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_2_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_2_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_2_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_2_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_2_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_2_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_3_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_3_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_3_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_3_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_3_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_3_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_3_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_3_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_3_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_4_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_4_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_4_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_4_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_4_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_4_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_1_4_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_1_4_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_1_4_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_1_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_1_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_1_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_1_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_1_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_1_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_1_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_1_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_2_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_2_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_2_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_3_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_3_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_3_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_3_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_3_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_3_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_3_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_3_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_3_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_4_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_4_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_4_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_4_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_4_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_4_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_2_4_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_2_4_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_2_4_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_1_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_1_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_1_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_1_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_1_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_1_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_1_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_1_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_1_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_2_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_2_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_2_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_2_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_2_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_2_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_2_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_2_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_2_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_3_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_3_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_3_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_3_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_3_4.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_4_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_4_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_4_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_4_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_4_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_4_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_3_4_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_3_4_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_3_4_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_1_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_1_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_1_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_1_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_1_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_1_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_1_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_1_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_1_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_2_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_2_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_2_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_2_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_2_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_2_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_2_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_2_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_2_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_3_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_3_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_3_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_3_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_3_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_3_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_3_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_3_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_3_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_4_1-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_1-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_1.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_4_2-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_2-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_2.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_4_3-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_3-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_3.eprime -tests/exhaustive/basic/set_card_00/expected/model_4_4_4-solution000001.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_4-solution000002.solution -tests/exhaustive/basic/set_card_00/expected/model_4_4_4.eprime -tests/exhaustive/basic/set_card_00/set_card_00.essence -tests/exhaustive/basic/set_card_01/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/set_card_01/expected/model_1_1_1.eprime -tests/exhaustive/basic/set_card_01/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/set_card_01/expected/model_1_1_2.eprime -tests/exhaustive/basic/set_card_01/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/set_card_01/expected/model_1_2_1.eprime -tests/exhaustive/basic/set_card_01/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/set_card_01/expected/model_2_1_1.eprime -tests/exhaustive/basic/set_card_01/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/set_card_01/expected/model_2_2_1.eprime -tests/exhaustive/basic/set_card_01/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/set_card_01/expected/model_2_2_2.eprime -tests/exhaustive/basic/set_card_01/set_card_01.essence -tests/exhaustive/basic/set_card_02/expected/model_1_1_1-solution000001.solution -tests/exhaustive/basic/set_card_02/expected/model_1_1_1.eprime -tests/exhaustive/basic/set_card_02/expected/model_1_1_2-solution000001.solution -tests/exhaustive/basic/set_card_02/expected/model_1_1_2.eprime -tests/exhaustive/basic/set_card_02/expected/model_1_2_1-solution000001.solution -tests/exhaustive/basic/set_card_02/expected/model_1_2_1.eprime -tests/exhaustive/basic/set_card_02/expected/model_2_1_1-solution000001.solution -tests/exhaustive/basic/set_card_02/expected/model_2_1_1.eprime -tests/exhaustive/basic/set_card_02/expected/model_2_2_1-solution000001.solution -tests/exhaustive/basic/set_card_02/expected/model_2_2_1.eprime -tests/exhaustive/basic/set_card_02/expected/model_2_2_2-solution000001.solution -tests/exhaustive/basic/set_card_02/expected/model_2_2_2.eprime -tests/exhaustive/basic/set_card_02/set_card_02.essence -tests/exhaustive/basic/slice01/expected/model-solution000001.solution -tests/exhaustive/basic/slice01/expected/model.eprime -tests/exhaustive/basic/slice01/slice01.essence -tests/exhaustive/basic/toSet_comprehension/expected-time.txt -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n4.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5-solution000004.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_1-n5.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_1.eprime -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n4.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5-solution000004.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_2-n5.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_2.eprime -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n4.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5-solution000004.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_3-n5.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_3.eprime -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n4.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000001.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000002.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000003.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5-solution000004.solution -tests/exhaustive/basic/toSet_comprehension/expected/model_4-n5.eprime-param -tests/exhaustive/basic/toSet_comprehension/expected/model_4.eprime -tests/exhaustive/basic/toSet_comprehension/n4.param -tests/exhaustive/basic/toSet_comprehension/n5.param -tests/exhaustive/basic/toSet_comprehension/test.essence -tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000001.solution -tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000002.solution -tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000003.solution -tests/exhaustive/basic/tuple01_bool_int/expected/model-solution000004.solution -tests/exhaustive/basic/tuple01_bool_int/expected/model.eprime -tests/exhaustive/basic/tuple01_bool_int/tuple01_bool_int.essence -tests/exhaustive/basic/tuple02_nested/expected/model-solution000001.solution -tests/exhaustive/basic/tuple02_nested/expected/model-solution000002.solution -tests/exhaustive/basic/tuple02_nested/expected/model-solution000003.solution -tests/exhaustive/basic/tuple02_nested/expected/model-solution000004.solution -tests/exhaustive/basic/tuple02_nested/expected/model.eprime -tests/exhaustive/basic/tuple02_nested/tuple02_nested.essence -tests/exhaustive/basic/tuple03_literal/expected/model-solution000001.solution -tests/exhaustive/basic/tuple03_literal/expected/model.eprime -tests/exhaustive/basic/tuple03_literal/tuple03_literal.essence -tests/exhaustive/basic/typed01/expected-time.txt -tests/exhaustive/basic/typed01/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_1_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_1_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_2_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_2_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_3_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_3_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_1_4_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_1_4_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_1_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_1_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_2_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_2_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_3_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_3_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_2_4_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_2_4_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_1_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_1_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_2_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_2_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_3_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_3_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_3_4_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_3_4_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_1_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_1_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_2_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_2_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_3_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_3_4_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_1_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_1_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_1_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_1_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_1_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_2_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_2_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_2_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_2_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_2_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_3_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_3_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_3_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_3_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_3_4.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_4_1-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_1-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_1-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_1.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_4_2-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_2-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_2-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_2.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_4_3-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_3-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_3-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_3.eprime -tests/exhaustive/basic/typed01/expected/model_4_4_4_4-solution000001.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_4-solution000002.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_4-solution000003.solution -tests/exhaustive/basic/typed01/expected/model_4_4_4_4.eprime -tests/exhaustive/basic/typed01/typed01.essence -tests/exhaustive/basic/undefinedness_01/expected/model-solution000001.solution -tests/exhaustive/basic/undefinedness_01/expected/model.eprime -tests/exhaustive/basic/undefinedness_01/undefinedness_01.essence -tests/exhaustive/basic/undefinedness_02/expected/model-solution000001.solution -tests/exhaustive/basic/undefinedness_02/expected/model.eprime -tests/exhaustive/basic/undefinedness_02/undefinedness_02.essence -tests/exhaustive/basic/undefinedness_03/expected/model.eprime -tests/exhaustive/basic/undefinedness_03/undefinedness_03.essence -tests/exhaustive/basic/undefinedness_04/expected/model-n_is_0.eprime-param -tests/exhaustive/basic/undefinedness_04/expected/model.eprime -tests/exhaustive/basic/undefinedness_04/n_is_0.param -tests/exhaustive/basic/undefinedness_04/undefinedness_04.essence -tests/exhaustive/basic/undefinedness_05/expected/model-solution000001.solution -tests/exhaustive/basic/undefinedness_05/expected/model.eprime -tests/exhaustive/basic/undefinedness_05/undef.essence -tests/exhaustive/basic/undefinedness_06/expected/model-n1-solution000001.solution -tests/exhaustive/basic/undefinedness_06/expected/model-n1.eprime-param -tests/exhaustive/basic/undefinedness_06/expected/model-n4-solution000001.solution -tests/exhaustive/basic/undefinedness_06/expected/model-n4.eprime-param -tests/exhaustive/basic/undefinedness_06/expected/model.eprime -tests/exhaustive/basic/undefinedness_06/n1.param -tests/exhaustive/basic/undefinedness_06/n4.param -tests/exhaustive/basic/undefinedness_06/undef.essence -tests/exhaustive/basic/underscore/expected/model-solution000001.solution -tests/exhaustive/basic/underscore/expected/model-solution000002.solution -tests/exhaustive/basic/underscore/expected/model.eprime -tests/exhaustive/basic/underscore/underscore.essence -tests/exhaustive/basic/unnamed01/expected/model-n2-solution000001.solution -tests/exhaustive/basic/unnamed01/expected/model-n2-solution000002.solution -tests/exhaustive/basic/unnamed01/expected/model-n2.eprime-param -tests/exhaustive/basic/unnamed01/expected/model-n3-solution000001.solution -tests/exhaustive/basic/unnamed01/expected/model-n3-solution000002.solution -tests/exhaustive/basic/unnamed01/expected/model-n3-solution000003.solution -tests/exhaustive/basic/unnamed01/expected/model-n3.eprime-param -tests/exhaustive/basic/unnamed01/expected/model.eprime -tests/exhaustive/basic/unnamed01/n2.param -tests/exhaustive/basic/unnamed01/n3.param -tests/exhaustive/basic/unnamed01/unnamed01.essence -tests/exhaustive/basic/variant00/expected/model-solution000001.solution -tests/exhaustive/basic/variant00/expected/model.eprime -tests/exhaustive/basic/variant00/variant00.essence -tests/exhaustive/basic/variant01/expected/model_1-solution000001.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000002.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000003.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000004.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000005.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000006.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000007.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000008.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000009.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000010.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000011.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000012.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000013.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000014.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000015.solution -tests/exhaustive/basic/variant01/expected/model_1-solution000016.solution -tests/exhaustive/basic/variant01/expected/model_1.eprime -tests/exhaustive/basic/variant01/expected/model_2-solution000001.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000002.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000003.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000004.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000005.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000006.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000007.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000008.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000009.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000010.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000011.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000012.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000013.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000014.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000015.solution -tests/exhaustive/basic/variant01/expected/model_2-solution000016.solution -tests/exhaustive/basic/variant01/expected/model_2.eprime -tests/exhaustive/basic/variant01/variant01.essence -tests/exhaustive/basic/variant02/expected/model-solution000001.solution -tests/exhaustive/basic/variant02/expected/model-solution000002.solution -tests/exhaustive/basic/variant02/expected/model.eprime -tests/exhaustive/basic/variant02/variant02.essence -tests/exhaustive/issues/102/expected-time.txt -tests/exhaustive/issues/102/expected/model-solution000001.solution -tests/exhaustive/issues/102/expected/model.eprime -tests/exhaustive/issues/102/wb.essence -tests/exhaustive/issues/166/166.essence -tests/exhaustive/issues/166/expected-time.txt -tests/exhaustive/issues/166/expected/model_1_1-solution000001.solution -tests/exhaustive/issues/166/expected/model_1_1.eprime -tests/exhaustive/issues/166/expected/model_1_2-solution000001.solution -tests/exhaustive/issues/166/expected/model_1_2.eprime -tests/exhaustive/issues/166/expected/model_1_3-solution000001.solution -tests/exhaustive/issues/166/expected/model_1_3.eprime -tests/exhaustive/issues/166/expected/model_1_4-solution000001.solution -tests/exhaustive/issues/166/expected/model_1_4.eprime -tests/exhaustive/issues/166/expected/model_2_1-solution000001.solution -tests/exhaustive/issues/166/expected/model_2_1.eprime -tests/exhaustive/issues/166/expected/model_2_2-solution000001.solution -tests/exhaustive/issues/166/expected/model_2_2.eprime -tests/exhaustive/issues/166/expected/model_2_3-solution000001.solution -tests/exhaustive/issues/166/expected/model_2_3.eprime -tests/exhaustive/issues/166/expected/model_2_4-solution000001.solution -tests/exhaustive/issues/166/expected/model_2_4.eprime -tests/exhaustive/issues/166/expected/model_3_1-solution000001.solution -tests/exhaustive/issues/166/expected/model_3_1.eprime -tests/exhaustive/issues/166/expected/model_3_2-solution000001.solution -tests/exhaustive/issues/166/expected/model_3_2.eprime -tests/exhaustive/issues/166/expected/model_3_3-solution000001.solution -tests/exhaustive/issues/166/expected/model_3_3.eprime -tests/exhaustive/issues/166/expected/model_3_4-solution000001.solution -tests/exhaustive/issues/166/expected/model_3_4.eprime -tests/exhaustive/issues/166/expected/model_4_1-solution000001.solution -tests/exhaustive/issues/166/expected/model_4_1.eprime -tests/exhaustive/issues/166/expected/model_4_2-solution000001.solution -tests/exhaustive/issues/166/expected/model_4_2.eprime -tests/exhaustive/issues/166/expected/model_4_3-solution000001.solution -tests/exhaustive/issues/166/expected/model_4_3.eprime -tests/exhaustive/issues/166/expected/model_4_4-solution000001.solution -tests/exhaustive/issues/166/expected/model_4_4.eprime -tests/exhaustive/issues/168/168.essence -tests/exhaustive/issues/168/expected/model-p-solution000001.solution -tests/exhaustive/issues/168/expected/model-p-solution000002.solution -tests/exhaustive/issues/168/expected/model-p-solution000003.solution -tests/exhaustive/issues/168/expected/model-p.eprime-param -tests/exhaustive/issues/168/expected/model.eprime -tests/exhaustive/issues/168/p.param -tests/exhaustive/issues/182/182.essence -tests/exhaustive/issues/182/expected/model-solution000001.solution -tests/exhaustive/issues/182/expected/model-solution000002.solution -tests/exhaustive/issues/182/expected/model-solution000003.solution -tests/exhaustive/issues/182/expected/model-solution000004.solution -tests/exhaustive/issues/182/expected/model-solution000005.solution -tests/exhaustive/issues/182/expected/model-solution000006.solution -tests/exhaustive/issues/182/expected/model-solution000007.solution -tests/exhaustive/issues/182/expected/model-solution000008.solution -tests/exhaustive/issues/182/expected/model-solution000009.solution -tests/exhaustive/issues/182/expected/model-solution000010.solution -tests/exhaustive/issues/182/expected/model-solution000011.solution -tests/exhaustive/issues/182/expected/model-solution000012.solution -tests/exhaustive/issues/182/expected/model-solution000013.solution -tests/exhaustive/issues/182/expected/model-solution000014.solution -tests/exhaustive/issues/182/expected/model-solution000015.solution -tests/exhaustive/issues/182/expected/model.eprime -tests/exhaustive/issues/199/_old_issues_198.essence -tests/exhaustive/issues/199/expected/model-solution000001.solution -tests/exhaustive/issues/199/expected/model-solution000002.solution -tests/exhaustive/issues/199/expected/model-solution000003.solution -tests/exhaustive/issues/199/expected/model-solution000004.solution -tests/exhaustive/issues/199/expected/model-solution000005.solution -tests/exhaustive/issues/199/expected/model-solution000006.solution -tests/exhaustive/issues/199/expected/model.eprime -tests/exhaustive/issues/200/200.essence -tests/exhaustive/issues/200/expected/model_1_1.eprime -tests/exhaustive/issues/200/expected/model_1_2.eprime -tests/exhaustive/issues/200/expected/model_2_1.eprime -tests/exhaustive/issues/200/expected/model_2_2.eprime -tests/exhaustive/issues/212/1.param -tests/exhaustive/issues/212/212.essence -tests/exhaustive/issues/212/expected-time.txt -tests/exhaustive/issues/212/expected/model_1_1-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_1_1-1.eprime-param -tests/exhaustive/issues/212/expected/model_1_1.eprime -tests/exhaustive/issues/212/expected/model_1_2-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_1_2-1.eprime-param -tests/exhaustive/issues/212/expected/model_1_2.eprime -tests/exhaustive/issues/212/expected/model_1_3-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_1_3-1.eprime-param -tests/exhaustive/issues/212/expected/model_1_3.eprime -tests/exhaustive/issues/212/expected/model_1_4-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_1_4-1.eprime-param -tests/exhaustive/issues/212/expected/model_1_4.eprime -tests/exhaustive/issues/212/expected/model_2_1-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_2_1-1.eprime-param -tests/exhaustive/issues/212/expected/model_2_1.eprime -tests/exhaustive/issues/212/expected/model_2_2-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_2_2-1.eprime-param -tests/exhaustive/issues/212/expected/model_2_2.eprime -tests/exhaustive/issues/212/expected/model_2_3-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_2_3-1.eprime-param -tests/exhaustive/issues/212/expected/model_2_3.eprime -tests/exhaustive/issues/212/expected/model_2_4-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_2_4-1.eprime-param -tests/exhaustive/issues/212/expected/model_2_4.eprime -tests/exhaustive/issues/212/expected/model_3_1-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_3_1-1.eprime-param -tests/exhaustive/issues/212/expected/model_3_1.eprime -tests/exhaustive/issues/212/expected/model_3_2-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_3_2-1.eprime-param -tests/exhaustive/issues/212/expected/model_3_2.eprime -tests/exhaustive/issues/212/expected/model_3_3-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_3_3-1.eprime-param -tests/exhaustive/issues/212/expected/model_3_3.eprime -tests/exhaustive/issues/212/expected/model_3_4-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_3_4-1.eprime-param -tests/exhaustive/issues/212/expected/model_3_4.eprime -tests/exhaustive/issues/212/expected/model_4_1-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_4_1-1.eprime-param -tests/exhaustive/issues/212/expected/model_4_1.eprime -tests/exhaustive/issues/212/expected/model_4_2-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_4_2-1.eprime-param -tests/exhaustive/issues/212/expected/model_4_2.eprime -tests/exhaustive/issues/212/expected/model_4_3-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_4_3-1.eprime-param -tests/exhaustive/issues/212/expected/model_4_3.eprime -tests/exhaustive/issues/212/expected/model_4_4-1-solution000001.solution -tests/exhaustive/issues/212/expected/model_4_4-1.eprime-param -tests/exhaustive/issues/212/expected/model_4_4.eprime -tests/exhaustive/issues/213/2.param -tests/exhaustive/issues/213/213.essence -tests/exhaustive/issues/213/expected/model-2-solution000001.solution -tests/exhaustive/issues/213/expected/model-2-solution000002.solution -tests/exhaustive/issues/213/expected/model-2.eprime-param -tests/exhaustive/issues/213/expected/model.eprime -tests/exhaustive/issues/222/222.essence -tests/exhaustive/issues/222/expected/model-solution000001.solution -tests/exhaustive/issues/222/expected/model-solution000002.solution -tests/exhaustive/issues/222/expected/model-solution000003.solution -tests/exhaustive/issues/222/expected/model-solution000004.solution -tests/exhaustive/issues/222/expected/model.eprime -tests/exhaustive/issues/229/1.param -tests/exhaustive/issues/229/229.essence -tests/exhaustive/issues/229/expected/model-1-solution000001.solution -tests/exhaustive/issues/229/expected/model-1.eprime-param -tests/exhaustive/issues/229/expected/model.eprime -tests/exhaustive/issues/233/expected/model-solution000001.solution -tests/exhaustive/issues/233/expected/model-solution000002.solution -tests/exhaustive/issues/233/expected/model-solution000003.solution -tests/exhaustive/issues/233/expected/model-solution000004.solution -tests/exhaustive/issues/233/expected/model-solution000005.solution -tests/exhaustive/issues/233/expected/model-solution000006.solution -tests/exhaustive/issues/233/expected/model-solution000007.solution -tests/exhaustive/issues/233/expected/model-solution000008.solution -tests/exhaustive/issues/233/expected/model.eprime -tests/exhaustive/issues/233/minuspow.essence -tests/exhaustive/issues/236/1_2.param -tests/exhaustive/issues/236/2_4.param -tests/exhaustive/issues/236/expected/model-1_2-solution000001.solution -tests/exhaustive/issues/236/expected/model-1_2-solution000002.solution -tests/exhaustive/issues/236/expected/model-1_2.eprime-param -tests/exhaustive/issues/236/expected/model-2_4-solution000001.solution -tests/exhaustive/issues/236/expected/model-2_4-solution000002.solution -tests/exhaustive/issues/236/expected/model-2_4.eprime-param -tests/exhaustive/issues/236/expected/model.eprime -tests/exhaustive/issues/236/langfords.essence -tests/exhaustive/issues/261/_old_issues_260.essence -tests/exhaustive/issues/261/expected/model_1-p1.eprime-param -tests/exhaustive/issues/261/expected/model_1-p2.eprime-param -tests/exhaustive/issues/261/expected/model_1-p3-solution000001.solution -tests/exhaustive/issues/261/expected/model_1-p3-solution000002.solution -tests/exhaustive/issues/261/expected/model_1-p3-solution000003.solution -tests/exhaustive/issues/261/expected/model_1-p3-solution000004.solution -tests/exhaustive/issues/261/expected/model_1-p3-solution000005.solution -tests/exhaustive/issues/261/expected/model_1-p3-solution000006.solution -tests/exhaustive/issues/261/expected/model_1-p3.eprime-param -tests/exhaustive/issues/261/expected/model_1.eprime -tests/exhaustive/issues/261/expected/model_2-p1.eprime-param -tests/exhaustive/issues/261/expected/model_2-p2.eprime-param -tests/exhaustive/issues/261/expected/model_2-p3-solution000001.solution -tests/exhaustive/issues/261/expected/model_2-p3-solution000002.solution -tests/exhaustive/issues/261/expected/model_2-p3-solution000003.solution -tests/exhaustive/issues/261/expected/model_2-p3-solution000004.solution -tests/exhaustive/issues/261/expected/model_2-p3-solution000005.solution -tests/exhaustive/issues/261/expected/model_2-p3-solution000006.solution -tests/exhaustive/issues/261/expected/model_2-p3.eprime-param -tests/exhaustive/issues/261/expected/model_2.eprime -tests/exhaustive/issues/261/p1.param -tests/exhaustive/issues/261/p2.param -tests/exhaustive/issues/261/p3.param -tests/exhaustive/issues/263/_old_issues_262.essence -tests/exhaustive/issues/263/expected/model-p2-solution000001.solution -tests/exhaustive/issues/263/expected/model-p2.eprime-param -tests/exhaustive/issues/263/expected/model.eprime -tests/exhaustive/issues/263/p2.param -tests/exhaustive/issues/266_bools/_old_issues_265.essence -tests/exhaustive/issues/266_bools/expected/model-p1-solution000001.solution -tests/exhaustive/issues/266_bools/expected/model-p1.eprime-param -tests/exhaustive/issues/266_bools/expected/model.eprime -tests/exhaustive/issues/266_bools/p1.param -tests/exhaustive/issues/266_ints/_old_issues_265_ints.essence -tests/exhaustive/issues/266_ints/expected/model_1_1-p1-solution000001.solution -tests/exhaustive/issues/266_ints/expected/model_1_1-p1.eprime-param -tests/exhaustive/issues/266_ints/expected/model_1_1.eprime -tests/exhaustive/issues/266_ints/expected/model_1_2-p1-solution000001.solution -tests/exhaustive/issues/266_ints/expected/model_1_2-p1.eprime-param -tests/exhaustive/issues/266_ints/expected/model_1_2.eprime -tests/exhaustive/issues/266_ints/expected/model_2_1-p1-solution000001.solution -tests/exhaustive/issues/266_ints/expected/model_2_1-p1.eprime-param -tests/exhaustive/issues/266_ints/expected/model_2_1.eprime -tests/exhaustive/issues/266_ints/expected/model_2_2-p1-solution000001.solution -tests/exhaustive/issues/266_ints/expected/model_2_2-p1.eprime-param -tests/exhaustive/issues/266_ints/expected/model_2_2.eprime -tests/exhaustive/issues/266_ints/p1.param -tests/exhaustive/issues/268/_old_issues_267.essence -tests/exhaustive/issues/268/expected/model_1_1-solution000001.solution -tests/exhaustive/issues/268/expected/model_1_1-solution000002.solution -tests/exhaustive/issues/268/expected/model_1_1-solution000003.solution -tests/exhaustive/issues/268/expected/model_1_1-solution000004.solution -tests/exhaustive/issues/268/expected/model_1_1.eprime -tests/exhaustive/issues/268/expected/model_1_2-solution000001.solution -tests/exhaustive/issues/268/expected/model_1_2-solution000002.solution -tests/exhaustive/issues/268/expected/model_1_2-solution000003.solution -tests/exhaustive/issues/268/expected/model_1_2-solution000004.solution -tests/exhaustive/issues/268/expected/model_1_2.eprime -tests/exhaustive/issues/268/expected/model_2_1-solution000001.solution -tests/exhaustive/issues/268/expected/model_2_1-solution000002.solution -tests/exhaustive/issues/268/expected/model_2_1-solution000003.solution -tests/exhaustive/issues/268/expected/model_2_1-solution000004.solution -tests/exhaustive/issues/268/expected/model_2_1.eprime -tests/exhaustive/issues/268/expected/model_2_2-solution000001.solution -tests/exhaustive/issues/268/expected/model_2_2-solution000002.solution -tests/exhaustive/issues/268/expected/model_2_2-solution000003.solution -tests/exhaustive/issues/268/expected/model_2_2-solution000004.solution -tests/exhaustive/issues/268/expected/model_2_2.eprime -tests/exhaustive/issues/286/_issue_15.essence -tests/exhaustive/issues/286/expected-time.txt -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_1_1-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_1_1-p1.eprime-param -tests/exhaustive/issues/286/expected/model_1_1.eprime -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_1_2-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_1_2-p1.eprime-param -tests/exhaustive/issues/286/expected/model_1_2.eprime -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_1_3-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_1_3-p1.eprime-param -tests/exhaustive/issues/286/expected/model_1_3.eprime -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_1_4-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_1_4-p1.eprime-param -tests/exhaustive/issues/286/expected/model_1_4.eprime -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_2_1-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_2_1-p1.eprime-param -tests/exhaustive/issues/286/expected/model_2_1.eprime -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_2_2-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_2_2-p1.eprime-param -tests/exhaustive/issues/286/expected/model_2_2.eprime -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_2_3-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_2_3-p1.eprime-param -tests/exhaustive/issues/286/expected/model_2_3.eprime -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_2_4-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_2_4-p1.eprime-param -tests/exhaustive/issues/286/expected/model_2_4.eprime -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_3_1-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_3_1-p1.eprime-param -tests/exhaustive/issues/286/expected/model_3_1.eprime -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_3_2-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_3_2-p1.eprime-param -tests/exhaustive/issues/286/expected/model_3_2.eprime -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_3_3-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_3_3-p1.eprime-param -tests/exhaustive/issues/286/expected/model_3_3.eprime -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_3_4-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_3_4-p1.eprime-param -tests/exhaustive/issues/286/expected/model_3_4.eprime -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_4_1-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_4_1-p1.eprime-param -tests/exhaustive/issues/286/expected/model_4_1.eprime -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_4_2-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_4_2-p1.eprime-param -tests/exhaustive/issues/286/expected/model_4_2.eprime -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_4_3-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_4_3-p1.eprime-param -tests/exhaustive/issues/286/expected/model_4_3.eprime -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000001.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000002.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000003.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000004.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000005.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000006.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000007.solution -tests/exhaustive/issues/286/expected/model_4_4-p1-solution000008.solution -tests/exhaustive/issues/286/expected/model_4_4-p1.eprime-param -tests/exhaustive/issues/286/expected/model_4_4.eprime -tests/exhaustive/issues/286/p1.param -tests/exhaustive/issues/309/_issue_38.essence -tests/exhaustive/issues/309/expected/model-solution000001.solution -tests/exhaustive/issues/309/expected/model.eprime -tests/exhaustive/issues/335_1/_issue_64_1.essence -tests/exhaustive/issues/335_1/expected/model-p1-solution000001.solution -tests/exhaustive/issues/335_1/expected/model-p1.eprime-param -tests/exhaustive/issues/335_1/expected/model-p2-solution000001.solution -tests/exhaustive/issues/335_1/expected/model-p2.eprime-param -tests/exhaustive/issues/335_1/expected/model.eprime -tests/exhaustive/issues/335_1/p1.param -tests/exhaustive/issues/335_1/p2.param -tests/exhaustive/issues/335_2/expected/model-p-solution000001.solution -tests/exhaustive/issues/335_2/expected/model-p.eprime-param -tests/exhaustive/issues/335_2/expected/model.eprime -tests/exhaustive/issues/335_2/p.param -tests/exhaustive/issues/335_2/sonet.essence -tests/exhaustive/issues/336/expected/model-p-solution000001.solution -tests/exhaustive/issues/336/expected/model-p.eprime-param -tests/exhaustive/issues/336/expected/model.eprime -tests/exhaustive/issues/336/p.param -tests/exhaustive/issues/336/steel.essence -tests/exhaustive/issues/352/given/expected/model-p1-solution000001.solution -tests/exhaustive/issues/352/given/expected/model-p1.eprime-param -tests/exhaustive/issues/352/given/expected/model.eprime -tests/exhaustive/issues/352/given/given.essence -tests/exhaustive/issues/352/given/p1.param -tests/exhaustive/issues/354/expected/model.eprime -tests/exhaustive/issues/354/exponent.essence -tests/exhaustive/issues/362/362.essence -tests/exhaustive/issues/362/expected/model-solution000001.solution -tests/exhaustive/issues/362/expected/model.eprime -tests/exhaustive/issues/368/368.essence -tests/exhaustive/issues/368/expected/model-p-solution000001.solution -tests/exhaustive/issues/368/expected/model-p.eprime-param -tests/exhaustive/issues/368/expected/model.eprime -tests/exhaustive/issues/368/p.param -tests/exhaustive/issues/373/373.essence -tests/exhaustive/issues/373/expected/model-solution000001.solution -tests/exhaustive/issues/373/expected/model.eprime -tests/exhaustive/issues/382/382.essence -tests/exhaustive/issues/382/expected/model-solution000001.solution -tests/exhaustive/issues/382/expected/model-solution000002.solution -tests/exhaustive/issues/382/expected/model.eprime -tests/exhaustive/issues/391/391.essence -tests/exhaustive/issues/391/expected/model-p-solution000001.solution -tests/exhaustive/issues/391/expected/model-p-solution000002.solution -tests/exhaustive/issues/391/expected/model-p.eprime-param -tests/exhaustive/issues/391/expected/model.eprime -tests/exhaustive/issues/391/p.param -tests/exhaustive/issues/433/433.essence -tests/exhaustive/issues/433/expected/model_1_1_1-solution000001.solution -tests/exhaustive/issues/433/expected/model_1_1_1.eprime -tests/exhaustive/issues/433/expected/model_1_1_2-solution000001.solution -tests/exhaustive/issues/433/expected/model_1_1_2.eprime -tests/exhaustive/issues/433/expected/model_1_2_1-solution000001.solution -tests/exhaustive/issues/433/expected/model_1_2_1.eprime -tests/exhaustive/issues/433/expected/model_2_1_1-solution000001.solution -tests/exhaustive/issues/433/expected/model_2_1_1.eprime -tests/exhaustive/issues/433/expected/model_2_2_1-solution000001.solution -tests/exhaustive/issues/433/expected/model_2_2_1.eprime -tests/exhaustive/issues/433/expected/model_2_2_2-solution000001.solution -tests/exhaustive/issues/433/expected/model_2_2_2.eprime -tests/exhaustive/issues/436/436.essence -tests/exhaustive/issues/436/e.param -tests/exhaustive/issues/436/expected/model-e-solution000001.solution -tests/exhaustive/issues/436/expected/model-e.eprime-param -tests/exhaustive/issues/436/expected/model.eprime -tests/exhaustive/issues/441/441.essence -tests/exhaustive/issues/441/expected/model-solution000001.solution -tests/exhaustive/issues/441/expected/model.eprime -tests/exhaustive/mildly_interesting/cyclic_graph/cyc1.param -tests/exhaustive/mildly_interesting/cyclic_graph/cyc2.param -tests/exhaustive/mildly_interesting/cyclic_graph/cyclic_graph.essence -tests/exhaustive/mildly_interesting/cyclic_graph/expected-time.txt -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc1-solution000001.solution -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc1.eprime-param -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc2-solution000001.solution -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-cyc2.eprime-param -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-non-solution000001.solution -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model-non.eprime-param -tests/exhaustive/mildly_interesting/cyclic_graph/expected/model.eprime -tests/exhaustive/mildly_interesting/cyclic_graph/non.param -tests/exhaustive/mildly_interesting/gchq_2016/expected-time.txt -tests/exhaustive/mildly_interesting/gchq_2016/expected/model-inst-solution000001.solution -tests/exhaustive/mildly_interesting/gchq_2016/expected/model-inst.eprime-param -tests/exhaustive/mildly_interesting/gchq_2016/expected/model.eprime -tests/exhaustive/mildly_interesting/gchq_2016/gchq.essence -tests/exhaustive/mildly_interesting/gchq_2016/inst.param -tests/exhaustive/mildly_interesting/subsetSum/expected-time.txt -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p1-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p1.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p2-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p2-solution000002.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1-p2.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_1.eprime -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p1-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p1.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p2-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p2-solution000002.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2-p2.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_1_2.eprime -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p1-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p1.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p2-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p2-solution000002.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1-p2.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_1_2_1.eprime -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p1-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p1.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p2-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p2-solution000002.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1-p2.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_1_1.eprime -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p1-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p1.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p2-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p2-solution000002.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1-p2.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_1.eprime -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p1-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p1.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p2-solution000001.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p2-solution000002.solution -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2-p2.eprime-param -tests/exhaustive/mildly_interesting/subsetSum/expected/model_2_2_2.eprime -tests/exhaustive/mildly_interesting/subsetSum/p1.param -tests/exhaustive/mildly_interesting/subsetSum/p2.param -tests/exhaustive/mildly_interesting/subsetSum/subsetSum.essence -tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_1-solution000001.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_1-solution000002.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_1.eprime -tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_2-solution000001.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_2-solution000002.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_1_2.eprime -tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_1-solution000001.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_1-solution000002.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_1.eprime -tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_2-solution000001.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_2-solution000002.solution -tests/exhaustive/mildly_interesting/xkcd287/expected/model_2_2.eprime -tests/exhaustive/mildly_interesting/xkcd287/xkcd287.essence -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected-time.txt -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000007.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000008.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000009.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000010.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000011.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000012.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000013.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000014.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000015.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000016.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000017.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000018.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000019.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000020.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000021.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000022.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000023.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000024.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000025.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000026.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000027.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000028.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000029.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000030.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000031.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000032.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000033.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000034.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000035.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model-solution000036.solution -tests/exhaustive/tildeOrd/tildeOrd_function_01/expected/model.eprime -tests/exhaustive/tildeOrd/tildeOrd_function_01/tildeOrd_function_01.essence -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected-time.txt -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_1_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_2_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_1_3_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_1_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_2_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_2_3_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_1_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_2_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_mset_01/expected/model_3_3_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_mset_01/tildeOrd_mset_01.essence -tests/exhaustive/tildeOrd/tildeOrd_partition_01/additional-arguments.txt -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected-time.txt -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_4-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_1_4.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_4-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_2_4.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_4-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_3_4.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_3-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_3.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_4-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_partition_01/expected/model_4_4.eprime -tests/exhaustive/tildeOrd/tildeOrd_partition_01/tildeOrd_partition01.essence -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected-time.txt -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000007.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000008.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000009.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000010.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000011.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000012.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000013.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000014.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000015.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000016.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000017.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000018.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000019.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000020.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000021.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000022.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000023.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000024.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000025.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000026.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000027.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000028.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000029.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000030.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000031.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000032.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000033.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000034.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000035.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000036.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000037.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000038.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000039.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000040.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000041.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000042.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000043.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000044.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000045.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000046.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000047.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000048.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000049.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000050.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000051.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000052.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000053.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000054.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000055.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000056.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000057.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000058.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000059.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000060.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000061.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000062.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000063.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000064.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000065.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000066.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000067.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000068.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000069.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000070.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000071.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000072.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000073.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000074.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000075.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000076.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000077.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000078.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000079.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000080.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000081.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000082.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000083.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000084.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000085.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000086.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000087.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000088.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000089.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000090.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000091.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000092.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000093.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000094.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000095.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000096.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000097.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000098.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000099.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000100.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000101.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000102.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000103.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000104.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000105.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000106.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000107.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000108.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000109.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000110.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000111.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000112.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000113.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000114.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000115.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000116.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000117.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000118.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000119.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model-solution000120.solution -tests/exhaustive/tildeOrd/tildeOrd_relation_01/expected/model.eprime -tests/exhaustive/tildeOrd/tildeOrd_relation_01/tildeOrd_relation_01.essence -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected-time.txt -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_1_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_1_2_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_1_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_1_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_1.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000001.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000002.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000003.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000004.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000005.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2-solution000006.solution -tests/exhaustive/tildeOrd/tildeOrd_set_01/expected/model_2_2_2_2.eprime -tests/exhaustive/tildeOrd/tildeOrd_set_01/tildeOrd_set_01.essence -tests/parse_print/README.md -tests/parse_print/acceptOutput.sh -tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/007a2218db6f96b1069561e17b3198fb.eprime.essence -tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/model.expected.json -tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/stdout.expected -tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/00becdadf865e1668c0d5917a1c7e988.essence -tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/model.expected.json -tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/stdout.expected -tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/00c93ca5de9edf4765d4a3db4f26a13b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/model.expected.json -tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/stdout.expected -tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/00f3f6e00d6aaa0c44f7a7bfaeabf301.eprime.essence -tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/model.expected.json -tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/stdout.expected -tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/typecheck.expected -tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/0155ed23298044f98c24b049e9f674d5.essence -tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/model.expected.json -tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/stdout.expected -tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/016e7609f3aa273a2a9d8f851cda23b0.eprime.essence -tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/model.expected.json -tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/stdout.expected -tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/01a3688574d726ff7368c0b8e640be02.essence -tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/model.expected.json -tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/stdout.expected -tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/021ccd3de28fccf2cc4b495fdba30109.essence -tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/model.expected.json -tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/stdout.expected -tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/0259a42fad990d5498c3d9c6c199da94.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/model.expected.json -tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/stdout.expected -tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/0264be56cbed0b31969c94d730d856a7.essence -tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/02a5303be013b97d8241ff52e4c93499.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/model.expected.json -tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/stdout.expected -tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/02c3aa1d8caffbb46bfd62c52ace0e3e.solution.essence -tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/model.expected.json -tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/stdout.expected -tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/03336ac6e1e3f3c00e3feb6957358811.eprime.essence -tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/model.expected.json -tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/stdout.expected -tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/033e7117d1cbfb11af319112434a43c4.essence -tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/model.expected.json -tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/stdout.expected -tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/0360b7add8f8f957bcca54a56c5cae9c.eprime.essence -tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/model.expected.json -tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/stdout.expected -tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/0380e49407e31794a0b2dd8a573308eb.essence -tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/model.expected.json -tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/stdout.expected -tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/03959476e48f296a9ba7589337ba980d.essence -tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/model.expected.json -tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/stdout.expected -tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/039a29d0d4631598657b8b2611a05cf6.eprime.essence -tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/model.expected.json -tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/stdout.expected -tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/03e9b7dea0376c9fae09687f25f3c8d4.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/model.expected.json -tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/stdout.expected -tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/03fa5e0fb1010e34c88e5d085c726276.eprime.essence -tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/model.expected.json -tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/stdout.expected -tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/typecheck.expected -tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/03ff6c27828b6e1887413bd4d0ed9f38.essence -tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/model.expected.json -tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/stdout.expected -tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/045555e7bef90702ef51f7c87bdc67e8.essence -tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/04747f0c54d6be6d41109f6968f5d8de.essence -tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/model.expected.json -tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/stdout.expected -tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/0474d7b3e0fc1f9e80683bed58112545.essence -tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/model.expected.json -tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/stdout.expected -tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/0475bec5e477e09755c930ee9cb1e77c.essence -tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/model.expected.json -tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/stdout.expected -tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/050ad75061d29ef27db160ad376241d6.eprime.essence -tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/model.expected.json -tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/stdout.expected -tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/typecheck.expected -tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/053601c1257a61ff56823b814f88e436.essence -tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/model.expected.json -tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/stdout.expected -tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/05aae0de4708472b6282e13a9e58bb3d.eprime.essence -tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/model.expected.json -tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/stdout.expected -tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/05e320f8ca32d2f2b177c94e9726b3cc.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/model.expected.json -tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/stdout.expected -tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/0632e804c201340757931f64f9587edb.eprime.essence -tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/model.expected.json -tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/stdout.expected -tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/06541d8a69c61a87fd068728a83ff345.eprime.essence -tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/model.expected.json -tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/stdout.expected -tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/066c17b72e812917f52f48dbd28b117d.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/model.expected.json -tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/stdout.expected -tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/0690143a007f37b92ca7029e5fde5945.param.essence -tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/model.expected.json -tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/stdout.expected -tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/06af2d456d70394d86a8f427da584a37.eprime.essence -tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/model.expected.json -tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/stdout.expected -tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/typecheck.expected -tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/06bb092495b7a73ae357f41fd4e80545.essence -tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/model.expected.json -tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/stdout.expected -tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/06d74bb8bba2981d95e94d23c192bc87.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/model.expected.json -tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/stdout.expected -tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/06dace5aadd7cf91ed01dc91bfb2e7cd.essence -tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/model.expected.json -tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/stdout.expected -tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/06fce89389eaa7612382f7de2e6dad65.essence -tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/model.expected.json -tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/stdout.expected -tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/070857f26f3d80044277fc95c9981781.essence -tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/model.expected.json -tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/stdout.expected -tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/0740ecd60d44fbc0953daed81067709f.essence -tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/model.expected.json -tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/stdout.expected -tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/07462500024634d4acbf73dd0983dc6a.essence -tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/model.expected.json -tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/stdout.expected -tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/074ccc54476152ac02322672f43fbf1a.essence -tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/model.expected.json -tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/stdout.expected -tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/074ea9fbacd659cc463b376a2772bf13.essence -tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/model.expected.json -tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/stdout.expected -tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/075527221a657e78d6f1c0a6a335371f.eprime.essence -tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/model.expected.json -tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/stdout.expected -tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/0768a92397557ea2888ecf73fb6e055d.essence -tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/model.expected.json -tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/stdout.expected -tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/076e091e7edae3a96b247ca22c261501.eprime.essence -tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/model.expected.json -tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/stdout.expected -tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/07981afd6731fa941b2cf66c663da9d7.essence -tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/079c0d8d0a3ed063ab9c1d3d131afd14.essence -tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/model.expected.json -tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/stdout.expected -tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/07ccf22dda5e5cd7bc5859d6a401c03b.essence -tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/model.expected.json -tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/stdout.expected -tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/07e375a767ad55521e22d0265a6d24cb.essence -tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/model.expected.json -tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/stdout.expected -tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/08029c83a2abc0a4e98cbbf0a9a9a347.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/model.expected.json -tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/stdout.expected -tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/0803a6fdd3744357ffa70483fe5deccf.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/model.expected.json -tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/stdout.expected -tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/083fa3749c456a0e2b9ad8f1da77be70.param.essence -tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/model.expected.json -tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/stdout.expected -tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/084959e428c16c5485c7775b20480e40.eprime.essence -tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/model.expected.json -tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/stdout.expected -tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/typecheck.expected -tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/089427b807ae2e05bb8e2512153035ee.eprime.essence -tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/model.expected.json -tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/stdout.expected -tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/typecheck.expected -tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/0896777a9c9ec7a2944d17b0f832af27.eprime.essence -tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/model.expected.json -tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/stdout.expected -tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/typecheck.expected -tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/08bd587a797e6ddb39bd8c64d0fba266.eprime.essence -tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/model.expected.json -tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/stdout.expected -tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/0919f28f3d8bd04dcd2c87324b3b522b.essence -tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/model.expected.json -tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/stdout.expected -tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/0925a634b21e50be5bdb48c638b16daf.essence -tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/model.expected.json -tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/stdout.expected -tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/092fa9099eabbebe49ccdbe7aa221899.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/model.expected.json -tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/stdout.expected -tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/09421d66ce386f99a6901d89dfd34524.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/model.expected.json -tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/stdout.expected -tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/0994fae329ddb38862941034298722b6.essence -tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/model.expected.json -tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/stdout.expected -tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/09a49f240282fdecfa5af091729c5286.essence -tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/model.expected.json -tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/stdout.expected -tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/09ac2051b1e1a54e1b7a3b051b78bcd3.essence -tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/model.expected.json -tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/stdout.expected -tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/0a4c5d1f2a6f82e1a72b0732362906b6.eprime.essence -tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/model.expected.json -tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/stdout.expected -tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/typecheck.expected -tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/0a660c9dc8b5bd092e20366d83999c79.eprime.essence -tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/model.expected.json -tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/stdout.expected -tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/0a758b1be1256dd86b8bdf8a61478641.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/model.expected.json -tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/stdout.expected -tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/0aadcc45dd750d57e64b53ef485f4f4c.param.essence -tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/model.expected.json -tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/stdout.expected -tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/0ac27d5763cae0514c10af9c389af127.essence -tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/model.expected.json -tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/stdout.expected -tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/0ad8f28def383f1fc962a54c34ab1889.eprime.essence -tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/model.expected.json -tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/stdout.expected -tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/0ae78831341ee9110d855dbcb3f31a79.essence -tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/model.expected.json -tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/stdout.expected -tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/0aeec4358f391008e582adce57fbc61b.eprime.essence -tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/model.expected.json -tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/stdout.expected -tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/0af834366fe107643dbc2b243c7517fb.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/model.expected.json -tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/stdout.expected -tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/0b52e52938a256e58e895b782c1e683f.eprime.essence -tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/model.expected.json -tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/stdout.expected -tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/0b621881d60dee823364b01fd40f9769.eprime.essence -tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/model.expected.json -tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/stdout.expected -tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/0b9c64fada86488ac3024b53ef27cb08.essence -tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/model.expected.json -tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/stdout.expected -tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/0bd1fe14c9f8f1a362b0ea04d01e01d7.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/0bedd75963d26fd9b9e62b65f97c8aca.eprime.essence -tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/model.expected.json -tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/stdout.expected -tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/0c00a0c0bbf8b7bc44081ab08cdaf350.essence -tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/model.expected.json -tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/stdout.expected -tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/0c01f39b639fb7ced4c0bab3bd2bafda.essence -tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/model.expected.json -tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/stdout.expected -tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/0c20348d77091f47ec24a50fe7470612.param.essence -tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/model.expected.json -tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/stdout.expected -tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/0c658c87b2dccdfb865141a6f5f6ff28.essence -tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/model.expected.json -tests/parse_print/autogen-bilals-fixed/0c658c87b2dccdfb865141a6f5f6ff28/stdout.expected -tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/0c96216ee08ab936ef4f94f08ff71dfe.eprime.essence -tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/model.expected.json -tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/stdout.expected -tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/0c9c015c4746f7640b730e0721cab58e.essence -tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/model.expected.json -tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/stdout.expected -tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/0cad08c5a7a5756492aa63fef3d9d17a.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/model.expected.json -tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/stdout.expected -tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/0cc229a553645189bafef737f9fbf3e1.essence -tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/0cccb290abf55e6b39410c2047810443.essence -tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/model.expected.json -tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/stdout.expected -tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/0d281ee0a9f58fff63f45f8f69b891d0.eprime.essence -tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/model.expected.json -tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/stdout.expected -tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/typecheck.expected -tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/0d330c525342e10bf0f84ec1bc0ca717.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/model.expected.json -tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/stdout.expected -tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/0d57246ca2b2deb63c1aa6a5fc286fa2.eprime.essence -tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/model.expected.json -tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/stdout.expected -tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/0d5833fba9e60ef0afe2b72ec4f531b6.essence -tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/model.expected.json -tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/stdout.expected -tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/0d757bbc1bf600cc00cccc23dd0dbabb.eprime.essence -tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/model.expected.json -tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/stdout.expected -tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/0d866300fcdf5df83d8893e36dcccb7e.eprime.essence -tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/model.expected.json -tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/stdout.expected -tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/0dbfb0f638226cf7e364c76a3798a70c.eprime.essence -tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/model.expected.json -tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/stdout.expected -tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/0e06715ce07872986e298d19cbeec669.essence -tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/model.expected.json -tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/stdout.expected -tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/0e772b3db5ba04ad8475bffb414dd5c5.essence -tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/model.expected.json -tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/stdout.expected -tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/0e971f829a5cc4cdbade3dba72218850.param.essence -tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/model.expected.json -tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/stdout.expected -tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/0ed115e4ee3afb7cae4c8f89695c5fdd.eprime.essence -tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/model.expected.json -tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/stdout.expected -tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/typecheck.expected -tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/0f19026c66d84ffd7756ab917f5fd63b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/model.expected.json -tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/stdout.expected -tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/0f5007250906426012eb6d31cde3ced4.essence -tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/model.expected.json -tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/stdout.expected -tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/0f7be718664287a43c17484e7d9700a8.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/model.expected.json -tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/stdout.expected -tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/0f8881773ddd74408625e0a099d727f2.essence -tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/model.expected.json -tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/stdout.expected -tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/0f9d1d3f64cf8a8ca5bc17c26cddd57c.eprime.essence -tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/model.expected.json -tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/stdout.expected -tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/0fd5fe93ff8e642e8d0e612b7d9c9128.param.essence -tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/model.expected.json -tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/stdout.expected -tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/0fdee1fae5a38b16267d42b6c9b61bf3.eprime.essence -tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/model.expected.json -tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/stdout.expected -tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/1076b971d7d8705dc501cda8fdd64d1e.essence -tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/model.expected.json -tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/stdout.expected -tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/10842546df041836d584225b50305c9e.eprime.essence -tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/model.expected.json -tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/stdout.expected -tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/10c99281fb90ea99297131629d79951b.eprime.essence -tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/model.expected.json -tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/stdout.expected -tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/10ee9f7ba50dfd3e0bdcc8ad341640d3.eprime.essence -tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/model.expected.json -tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/stdout.expected -tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/typecheck.expected -tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/113dc767ea8a8a8eecaf29ccd9225fd5.essence -tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/model.expected.json -tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/stdout.expected -tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/114ddabab88b636d4986cf3ebfa7a669.essence -tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/model.expected.json -tests/parse_print/autogen-bilals-fixed/114ddabab88b636d4986cf3ebfa7a669/stdout.expected -tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/1161723f0b235e969e15d44ebe624bd7.eprime.essence -tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/model.expected.json -tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/stdout.expected -tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/1163dc506fb63909d056f8a72b791525.param.essence -tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/model.expected.json -tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/stdout.expected -tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/116bd6767525b8e40249c29ddfd29a89.eprime.essence -tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/model.expected.json -tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/stdout.expected -tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/11753bcdac8d3d40e9e8bdc76724e751.essence -tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/model.expected.json -tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/stdout.expected -tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/118db58b5c3d6bda6c3a3cf86dad8ce4.eprime.essence -tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/model.expected.json -tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/stdout.expected -tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/1191a8fe91feb6b1ae455420e223bf6e.eprime.essence -tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/model.expected.json -tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/stdout.expected -tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/11b26443eae52a9cfd2a5bff8cf05584.essence -tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/model.expected.json -tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/stdout.expected -tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/11dba4c0713a4dcb2984fe6c6920ddd9.essence -tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/model.expected.json -tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/stdout.expected -tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/11fa8fe8913ee7ee1f081d95b6063a79.eprime.essence -tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/model.expected.json -tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/stdout.expected -tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/120a84aa329880477a4406a117b64f80.essence -tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/model.expected.json -tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/stdout.expected -tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/1221facde25a185cca2874ad862470c6.eprime.essence -tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/model.expected.json -tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/stdout.expected -tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/125fd9801f7026ac0fa6994e988b5fa1.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/model.expected.json -tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/stdout.expected -tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/1291155001a2b89117838f7032c4ab5e.eprime.essence -tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/model.expected.json -tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/stdout.expected -tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/12a26212ed2df2f0e3f50bc0482c8a00.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/model.expected.json -tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/stdout.expected -tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/12c6764f3c578badfe13d0f23b70d7f8.essence -tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/model.expected.json -tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/stdout.expected -tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/12c7a4d3cd1215d8cc58cbc32df46f67.essence -tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/model.expected.json -tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/stdout.expected -tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/12e7888da09101377ca1b913f2c9a4e1.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/13130017359cbf52ad8828ef62a3cbc7.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/model.expected.json -tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/stdout.expected -tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/133e28ad190db7648f33ec2059536160.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/model.expected.json -tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/stdout.expected -tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/typecheck.expected -tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/13700d10e259531c00b3ea61a5a5222e.eprime.essence -tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/model.expected.json -tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/stdout.expected -tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/139f9520357e237c8f0d1489daa512e8.eprime.essence -tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/typecheck.expected -tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/13b0ebaf89e84d142f13573d217cbf3e.essence -tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/model.expected.json -tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/stdout.expected -tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/13eda547bb0b8ccccb4b8cc348f66d91.essence -tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/model.expected.json -tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected -tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/1406dd256e259c3a3cdf3491514d5582.essence -tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/model.expected.json -tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/stdout.expected -tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/140fedc8e27d8ab36291cabdb559e4f9.essence -tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/model.expected.json -tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/stdout.expected -tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/1424c6a3f9e90a484eb4c3bf0b9c955c.eprime.essence -tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/model.expected.json -tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/stdout.expected -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected -tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/1452fe35ebcfc58b9e931281b561c063.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/model.expected.json -tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/stdout.expected -tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/1453aade27b19262c1d8f7ed3ed1f338.eprime.essence -tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/model.expected.json -tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/stdout.expected -tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/14af9ffdb4766ee9282e4fd1c911d0af.solution.essence -tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/model.expected.json -tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/stdout.expected -tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/14df2d01d66f6af162ca46eaec94a0b3.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/model.expected.json -tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/stdout.expected -tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/1563c6f8e22f942162293f1b693a40dc.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/model.expected.json -tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/stdout.expected -tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/15916e89942607cd189f87dbe1a6552b.eprime.essence -tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/model.expected.json -tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/stdout.expected -tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/typecheck.expected -tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/15dd0fcd1eb5e61ce1542f4c402efb24.essence -tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/model.expected.json -tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/stdout.expected -tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/15e1dc2db1941b7d1260d538875b123c.essence -tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/model.expected.json -tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/stdout.expected -tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/164923d945fc6b906d47491810f5ced0.essence -tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/model.expected.json -tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/stdout.expected -tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/168ad762cd3c4082865928d62f9353ef.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/16aa3dcc852ae03bf23b5ae7a4992f5d.essence -tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/model.expected.json -tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/stdout.expected -tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/16ca06648eec73b69aa709f229b91d2a.essence -tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/model.expected.json -tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/stdout.expected -tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/16fd8e97c063710963e8c810fe6d2065.eprime.essence -tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/model.expected.json -tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/stdout.expected -tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/170f86c11e713e23467198c2e2669cbd.essence -tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/model.expected.json -tests/parse_print/autogen-bilals-fixed/170f86c11e713e23467198c2e2669cbd/stdout.expected -tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/1751869087ec45c65da9335dec93113d.eprime.essence -tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/model.expected.json -tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/stdout.expected -tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/176498a86f4f6aa56d13e84f835917e5.eprime.essence -tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/model.expected.json -tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/stdout.expected -tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/typecheck.expected -tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/1798bcfa6ad9e714b74ba5bc6d6ee29f.eprime.essence -tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/model.expected.json -tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/stdout.expected -tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/180d7672cb7d537c63efd16a3a532538.essence -tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/model.expected.json -tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/stdout.expected -tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/183ea55a9258e18d69a7b15d4f823c67.essence -tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/model.expected.json -tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/stdout.expected -tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/186bb4606d62808dd6e2822b2656632e.essence -tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/model.expected.json -tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/stdout.expected -tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/188d7225b206376219282a15ea98bac9.solution.essence -tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/model.expected.json -tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/stdout.expected -tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/18ac1fd8e4b3b77ce9495cbec2ed5ebb.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/model.expected.json -tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/stdout.expected -tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/18bf9a38ee59e4bcaebd478b9f980662.eprime.essence -tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/model.expected.json -tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/stdout.expected -tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/typecheck.expected -tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/18d2935f6d52dff23b827d77299071c3.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/model.expected.json -tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/stdout.expected -tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/1920a6bb2dcadc43b598f6c3a9603236.eprime.essence -tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/model.expected.json -tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/stdout.expected -tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/1934d72addb773493b0a745089dcfcb5.eprime.essence -tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/model.expected.json -tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/stdout.expected -tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/193b59cb1d0a923e59fe2ef78df9864e.essence -tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/model.expected.json -tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/stdout.expected -tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/1950a34566222ab7172290554c9f8905.essence -tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/model.expected.json -tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/stdout.expected -tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/19714c452f09e52c3e87329c7be6c781.eprime.essence -tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/model.expected.json -tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/stdout.expected -tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/1990c76f1882ff7413c5cc43059b78fe.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/19a95dc40bdd55fa709e39952798729e.essence -tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/model.expected.json -tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/stdout.expected -tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/19d1064ef4c8d198598abfefdf3256bf.essence -tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/model.expected.json -tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/stdout.expected -tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/1a187aeb382549fa2e585baabb219dfc.essence -tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/model.expected.json -tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/stdout.expected -tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/1a4f723156644e60a38ec0e325765e17.essence -tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/model.expected.json -tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/stdout.expected -tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/1a74e085d474d94e75d0b67e14b3dc55.essence -tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/model.expected.json -tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/stdout.expected -tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/1a969256eca371d1564ac6ad94eb6d41.essence -tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/model.expected.json -tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/stdout.expected -tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/1abb07c9ef975b96bf575bfbe8f442b5.eprime.essence -tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/model.expected.json -tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/stdout.expected -tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/typecheck.expected -tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/1af98fd7990664bf2b97a91da53ca098.essence -tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/model.expected.json -tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/stdout.expected -tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/1b18244524b60fc69009f17d0221b5a5.eprime.essence -tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/model.expected.json -tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/stdout.expected -tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/1b6c1179b1a92bd88edaeed5c5bfb398.eprime.essence -tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/model.expected.json -tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/stdout.expected -tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/1ba7bf4085ce352d5ed369f68409a4fc.essence -tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/model.expected.json -tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/stdout.expected -tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/1ba964336829ef6ac8b9e2aabd3aca98.essence -tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/model.expected.json -tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/stdout.expected -tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/1bcbd3752f5aa0035b2cfc8af246772f.essence -tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/model.expected.json -tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/stdout.expected -tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/1beae32c0cb2a99dc50a9e2b4465cfad.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/model.expected.json -tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/stdout.expected -tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/1c42766c9daae67c81a785f36b3546e8.eprime.essence -tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/typecheck.expected -tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7.essence -tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/1cc10a8b3112922d6196037d563706a2.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/model.expected.json -tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/stdout.expected -tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/1cc14f70f3fd8130affee799d5120a35.eprime.essence -tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/model.expected.json -tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/stdout.expected -tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/1cd562165f0706928e25084fc1a9e78d.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/model.expected.json -tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/stdout.expected -tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/1cd5a62f400692a5b85a18e80af82ab6.essence -tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/model.expected.json -tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/stdout.expected -tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/1cf3a95fce83f1c149da1709b032664f.essence -tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/model.expected.json -tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/stdout.expected -tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/1d271b0b60ae2e3474a67901cdcc8030.essence -tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/model.expected.json -tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/stdout.expected -tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/1d3d858ddd88a4a03de0614d73e6ad47.eprime.essence -tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/model.expected.json -tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/stdout.expected -tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/1d82ff9bf3543fa3bb751d09c3d2f55a.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/model.expected.json -tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/stdout.expected -tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/1db390590fecb4c5a938f3dfbaf3d4fe.essence -tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/1dec07ace23b77f34d3cc74026ca13cc.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/model.expected.json -tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/stdout.expected -tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/1e24a75f48bb605b136de436729d97e4.eprime.essence -tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/model.expected.json -tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/stdout.expected -tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/1e3c2ea5eb1b0a1eb092e59c73e21e65.eprime.essence -tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/model.expected.json -tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/stdout.expected -tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/1e9a9285f7d67b725602beae7d53730a.eprime.essence -tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/model.expected.json -tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/stdout.expected -tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/1ee0285168847690ddaad9da70751095.eprime.essence -tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/model.expected.json -tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/stdout.expected -tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/typecheck.expected -tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/1efbb4d6bcec1259f2d76475d8afd94c.essence -tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/model.expected.json -tests/parse_print/autogen-bilals-fixed/1efbb4d6bcec1259f2d76475d8afd94c/stdout.expected -tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/1f06ad8f5f3af2f71f4f0c51ebd57143.eprime.essence -tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/model.expected.json -tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/stdout.expected -tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/1f7ccc0b17cc2f7840f65b31f2c17f05.eprime.essence -tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/model.expected.json -tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/stdout.expected -tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/1ff1d401284fe32b6639121ce47b3995.essence -tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/model.expected.json -tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/stdout.expected -tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/20033235278db80e48685c68146b29e1.eprime.essence -tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/200d78834a42ebeb6f12a80d41000004.eprime.essence -tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/model.expected.json -tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/stdout.expected -tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/typecheck.expected -tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/2014ff2f904414bb2471250b0da1a297.eprime.essence -tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/model.expected.json -tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/stdout.expected -tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/202ee87d3a92ce3781d914239e091097.eprime.essence -tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/model.expected.json -tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/stdout.expected -tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/20320e49c559f105460436e6d7d8a1a7.essence -tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/208ec24add8f7b331f0829f7296b04c7.eprime.essence -tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/model.expected.json -tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/stdout.expected -tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/typecheck.expected -tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/209a9f520d1bcf559a4786b8e19af490.essence -tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/model.expected.json -tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/stdout.expected -tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/20a87ed854619dfbc1f01b026e5db67b.essence -tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/model.expected.json -tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/stdout.expected -tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/20cd5c06ef131fd1e956636bd3674eab.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/model.expected.json -tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/stdout.expected -tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/20d50690b43d273ec5f6d147b81dcc6a.eprime.essence -tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/model.expected.json -tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/stdout.expected -tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/2126dcb9f7010a648e265451e068956e.eprime.essence -tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/model.expected.json -tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/stdout.expected -tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/214884d4c5fdd90ec55a3b9ce63e1fcb.essence -tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/model.expected.json -tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/stdout.expected -tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/215a06c72d89bae1df79e244d678777b.essence -tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/model.expected.json -tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/stdout.expected -tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/215cdd562fcbb2db9e1f17a8ebf9f4aa.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/model.expected.json -tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/stdout.expected -tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/218bac9b68dc4b63fe9a56e00eccb05d.essence -tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/model.expected.json -tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/stdout.expected -tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/21be920dffbaacd7e2b6b06b72cb75c0.essence -tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/model.expected.json -tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/stdout.expected -tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/22163685d87afbc145bc90463cad981b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/model.expected.json -tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/stdout.expected -tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/223d20931c36c3d4a55f5caf3e7564c6.essence -tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/model.expected.json -tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/stdout.expected -tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/22477309ce0401a8d76f05db531a8477.eprime.essence -tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/model.expected.json -tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/stdout.expected -tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/typecheck.expected -tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/22699b3de15c5a4e88c1280a03a21bf2.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/model.expected.json -tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/stdout.expected -tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/227cfa94a3ad9346cb712cd351e4430c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/model.expected.json -tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/stdout.expected -tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/22a07994eba0be1abf0548df84328b0b.essence -tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/model.expected.json -tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/stdout.expected -tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/22e00fd813567d097f185ffe48d25405.essence -tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/model.expected.json -tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/stdout.expected -tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/22e79240911812510abe6f658999a682.essence -tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/model.expected.json -tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/stdout.expected -tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/231d88eeb42f490d20cc4a0ad92598a0.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/model.expected.json -tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/stdout.expected -tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/236900528ff2e3b09f2ed67c70fca23a.solution.essence -tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/model.expected.json -tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/stdout.expected -tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/23bad3eae7b82e1742600d53802770fd.eprime.essence -tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/model.expected.json -tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/stdout.expected -tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/typecheck.expected -tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/23e62b64c5943a34984dd988a2cbf643.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/model.expected.json -tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/stdout.expected -tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/typecheck.expected -tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/23f59fd02b1d9c3816b417a8727e418c.eprime.essence -tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/model.expected.json -tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/stdout.expected -tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/244286cc2dd03e6c340ffdd9321b5fe7.essence -tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/model.expected.json -tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/stdout.expected -tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/248c887518286002b0579d1615279b51.essence -tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/model.expected.json -tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/stdout.expected -tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/24cfea547a363a6a1cc5a0a32bafb139.essence -tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/model.expected.json -tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/stdout.expected -tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/256afa47464e2a7d839a0636d335714b.eprime.essence -tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/model.expected.json -tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/stdout.expected -tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/typecheck.expected -tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/25c731b81cdfba9a1930f6d921e9fc53.essence -tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/model.expected.json -tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/stdout.expected -tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/25dea2c84343f1fb62940c93170003b6.essence -tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/model.expected.json -tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/stdout.expected -tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/26130490f798a38f76f8a8f262a2d580.essence -tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/model.expected.json -tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/stdout.expected -tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/2616f49a05149925625ef0cfc389d39d.essence -tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/model.expected.json -tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/stdout.expected -tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/267e4c02702f032d831c2bfc66efbf69.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/model.expected.json -tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/stdout.expected -tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/2695f2a6d656aaeb483f6daccc9be82e.solution.essence -tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/model.expected.json -tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/stdout.expected -tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/26dded8ab8def8b4a6b52bf204ce84cb.essence -tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/model.expected.json -tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/stdout.expected -tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/26e61daabf3a56aa76626323f893ecdf.essence -tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/model.expected.json -tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/stdout.expected -tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/271129bfe3dc022817fb1fc98d1e4d0e.eprime.essence -tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/model.expected.json -tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/stdout.expected -tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/274393cdbcac9f3c51b82f0a0b399337.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/model.expected.json -tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/stdout.expected -tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/274676d6fa88ececffc2c98527414e51.essence -tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/model.expected.json -tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/stdout.expected -tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/27751403de10fefc991154fbb6c3f49a.essence -tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/model.expected.json -tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/stdout.expected -tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/280eb734981fa1f0b346703c1bba454e.essence -tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/model.expected.json -tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/stdout.expected -tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence -tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected -tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/2835cf8d0df29e21336c9c33319cc86f.essence -tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/model.expected.json -tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/stdout.expected -tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/286dbf175e6155dc1128296f827efac7.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/model.expected.json -tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/stdout.expected -tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/2885de1be0c03479fc478aa6b6530488.essence -tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/model.expected.json -tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/stdout.expected -tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/28a2610455b6ca94984fa755c0d52d10.essence -tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/model.expected.json -tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/stdout.expected -tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/28d57f1390d80ea32a301bbb2a3b9b0c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/model.expected.json -tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/stdout.expected -tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/28f120542d453f2cbf15d3bfab27db39.essence -tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/model.expected.json -tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/stdout.expected -tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/290739011e12e610230d80d971fabb30.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/model.expected.json -tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/stdout.expected -tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/2910579caa938519c953fccd48611fee.eprime.essence -tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/model.expected.json -tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/stdout.expected -tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/2931d8c17365e4f7d93c5215f540866f.eprime.essence -tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/model.expected.json -tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/stdout.expected -tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/2956857a22d9d2330490c41c8b5a4142.essence -tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/model.expected.json -tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/stdout.expected -tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/295854f4230fa755cbb4cb009d709f41.essence -tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/model.expected.json -tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/stdout.expected -tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/29a7a43c3a0b3215a4d95c077acd7dbb.param.essence -tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/model.expected.json -tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/stdout.expected -tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/29d3e117bad5d1b803ac394d408bae00.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/model.expected.json -tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/stdout.expected -tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/29d792e7abc6c92b11ccc1d7c38d0115.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/model.expected.json -tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/stdout.expected -tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/29df720249f3d8f260f956c798d99130.essence -tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/model.expected.json -tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/stdout.expected -tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/2a33caf2e89e26f6159e0cdc2cb9295a.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/model.expected.json -tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/stdout.expected -tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/2a9a716bc12b6582b04e4755977c7cd1.essence -tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/model.expected.json -tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/stdout.expected -tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/2aa2903816b702397e1e91a209041078.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/model.expected.json -tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/stdout.expected -tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/2abab26b761b711b383086f57689adc5.eprime.essence -tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/model.expected.json -tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/stdout.expected -tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/typecheck.expected -tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/2ace48adfbcb46a388e1477947575ad1.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/model.expected.json -tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/stdout.expected -tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/2b13a16f904708b301f055247df10317.essence -tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/model.expected.json -tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/stdout.expected -tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/2b2e0dbeb429e6c181ea07d40a5be562.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/model.expected.json -tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/stdout.expected -tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/2b44f45e2835003c9493d53c7d0bce3c.solution.essence -tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/model.expected.json -tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/stdout.expected -tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/2b93c88cac468cf8763b8ae9400f129b.param.essence -tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/model.expected.json -tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/stdout.expected -tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/2ba20be39a7083fcaf0429a5caff6f38.eprime.essence -tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/model.expected.json -tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/stdout.expected -tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/2bbd1982f26a7d5246ced1dd6540d26e.eprime.essence -tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/model.expected.json -tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/stdout.expected -tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/2bf8e4253a94be54961863e701c8ffcb.essence -tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/model.expected.json -tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/stdout.expected -tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/2bff2266baf0a3ae0392de70d0401ccb.essence -tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/model.expected.json -tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/stdout.expected -tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/2c0b8c3b47aaa96a6b45785659d54fb6.essence -tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/model.expected.json -tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/stdout.expected -tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/2c66ae20ba104065bc0b14b9b0eb8e2c.eprime.essence -tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/model.expected.json -tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/stdout.expected -tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/2c742d849b8dba095be529f30258c776.eprime.essence -tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/model.expected.json -tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/stdout.expected -tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/2c846a528fd3ad070b1e71f1019cbca2.essence -tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/model.expected.json -tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/stdout.expected -tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/2cb879c833748cef779f84df872b0d71.eprime.essence -tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/model.expected.json -tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/stdout.expected -tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/typecheck.expected -tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/2d9db50cec26e6c04c8774aa5009784e.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/model.expected.json -tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/stdout.expected -tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/2dd4d3457ed3dbc49c35657e796f93cd.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/model.expected.json -tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/stdout.expected -tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/2de136cea37f8c7c6c2dbce3ad7bfe52.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/model.expected.json -tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/stdout.expected -tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/2e2ad8fe1fae6676863edda2c078d2f2.eprime.essence -tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/model.expected.json -tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/stdout.expected -tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/2e43201f0aa8f9929f80b0120d9079ec.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/2ed6c1a74ab623d07ac433d04ecc445b.essence -tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/model.expected.json -tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/stdout.expected -tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/2f9ae530589fb178e8010506c8b1cd19.eprime.essence -tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/model.expected.json -tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/stdout.expected -tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/2fd1cf57932b12ef3d73f4af22aae142.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/model.expected.json -tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/stdout.expected -tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/2fdd1fe71fbea3100295ce989ffb06c1.essence -tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/model.expected.json -tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/stdout.expected -tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/2fedddbce618e737d97ee1f14cd19b0e.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/model.expected.json -tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/stdout.expected -tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/300902ac80dc424a40dc0a1972aadd07.eprime.essence -tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/model.expected.json -tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/stdout.expected -tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/3009726d0f8cf721799c1fbcaa0832f4.eprime.essence -tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/model.expected.json -tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/stdout.expected -tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/3028bd497e070409b07f06f6358eddaf.essence -tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/model.expected.json -tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/stdout.expected -tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/307ee3c7b82295b342954958580d321e.eprime.essence -tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/model.expected.json -tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/stdout.expected -tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/3092be0de62c362cd1c49042c585105f.eprime.essence -tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/model.expected.json -tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/stdout.expected -tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/30b305e0e87e640981fb5cad77d6869e.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/model.expected.json -tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/stdout.expected -tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/30cae7ed2fd84c58fd597a84edc6d04a.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/model.expected.json -tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/stdout.expected -tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/30f85c027c537ca7218acc2a52c96059.solution.essence -tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/model.expected.json -tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/stdout.expected -tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/311e53dc2d7c804fb9e0cfc1f43c37bf.eprime.essence -tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/model.expected.json -tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/stdout.expected -tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/314f8686aea5bfb35c4e5ad216d32f41.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/model.expected.json -tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/stdout.expected -tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/31541f8fbc7f16af462bb853b23b0a8b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/model.expected.json -tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/stdout.expected -tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/31626cff6d7b6ac63912726cdcd2e942.essence -tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/model.expected.json -tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/stdout.expected -tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/317b3394b1cff127ea38f233dda04a30.essence -tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/model.expected.json -tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/stdout.expected -tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/31f64ce050e6687e0af4fa4475b7e8b5.essence -tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/model.expected.json -tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/stdout.expected -tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/31f683d305b86f1023d4853cf84d6901.eprime.essence -tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/model.expected.json -tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/stdout.expected -tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/31ff3b11d8cf1b8998506f6c1933055c.eprime.essence -tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/model.expected.json -tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/stdout.expected -tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/32359fa6e824152fabe774a5f32c5caf.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/model.expected.json -tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/stdout.expected -tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/324bc97b10d8b4c59f3cd741afe3ea96.essence -tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/model.expected.json -tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/stdout.expected -tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/3251aed0fcb8fca4e92b7f6316d5aa1d.eprime.essence -tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/model.expected.json -tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/stdout.expected -tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/327977f393264ccb96efe5c4bae0368d.essence -tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/model.expected.json -tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/stdout.expected -tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/3286a11865622f212644d3eb65e0cb8d.essence -tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/model.expected.json -tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/stdout.expected -tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/32ba15f900d2899e277de2884b82db33.eprime.essence -tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/model.expected.json -tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/stdout.expected -tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/32dcb1f6e9ea6cffcddc831a9b09fe09.essence -tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/model.expected.json -tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/stdout.expected -tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/32e72d1f75d8bcb92f9685b706dc29c1.eprime.essence -tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/model.expected.json -tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/stdout.expected -tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/32f8563c6daa93f905b86ab15f412aa7.eprime.essence -tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/model.expected.json -tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/stdout.expected -tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/331484cef605f21f09c5f0303aa4b8a7.eprime.essence -tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/33b13b1c09e9caeee8805e2238560dcd.essence -tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/model.expected.json -tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/stdout.expected -tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/33b374caf91a36a3c3213f6735ffeb85.essence -tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/model.expected.json -tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/stdout.expected -tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/33ba178ba6a9c91283f2a1ebff4de2d9.essence -tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/model.expected.json -tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/stdout.expected -tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/340440b2048fca719a123048916b4c0e.essence -tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/model.expected.json -tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/stdout.expected -tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/34552e2be8dd2ea63930ffe4b5a015aa.eprime.essence -tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/model.expected.json -tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/stdout.expected -tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/345e8c1f7d7fbae43f48e4dd720d30e4.essence -tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/model.expected.json -tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/stdout.expected -tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/348dfb9cf626c62078be604c05c39de8.eprime.essence -tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/model.expected.json -tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/stdout.expected -tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/34a62bd32f9408027fd6b08b1f3b3c33.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/model.expected.json -tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/stdout.expected -tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/34ba91b9fc9c3567839da59111a3300a.essence -tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/model.expected.json -tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/stdout.expected -tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/34c6e2d47930e12182aef2c13629be9c.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/model.expected.json -tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/stdout.expected -tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/34efe399d190ea2b129f8a3c0e7a0e52.eprime.essence -tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/model.expected.json -tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/stdout.expected -tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/typecheck.expected -tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/34fc4f9c32a9f14d7d086719d5902ee3.essence -tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/model.expected.json -tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/stdout.expected -tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/353657731bc5ab2f967052fd60274d90.essence -tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/model.expected.json -tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/stdout.expected -tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/35a9b9aabd733bd1da92dcfbbafbb0e0.eprime.essence -tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/model.expected.json -tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/stdout.expected -tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/typecheck.expected -tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/35aec2a8434e0ae0a0041beca9f1d91e.eprime.essence -tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/model.expected.json -tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/stdout.expected -tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/35bd3096c398059a5f4e2e9de6159866.eprime.essence -tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/model.expected.json -tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/stdout.expected -tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/35c3fe42a5badc499fcbc769a6de8539.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/model.expected.json -tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/stdout.expected -tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/35f715228097d8ae8a9aed126b91f95f.param.essence -tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/model.expected.json -tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/stdout.expected -tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/35f9786ccf16b43d20308a9a4807a45c.eprime.essence -tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/model.expected.json -tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/stdout.expected -tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/35fe1e08f59ed5b8086e4677c7d196af.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/model.expected.json -tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/stdout.expected -tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/360166fcf3210cf2cc730698c7561f1a.eprime.essence -tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/model.expected.json -tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/stdout.expected -tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/3620a44b9d1882d1b8d68ebb7c2e267b.eprime.essence -tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/model.expected.json -tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/stdout.expected -tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/362d7066f8d61d2894dbeb701e6c0a79.eprime.essence -tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/model.expected.json -tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/stdout.expected -tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/363b608789b363a35fa18f1321551fc1.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/model.expected.json -tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/stdout.expected -tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/3661b2ed8d197feac2c9199dccc20ccf.solution.essence -tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/model.expected.json -tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/stdout.expected -tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/36ab55fa4f0b19d12f8af4797eda170f.essence -tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/model.expected.json -tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/stdout.expected -tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/36adf65748e3aabfd49290654b8b9ec2.eprime.essence -tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/model.expected.json -tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/stdout.expected -tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/typecheck.expected -tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/37465a47958e062b2b7afd0001a0e9a1.essence -tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/model.expected.json -tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/stdout.expected -tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/374c1f815c417d97011dfa8c5cfa42f9.essence -tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/model.expected.json -tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/stdout.expected -tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/37b6d848c391d03c123e6e8c55e6b822.eprime.essence -tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/model.expected.json -tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/stdout.expected -tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/3844dbb1b6850a1f2659adb2d65a9887.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/model.expected.json -tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/stdout.expected -tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/3891079bd93693be99228d609690482f.essence -tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/model.expected.json -tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/stdout.expected -tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/3897df283e1b6b72cd399738fe807325.eprime.essence -tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/model.expected.json -tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/stdout.expected -tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/38d20eb994d28a44c574330747169cea.essence -tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/model.expected.json -tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/stdout.expected -tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/38d6f8fb97319ab03c05b9e98291e58c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/model.expected.json -tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/stdout.expected -tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/38d76c6cc0890964b8e6839987b595de.eprime.essence -tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/model.expected.json -tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/stdout.expected -tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/38e8f152255ddac04761d9c123c19756.solution.essence -tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/model.expected.json -tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/stdout.expected -tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/3904efc3f4f108940913260dbf388ed1.essence -tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/model.expected.json -tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/stdout.expected -tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/395f72e8642ea81704866e6c9ed64dd5.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/model.expected.json -tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/stdout.expected -tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/397465fb16d2fc9e85dcbbfc2508037c.solution.essence -tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/model.expected.json -tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/stdout.expected -tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/39936b90fd0cf508557865456d964b8b.eprime.essence -tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/model.expected.json -tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/stdout.expected -tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/typecheck.expected -tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/399b8bc4443e15daa66f9294ca5a959e.essence -tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/model.expected.json -tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/stdout.expected -tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/39a705752a0c5e219408facaeb5079d9.eprime.essence -tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/model.expected.json -tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/stdout.expected -tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/39cf126d4994f21cb4a1cb613458de1f.essence -tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/model.expected.json -tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/stdout.expected -tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/39e356310d9f6de4a1e96c3f82063bd4.essence -tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/model.expected.json -tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/stdout.expected -tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/39fc0816e0aea89208c87fa4d39edf4d.essence -tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/model.expected.json -tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/stdout.expected -tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/3a2cc7ae07080388a90a2e45e94e5c40.essence -tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/model.expected.json -tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/stdout.expected -tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/3afc39ce199d39888004db7e3f6f55e6.eprime.essence -tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/model.expected.json -tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/stdout.expected -tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/3b3c5921839ebaedc01d5140662b9f8d.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/model.expected.json -tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/stdout.expected -tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/3b5e1803eab57ae500a891f3bfadce58.eprime.essence -tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/model.expected.json -tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/stdout.expected -tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/3b6775a4761d96a1d2c44a9934563cee.eprime.essence -tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/model.expected.json -tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/stdout.expected -tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/3bb0d8267dc5acd19cceb43e17c91b79.essence -tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/model.expected.json -tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/stdout.expected -tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/3c226880c8b7557df44d9031c788ff5c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/model.expected.json -tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/stdout.expected -tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/3c2e9d276b9b049dd831530f48da9a2c.eprime.essence -tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/model.expected.json -tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/stdout.expected -tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/3c8c349d4ef7de43a374d30e7a1f9b71.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/model.expected.json -tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/stdout.expected -tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/3c8ca696589fa5c50ce0679acfd8e97f.essence -tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/model.expected.json -tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/stdout.expected -tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/3c9559b98b49ae4783c2ca23c6780149.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/model.expected.json -tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/stdout.expected -tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/3c998931c0705d3b120802c50d6d76b4.essence -tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/model.expected.json -tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/stdout.expected -tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/3cb1bc8910cd0ae751a62eb282647541.essence -tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/model.expected.json -tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/stdout.expected -tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/3cbe0039a34abb5da3530357feb79c1d.essence -tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/model.expected.json -tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/stdout.expected -tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/3cc911ee89eb40d0d5e49b63286e8f7f.eprime.essence -tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/model.expected.json -tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/stdout.expected -tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/3ccc464fd5fa06fd1d7c047ba437a92c.solution.essence -tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/stdout.expected -tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/3ce3ca1e14adb90d865016fe581a6fa8.eprime.essence -tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/stdout.expected -tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/3ced36091929fe0596bba739e95077aa.eprime.essence -tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/stdout.expected -tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/3d3417b2f5188bb06d8802ca2dbab9bb.param.essence -tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/model.expected.json -tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/stdout.expected -tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/3d535f0ac7272986482b759dae43c292.eprime.essence -tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/model.expected.json -tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/stdout.expected -tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/3dc53410c6bdd9d368e9342d92f683d9.essence -tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/model.expected.json -tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/stdout.expected -tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/3e000aaf4ff46e620886654cb453b7ae.essence -tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/model.expected.json -tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/stdout.expected -tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/3e5896b5c4650dcc57c87c2d473b6bbb.eprime.essence -tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/model.expected.json -tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/stdout.expected -tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/3e713ec9592f369b613a3f3acaff0329.essence -tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/model.expected.json -tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/stdout.expected -tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/3e88c59ec65a416f21f9fe3d5374b360.solution.essence -tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/model.expected.json -tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/stdout.expected -tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/3e8d8447ffcd9d0c6b448dab890c71d5.param.essence -tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/model.expected.json -tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/stdout.expected -tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/3ebedad4456cf9db17a8b7870815735e.essence -tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/stdout.expected -tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/3ec03da1ddc427cf36261757e735114e.eprime.essence -tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/stdout.expected -tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/3ed90481a522d19bb9667ea6ef908196.eprime.essence -tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/stdout.expected -tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/3edef0a7a6a503ffe358debbd0b1d4c9.essence -tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/model.expected.json -tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/stdout.expected -tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/3f2d75fc3d948ca4fd97523766f3659f.essence -tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/model.expected.json -tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/stdout.expected -tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/3f3f809a0502b5a643d88e7059acb08e.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/model.expected.json -tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/stdout.expected -tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/3f487c8189ea7cd34b26c9482423c22f.eprime.essence -tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/model.expected.json -tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/stdout.expected -tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/3ff2fa2c4687912a41ba397eadbb6e6e.eprime.essence -tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/model.expected.json -tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/stdout.expected -tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/400c154b98432fd6d40a20b60e33a820.essence -tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/model.expected.json -tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/stdout.expected -tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/401bc79800219f35bb8383806585ae12.essence -tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/model.expected.json -tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/stdout.expected -tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/401d7215ed575a743ec2b4542af4e08d.essence -tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/model.expected.json -tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/stdout.expected -tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/402d679b6bfcd0370633ca1d17ad1f94.eprime.essence -tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/model.expected.json -tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/stdout.expected -tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/406db1c9f1d0b024a8ba6de04ada1fa2.eprime.essence -tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/model.expected.json -tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/stdout.expected -tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/40c777188c96f06f23b379634df5be19.essence -tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/model.expected.json -tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/stdout.expected -tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/40ce6cdb722c1098a95e3150cf28137a.eprime.essence -tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/model.expected.json -tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/stdout.expected -tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/40df86985a668247ccc7d4d4ca3f4f6c.eprime.essence -tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/model.expected.json -tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/stdout.expected -tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/419d808eaf5ba4da3a7cb3ed4cd717e8.essence -tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/420a979c68397e28748b9281ea454667.essence -tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/model.expected.json -tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/stdout.expected -tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/42277f8d532c4833bbdd3ec4b99809ef.essence -tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/4280cfb278486b51961b41fb8309b68d.eprime.essence -tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/model.expected.json -tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/stdout.expected -tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/42c5a23fafc955d441461af4184f86f2.eprime.essence -tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/model.expected.json -tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/stdout.expected -tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/typecheck.expected -tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/42f3b14e92ea11714f134e31ec39664c.essence -tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/model.expected.json -tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/stdout.expected -tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/42f8b49ddcf29717d4fbf4161c5438d1.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/model.expected.json -tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/stdout.expected -tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/434c784a35b841f5f825ff3ec5fbff68.eprime.essence -tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/model.expected.json -tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/stdout.expected -tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/typecheck.expected -tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/437b8f966aef896f8c9f11690aa1c1a7.param.essence -tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/439f472f0064355bae4b1cc168a4fad9.essence -tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/model.expected.json -tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/stdout.expected -tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/4413940d37bfd7e78e7ee7017ab3b954.eprime.essence -tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/model.expected.json -tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/stdout.expected -tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/44278034dfc02f37c01fe14e572e7434.essence -tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/model.expected.json -tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/stdout.expected -tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/4448f802c81ddef89ede84d1923faf38.eprime.essence -tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/model.expected.json -tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/stdout.expected -tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/444f84074522a17b89cf4e24e859558a.eprime.essence -tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/model.expected.json -tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/stdout.expected -tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/445128f3edb059f50edbb2b0be22c084.param.essence -tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/model.expected.json -tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/stdout.expected -tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/4478aad769a350699ccf94c692327d2e.essence -tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/model.expected.json -tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/stdout.expected -tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/4479e3c0d499cca941766ab5b8a254a7.solution.essence -tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/448ca65d24a3d7c8e7ddac7447a7aacf.essence -tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/model.expected.json -tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/stdout.expected -tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/4495d6e1e94abd6d991861099b9dd715.essence -tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/model.expected.json -tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/stdout.expected -tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/44dd846c20ee4eb39d7cc4a19408a0ae.eprime.essence -tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/model.expected.json -tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/stdout.expected -tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/450c78ccf2a2a0f76ab7c88d108a8547.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/model.expected.json -tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/stdout.expected -tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/453d009a271e94e412374f1510693b71.essence -tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/model.expected.json -tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/stdout.expected -tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/453d7019c56c6e4fd720fcc8f83142de.eprime.essence -tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/model.expected.json -tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/stdout.expected -tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/45ab0a8a38b8a16d1afe4a4b4bffef04.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/model.expected.json -tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/stdout.expected -tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/45f397b2827824d973913a780b447600.essence -tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/model.expected.json -tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/stdout.expected -tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/4611a3e5fa92325652ce5b14da03d0af.essence -tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/model.expected.json -tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/stdout.expected -tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/461bdf3c29b2f09b541034b080952550.eprime.essence -tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/model.expected.json -tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/stdout.expected -tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/typecheck.expected -tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/463c263b7ca3948dadc72aac12f03675.essence -tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/model.expected.json -tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/stdout.expected -tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/46479321fee8a3387f42558b39b364cc.eprime.essence -tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/model.expected.json -tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/stdout.expected -tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/46590714def95df207999f7e2c6daee7.eprime.essence -tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/model.expected.json -tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/stdout.expected -tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/46b46a629f553e06a23cce0cb0ab3fc7.eprime.essence -tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/model.expected.json -tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/stdout.expected -tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/46e7df2eefd532655b09da4ed435de1e.essence -tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/model.expected.json -tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/stdout.expected -tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/476b6f0c19f97c01c719897ca9420946.essence -tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/model.expected.json -tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/stdout.expected -tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/4797634599665df7e1204de1282c4e2e.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/model.expected.json -tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/stdout.expected -tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/480a96cb2363505372a90a8e73812109.essence -tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/model.expected.json -tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/stdout.expected -tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/4849ece40e3375108283d1ad3cfecc90.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/model.expected.json -tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/stdout.expected -tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/485f1c0edb95678792083be90034ac0a.essence -tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/model.expected.json -tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/stdout.expected -tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/48929a67dab909763280169f5d4632b9.eprime.essence -tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/model.expected.json -tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/stdout.expected -tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/48faac38ade4e0680ba7f0e26fc7d315.eprime.essence -tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/model.expected.json -tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/stdout.expected -tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/typecheck.expected -tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/490436b325ecf3283f80d59f69c60dc6.eprime.essence -tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/model.expected.json -tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/stdout.expected -tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/typecheck.expected -tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/49049fb9a0e241dbf48a77f5ec9f7259.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/model.expected.json -tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/stdout.expected -tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/493197c9c0b2cab08bada7379e567229.essence -tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/model.expected.json -tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/stdout.expected -tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/499e079eb49364e5f37956fbd5635887.eprime.essence -tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/model.expected.json -tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/stdout.expected -tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/typecheck.expected -tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/49c4bb2084ae145c951d6e363a90ea9f.eprime.essence -tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/model.expected.json -tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/stdout.expected -tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/49c6df33edfc97e3f0f7b81aa6940880.eprime.essence -tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/model.expected.json -tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/stdout.expected -tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/49f9216e32129544a9ed08e08bff59a2.eprime.essence -tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/model.expected.json -tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/stdout.expected -tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/4a256fa8ed1c07ea2ef405dff5b700b9.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/model.expected.json -tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/stdout.expected -tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/4a598ea5ec7744cc20c3a53601371daf.eprime.essence -tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/model.expected.json -tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/stdout.expected -tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/typecheck.expected -tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/4aac419ab95021d586ca0c4be3595a8a.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/model.expected.json -tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/stdout.expected -tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/4aba79f85e75b7880783738a0de5456f.eprime.essence -tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/model.expected.json -tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/stdout.expected -tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/4b22c4a968c8f76789b1164fda122364.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/model.expected.json -tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/stdout.expected -tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/4b23607e697a7b33b7855bb9e6d8e164.eprime.essence -tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/model.expected.json -tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/stdout.expected -tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/4b3868c917f7a169d375b457cbe72888.eprime.essence -tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/model.expected.json -tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/stdout.expected -tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/4b3aee17579d9410527145df9332fdb6.solution.essence -tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/model.expected.json -tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/stdout.expected -tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/4bbb005a1c711470b24b1ce32927347e.essence -tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/model.expected.json -tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/stdout.expected -tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/4bdd3c3b94bf57ed6b5ded25a849af9c.essence -tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/model.expected.json -tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/stdout.expected -tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/4be21fd12a8819847cbd51dea1e370a3.eprime.essence -tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/model.expected.json -tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/stdout.expected -tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/typecheck.expected -tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/4bf6f94d3db529f4501cb0a0799a2145.essence -tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/model.expected.json -tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/stdout.expected -tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/4c2f1f690c7a08a46f98c9c20ae39638.essence -tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/model.expected.json -tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/stdout.expected -tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/4c42c6054e5582e78e2da66a04690fb4.eprime.essence -tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/model.expected.json -tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/stdout.expected -tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/4c5b25d1ff6d063a890465017499de2f.essence -tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/model.expected.json -tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/stdout.expected -tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/4ca14af7de2b5f1fd0489e76314fbafa.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/model.expected.json -tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/stdout.expected -tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/4cef7ec664c5dca44df9e841fc36d16c.eprime.essence -tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/model.expected.json -tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/stdout.expected -tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/4d092618251bbf48216dc1749454802c.eprime.essence -tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/model.expected.json -tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/stdout.expected -tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/4dc66fe54b35bc9bc0cacbfe377f4dc6.eprime.essence -tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/model.expected.json -tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected -tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/4debc13b7368939beb13d0408f1225f5.essence -tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/model.expected.json -tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/stdout.expected -tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/4e9dd6bac212dc98d3103b73e3c2971e.essence -tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/model.expected.json -tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/stdout.expected -tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/4ea83cdfbcaf661ef1707eb376d12dcb.essence -tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/model.expected.json -tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/stdout.expected -tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/4eb62bd911a26eca2c663622b9db8469.param.essence -tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/model.expected.json -tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/stdout.expected -tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/4ed20803dce83fac172cae8761501a39.param.essence -tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/model.expected.json -tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/stdout.expected -tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/4f12b3362c3cd09cf3afc0015b65969e.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/model.expected.json -tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/stdout.expected -tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/4f86b4baca491f2992bb7713e7da0980.essence -tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/model.expected.json -tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/stdout.expected -tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/4f9ae4ffb009a3b226c8414061bd362f.eprime.essence -tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/model.expected.json -tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/stdout.expected -tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/4fb5fb2fc16946670ca1e42f6fcaee7c.eprime.essence -tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/model.expected.json -tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/stdout.expected -tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/4fca9263ae2d80342c52533f211a8f16.eprime.essence -tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/model.expected.json -tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/stdout.expected -tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/typecheck.expected -tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/4feb5c171fc58c1f25b21ccf17e9df5e.eprime.essence -tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/model.expected.json -tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/stdout.expected -tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/503586c1bb7c6d7d42be1f332267d916.eprime.essence -tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/model.expected.json -tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/stdout.expected -tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/typecheck.expected -tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/5066c398855444982cf41c9d767fd995.eprime.essence -tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/model.expected.json -tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/stdout.expected -tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/5068bddda9fe656697ec6de2579580db.essence -tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/model.expected.json -tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/stdout.expected -tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/5071a0ba341e7dfd170dd3d834b37ced.param.essence -tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/model.expected.json -tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/stdout.expected -tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/507d3282342387e2401ac58873811295.essence -tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/model.expected.json -tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/stdout.expected -tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/5087e6d4b27308f7844b160d11a537c2.eprime.essence -tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/model.expected.json -tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/stdout.expected -tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/50c2a6964d0e24c53ade257ecdd50985.essence -tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/model.expected.json -tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/stdout.expected -tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/50c803ed8a3cba6387b21144fd06afd5.essence -tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/model.expected.json -tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/stdout.expected -tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/50d5d20326959ce7f9250b33c9f80597.essence -tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/model.expected.json -tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/stdout.expected -tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/51086d5147895ed3eb905ccab398c7a2.essence -tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/model.expected.json -tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/stdout.expected -tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/51679a7b584354bb97f16e9f40d5c604.essence -tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/model.expected.json -tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/stdout.expected -tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/51e87619f2aa1a2aba11584b2edc8fd9.essence -tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/model.expected.json -tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/stdout.expected -tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/51ee9aa6c23d7a75bc27e57047c67667.eprime.essence -tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/model.expected.json -tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/stdout.expected -tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/5217aa24b09e91520ae4fd364ce14998.eprime.essence -tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/model.expected.json -tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/stdout.expected -tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/528ddbc341b292a9c60ce82719e299d2.essence -tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/model.expected.json -tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/stdout.expected -tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/533e2929b56244f23bae34632bac20e2.essence -tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/model.expected.json -tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/stdout.expected -tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/5389d8ae83d9b2260e7c5697c481970a.eprime.essence -tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/model.expected.json -tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/stdout.expected -tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/5399a212ea0b032f74966bdfe0e21709.eprime.essence -tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/model.expected.json -tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/stdout.expected -tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/53a426862ebb79d1768a6c0143a8831c.essence -tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/model.expected.json -tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/stdout.expected -tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/54357c603c8679029250e83ada7fca15.eprime.essence -tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/model.expected.json -tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/stdout.expected -tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/546e81cb258d27b8a874bdb1a0e2ef4c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/model.expected.json -tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/stdout.expected -tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/54b15fec24b105ed64b8e7bdeab74aec.essence -tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/model.expected.json -tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/stdout.expected -tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/54c995d240bca20d3853847acef38f4b.eprime.essence -tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/model.expected.json -tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/stdout.expected -tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/typecheck.expected -tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/54f9669a1c9a729e3efa54d239531f1a.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/model.expected.json -tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/stdout.expected -tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/5537b34a9991a0fb4580102062c0b795.eprime.essence -tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/model.expected.json -tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/stdout.expected -tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/55ea8b3eb2eb1d64b5891c7c6770c5f7.eprime.essence -tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/model.expected.json -tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/stdout.expected -tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/560907760e8e19ae82dc37742bf181c1.eprime.essence -tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/model.expected.json -tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/stdout.expected -tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/564d2dac2114c350d82e1b204830a24e.essence -tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/model.expected.json -tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/stdout.expected -tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/565e64e802e2d5fe99e575a769a10f46.essence -tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/model.expected.json -tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/stdout.expected -tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/56bb219affa56fa8585b7d93b5d7957b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/model.expected.json -tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/stdout.expected -tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/56caa7ac2e7e4db76cc6c77bfd6b7019.essence -tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/model.expected.json -tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/stdout.expected -tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/5730851ebaf12a1212be46cc5a31235d.eprime.essence -tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/model.expected.json -tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/stdout.expected -tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/57fc63d1aa86555fc3580b95a7e0f8e9.essence -tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/model.expected.json -tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/stdout.expected -tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/58541e43cb8ad8a5c8be02bd79e21388.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/model.expected.json -tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/stdout.expected -tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/585c3cd2c560b3bce7f2c56c1b01d872.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/model.expected.json -tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/stdout.expected -tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/5880afcb8365cb9b7a90046a06c71c13.essence -tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/model.expected.json -tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/stdout.expected -tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/58e06280779d0562fb1094312a7ed65d.essence -tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/model.expected.json -tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/stdout.expected -tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/58e8a336185df542da6352134ce073d4.essence -tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/model.expected.json -tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/stdout.expected -tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/5934985e5f2b49680f9a1dd0d56f49ab.essence -tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/model.expected.json -tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/stdout.expected -tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/59c1d6b946041340649c24aa89a02a0a.essence -tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/model.expected.json -tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/stdout.expected -tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/59d832cec1caf1aaab7c58d776dd173e.essence -tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/model.expected.json -tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/stdout.expected -tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/59d9cb4ee0fd320c7b9a572310b4dc73.eprime.essence -tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/model.expected.json -tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/stdout.expected -tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/59f23e211645b15aafeb12d2a6804f75.eprime.essence -tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/model.expected.json -tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/stdout.expected -tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/5a20e5a83d18556a657c16d0e73d4702.essence -tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/model.expected.json -tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/stdout.expected -tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/5a2a920a38b4d4dedbef4582735c169f.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/model.expected.json -tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/stdout.expected -tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/5a3fabbfd4d8f7b5df04e250d4d2ac22.essence -tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/model.expected.json -tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/stdout.expected -tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/5a647ecc82bd6f30beb9891a30a9c3c7.eprime.essence -tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/model.expected.json -tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/stdout.expected -tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/5ac784c961498ebdd283a0fa62f11cf8.eprime.essence -tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/model.expected.json -tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/stdout.expected -tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/5afbd7bb16cd84e2166aad26c94e8563.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/model.expected.json -tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/5b1166277b057fe1599ef59c9575a016.essence -tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/5b45ba9bcc7c039c1299a896718993b6.essence -tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/5b50bb04aeb6d29b7833ddfaee9a7a06.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/5b55d99d2def282044ece58ea0c19348.essence -tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/5b75877073445fbe5c7984032644993e.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/5b7f553219b00b0d37cfc5bec0f2eaf6.eprime.essence -tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/stdout.expected -tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/5b917841fe72a502d046936ee40d1a65.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/model.expected.json -tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/stdout.expected -tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/5bb701ec00d09ccb13b5093812bd3842.eprime.essence -tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/model.expected.json -tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/stdout.expected -tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/5bc221bd0def5b302052fefcaae35403.eprime.essence -tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/model.expected.json -tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/stdout.expected -tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/typecheck.expected -tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/5bedf79d883f837a72f49f78eb9a267c.essence -tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/model.expected.json -tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/stdout.expected -tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/5c05f9d9fdff466f29cbe3e931304e9a.eprime.essence -tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/model.expected.json -tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/stdout.expected -tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/5c956e151d6c442acec91f46a0a4ba90.essence -tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/model.expected.json -tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/stdout.expected -tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/5cfc3c0f1cdd912aca8ac526cf3a7102.eprime.essence -tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/model.expected.json -tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/stdout.expected -tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/typecheck.expected -tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/5d7cff7a4e6a7b0e44acde6c41c210f5.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/model.expected.json -tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/stdout.expected -tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/5d9f6f1e5070e570488660a8d6079808.essence -tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/model.expected.json -tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/stdout.expected -tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/5da782cc37e87dc8ca237cf375beda92.eprime.essence -tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/model.expected.json -tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/stdout.expected -tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/5daa6180d595ca2238af28c4920e2345.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/model.expected.json -tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/stdout.expected -tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/5dc1915a42a7971f38d4c1efd8fac962.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/model.expected.json -tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/stdout.expected -tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/5df0ac9ae39fb7bfbf5f990f89cd23d5.eprime.essence -tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/model.expected.json -tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/stdout.expected -tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/5e209eef6a0309295e424afe63deb3b3.essence -tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/model.expected.json -tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/stdout.expected -tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/5e518b6bd904bec61aee47caffd90b28.essence -tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/model.expected.json -tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/stdout.expected -tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/5e9b16aaf3fb5a3fe0d6773d78fbc7ac.essence -tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/model.expected.json -tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/stdout.expected -tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/5ef166b15726a7b8be067fd722a0b762.essence -tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/model.expected.json -tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/stdout.expected -tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/5f831cd0b29482ae5fd8b986c279f34c.solution.essence -tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/model.expected.json -tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/stdout.expected -tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/5f8abcfb913c155e5fcf9aad1689ee48.eprime.essence -tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/model.expected.json -tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/stdout.expected -tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/5fa74d2946d0a37ececba0815c38476a.essence -tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/model.expected.json -tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/stdout.expected -tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/5fdb0e91805fa1a4a97ef0e9d9cb2b45.essence -tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/model.expected.json -tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/stdout.expected -tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/602d25f9a2041d1ebf4d4db9b3edc86e.essence -tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/model.expected.json -tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/stdout.expected -tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/603465a931823cf8433459de2d015883.eprime.essence -tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/model.expected.json -tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/stdout.expected -tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/604b6c20eee4ffd4f5166d275bfb2f99.essence -tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/model.expected.json -tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected -tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/60a914e18367fd0c2b4e281da008535e.eprime.essence -tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/model.expected.json -tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/stdout.expected -tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/60e6055ae747adf7736e2f5421d6557d.essence -tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/model.expected.json -tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/stdout.expected -tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/612a3b4f1e02d37d3c58b3ade9b248ef.essence -tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/61319fb9ab3ab592319d92b204c2bdfc.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/model.expected.json -tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/stdout.expected -tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/6222ba236852756e97296d6b0d5a7591.essence -tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/model.expected.json -tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/stdout.expected -tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/622990dcaff380b2b2386b0fd2938eaf.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/model.expected.json -tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/stdout.expected -tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/62594a1eb17519e35762e15ecb426543.essence -tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/model.expected.json -tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/stdout.expected -tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/627441aa1b7360baab198889cfca4427.essence -tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/model.expected.json -tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/stdout.expected -tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/627b55153f0eb551d73d1737841126b3.essence -tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/model.expected.json -tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/stdout.expected -tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/62b0458cc52011021227c9aa3001eaa2.eprime.essence -tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/model.expected.json -tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/stdout.expected -tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/62efe6787e7be32b6775a9054b5e7a90.eprime.essence -tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/model.expected.json -tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/stdout.expected -tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/typecheck.expected -tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/635138d6d04d99c29540660d96fadd90.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/model.expected.json -tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/stdout.expected -tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/635d068c0ed6bbf9ed532bcb7160ca5b.eprime.essence -tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/model.expected.json -tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/stdout.expected -tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/639426681f0939ff32581b49c1ed3446.eprime.essence -tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/model.expected.json -tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/stdout.expected -tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/6399ac65746238face19a4940122f300.essence -tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/model.expected.json -tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/stdout.expected -tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/639c945efab0ddc3cd257f342bd30d93.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/model.expected.json -tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/stdout.expected -tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/63bd888f30c6401cb53c1608c61be98f.eprime.essence -tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/model.expected.json -tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/stdout.expected -tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/63d2ce5ca79ec1ac946795d91b4a8c5c.essence -tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/model.expected.json -tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/stdout.expected -tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/63e6f12512faa654f77596ca09876cee.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/model.expected.json -tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/stdout.expected -tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/63f088cc502f3fbe5df99a31333bc2d3.essence -tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/model.expected.json -tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/stdout.expected -tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/64093bd494040e20b22c48c13361293d.essence -tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/model.expected.json -tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/stdout.expected -tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/647f57337d2730de29c992b43a041f89.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/model.expected.json -tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/stdout.expected -tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/64a80784861e9a2ea3acac19a9d5c43c.essence -tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/model.expected.json -tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/stdout.expected -tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/64fe7f7aaa89030d34bdb621e5deb747.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/model.expected.json -tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/stdout.expected -tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/650f60c017f90e0781f3478942261393.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/model.expected.json -tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/stdout.expected -tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/660818affc709c300fd6fe6489297ffd.eprime.essence -tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/model.expected.json -tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/stdout.expected -tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/6638a47bc0e4d1bf3de50a61b2d87868.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/model.expected.json -tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/stdout.expected -tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/6694ad082ff9961793c0c9c0a36196e4.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/model.expected.json -tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/stdout.expected -tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/66a184c301820c299d5a74f6b3d89566.essence -tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/model.expected.json -tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/stdout.expected -tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/66b37dcf91ac4c0988042c2b82c88561.eprime.essence -tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/model.expected.json -tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/stdout.expected -tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/66d8aabc637186ce37a17a8dcbc75b08.essence -tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/model.expected.json -tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/stdout.expected -tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/66da4175d592bc87c723993f7b709ba1.eprime.essence -tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/model.expected.json -tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/stdout.expected -tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/674b4722ae6d5a9ebe222221c6361cad.eprime.essence -tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/model.expected.json -tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/stdout.expected -tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/674f24d155119e8e111584cc92a47dee.eprime.essence -tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/model.expected.json -tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/stdout.expected -tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/typecheck.expected -tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/6759663e9944fadec8876ff64502e5ec.essence -tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/67856b9617d62beaf659a45708f21210.eprime.essence -tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/model.expected.json -tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/stdout.expected -tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/67f44eb9dafad2f5eafc179a153aa3c1.essence -tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/model.expected.json -tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/stdout.expected -tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/6816e93188da042831d6849d9fc88b51.eprime.essence -tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/model.expected.json -tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/stdout.expected -tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/typecheck.expected -tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/6819114bc3238cf5d2e085babaf65c92.essence -tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/model.expected.json -tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/stdout.expected -tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/6845c468147ab1df800fddde373c1e17.eprime.essence -tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/model.expected.json -tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/stdout.expected -tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/684c3d333688466aecbdaa587d524dfb.param.essence -tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/model.expected.json -tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/stdout.expected -tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/688d9c5f26c404975d660fcdd262858c.eprime.essence -tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/model.expected.json -tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/stdout.expected -tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/689b4574753caf426e48593872d8f4f2.essence -tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/model.expected.json -tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/stdout.expected -tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/689bbf501ca871dda34a71cddb06f9ec.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/68b25c7b142e7cf4257a8afe431e62b3.eprime.essence -tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/model.expected.json -tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/stdout.expected -tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/68b3c16a7cec0ae650d9545654c9aaa4.essence -tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/model.expected.json -tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/stdout.expected -tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/691ac05a17a4ad3b5dbac1fcf411c508.essence -tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/model.expected.json -tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/stdout.expected -tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/6920b205676413cff5a8ac0ba3ac9a39.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/model.expected.json -tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/stdout.expected -tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/695eea09aa21c14f80244f9c0f413304.essence -tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/model.expected.json -tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/stdout.expected -tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/697d6075ff1fdb76ea099fde1b20d219.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/model.expected.json -tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/stdout.expected -tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/69b57a8e7b3674ec24bd03b8e1cd8d6d.essence -tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/model.expected.json -tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/stdout.expected -tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/6a1444bd8e76a391728a3070075e95e9.essence -tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/model.expected.json -tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/stdout.expected -tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/6a21218d02d6066c0c13c2fd8dc23887.essence -tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/model.expected.json -tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/stdout.expected -tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/6a2d0701e4cf5c4d8f6cf1dc7e15f399.essence -tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/model.expected.json -tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/stdout.expected -tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/6a571fe9e071ce201a1a010b2237b5d5.essence -tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/model.expected.json -tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/stdout.expected -tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/6a88588bba462ebffae74647c144c4d7.essence -tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/6a9bddeca50534905aea04bbef9e17da.essence -tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/model.expected.json -tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/stdout.expected -tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/6aaa07e106687606e6ebd677288f44b1.essence -tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/model.expected.json -tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/stdout.expected -tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/6ac8c752d3e4fe9a39a4baa9b01ed4f2.essence -tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/model.expected.json -tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/stdout.expected -tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/6aca6179aec2e811a574cc8f9b2170e5.eprime.essence -tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/model.expected.json -tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/stdout.expected -tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/6aca6588ab888f9c3965cb703a7ffa87.eprime.essence -tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/model.expected.json -tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/stdout.expected -tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/typecheck.expected -tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/6adcceb830a2022acb620de53d953b28.eprime.essence -tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/model.expected.json -tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/stdout.expected -tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/6b8f8102f9c4e16ff066114f1f3aef54.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/model.expected.json -tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/stdout.expected -tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/6ba176ef566bd4d3ad1fc9b1c02c19e9.essence -tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/model.expected.json -tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/stdout.expected -tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/6cc29e070559e3617c321eddb0aa52a0.param.essence -tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/model.expected.json -tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/stdout.expected -tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/6cdbc847bba12ef88f6f6f3d68d75303.essence -tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/model.expected.json -tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/stdout.expected -tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/6d234926de4bf3efc85ef76d53a68827.eprime.essence -tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/model.expected.json -tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/stdout.expected -tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/6d2a055078d3ff9364d6a4715bbcce63.eprime.essence -tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/model.expected.json -tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/stdout.expected -tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/6dcb3352ec6b88c10d4d37072cb09475.eprime.essence -tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/model.expected.json -tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/stdout.expected -tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/typecheck.expected -tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/6e4f8f01946d51553fd4dc681c55d7ff.essence -tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/model.expected.json -tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/stdout.expected -tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/6e635e7e739e4a42e9752e4776b800ee.eprime.essence -tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/model.expected.json -tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/stdout.expected -tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/6e78775adcfd98bd61ddfa72523d20d7.eprime.essence -tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/6f115e6ceb931de245d1914a7238a5e1.eprime.essence -tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/6f43d623f1679861f011b13015bcd6cd.essence -tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/model.expected.json -tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/stdout.expected -tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/6fc55695fcddbc4d1d3987132d8eb399.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/model.expected.json -tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/stdout.expected -tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/701fa2a79a8effc3937e7e1f27e33cf9.essence -tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/model.expected.json -tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/stdout.expected -tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/706fff3f20bd3286c124f76cf527bf2f.essence -tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/model.expected.json -tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/stdout.expected -tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/70707c28efe6141f1c5f70cb86a86ffa.eprime.essence -tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/model.expected.json -tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/stdout.expected -tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/typecheck.expected -tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/70729b148e4e70ab38cb319e8c952730.eprime.essence -tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/model.expected.json -tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/stdout.expected -tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/707465611baa4844701cb24902023acc.eprime.essence -tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/model.expected.json -tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/stdout.expected -tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/typecheck.expected -tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/71370392c8a48233ee7eeea22af6b66e.essence -tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/model.expected.json -tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/stdout.expected -tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/71439ab95a4f5bfdf808f3cadccccb9e.essence -tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/model.expected.json -tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/stdout.expected -tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/7144f5c387b1b12ae8d726b47ca182dd.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/model.expected.json -tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/stdout.expected -tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/7149b33b5941efcd677dc5be977c5cff.essence -tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/model.expected.json -tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/stdout.expected -tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/714eeec76271bcead5de810358d98126.essence -tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/model.expected.json -tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/stdout.expected -tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/71d975d219ae56f829f74cbbc19ad650.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/model.expected.json -tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/stdout.expected -tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/7213f3123fb0a3602859e59d90198141.essence -tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/model.expected.json -tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/stdout.expected -tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/7293e2d2559bf143bf5751458000ca82.essence -tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/model.expected.json -tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/stdout.expected -tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/72a4957a94bebd6accb42ca3ef8e093e.essence -tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/model.expected.json -tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/stdout.expected -tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/72c5af0569e0319ae3ae80ed1ad65571.essence -tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/model.expected.json -tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/stdout.expected -tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/72d3842a90204ee73d7b599e3ece97b4.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/model.expected.json -tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/stdout.expected -tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/72e12e9f11258447393672b2d965a468.eprime.essence -tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/model.expected.json -tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/stdout.expected -tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/73298c7aeac2e916b0f3f2572d18ee3f.essence -tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/model.expected.json -tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/stdout.expected -tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/7340afcb10985a0a7ab0d48bfe3ce39a.essence -tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/model.expected.json -tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/stdout.expected -tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/73472b413e1c687c0430a8719e4f016b.eprime.essence -tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/model.expected.json -tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/stdout.expected -tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/73595304cbda134ee926997219f68122.eprime.essence -tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/model.expected.json -tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/stdout.expected -tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/typecheck.expected -tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/735fc273602e4ede28251a2e88511bf1.essence -tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/model.expected.json -tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/stdout.expected -tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/73f1b7785f39dea6270c8c6e2799c366.essence -tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/model.expected.json -tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/stdout.expected -tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/741c831781c1130b77698ac0a8e39bac.param.essence -tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/model.expected.json -tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/stdout.expected -tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/7521087d0ca259f38d548880fda61315.essence -tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/model.expected.json -tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/stdout.expected -tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/75765f88c1f182bd9535af1c33aa8320.eprime.essence -tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/model.expected.json -tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/stdout.expected -tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/75849537a38dfc9993231bf6095cb2e6.param.essence -tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/model.expected.json -tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/stdout.expected -tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/76042410b22d06836ef6e74d900d2918.essence -tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/model.expected.json -tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/stdout.expected -tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/760f3eb874e49940dccaca7853a6663a.eprime.essence -tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/model.expected.json -tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/stdout.expected -tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/7624576246e8c3059ba24ec2d12a8e49.essence -tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/model.expected.json -tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/stdout.expected -tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/76b69ff02964226987ee8e85c69b99f0.essence -tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/model.expected.json -tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/stdout.expected -tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/76e95ca7345ad8108828e20d9116d317.eprime.essence -tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/model.expected.json -tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/stdout.expected -tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/77bf93b23c2e5269471d3e07d2d0eff3.eprime.essence -tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/model.expected.json -tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/stdout.expected -tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/typecheck.expected -tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/77f9a472db5de2e67ee40dfe0dff40a8.essence -tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/model.expected.json -tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/stdout.expected -tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/7813ae28e21e6cf03109291d165d4647.eprime.essence -tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/model.expected.json -tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/stdout.expected -tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/typecheck.expected -tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/783809db2f9c9e395e52e9a135e6fbdc.param.essence -tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/model.expected.json -tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/stdout.expected -tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/783b2b5ef26440959d2b9eea8cac7602.eprime.essence -tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/model.expected.json -tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/stdout.expected -tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/typecheck.expected -tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/7842b5f4c7ad574e4dd5e285a6512004.eprime.essence -tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/model.expected.json -tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/stdout.expected -tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/788102a4292eb30458166a213f53d06b.eprime.essence -tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/model.expected.json -tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/stdout.expected -tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/78b91b8a1c7e8c7268c5674ea86dfa6f.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/model.expected.json -tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/stdout.expected -tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/7916e2376c2f7a027a1836f83d31e41f.eprime.essence -tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/model.expected.json -tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/stdout.expected -tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/7931697aa48ff1cee580a300b58b56dd.essence -tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/model.expected.json -tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/stdout.expected -tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/7957f0317999099b511813bff7f666d9.essence -tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/model.expected.json -tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/stdout.expected -tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/796a75de14301706781198a596a0f82f.essence -tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/model.expected.json -tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/stdout.expected -tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/7a1374784817a61dd7d0ab09fc3ed1f5.eprime.essence -tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/model.expected.json -tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/stdout.expected -tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/7a6edcced80722524f0bff6778d815a0.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/model.expected.json -tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/stdout.expected -tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/7a9eee2cf8d977a2f9cba8a6f6f29ddb.essence -tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/model.expected.json -tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/stdout.expected -tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/7abab402c3c635d1a5ed251e23346b9d.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/model.expected.json -tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/stdout.expected -tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/7af19291f31c57f450d1584f932a5bd2.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/model.expected.json -tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/stdout.expected -tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/7b072d8dc31f10792c4942630f4c90a2.essence -tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/model.expected.json -tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/stdout.expected -tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/7b0c8abe457f0fb2a4ff0e27c5acc7ef.eprime.essence -tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/typecheck.expected -tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/7b43b4a26dc012bc58edd762a212c306.eprime.essence -tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/model.expected.json -tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/stdout.expected -tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/7b5e1f92bb5d4a7807d1d23d112cd92d.eprime.essence -tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/model.expected.json -tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/stdout.expected -tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/7b66f514f938f081c62636b617d585e6.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/model.expected.json -tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/stdout.expected -tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/7b9c2cef26b449a08d972bf3b5f521b6.essence -tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/model.expected.json -tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/stdout.expected -tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/7bca9feb74e0d19616174e344ec7ed3f.eprime.essence -tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/model.expected.json -tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/stdout.expected -tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/7bf6ecd55c1648855b112f6e20c8a371.solution.essence -tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/model.expected.json -tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/stdout.expected -tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/7c370e25be12481ac743d5937d979cab.essence -tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/model.expected.json -tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/stdout.expected -tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/7c756ce0724280ed59c97a84dd82e7c0.essence -tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/model.expected.json -tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/stdout.expected -tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/7c7f91f16a7fef369fe0a0bc90496df7.eprime.essence -tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/model.expected.json -tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/stdout.expected -tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/7c9328a9df7d3971ebc02d3a5d032831.eprime.essence -tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/model.expected.json -tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/stdout.expected -tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/7cb449bd3f6d99ec10799ce32deb058c.essence -tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/model.expected.json -tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/stdout.expected -tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/7cc8838035af5627767687a2a0dd2023.eprime.essence -tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/model.expected.json -tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/stdout.expected -tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/7cd8ae8cad72f99cbc828752bb1ac779.eprime.essence -tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/model.expected.json -tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/stdout.expected -tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/7ced3deed438dc0d1abf978eefd25a73.essence -tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/model.expected.json -tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/stdout.expected -tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/7d51a8ed37eefbc3671568f26b3ae864.eprime.essence -tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/model.expected.json -tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/stdout.expected -tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/7db9a3d9ee627d332a146e54d5412c2a.essence -tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/model.expected.json -tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/stdout.expected -tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/7e32221a2aa518579c4cbca35995bad7.essence -tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/model.expected.json -tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/stdout.expected -tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/7e379263b7076cf01287d6b3b627c2d6.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/model.expected.json -tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/stdout.expected -tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/7e3fcaa59bbfbe569b009320dc601838.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/model.expected.json -tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/stdout.expected -tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/7e5af3ac9a29055da76bfcb22c29525b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/model.expected.json -tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/stdout.expected -tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/7ec84a5eb1ae188fa85813dd512686a4.essence -tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/model.expected.json -tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/stdout.expected -tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/7eeaf2347f1bf8b83db5d0b7c15483e6.eprime.essence -tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/model.expected.json -tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/stdout.expected -tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/typecheck.expected -tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/7f266b6dbe432f711cc93c3c3134d1f6.param.essence -tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/model.expected.json -tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/stdout.expected -tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/7f29f662e63c9cbeb7ef949471076baf.essence -tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/model.expected.json -tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/stdout.expected -tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/7f5dcefd7bf9747fd024609b49219e09.essence -tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/model.expected.json -tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/stdout.expected -tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/7f9216e93251e34cc26833867e932b73.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/model.expected.json -tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/stdout.expected -tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/7fc019c5d2aa866d1e64841472c50e95.essence -tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/model.expected.json -tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/stdout.expected -tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/7fe2fcf2a860ff56a8cce5c04d1de189.eprime.essence -tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/model.expected.json -tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/stdout.expected -tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/typecheck.expected -tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/8020e4ffd83f6ff3cd5314eb173c7c4f.essence -tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/model.expected.json -tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/stdout.expected -tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/8031e98607d45acd28638158da5f736b.essence -tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/model.expected.json -tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/stdout.expected -tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/803365043841034f75b79d281852dca3.eprime.essence -tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/model.expected.json -tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/stdout.expected -tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/8041caf40ae2bfc01f9c38fb844e65dc.essence -tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/model.expected.json -tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/stdout.expected -tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/804e99a6d72e62f05440f42a891aea92.essence -tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/model.expected.json -tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/stdout.expected -tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/8086e31b5dffcbcc49d6b8d9ea848d81.solution.essence -tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/model.expected.json -tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/stdout.expected -tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence -tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected -tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/808ee9e11be2db00173b3b5015b974c7.essence -tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/model.expected.json -tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/stdout.expected -tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/80d1aafbf701603221876e8a8338fc92.eprime.essence -tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/model.expected.json -tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/stdout.expected -tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/80f5cf8b4f3d2bde79f24aff19381265.eprime.essence -tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/model.expected.json -tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/stdout.expected -tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/typecheck.expected -tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/80facdc32f9ebbcd2cdde891eaee8074.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/model.expected.json -tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/stdout.expected -tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/818ec086c054d27d412fd647960ada42.eprime.essence -tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/model.expected.json -tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/stdout.expected -tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/8197eca2918662b12cc62050e0a7a042.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/model.expected.json -tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/stdout.expected -tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence -tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/typecheck.expected -tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/820f5feaa0b5969b6ee656fc5d24fe1d.eprime.essence -tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/model.expected.json -tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/stdout.expected -tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/82204c450b52c775ee8976d551212a46.essence -tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/model.expected.json -tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/stdout.expected -tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/827f1d4ebd57ab718caa032cc8b297fc.eprime.essence -tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/model.expected.json -tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/stdout.expected -tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/typecheck.expected -tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/82bfeece5b79e08184cc8749d9df8e38.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/model.expected.json -tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/stdout.expected -tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/82fe9e8a0156acab6ba50f4cc3b3af01.param.essence -tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/model.expected.json -tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/stdout.expected -tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/8367e8de71de185d6acf3e859e23a37b.eprime.essence -tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/model.expected.json -tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/stdout.expected -tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/83aa247156640416d52e2c458a03de71.essence -tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/model.expected.json -tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/stdout.expected -tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/83e79dafff20cf8bb9bbf4e0e4da6ed2.eprime.essence -tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/model.expected.json -tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/stdout.expected -tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/typecheck.expected -tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/841ed02320da61b19ba7f29d3547a734.essence -tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/model.expected.json -tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/stdout.expected -tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/843a2e9d983a6dacd46917b47c2bb64c.essence -tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/model.expected.json -tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/stdout.expected -tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/8446c84e9772883e9b089836df280ea0.essence -tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/model.expected.json -tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/stdout.expected -tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/845ca743dc0cab4127aa2ddb7b06c706.essence -tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/model.expected.json -tests/parse_print/autogen-bilals-fixed/845ca743dc0cab4127aa2ddb7b06c706/stdout.expected -tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/846c6659d7512b713d169b2b99b66b1c.essence -tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/model.expected.json -tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/stdout.expected -tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/848ce262a35f2e94cdbab80b8f227640.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/model.expected.json -tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/stdout.expected -tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/84c8be86e209af5b5ab3e1db3bbc0ca9.eprime.essence -tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/model.expected.json -tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/stdout.expected -tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/84cf4a0dfc2ad853d530a5a9c9d9cce3.essence -tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/model.expected.json -tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/stdout.expected -tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/84d7057dd52ef23efabb8abd969d826a.solution.essence -tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/model.expected.json -tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/stdout.expected -tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/84e2ac06d5257472f3b6d1cc3abbe977.essence -tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/model.expected.json -tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/stdout.expected -tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/84f87112eab6b17142e5b14caae5774c.essence -tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/model.expected.json -tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/stdout.expected -tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/851192d3d7c1ec86c1869bb52c0f6640.eprime.essence -tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/model.expected.json -tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/stdout.expected -tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/typecheck.expected -tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/855dae2be3de835a4f981a6d9ee2cd1a.essence -tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/model.expected.json -tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/stdout.expected -tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/85aa2391985aebf2d902133b0eac8aa1.solution.essence -tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/model.expected.json -tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/stdout.expected -tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/85b8db7be2f6abe894214a12a3d2b71d.eprime.essence -tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/model.expected.json -tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/stdout.expected -tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/862c0589559fb341ccb5ad1d924f1b9c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/model.expected.json -tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/stdout.expected -tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/86302603127c6befda9307b173096b8d.eprime.essence -tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/model.expected.json -tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/stdout.expected -tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/8660afc281dcc05d0e23c96d6f6bed05.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/model.expected.json -tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/stdout.expected -tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/866a1bd5f8b062c2d25978ee5e72de29.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/model.expected.json -tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/stdout.expected -tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/8694ff3ac1162a541f4c7c314ae002e7.eprime.essence -tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/model.expected.json -tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/stdout.expected -tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/86dad1e03f12a85fe28f594548912cc9.eprime.essence -tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/model.expected.json -tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/stdout.expected -tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/877d629f542f55f0f97157cd8c1654fe.eprime.essence -tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/typecheck.expected -tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/878b93190b5a24acce17d2a97e8cc7af.solution.essence -tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/model.expected.json -tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/stdout.expected -tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/87d64817d9031ce1ce57748338fd3be3.essence -tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/model.expected.json -tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/stdout.expected -tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/882edd879ad2f01823f68560740819fe.essence -tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/88443db0c7030dc3235b70084b331e12.essence -tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/model.expected.json -tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/stdout.expected -tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/88d16dd01ce393e846b3b9c187ec3e9d.essence -tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/model.expected.json -tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/stdout.expected -tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/88fb8c6b9616da911eaa4532629f05d7.eprime.essence -tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/typecheck.expected -tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/890bfc7260b9693bee3681fdd772c9d9.essence -tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/model.expected.json -tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/stdout.expected -tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/892ec3692f0f67c7ad6c4526f89adc16.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/model.expected.json -tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/stdout.expected -tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/8937cb3d6ee40ef8da27a428c4a612e0.essence -tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/model.expected.json -tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/stdout.expected -tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/8952206f0aaf01adc569795bd19ce4b0.essence -tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/model.expected.json -tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/stdout.expected -tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/895563db093bc77bacce9d4985c342da.eprime.essence -tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/model.expected.json -tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/stdout.expected -tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/typecheck.expected -tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/89ca579e7ee4e23e24eeca23d3114140.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/model.expected.json -tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/stdout.expected -tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/89d2147bf114d8dd9a90e093dc5af5c2.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/model.expected.json -tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/stdout.expected -tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/89f7d427253b927c806aa29971b41345.eprime.essence -tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/model.expected.json -tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/stdout.expected -tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/8a008fe73eaeed9aac0a4eb3373ac800.eprime.essence -tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/model.expected.json -tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/stdout.expected -tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/8a27347b2dd2e2b9609a3c469d6ad778.essence -tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/model.expected.json -tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/stdout.expected -tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/8a3540d56a402b0fc31a413179deca54.essence -tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/model.expected.json -tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/stdout.expected -tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/8a55b0279e21655cce9abfb6113ff43b.essence -tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/model.expected.json -tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/stdout.expected -tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/8a5e7fc807d28b304de719433d2cdbe5.essence -tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/model.expected.json -tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/stdout.expected -tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/8a800a7287fc2d812a65ade22d37cf24.essence -tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/model.expected.json -tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/stdout.expected -tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/8aa2647e6f93da5463593460b8f3b511.eprime.essence -tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/model.expected.json -tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/stdout.expected -tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/8aa81485456e83c2f3c31bf0124d95e4.essence -tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/model.expected.json -tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/stdout.expected -tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/8abb65ebdd36ca8f84ec49174151b12d.essence -tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/model.expected.json -tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/stdout.expected -tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/8b18b9af68196441a501019b9212cb97.eprime.essence -tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/model.expected.json -tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/stdout.expected -tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/8b42943e4abff9ae0fb2d1449fb076e8.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/8b50e6822575f3de1074c27e466f1189.eprime.essence -tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/model.expected.json -tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/stdout.expected -tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/8c0bcfe9b50c5da384fe5264b05fe32f.essence -tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/model.expected.json -tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected -tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/8c29a5ce12d82bfce1dbb019db60c9ca.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/model.expected.json -tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/stdout.expected -tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/8c6249e4d3029b23653b7f2c74259b87.eprime.essence -tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/model.expected.json -tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/stdout.expected -tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/typecheck.expected -tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/8c73957439e2f9438a9d273a2caaed0f.essence -tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/model.expected.json -tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/stdout.expected -tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/8cf86ce733dc743db476cc53aad4d6dc.essence -tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/model.expected.json -tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/stdout.expected -tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/8d1b8189b396c995301b7af280621470.essence -tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/model.expected.json -tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/stdout.expected -tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/8d24bbf635ac91ecf06f51548f733735.eprime.essence -tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/model.expected.json -tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/stdout.expected -tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/typecheck.expected -tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/8d47dfa1129d0d9a0970aa6e38e36998.eprime.essence -tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/model.expected.json -tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/stdout.expected -tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/8d7e54f03c2611e7fa2bfa11714fef12.eprime.essence -tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/model.expected.json -tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/stdout.expected -tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence -tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected -tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/8dc861607d33f49777a45579a6462e0c.essence -tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/model.expected.json -tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/stdout.expected -tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/8dd925d930329defff30de69da88eda8.essence -tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/model.expected.json -tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/stdout.expected -tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/8e0c1d7db5c270376e3d631b35db4339.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/model.expected.json -tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/stdout.expected -tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/8e57797389036cafd59682f3b212615f.eprime.essence -tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/model.expected.json -tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/stdout.expected -tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/8e5d66a2f3f055cde6e272b30fdcf933.essence -tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/model.expected.json -tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/stdout.expected -tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/8e60d4f6e3658efdc211aa5fc057619e.essence -tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/model.expected.json -tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/stdout.expected -tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/8e7aea1c1a683206e6a897c6ad5d8bd3.eprime.essence -tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/model.expected.json -tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/stdout.expected -tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/typecheck.expected -tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/8e93ce71508f064beff9a26d88d989ce.essence -tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/model.expected.json -tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/stdout.expected -tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/8ec00ef169857742e7874fe54717f1cf.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/model.expected.json -tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/stdout.expected -tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/8ed5ce0a29d96b4df6f636dbdad1e2fd.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/model.expected.json -tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/stdout.expected -tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/8ed64e4aee1ec8f5d11bdce8b0794770.essence -tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/model.expected.json -tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/stdout.expected -tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/8f501dda2021fc3c7c4e001157f1e6e6.eprime.essence -tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/model.expected.json -tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/stdout.expected -tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/typecheck.expected -tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/8f6e9e6d64f63ef25db9d4aa4e113bb0.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/model.expected.json -tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/stdout.expected -tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/8f796d2c2807c6ea530b07b82c77bd83.param.essence -tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/model.expected.json -tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/stdout.expected -tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/8fa1dbe2b5061280fa287b09746834ee.eprime.essence -tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/model.expected.json -tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/stdout.expected -tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/90299a9f0a7a69f3c96b6cbd3af60a79.essence -tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/model.expected.json -tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/stdout.expected -tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/90320206b02563fde63fe692179aedbe.eprime.essence -tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/model.expected.json -tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/stdout.expected -tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/90955ca420084f220878f52c9a1671bc.eprime.essence -tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/model.expected.json -tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/stdout.expected -tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/typecheck.expected -tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/90a9448a74952ba0cece6a7b1b7947fa.essence -tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/model.expected.json -tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/stdout.expected -tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/90d639a3b2f496a9abac113456848d5a.essence -tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/model.expected.json -tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/stdout.expected -tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/90ea9088b0aa25fc33a1a86535fac68f.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/model.expected.json -tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/stdout.expected -tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/90f2c8e9f3458e147cb1f50d16c3e4cb.eprime.essence -tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/model.expected.json -tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/stdout.expected -tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/91c188d85dd94a4944c93eedd6dd286e.essence -tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/model.expected.json -tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/stdout.expected -tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/92153839be64245ef4416df291ac3aba.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/model.expected.json -tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/stdout.expected -tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/92598f5f307ca7499686cc4dbed50824.eprime.essence -tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/model.expected.json -tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/stdout.expected -tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/92612015e4c8034476c0db682d3319c4.param.essence -tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/model.expected.json -tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/stdout.expected -tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/92bafdce8551adecaa5412f757cbd639.essence -tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/model.expected.json -tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/stdout.expected -tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/92deb88ede01f166a1c4af2f4120555d.eprime.essence -tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/model.expected.json -tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/stdout.expected -tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/92e662998492b98daa5a6a0332603ea2.eprime.essence -tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/model.expected.json -tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/stdout.expected -tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/931175e0768cf1f6a21f204355b8dca5.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/model.expected.json -tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/stdout.expected -tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/93252b0ebfbeb644ae73b8a784adc4e1.eprime.essence -tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/93284da4a4bcb0b65f9af4e148349956.eprime.essence -tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/model.expected.json -tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/stdout.expected -tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/9333c5df4a82f75bde6f2e3ec63382e3.essence -tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/model.expected.json -tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/stdout.expected -tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/9336968c84835480f78834ee1d9335b5.essence -tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/model.expected.json -tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/stdout.expected -tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/933c4b5f18128e59bd2fc5d3bf73960b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/model.expected.json -tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/stdout.expected -tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/9378c4a717a68960aa405ca27d538fc9.essence -tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/model.expected.json -tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/stdout.expected -tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/9391796d63e7e046757dd85404c97910.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/model.expected.json -tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/stdout.expected -tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/93bf76b55dc3b1fc1580ca8a747b70ef.essence -tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/93d0856761e66a52053d96ec3afd88a4.essence -tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/model.expected.json -tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/stdout.expected -tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/93e2a922d768e544f792248d1ead5798.essence -tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/model.expected.json -tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/stdout.expected -tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/93f65b5f85c9951f025b767bd3272208.essence -tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/model.expected.json -tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/stdout.expected -tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/9463f4f2bd81e9b00e18ecab501331f0.eprime.essence -tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/model.expected.json -tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/stdout.expected -tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/947baf2a6b9f590eb910d978843c670b.essence -tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/model.expected.json -tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/stdout.expected -tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/94d0161fbef6b271aae867644ec230fa.essence -tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/model.expected.json -tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/stdout.expected -tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/94df0cbb4b067b4913084c2c0ba39c25.essence -tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/model.expected.json -tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/stdout.expected -tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/950926788ae00620bf3eefe8cfa83b48.eprime.essence -tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/model.expected.json -tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/stdout.expected -tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/951d3c18901f9994c032518bb08cd59c.eprime.essence -tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/model.expected.json -tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/stdout.expected -tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/952e8615c6da932c1bd0255f5ee021c2.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/model.expected.json -tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/stdout.expected -tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/9541bd67eea6db5dafd1082634c24ba1.essence -tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/model.expected.json -tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/stdout.expected -tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/95673ede51a7abf39744fbcc1b3524b5.eprime.essence -tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/model.expected.json -tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/stdout.expected -tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/9571ad4d3d6860b62276decba16314f0.essence -tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/model.expected.json -tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/stdout.expected -tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/95e96e71787b541a0f9137e42797a5b2.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/model.expected.json -tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/stdout.expected -tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence -tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected -tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/9660baf70b06d52075a8c2c29fbccbdb.essence -tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/model.expected.json -tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/stdout.expected -tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/96a453cc18a685f8389fec2d8a6eb138.eprime.essence -tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/model.expected.json -tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/stdout.expected -tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/96ad37a360894f0ccc0818f5e2dbb60f.essence -tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/model.expected.json -tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/stdout.expected -tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/96bccf0f520f5724107edb2af79bd637.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/model.expected.json -tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/stdout.expected -tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/96e89498179d3a93c6dd71000a72ce7e.param.essence -tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/model.expected.json -tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/stdout.expected -tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/973d5a1ff0a13310b0134abb50f0c2cc.essence -tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/model.expected.json -tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/stdout.expected -tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/9766d2cb8dbc532f788d40e27b2a738f.essence -tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/model.expected.json -tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/stdout.expected -tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/979854a979c1d69c3dc6653f5b2db319.eprime.essence -tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/model.expected.json -tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/stdout.expected -tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/typecheck.expected -tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/97d0365bab1f9d009ff4f0f62ab42f0d.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/model.expected.json -tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/stdout.expected -tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/9816fff64d3f46d274f2cc35141b8ddc.essence -tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/model.expected.json -tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/stdout.expected -tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/981f70500ed5d05980523114811892f7.essence -tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/model.expected.json -tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/stdout.expected -tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/982574e0185269f9c521d81bf777839c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/model.expected.json -tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/stdout.expected -tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/982885c091c3f3c10bce2fa43eb09375.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/model.expected.json -tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/stdout.expected -tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/984898fa40ed0ba9c50bb8cb67c7e661.essence -tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/model.expected.json -tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/stdout.expected -tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/9877d3e1f5e58a3bc09e37824cc5f794.essence -tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/model.expected.json -tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/stdout.expected -tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/987a6b11bf61527428e95276264dba7c.eprime.essence -tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/model.expected.json -tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/stdout.expected -tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/98f60d7ecdbc83c732111b4c2c19e2dc.eprime.essence -tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/model.expected.json -tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/stdout.expected -tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/98faadf71151c98f3ba7890f3cfc5561.essence -tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/model.expected.json -tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/stdout.expected -tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/99442f27f0d2939b7caf49f63779f513.eprime.essence -tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/model.expected.json -tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/stdout.expected -tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/996e0c697e30345a03bba1030123498b.eprime.essence -tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/model.expected.json -tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/stdout.expected -tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/99a8aa88b94cf878a9e7a415212c082b.essence -tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/model.expected.json -tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/stdout.expected -tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/99b35c7862469001642e139275eb67cb.eprime.essence -tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/model.expected.json -tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/stdout.expected -tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/99f6c9d65ed814c4e6f72bf949826fa2.essence -tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/model.expected.json -tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/stdout.expected -tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/9a0d61ffdcb4d471c71fcb70f6ff1232.eprime.essence -tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/model.expected.json -tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/stdout.expected -tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/9a180dd7ae58ead0dd9e267df03321f7.eprime.essence -tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/model.expected.json -tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/stdout.expected -tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/9a33ed76a93af659745eb6902c7df5c0.param.essence -tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/model.expected.json -tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/stdout.expected -tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/9a5f6f309a87af93404d72cb159b5840.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/model.expected.json -tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/stdout.expected -tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/9a784d81d10dc8cccf9dbabf48a8e990.eprime.essence -tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/model.expected.json -tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/stdout.expected -tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/9aa81bc2d667ea8cadebe72fdd563c6d.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/model.expected.json -tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/stdout.expected -tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/9abdea7380788d3969dc2640d22d213c.essence -tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/model.expected.json -tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/stdout.expected -tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/9ac3f75c1e13c0710509398532042647.eprime.essence -tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/model.expected.json -tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/stdout.expected -tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/typecheck.expected -tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/9b049f77e2989f8c2025310e51bad76d.eprime.essence -tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/model.expected.json -tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/stdout.expected -tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/9b2afc7268f96473c48caf6d3e206c31.essence -tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/model.expected.json -tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/stdout.expected -tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/9b469468a3b10432c0ce1da021333952.eprime.essence -tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/model.expected.json -tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/stdout.expected -tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/9b6f03d616fd958ec69f8362abfb00ac.essence -tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/model.expected.json -tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/stdout.expected -tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/9bdd1358d3bedcf3d0604f276779b66d.essence -tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/model.expected.json -tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/stdout.expected -tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/9bfb780b3c2fba75e53ab3203cef9279.eprime.essence -tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/model.expected.json -tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/stdout.expected -tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/9c03010bd51a771189cd5536a18e2f04.essence -tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/model.expected.json -tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/stdout.expected -tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/9c55294c0d3d31ba76c9c8253bef3ef8.eprime.essence -tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/model.expected.json -tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/stdout.expected -tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/9c56771bea5197295b15462aa78ce28f.essence -tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/model.expected.json -tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected -tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/9c7ac59a352b59446be92d9724945913.solution.essence -tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/model.expected.json -tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/stdout.expected -tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence -tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected -tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/9cfb8ee2ea896efcddeebeccd5bd3711.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/model.expected.json -tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/stdout.expected -tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/9cfc0004cabea5af2bcd505f97913bb5.essence -tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/model.expected.json -tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/stdout.expected -tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/9d2f4e849e1c8f3e7bbf4f44c6947e20.eprime.essence -tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/model.expected.json -tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/stdout.expected -tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/9d370387c39185b72ed108acdcd412a1.essence -tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/model.expected.json -tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/stdout.expected -tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/9d3ffe596365f3f356cdf3eb7e785b83.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/model.expected.json -tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/stdout.expected -tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/9d9440d946dd0a2494f8ad0ef44d90e4.eprime.essence -tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/model.expected.json -tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/stdout.expected -tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/9db7329469e0dba0d9dff49a5d1e2300.essence -tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/model.expected.json -tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/stdout.expected -tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/9dd9794292570f18cb58bd2b90e52231.essence -tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/model.expected.json -tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/stdout.expected -tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/9df60a32943a5971a4f694bb26aa11f1.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/model.expected.json -tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/stdout.expected -tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/9e34c2ed21636c2c3c7277b6275cbc4f.essence -tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/model.expected.json -tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/stdout.expected -tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/9e3ca1b1b59b0e6c2982f941233bf696.essence -tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/model.expected.json -tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/stdout.expected -tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/9e4b1361b32c613b5fa1e221ec3357f1.param.essence -tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/model.expected.json -tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/stdout.expected -tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/9e52878539b138a1df6958f490b94b7c.eprime.essence -tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/model.expected.json -tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/stdout.expected -tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/9e73f0e3f8f1ac3a815081e0dfa1ccfb.essence -tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/model.expected.json -tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/stdout.expected -tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/9e7c9dedada85ad3e072da5d7534bade.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/model.expected.json -tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/stdout.expected -tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/9ea54b487a734e53316eba53dd16f268.eprime.essence -tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/model.expected.json -tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/stdout.expected -tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/9ebbff2eda9f9a53a0eccf5b2d2076d4.essence -tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/model.expected.json -tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/stdout.expected -tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/9f0da0c4289dcd010e92c8ab6d50b07a.eprime.essence -tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/model.expected.json -tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/stdout.expected -tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/9f9192f87a87bd8c7eab6605ea8d2ebb.essence -tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/model.expected.json -tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/stdout.expected -tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/9fb3812b9de68be7a7c5ff4a238f69a8.eprime.essence -tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/model.expected.json -tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/stdout.expected -tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/a006f0c1cb66bd72725cad95f144015b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/model.expected.json -tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/stdout.expected -tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/a01046ebd775365cd4802f377ea06422.eprime.essence -tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/model.expected.json -tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/stdout.expected -tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/a016b613a468fa41c3e0957ca9205227.eprime.essence -tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/model.expected.json -tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/stdout.expected -tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/a03ddc28b5f272001ba23db986726a9f.eprime.essence -tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/model.expected.json -tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/stdout.expected -tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/a077e78a13138544db622fefb4945e9a.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/model.expected.json -tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/stdout.expected -tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/a09afb2228f7343e721bc5c01bdd1fa3.essence -tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/model.expected.json -tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/stdout.expected -tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/a09b27e60c42a3e4ab0c27e3826dfc25.eprime.essence -tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/model.expected.json -tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/stdout.expected -tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/a0ad07b97e1685ca2e2c111457133e90.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/model.expected.json -tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/stdout.expected -tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/a0c6405918b286ca82e020a2b7d7cf00.solution.essence -tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/model.expected.json -tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/stdout.expected -tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/a0d073a0e024ef76a14be2b252c46325.essence -tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/model.expected.json -tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/stdout.expected -tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/a0e4b0ea439a18784bdc4b76134e741d.eprime.essence -tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/model.expected.json -tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/stdout.expected -tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/a10653f603b57480444e59a7f67a1eea.eprime.essence -tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/model.expected.json -tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/stdout.expected -tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/a113fdda7fda4e683db04122e85f1eb9.essence -tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/model.expected.json -tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/stdout.expected -tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/a132548e1417c097233240500dd08b47.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/model.expected.json -tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/stdout.expected -tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/a1336f3b52422c5f8f9979ad8fc8a7db.param.essence -tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/model.expected.json -tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/stdout.expected -tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/a13dddfa9c8fe9b026f0f80ebd5885ab.eprime.essence -tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/model.expected.json -tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/stdout.expected -tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/a14b88c5adc5536184d37af5a6f188ca.essence -tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/model.expected.json -tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/stdout.expected -tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/a213c8d1ec823b6cb728b74b40ba7301.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/model.expected.json -tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/stdout.expected -tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/a24146deb495305d4ee888ff7800707f.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/model.expected.json -tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/stdout.expected -tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/a25d226dacf7592fa4ccf76608329331.eprime.essence -tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/model.expected.json -tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/stdout.expected -tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/a26aea264556a8f0fdfe45a35db6fa4e.solution.essence -tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/model.expected.json -tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/stdout.expected -tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/a278490eff4c7aaa3efb73ab7cb5a355.eprime.essence -tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/model.expected.json -tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/stdout.expected -tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/a29843ebaa6b51bea21d033d0410646e.eprime.essence -tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/model.expected.json -tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/stdout.expected -tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/a2b7f35d86498ed90d54066bf3f451bc.essence -tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/model.expected.json -tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/stdout.expected -tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/a2d859e9768309b9821313f15f257203.eprime.essence -tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/model.expected.json -tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/stdout.expected -tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/a2d869e1257b1c53d062dbc8e2d442fd.eprime.essence -tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/model.expected.json -tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/stdout.expected -tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/a2f78265400c2125ffba87791599091b.eprime.essence -tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/model.expected.json -tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/stdout.expected -tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/a3388cc4ac0391c01bd28ce12f011bfd.eprime.essence -tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/model.expected.json -tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/stdout.expected -tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/a34a221ea024f629caf135e945eee35b.eprime.essence -tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/model.expected.json -tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/stdout.expected -tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/a34c8275c1d9524a08d2ec1d329ed35a.eprime.essence -tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/model.expected.json -tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/stdout.expected -tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/a363b2628f65efb0290c8d10d2a18ac4.eprime.essence -tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/model.expected.json -tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/stdout.expected -tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/a370966830e4e6e3d5c258cbed1908e2.eprime.essence -tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/model.expected.json -tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/stdout.expected -tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/a39552e9ed1bd8481c8c6a692b9a507c.eprime.essence -tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/model.expected.json -tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/stdout.expected -tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/a3a075358b168ec8d79e31f8ed43961d.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/model.expected.json -tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/stdout.expected -tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/a3a54bbf04a27937aac3bddfe7019f21.param.essence -tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/model.expected.json -tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/stdout.expected -tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/a3c32ac7b68b7056569b3146a0d5c486.essence -tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/model.expected.json -tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/stdout.expected -tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/a3e9b4abdd60d8b8426ee3a7e2e72475.essence -tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/model.expected.json -tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/stdout.expected -tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/a40bc6a0417f684847d2d44f886c6d61.eprime.essence -tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/model.expected.json -tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/stdout.expected -tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/a46f0f8380128f04446402757318c1d6.essence -tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/model.expected.json -tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/stdout.expected -tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/a46f951200e57005f4e9c8830866edcc.essence -tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/model.expected.json -tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/stdout.expected -tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/a4dfe434c651645a3287054935685825.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/model.expected.json -tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/stdout.expected -tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/a4fa08d673ebb8bbb06a5bc9c1f39441.essence -tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/model.expected.json -tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/stdout.expected -tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/a4fa1c3afc021a129ec5dd233c4c10b5.eprime.essence -tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/model.expected.json -tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/stdout.expected -tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/a53a6a9dd9196d0a14ae3b4b0e39913b.essence -tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/model.expected.json -tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/stdout.expected -tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/a569624863aa273c01c6312a624723f1.eprime.essence -tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/model.expected.json -tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/stdout.expected -tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/a59a038c1f2344f80d84a30997a193f5.eprime.essence -tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/model.expected.json -tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/stdout.expected -tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/a5a8dc4db8f4987615f65dcca82955c7.essence -tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/model.expected.json -tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/stdout.expected -tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/a5da41200401440fbed34793aaf4a1f9.eprime.essence -tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/model.expected.json -tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/stdout.expected -tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/a5f89c8745074bbbd432690c47cee7e7.eprime.essence -tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/model.expected.json -tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/stdout.expected -tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/a5f97387c646309f28161687f8ce5e52.eprime.essence -tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/model.expected.json -tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/stdout.expected -tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/a60598f23c2356a85d0b426465bbaa62.eprime.essence -tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/model.expected.json -tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/stdout.expected -tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/a606a391852e05ddc52386ed6a6287cb.eprime.essence -tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/model.expected.json -tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/stdout.expected -tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/a67c3735f80066994faf7b6478cef1df.param.essence -tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/model.expected.json -tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/stdout.expected -tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/a6e121cacb3fcfc3686d158963d59199.eprime.essence -tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/model.expected.json -tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/stdout.expected -tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/a722dbeaf9763e8403948d210db0f009.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/model.expected.json -tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/stdout.expected -tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/a73db0d516a2bfe1cf37eb14273c17a5.essence -tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/model.expected.json -tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/stdout.expected -tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/a747a06b8ce4f18eaabdc79af95c005f.eprime.essence -tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/model.expected.json -tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/stdout.expected -tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/a79dda05fbffc4c52468a642a8a59634.essence -tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/model.expected.json -tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/stdout.expected -tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/a81bfd36585a1f3dfd83ad20da897574.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/model.expected.json -tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/stdout.expected -tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/a82bac554f50cdeaf2990a7c87c196fb.essence -tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/model.expected.json -tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/stdout.expected -tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/a8486d142ceb5bd28d6916b002b65e9b.essence -tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/model.expected.json -tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/stdout.expected -tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/a86a19acd180fa620be92f72da196137.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/model.expected.json -tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/stdout.expected -tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/a8c33551d82efabd5dc8fbd1da9bdb76.essence -tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/model.expected.json -tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/stdout.expected -tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/a911a0725625ec718adf4897ee006d78.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/model.expected.json -tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/stdout.expected -tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/a92907ef0f1df1943e88b8ff2c0a4106.eprime.essence -tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/model.expected.json -tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/stdout.expected -tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/typecheck.expected -tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/a9833bb1a05cbe195b2b712eb3adc0f3.eprime.essence -tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/model.expected.json -tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/stdout.expected -tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/a9ab77b84c21743c54e1a69abe25a1ae.eprime.essence -tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/model.expected.json -tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/stdout.expected -tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/a9bbb84eaa63096107c5b5288303bbd3.essence -tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/model.expected.json -tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/stdout.expected -tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/a9f733d77ae148fd1c421bcca2786218.essence -tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/model.expected.json -tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/stdout.expected -tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/aa4cf640ebbecdf31f14815829763e60.eprime.essence -tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/model.expected.json -tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/stdout.expected -tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/aa79c19e3b821dc7ba06b81ea70d4da1.eprime.essence -tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/model.expected.json -tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/stdout.expected -tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/aa87f4ba05d4f8ceb28dda2ecced003a.essence -tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/model.expected.json -tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/stdout.expected -tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/aaf7524e7d2478b2902702a5c750d45f.essence -tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/model.expected.json -tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/stdout.expected -tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/ab03a32d2ffe82b9a97e9bcb41d8db5a.essence -tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/model.expected.json -tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/stdout.expected -tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/ab3498b5367b4b4179da2809e7fcc628.essence -tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/model.expected.json -tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/stdout.expected -tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/ab53a48ee2d60f33403a71653c51811c.eprime.essence -tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/model.expected.json -tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/stdout.expected -tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/ab828d5a7f3d31d42bf66810cab3da9b.eprime.essence -tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/model.expected.json -tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/stdout.expected -tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/aba70bb3bf8b25a63968e36b7aa1469a.param.essence -tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/model.expected.json -tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/stdout.expected -tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/ac0be820dc594e22c0314df67936b437.eprime.essence -tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/model.expected.json -tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/stdout.expected -tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/ac198413eefefcc5bb8b961355337676.essence -tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/model.expected.json -tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/stdout.expected -tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/ac3c843495fdbdb21291451d275c05f4.eprime.essence -tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/model.expected.json -tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/stdout.expected -tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/ac5a804e41cec04dc88e787c39746687.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/model.expected.json -tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/stdout.expected -tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence -tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected -tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/ac8a100b38e71fa08961b590ea591dfb.essence -tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/model.expected.json -tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/stdout.expected -tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/ac9289759eeeed046f3665ecaa69e92c.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/model.expected.json -tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/stdout.expected -tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/aca7d331e72e81eea496eaf092cd07d7.eprime.essence -tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/acc9dd7a9d879b3fd0f4154f5ec49c81.essence -tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/model.expected.json -tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/stdout.expected -tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/ace83ec31d76d447765ce42172cffaa6.solution.essence -tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/model.expected.json -tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/ad451cf4f5c4d4aa6453166bc1fb9637.essence -tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/model.expected.json -tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/ad58de7a6f4b8961d21962c5c1339af3.eprime.essence -tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/model.expected.json -tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/ad5f741657701738770c818541d371d1.eprime.essence -tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/model.expected.json -tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/ad613a17f3cee2196b552d3d7248765d.eprime.essence -tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/model.expected.json -tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/ad926564e9b2c6eba0277bc567b8144a.essence -tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/model.expected.json -tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/ad9688a81f740706aa94689fca7a305e.eprime.essence -tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/model.expected.json -tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/stdout.expected -tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/addd14e8dfc91037ec8c416bcefe5a6f.eprime.essence -tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/model.expected.json -tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/stdout.expected -tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/adf148d3c9b24578da2d82722b1cdd5a.eprime.essence -tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/model.expected.json -tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/stdout.expected -tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/ae18a4a435dc69d385d04a00db890160.eprime.essence -tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/model.expected.json -tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/stdout.expected -tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/ae3239ef6502388c67dff54e9dd38369.essence -tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/model.expected.json -tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/stdout.expected -tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/aea4619a9a5a0fd8a902c55ccdfcf159.eprime.essence -tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/model.expected.json -tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/stdout.expected -tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/aed13960e31378529c240b2392950a53.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/model.expected.json -tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/stdout.expected -tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/typecheck.expected -tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/af199adef0798e59971e84e21cc598ef.essence -tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/af199adef0798e59971e84e21cc598ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/af743e3117ee7bb4e2b1e8c57f50c92b.essence -tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/model.expected.json -tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/stdout.expected -tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/af8b7ba49f3da7b43601534cea6c9a52.eprime.essence -tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/model.expected.json -tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/stdout.expected -tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/typecheck.expected -tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/afc735a10b56337b796738ed1c69dcff.essence -tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/model.expected.json -tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/stdout.expected -tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/afe897fe5856ec3cfae35ecc75a2b689.param.essence -tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/model.expected.json -tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/stdout.expected -tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/aff37a614c45b7cbfad99c7e884ab813.essence -tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/model.expected.json -tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/stdout.expected -tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/b016ae2a33a178f9661233f5107ff40d.eprime.essence -tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/model.expected.json -tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/stdout.expected -tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/b04682273e3c787e3dc790f31278124c.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/model.expected.json -tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/stdout.expected -tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/b0a268a2089046a016a0a03d1a709e79.eprime.essence -tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/model.expected.json -tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/stdout.expected -tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/b0a86f8190115820c0473cbe11e9d73b.eprime.essence -tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/model.expected.json -tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/stdout.expected -tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/b0c22716eda56b873b42d632dd725701.eprime.essence -tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/model.expected.json -tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/stdout.expected -tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/b1ded79047d5b8161604945e8d89cb42.essence -tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/model.expected.json -tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/stdout.expected -tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/b20a88a48ca68397fb84abb1ffdfbb20.eprime.essence -tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/model.expected.json -tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/stdout.expected -tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/b2167f75554417bcd37f5b11571ce7fc.eprime.essence -tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/model.expected.json -tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/stdout.expected -tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/b23bd23d747514f05deb05092adcbc3d.essence -tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/model.expected.json -tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/stdout.expected -tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/b2607644339c60b7dc33caa86ffa9dd2.eprime.essence -tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/model.expected.json -tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/stdout.expected -tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/b292d71c864427f2522d80399b0e16c4.essence -tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/model.expected.json -tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/stdout.expected -tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/b2addf138a556b6b21ac6d4585825828.essence -tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/model.expected.json -tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/stdout.expected -tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/b2c5b1865f75280212cbde17b6203d21.essence -tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/model.expected.json -tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/stdout.expected -tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/b38ec6d36aff0c916226635561cbd1a6.essence -tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/model.expected.json -tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/stdout.expected -tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/b3bf8939659c445bd732414fbe57ccf7.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/model.expected.json -tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/stdout.expected -tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/b3d03314511a8876a66d524dd0240cdb.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/model.expected.json -tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/stdout.expected -tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/b3e5efec04851a6556b23a0d4a9f50d0.eprime.essence -tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/model.expected.json -tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/stdout.expected -tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/b4242fa95f76260bd55ae4b62785ca8a.eprime.essence -tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/model.expected.json -tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/stdout.expected -tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/b427cac47c65e49ff32c22d2b3e8c19b.eprime.essence -tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/model.expected.json -tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/stdout.expected -tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/b45554d61a3d984d22739b92a39fbf9a.essence -tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/model.expected.json -tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/stdout.expected -tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/b4620a7bf97886729d0c139c741b474f.essence -tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/model.expected.json -tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/stdout.expected -tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/b464ffefb1b910de2383cdd4db034de4.essence -tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/model.expected.json -tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/stdout.expected -tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/b4a0864bbf55cf63ffd8e703e5ef7d5c.essence -tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/model.expected.json -tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/stdout.expected -tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/b4d111eb9e87b80bd5a5b4fdcb14fe54.essence -tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/model.expected.json -tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/stdout.expected -tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/b585a56df7b92c03073077c213cf70e4.essence -tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/model.expected.json -tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/stdout.expected -tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/b5a0336d0a0a8aeb65a6dd3effbbe1c3.essence -tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/model.expected.json -tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/stdout.expected -tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/b5c7ee358b6a6607d61c3429066bef38.eprime.essence -tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/model.expected.json -tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/stdout.expected -tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/b60ebd8c197f6819c061027cb80758ce.solution.essence -tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/model.expected.json -tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/stdout.expected -tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/b621a47f67ebf92dab65e3f36a65aeb0.eprime.essence -tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/model.expected.json -tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/stdout.expected -tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/b66e7da196a60e38bb95fbadfe03228a.eprime.essence -tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/model.expected.json -tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/stdout.expected -tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/b6716decf75eddda33df3ec06f7cc400.eprime.essence -tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/model.expected.json -tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/stdout.expected -tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/b68d49c8a5e7d08c87edf866544ee453.essence -tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/model.expected.json -tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/stdout.expected -tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/b68ea8a7e4351cdfc4b3b75bb6582893.eprime.essence -tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/model.expected.json -tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/stdout.expected -tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/b6af969b2b536ddf5cfae45210fa4165.param.essence -tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/model.expected.json -tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/stdout.expected -tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/b71c00715ba61ced0f86e3bc43166f35.eprime.essence -tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/model.expected.json -tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/stdout.expected -tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/b7689a502ec829c7763e77d9691b1327.essence -tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/model.expected.json -tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/stdout.expected -tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/b79ccd977e609a75497edf1ccf2ee937.essence -tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/model.expected.json -tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/stdout.expected -tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/b79d93a39401f5435ba6a518c8db0821.essence -tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/model.expected.json -tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/stdout.expected -tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/b7a753117dec70ec2c63efe8fcc47a65.solution.essence -tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/model.expected.json -tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/stdout.expected -tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/b7c7cd774fa35b4a548be2e3bd6033fc.essence -tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/model.expected.json -tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/stdout.expected -tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/b7ca13696cd34ed7006ef9dfac6d66ff.eprime.essence -tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/model.expected.json -tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/stdout.expected -tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/b7eff6ada58015f7994346e5ca41950c.eprime.essence -tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/model.expected.json -tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/stdout.expected -tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/b813f1982cff69612c9bec6020316b25.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/model.expected.json -tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/stdout.expected -tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/b82f142660089e621dc2e46af3650725.eprime.essence -tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/model.expected.json -tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/stdout.expected -tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/b83445d4bf1480adfef310882eb92fd4.essence -tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/model.expected.json -tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/stdout.expected -tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/b9053d156faa845a9b26778d6c852ced.param.essence -tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/model.expected.json -tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/stdout.expected -tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/b90fa3069c597d89a13b7f5db3466c81.essence -tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/model.expected.json -tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/stdout.expected -tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/b91aacd4bc92fd5c7323e78a2f9a9d2f.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/model.expected.json -tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/stdout.expected -tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/b95be16193c0617ac3f6fa8338bbfcaf.essence -tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/model.expected.json -tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/stdout.expected -tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/b97231328d01c59346c93171844928df.eprime.essence -tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/model.expected.json -tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/stdout.expected -tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/typecheck.expected -tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/b99de7a99ed72b99faa90220b64f2f6b.essence -tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/model.expected.json -tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/stdout.expected -tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/b9abca4e0521f3fe860da1ab68d0fce3.essence -tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/model.expected.json -tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/stdout.expected -tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/b9e91ae9cdc74dfc72c64709c85041a7.essence -tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/ba11676f6e3d1b08c11d9371a6d371e1.eprime.essence -tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/ba2c7cadd697f7536313eecd1899bb28.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/model.expected.json -tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/stdout.expected -tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/ba57bded992c27570523330a6638fae2.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/model.expected.json -tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/stdout.expected -tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/ba67a75dc5e5f426156762bf669abcf5.eprime.essence -tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/model.expected.json -tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/stdout.expected -tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/bab3e1df6fdf4a2f82163db838994be4.essence -tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/model.expected.json -tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/stdout.expected -tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/bb13903b879fbc18e1d9d64cf0289190.essence -tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/model.expected.json -tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/stdout.expected -tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/bb2014ae94421f243112c038ddf96494.solution.essence -tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/model.expected.json -tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/stdout.expected -tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/bb61866f0f2e5c9384276ae0396b5513.essence -tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/model.expected.json -tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/stdout.expected -tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/bb926ba62f74a7445396970a0346c2a9.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/model.expected.json -tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/stdout.expected -tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/bbb14bf74d24cecfbb010388b777932e.essence -tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/model.expected.json -tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/stdout.expected -tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/bbb388ac3c8c38fc6fb2b259f3443a62.eprime.essence -tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/model.expected.json -tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/stdout.expected -tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/bbbac65e63fb9a20f50aa192f3d4510b.essence -tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/model.expected.json -tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/stdout.expected -tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/bbc5fd6f103aa00c642cd8a16f0fcd2a.essence -tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/model.expected.json -tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/stdout.expected -tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/bbe3f66a50742afbb33589d94d014b78.eprime.essence -tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/model.expected.json -tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/stdout.expected -tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/typecheck.expected -tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/bc07b283263666f921684988965bd90f.essence -tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/model.expected.json -tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/stdout.expected -tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/bc45b8d80af7b0427721713bfe2f97c3.essence -tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/model.expected.json -tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/stdout.expected -tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/bca160ac0038e5fbfbd71c81006de2ce.eprime.essence -tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/model.expected.json -tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/stdout.expected -tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/bcb28e847b7fd22b500fc68f328c2269.essence -tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/model.expected.json -tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/stdout.expected -tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/bcc1e37cd9ab1417ffa962e137f9b284.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/model.expected.json -tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/bd131b4d8998f764796aa1bbae756992.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/bd1f8fe6088b9a887cdc202885ad4150.eprime.essence -tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/bd30521aace879d601572ed605ffcf25.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/bd3e7688a995691fc7143ffda5bba96e.eprime.essence -tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/bd478332e179f9f0af76f10aa42d8e7b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/bd4e616b6582a4aa4aa22828874ddf4b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/stdout.expected -tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/bd7cfa0f099b440c1f12276d281df610.eprime.essence -tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/model.expected.json -tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/stdout.expected -tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/bdcbe56f6a549ac3bd7c9bae5bb2d511.essence -tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/model.expected.json -tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/stdout.expected -tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/be0de29426929bc0929e105a90307e5b.essence -tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/model.expected.json -tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/stdout.expected -tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/be5b5a644521be5b55c6a12c503cad3a.eprime.essence -tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/model.expected.json -tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/stdout.expected -tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/be61eda358af1c064b10fb0f1fb64c96.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/model.expected.json -tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/stdout.expected -tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/be94e853947c3d3fa51c7eab4ce862b3.param.essence -tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/model.expected.json -tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/stdout.expected -tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/be9f5b19948f28f905022b77223c3be2.essence -tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/model.expected.json -tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/stdout.expected -tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/bf260ebe2c81e12c93948051b93d11da.essence -tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/model.expected.json -tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/stdout.expected -tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/bf63b3e171567b8deefb648d5e8f7daf.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/model.expected.json -tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/stdout.expected -tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/bf760e520ac0c9fc6e4392ca9d2c8f27.essence -tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/model.expected.json -tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/stdout.expected -tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/bf7d4eb316fa86bd43389c69e2572be2.eprime.essence -tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/model.expected.json -tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/stdout.expected -tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/bf81fbe51a3238b216bc40f436eddee5.essence -tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/model.expected.json -tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/stdout.expected -tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/bf8cf5b1b970cbcd41992ad1412d1675.essence -tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/model.expected.json -tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/stdout.expected -tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/bfa891f78900273d2685d432e5de7efa.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/model.expected.json -tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/stdout.expected -tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/bfa9376df55a92d81e3d6ada44f900e8.solution.essence -tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/bfad9d7d69b1676ba04137649a362c8a.essence -tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/model.expected.json -tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/stdout.expected -tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/bfd00aba95070795c7a808361a3c495d.eprime.essence -tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/model.expected.json -tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/stdout.expected -tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/c012b856025e2c580aa6d09abc8a939b.eprime.essence -tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/model.expected.json -tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/stdout.expected -tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/c06eacfedc11cfea2b681414cb3f1ee0.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/model.expected.json -tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/stdout.expected -tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/c0929bb90fee827dde819c6dacffe4c0.eprime.essence -tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/model.expected.json -tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/stdout.expected -tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/c094ffd2e9d36397bff8e96fd44884d1.eprime.essence -tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/model.expected.json -tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/stdout.expected -tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/c09db9fd3028ee0633eaff8bd7644cb6.eprime.essence -tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/model.expected.json -tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/stdout.expected -tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/c120a9cd6dd0f5f002a4cda9613481d1.eprime.essence -tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/model.expected.json -tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/stdout.expected -tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/c1f6795e92c4ed7b8d90f26f64edff16.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/model.expected.json -tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/stdout.expected -tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/c23f30dfa58f7135e9c61ff93975c98d.eprime.essence -tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/model.expected.json -tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/stdout.expected -tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/c25359bbfc6b0d4d348e9a7c9593afb3.essence -tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/model.expected.json -tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/stdout.expected -tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/c2d39618c48aa2cf04741165bf25582e.essence -tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/model.expected.json -tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/stdout.expected -tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/c308cb4305e31ab207f2141469b12fb5.essence -tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/model.expected.json -tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/stdout.expected -tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/c31ab0d299c5fac897401f5a372e078a.eprime.essence -tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/model.expected.json -tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/stdout.expected -tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/c330245024f1d54f5c43c277805b9fdf.param.essence -tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/model.expected.json -tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/stdout.expected -tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/c333656a35aba68d8062d212c421d88e.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/model.expected.json -tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/stdout.expected -tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/c35882af6abc63358c2bab1e851bd680.essence -tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/model.expected.json -tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/stdout.expected -tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/c3841e1877c34e8e5bfd1c1837d307e1.eprime.essence -tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/model.expected.json -tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/stdout.expected -tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/c39921c8a0b5837e3801fd57cb76fdc8.essence -tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/model.expected.json -tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/stdout.expected -tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/c423e819384eec3bed63a038add27ca6.eprime.essence -tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/model.expected.json -tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/stdout.expected -tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/c460ed31b8197fde698b2890cf38015f.essence -tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/model.expected.json -tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/stdout.expected -tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/c5272f0460d36d154f10770be9088fa4.eprime.essence -tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/model.expected.json -tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/stdout.expected -tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/c539dc840839e54f8d3d5ca53104102f.eprime.essence -tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/model.expected.json -tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/stdout.expected -tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/c549a9cc335032709f6ddf549bea7671.essence -tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/model.expected.json -tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/stdout.expected -tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/c565bb47d72f56a38090dab8d99b7d5d.eprime.essence -tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/model.expected.json -tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/stdout.expected -tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/c56795206adea7f4fedd8a14e92b89a7.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/c646db3b98dae1b357b763e33c0c6cfb.eprime.essence -tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/model.expected.json -tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/stdout.expected -tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/c6723915d52f32f79d0d95b0c45b5690.eprime.essence -tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/model.expected.json -tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/stdout.expected -tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/c688731bea55e5a8af305c16384da5b8.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/model.expected.json -tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/stdout.expected -tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/c6ca31c282cb623a0bd6d0ce51630721.eprime.essence -tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/model.expected.json -tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/stdout.expected -tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/c6f07fc1b59d5295892164e99ab6b192.eprime.essence -tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/model.expected.json -tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/stdout.expected -tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/c6f1aead53d40454b7d12ecb7a129adb.eprime.essence -tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/model.expected.json -tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/stdout.expected -tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/c7081572bfc6c6db3d45afd912301c67.essence -tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/model.expected.json -tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/stdout.expected -tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/c7212c02f8b6793b8264a84f7c5d918a.essence -tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/model.expected.json -tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/stdout.expected -tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence -tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/model.expected.json -tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stdout.expected -tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/c7701a368d5b05a93fcea0618dfe80ae.essence -tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/model.expected.json -tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/stdout.expected -tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/c7a05c6406dc0bf72a24b7344bf05115.eprime.essence -tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/model.expected.json -tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/stdout.expected -tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/c7bab02871b463a4b24d6530e2009c74.eprime.essence -tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/model.expected.json -tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/stdout.expected -tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/c863e1aefc22489efd92991f527ae5a2.eprime.essence -tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/model.expected.json -tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/stdout.expected -tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/c87b10e4d0646bf5a1cccde450c77342.essence -tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/model.expected.json -tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/stdout.expected -tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/c89bdec4acf5b8c9aaaa53cb0cb59f7d.eprime.essence -tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/model.expected.json -tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/stdout.expected -tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/c8cbbeb91436bc3cbb6db533e1de1c9f.eprime.essence -tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/model.expected.json -tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/stdout.expected -tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/c8cc670b809293626467998d149a92ca.essence -tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/model.expected.json -tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/stdout.expected -tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/c90fe79b4b3c5feeb47e5ba79e72b0e5.param.essence -tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/model.expected.json -tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/stdout.expected -tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/c93ff154e91b9bb6635c22be3ae7ecfa.eprime.essence -tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/model.expected.json -tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/stdout.expected -tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/c94c721e03e88dc01a16fa9b0b3b7431.essence -tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/model.expected.json -tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/stdout.expected -tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/c96d788458c4c7e3247f608a018776aa.eprime.essence -tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/model.expected.json -tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/stdout.expected -tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/c99ba20043c63432d9487a23ff54c113.eprime.essence -tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/model.expected.json -tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/stdout.expected -tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/c9a33c7dcd76afe05345be3216bcfe9b.essence -tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/model.expected.json -tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/stdout.expected -tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/c9b7a310cade3d7fdb27589ad8a3e3fe.eprime.essence -tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/c9e1cd7a71dc9c900ce717378a2e7326.eprime.essence -tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/model.expected.json -tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/stdout.expected -tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/typecheck.expected -tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/c9f3f4ce7f1422c36af5e8b4bbd4255a.essence -tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/model.expected.json -tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/stdout.expected -tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/ca6d3bbc350e094480efac50bdc26694.param.essence -tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/model.expected.json -tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/stdout.expected -tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/caaa1454e10014cfe14a7700ed41272b.eprime.essence -tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/model.expected.json -tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/stdout.expected -tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/cad537c995fb03554a83b3fb49b715bc.eprime.essence -tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/model.expected.json -tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/stdout.expected -tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/typecheck.expected -tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/cb56531cbb4df9698d8f0cf00d0944f3.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/model.expected.json -tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/stdout.expected -tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/cb74150a8c73ed6ff0be9fe51e42d794.eprime.essence -tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/model.expected.json -tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/stdout.expected -tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/cb7b739e25b3fe249ffabcd46210a7a4.essence -tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/model.expected.json -tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/stdout.expected -tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/cbabd362a21657745073ef1a34fb2f97.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/model.expected.json -tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/stdout.expected -tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/cbbb526650a66d168ab009f76b41ac7e.essence -tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/model.expected.json -tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/stdout.expected -tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/cbc4f7ec129e0d6b2868f35a8835828b.param.essence -tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/model.expected.json -tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/stdout.expected -tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/cbd987a72d6fcc160ca0c276b2ad0594.essence -tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/model.expected.json -tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/stdout.expected -tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/cbf9663144fdb0a944c8c9eb9276186f.essence -tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/model.expected.json -tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/stdout.expected -tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/cc2192ed7f68debf33abcbf2de08eff2.essence -tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/model.expected.json -tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/stdout.expected -tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/cc228e7aa4bdec711a971946c1ab0816.essence -tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/model.expected.json -tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/stdout.expected -tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/cc2e944db81bd1d2cbbe89830450aef4.essence -tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/model.expected.json -tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/stdout.expected -tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/cc34727d6328f78dd681783e5b094162.eprime.essence -tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/model.expected.json -tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/stdout.expected -tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/typecheck.expected -tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/cca22afe2ff559a314ecd14c2296b387.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/model.expected.json -tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/stdout.expected -tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/cd11163441a1534d06cf64e8f168fcac.essence -tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/model.expected.json -tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/stdout.expected -tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/cd4e9ca8ff5e1d257d6d078aa15002c2.eprime.essence -tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/model.expected.json -tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/stdout.expected -tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/cd703d198a7caa0ed1cc30dfc71b5293.essence -tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/model.expected.json -tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/stdout.expected -tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/cd82b726b9bc042bf11078723d7ddebf.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/model.expected.json -tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/stdout.expected -tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/cdb90fb872844fc0f220512280d64db4.essence -tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/model.expected.json -tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/stdout.expected -tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/cdbd05170298b1bd1aa7a45f454e3d63.eprime.essence -tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/model.expected.json -tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/stdout.expected -tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/cdd2cde0e8a96682225ea6ac1be2037d.eprime.essence -tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/model.expected.json -tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/stdout.expected -tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/cde1afcab624b8f5cf6026d76a182b03.eprime.essence -tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/model.expected.json -tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/stdout.expected -tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/cdfa715a0ae81a4cb3d42e7ca4e9b8af.essence -tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/model.expected.json -tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/stdout.expected -tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/cdfefc24c895f36d5ec7846039f0b859.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/model.expected.json -tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/stdout.expected -tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/cea26bcbcd27151494695b5d2cd176d1.essence -tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/model.expected.json -tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/stdout.expected -tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/ceede496d7adf47c26a9d01220b317c0.essence -tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/model.expected.json -tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/stdout.expected -tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/cef118dc017b24a21dfb5a88c529eda9.eprime.essence -tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/model.expected.json -tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/stdout.expected -tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/cf4c4a53d3ab9c4732e322aef0177215.essence -tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/model.expected.json -tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/stdout.expected -tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/cf86537a6fa95a340a00e5b6b22afff9.essence -tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/model.expected.json -tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/stdout.expected -tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/cfa5de1e898ada0ab6eb52584e9a9b7c.essence -tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/model.expected.json -tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/stdout.expected -tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/cff0ab3b52e4246f757238b11b8fe82b.eprime.essence -tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/model.expected.json -tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/stdout.expected -tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/d0394edeb6136c30f61b15986636f05e.eprime.essence -tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/model.expected.json -tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/stdout.expected -tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/d0705cf9aeea70d0112cd8cf1ad2fc28.essence -tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/model.expected.json -tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/stdout.expected -tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/d0d3714bca19279a25ffad6fe8ff6b1a.essence -tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/model.expected.json -tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/stdout.expected -tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/d0dd7887605ab4505721457d3924e8e2.eprime.essence -tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/model.expected.json -tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/stdout.expected -tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/d196536263bceb21a881742553628980.eprime.essence -tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/model.expected.json -tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/stdout.expected -tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/d1d8b39a61df04a2f4fd44e4df6c05e9.essence -tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/model.expected.json -tests/parse_print/autogen-bilals-fixed/d1d8b39a61df04a2f4fd44e4df6c05e9/stdout.expected -tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/d1f9f5646ad02f51e81ccd962c936011.eprime.essence -tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/model.expected.json -tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/stdout.expected -tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/d1ffc6dc30ae73ba44e3f9c55d3e1636.eprime.essence -tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/model.expected.json -tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/stdout.expected -tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/d208285ba6d6405a34832d73dc232057.essence -tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/model.expected.json -tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/stdout.expected -tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/d20ff5e630ee919f1fcc726ea14f1e21.eprime.essence -tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/model.expected.json -tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/stdout.expected -tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/typecheck.expected -tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/d2d3c576ca58a9c8a00c79ff7099cf80.eprime.essence -tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/model.expected.json -tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/stdout.expected -tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/d2d4b6dd1eb76f25c117fe82249925fb.eprime.essence -tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/model.expected.json -tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/stdout.expected -tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/d2f262de61496ad07219546d13f3cedd.eprime.essence -tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/model.expected.json -tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/stdout.expected -tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/d3655944a04ded091e0721479cd791dd.eprime.essence -tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/model.expected.json -tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/stdout.expected -tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/d3909eeb253333c473b61058dd67f690.eprime.essence -tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/model.expected.json -tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/stdout.expected -tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/d3a54dbb8b939655a1a6e6c929c4d1ef.eprime.essence -tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/model.expected.json -tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/stdout.expected -tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/d3c29831ec8d5ce670af7b87ace0f0c6.param.essence -tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/model.expected.json -tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/stdout.expected -tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/d40ffe1ce2def4f80c820d417c7c0ef7.essence -tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/model.expected.json -tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/stdout.expected -tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/d42368812350b5837938b26c3b121fde.essence -tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/model.expected.json -tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/stdout.expected -tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/d45d2b678a76683b5b19379b69f7d2f7.essence -tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/model.expected.json -tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/stdout.expected -tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/d4cbd9476c638f58ea42456b67ec17c2.eprime.essence -tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/model.expected.json -tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/stdout.expected -tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/d4f50d7d88e9c968c1e69e2c88508bc9.essence -tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/model.expected.json -tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/stdout.expected -tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/d548102740c166c94c1585976df85834.eprime.essence -tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/model.expected.json -tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/stdout.expected -tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/typecheck.expected -tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/d563cbf2c040240a470a21faf1f336cb.eprime.essence -tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/model.expected.json -tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/stdout.expected -tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/typecheck.expected -tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/d58aaa071ca86ec814d84096e26fa6d6.eprime.essence -tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/model.expected.json -tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/stdout.expected -tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/d5934d344621e95bfb757cd4fe12b3f9.essence -tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/model.expected.json -tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/stdout.expected -tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/d5c4f9fd5e009e4efaeda02b5577fa3c.essence -tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/model.expected.json -tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/stdout.expected -tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/d5f6742f1236a8cc8b59fcce2604fcf0.eprime.essence -tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/model.expected.json -tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/stdout.expected -tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/d60b24319fab7ae0818780057329fe3c.eprime.essence -tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/model.expected.json -tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/stdout.expected -tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/d6126c026677dbe18227570b51c9ba40.eprime.essence -tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/model.expected.json -tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/stdout.expected -tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/d630b8886b00763ff5fdcba6b0acdfad.essence -tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/model.expected.json -tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/stdout.expected -tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/d6433d786cf5b2c2d5d4f84e13ebbeff.essence -tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/model.expected.json -tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/stdout.expected -tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/d6b3494aaacb9f588de0875051f0040c.eprime.essence -tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/model.expected.json -tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/stdout.expected -tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/d6df3f33a48f4c110d5f35a0d6649a10.solution.essence -tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/model.expected.json -tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/stdout.expected -tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/d6e6abaa4508ba4e8f498b547cb7b484.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/model.expected.json -tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/stdout.expected -tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/d712140e47b1aced2902ff8b63805eaf.essence -tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/model.expected.json -tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/stdout.expected -tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/d72e3ef20e4e6ce59aac43b9bdadb680.essence -tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/model.expected.json -tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/stdout.expected -tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/d7480be9792039d938131bb1cf2e5396.essence -tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/model.expected.json -tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/stdout.expected -tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/d75b01e01b11eb07e4bc4fbd71ce3b5e.eprime.essence -tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/model.expected.json -tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/stdout.expected -tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/d77d039eded33b2161c11a3e2582ff8b.eprime.essence -tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/model.expected.json -tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/stdout.expected -tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/d7c44baa298084f75524e68994d7f48d.eprime.essence -tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/model.expected.json -tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/stdout.expected -tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/d7d816b10a6f459ed78f1bd604bca06f.eprime.essence -tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/model.expected.json -tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/stdout.expected -tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/d840bf570b5591c94e3744e977db18c9.essence -tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/model.expected.json -tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/stdout.expected -tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/d89a06ed8f4ec8185046a435ad85ca8c.eprime.essence -tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/model.expected.json -tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/stdout.expected -tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/d8eb6baba24eaa3fd9db1695871e9a02.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/model.expected.json -tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/stdout.expected -tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/d908114cc84df4098382dc169c3d33d2.param.essence -tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/model.expected.json -tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/stdout.expected -tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/d90cedcab21d181b33a89f6dce2a9d92.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/model.expected.json -tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/stdout.expected -tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/d92076e69308eb50f5eb562d89a97d2e.eprime.essence -tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/model.expected.json -tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/stdout.expected -tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/d943fb912926ca72b165e37a50117f0b.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/model.expected.json -tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/stdout.expected -tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/d949e29f0824109241310a096cc10722.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/model.expected.json -tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/stdout.expected -tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/d98e4c46386fe1cb7c5878769a04cad6.eprime.essence -tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/model.expected.json -tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/stdout.expected -tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/d9b7bc6ac6d954267d819c0f76d17a98.eprime.essence -tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/model.expected.json -tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/stdout.expected -tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/d9d7484d2c3845cb2dfb71b35a280914.essence -tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/model.expected.json -tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/stdout.expected -tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/d9e130069d7226626220415e5374f4d8.eprime.essence -tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/model.expected.json -tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/stdout.expected -tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/da2dd87b9830b0d92b6148601757e71f.eprime.essence -tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/model.expected.json -tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/stdout.expected -tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/da3454572e4f3dd1b2d1e78940b0f0fe.eprime.essence -tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/da883f3c7ed0cdb26f8c84c1fffa5c86.eprime.essence -tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/model.expected.json -tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/stdout.expected -tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/da973f85880a36c6073f00b808f88b6a.essence -tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/model.expected.json -tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/stdout.expected -tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/daa42b8b7081f9119fb8929638de497c.essence -tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/model.expected.json -tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/stdout.expected -tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/dab9f5202b2b1070b876ac9463bfb41d.eprime.essence -tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/model.expected.json -tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/stdout.expected -tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/dad7b9b0bdd9e288f1dc3b19ec96c213.eprime.essence -tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/model.expected.json -tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/stdout.expected -tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/typecheck.expected -tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/db116ac9b252e8eb75103d22161db099.eprime.essence -tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/model.expected.json -tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/stdout.expected -tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/db16c0f1b3325f600e8e589ed559de53.eprime.essence -tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/model.expected.json -tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/stdout.expected -tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/dbc08914b7c5505e1136cc21ac9d5125.eprime.essence -tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/model.expected.json -tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/stdout.expected -tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/dbf9ff4b4f3e79b96504ed12188ad2fa.essence -tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/model.expected.json -tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/stdout.expected -tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/dc23eb30711c692381b05041b160b972.essence -tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/model.expected.json -tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/stdout.expected -tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/dc313d314ac3d4882ffeb1b18c98895e.eprime.essence -tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/model.expected.json -tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/stdout.expected -tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/dc672cdd8a4df36b49833dc8762a79bd.essence -tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/model.expected.json -tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/stdout.expected -tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/dd2404135067bc1bf50c79709a678888.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/model.expected.json -tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/stdout.expected -tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/dd53f8032612f41cf818d2fd9f86229c.essence -tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/model.expected.json -tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/stdout.expected -tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/dd69d43592ee50c25398c0d09f0db6ec.essence -tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/ddc59e161a729c98406b1fdbadcf1931.eprime.essence -tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/model.expected.json -tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/stdout.expected -tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/dde8c80f0b2d3b76d21ae3c49f3f56c1.essence -tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/model.expected.json -tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/stdout.expected -tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/de1153ba8992148669da05f4713891ff.eprime.essence -tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/model.expected.json -tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/stdout.expected -tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/de41745f2cd146147d539b8b2a4fe97f.essence -tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/model.expected.json -tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/stdout.expected -tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/de4b9074bdc6984c3245f04df15c8c96.essence -tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/model.expected.json -tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/stdout.expected -tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/de829bda6aed51d91ed168dcaa7d3283.essence -tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/model.expected.json -tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/stdout.expected -tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/de9716a7ff65a1574f48f0b1858be3bd.eprime.essence -tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/model.expected.json -tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/stdout.expected -tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/typecheck.expected -tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/de98c56929c67f420c29fa2f74d46c69.eprime.essence -tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/model.expected.json -tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/stdout.expected -tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/dec056eee47fd05a251225b16b62ab64.eprime.essence -tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/model.expected.json -tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/stdout.expected -tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/typecheck.expected -tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/dec8399568996e2cac2a2f4e6eab94f7.eprime.essence -tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/model.expected.json -tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/stdout.expected -tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/deceb37952fa992b20b6038107ef1c91.eprime.essence -tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/model.expected.json -tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/stdout.expected -tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/dee8cacb2b0d2d2e4e260e919675594d.essence -tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/model.expected.json -tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/stdout.expected -tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/df221c6ed757b169b367cde70ca01740.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/model.expected.json -tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/stdout.expected -tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/df25e8e6fa4509621aa00858c52537f3.essence -tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/model.expected.json -tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/stdout.expected -tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/df2c273b94d39520c80a1bd97d7f3a5b.eprime.essence -tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/model.expected.json -tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/stdout.expected -tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/df7f516a0aca4383de3282063aada958.param.essence -tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/model.expected.json -tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/stdout.expected -tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/dfa5468062e090930fa12617870524da.eprime.essence -tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/model.expected.json -tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/stdout.expected -tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/e02f77cea3324e91d885d1f3fe504cd4.eprime.essence -tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/model.expected.json -tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/stdout.expected -tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/e070168566c16231cc6322ee38e1ac49.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/model.expected.json -tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/stdout.expected -tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/e0bb089c7844a06fba3ed1abd7cb6608.eprime.essence -tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/model.expected.json -tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/stdout.expected -tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/e1044649abbc9d8d84153f49c31608fa.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/model.expected.json -tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/stdout.expected -tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/e1095300fed2e22ccb27b795ebbace46.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/model.expected.json -tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/stdout.expected -tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/e111e9686fc1e2309b88378ea20b03b7.essence -tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/model.expected.json -tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/stdout.expected -tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/e1294b8c2c5314f98240221178785764.essence -tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/model.expected.json -tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/stdout.expected -tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/e13c11158e6c85d45ce49409c9cd8ceb.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/model.expected.json -tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/stdout.expected -tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/e14d717d203fa10fcdf72b541c14ba80.essence -tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/model.expected.json -tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/stdout.expected -tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/e1aecd4c14589221e87e2ec00b232d51.eprime.essence -tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/model.expected.json -tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/stdout.expected -tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/e1cd26d93bc21f5125614f06e04fe307.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/model.expected.json -tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/stdout.expected -tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/e1ffc88979eb73efb8ee6166eff8ad49.essence -tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/model.expected.json -tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/stdout.expected -tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/e21cd7b0f710515a79d787945d809a81.eprime.essence -tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/model.expected.json -tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/stdout.expected -tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/e23b30b15d31c2b5b4eadd501c0770ec.eprime.essence -tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/e284f026466fe24b24af370e324ed842.eprime.essence -tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/model.expected.json -tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/stdout.expected -tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/e29c0260c4c2c194df9bfcb06e99a6d0.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/model.expected.json -tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/stdout.expected -tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/e2f22e0ba5654302502f31d32b39e260.eprime.essence -tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/model.expected.json -tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/stdout.expected -tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/e31e8258961a4a8fa32e4eb491491bdc.eprime.essence -tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/model.expected.json -tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/stdout.expected -tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/e33c5a4b1eca296873386a312774d872.essence -tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/model.expected.json -tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/stdout.expected -tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/e34605b6797826c4331b589705613f02.essence -tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/model.expected.json -tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/stdout.expected -tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/e365ceb4dac67b8e61a50d68a2af7285.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/model.expected.json -tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/stdout.expected -tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/e382656008ccf8727fd5e055cf6debfa.essence -tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/model.expected.json -tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/stdout.expected -tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/e38dc481ce407a6a1f53e6580e562bef.essence -tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/model.expected.json -tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/stdout.expected -tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/e3a244e0c1531a789b3b2b6ea6dce563.essence -tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/model.expected.json -tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/stdout.expected -tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/e3a6177402630530eb98e2268949540f.eprime.essence -tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/model.expected.json -tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/stdout.expected -tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/e3bc51416538b2caf00e19e5640c44e2.eprime.essence -tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/model.expected.json -tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/stdout.expected -tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/e3f9560663238de1da11e96346429b1e.essence -tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/model.expected.json -tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/stdout.expected -tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/e409a673a76b4471de16f12370c89c4b.essence -tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/model.expected.json -tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/stdout.expected -tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/e411c4ea45ae7f66786a093af8dd679e.essence -tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/model.expected.json -tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/stdout.expected -tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/e4bdea8fa38ec88f12183229003d0816.essence -tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/model.expected.json -tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/stdout.expected -tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/e4efb5b7c5d268bf08ca728bba8f9a3a.essence -tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/model.expected.json -tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/stdout.expected -tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/e50b067fb90fe11172cb0610514ccd39.eprime.essence -tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/model.expected.json -tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/stdout.expected -tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/e51b695dbd433af6cd1f71e5e1c83b01.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/model.expected.json -tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/stdout.expected -tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/e52709f55be1d4b847f34e24378fde01.eprime.essence -tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/model.expected.json -tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/stdout.expected -tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/e579ee476594ce184db0bd4a70bd44f6.essence -tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/model.expected.json -tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/stdout.expected -tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/e5c113460990fde26723d11aa27cbea5.eprime.essence -tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/model.expected.json -tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/stdout.expected -tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/e5ef686faac39c34b542eec223509aa8.eprime.essence -tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/model.expected.json -tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/stdout.expected -tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/e5f4a75a9e27bf4ccf95b4be8aa047b9.essence -tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/model.expected.json -tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/stdout.expected -tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/e637e7d01e5d483d8840ac29a760548c.eprime.essence -tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/model.expected.json -tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/stdout.expected -tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/e64befa0b6da3e1c9f30faf22b2449df.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/model.expected.json -tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/stdout.expected -tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/e65878a75f8a723504c5189d62b6f391.eprime.essence -tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/model.expected.json -tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/stdout.expected -tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/e6b42a5e4f082c16f763685001476c97.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/model.expected.json -tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/stdout.expected -tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/e6cb9c836b54fafe792680c969f86e0c.essence -tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/model.expected.json -tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/stdout.expected -tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/e6d35b55e35082d3fa2dd4068f7ebfdf.eprime.essence -tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/model.expected.json -tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/stdout.expected -tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/e6e4b876fba7437dd65fd67c136855f9.essence -tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/model.expected.json -tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/stdout.expected -tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/e73f7a7c31a8573f1ed7d8d617123c57.essence -tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/model.expected.json -tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/stdout.expected -tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/e7a6d29d4285dcfdd7daddc00be2c882.eprime.essence -tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/model.expected.json -tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/stdout.expected -tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/e7f89fcbcdbd0a79caefef0e87678c8d.eprime.essence -tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/model.expected.json -tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/stdout.expected -tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/e800461807962940370a2085b2b69d2d.eprime.essence -tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/model.expected.json -tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/stdout.expected -tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/e82a67e0fdd3e0139246615decdcd5c5.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/model.expected.json -tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/stdout.expected -tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/e840a5670518b4972194e3436761ec3d.essence -tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/model.expected.json -tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/stdout.expected -tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/e87d232f06188474ec6e722aa7e64525.solution.essence -tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/model.expected.json -tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/stdout.expected -tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/e8b367599a5f7fcb2e355134b78bc13f.essence -tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/model.expected.json -tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/stdout.expected -tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/e8c88ac8a94a5384bada05774e023b0c.essence -tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/model.expected.json -tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/stdout.expected -tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/e8d5dccfc3d9f7b3ee51ca0a76946dd8.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/model.expected.json -tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/stdout.expected -tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/e8f228bf132523400052fdfd6c5de67c.essence -tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/model.expected.json -tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/stdout.expected -tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/e91966578f72192934799d4557e48802.essence -tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/model.expected.json -tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/stdout.expected -tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/e91bac96af4d1f0fc2a422fc0e662a73.essence -tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/model.expected.json -tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/stdout.expected -tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/e938482d4eff3413375a9a4f1f09648c.eprime.essence -tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/model.expected.json -tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/stdout.expected -tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/e94042e71ae4aca4b2dcbe6a1c03eeb5.eprime.essence -tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/model.expected.json -tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/stdout.expected -tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/e945a36e0d23b836d582e691732a717d.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/model.expected.json -tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/stdout.expected -tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/e94f81e31dce6a8efb7cdffe25cc7a9a.eprime.essence -tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/model.expected.json -tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/stdout.expected -tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/typecheck.expected -tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/e9929aa72d7832a4623e7b816a2e9af2.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/model.expected.json -tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/stdout.expected -tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/e9d7c8d883f5971d53a58ee5183b4c11.essence -tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/model.expected.json -tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/stdout.expected -tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/ea5025564f1fcb5c1c2588afb4483b8e.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/model.expected.json -tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/stdout.expected -tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/ea79865a51efdd02842ffb6654cfb7e5.essence -tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/model.expected.json -tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/stdout.expected -tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/eaa45321fa09e5ac7b722523a615feba.eprime.essence -tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/model.expected.json -tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/stdout.expected -tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/eae2dc34bf5517b3a4070ef1714f089a.eprime.essence -tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/model.expected.json -tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/stdout.expected -tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/eb0e88cd958943e2e87a5ade86710827.essence -tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/model.expected.json -tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/stdout.expected -tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/eb22d7172ced999f8568dccf4a1a3d94.eprime.essence -tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/model.expected.json -tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/stdout.expected -tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/typecheck.expected -tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/eb5e229a3045349ef118229f11ede50b.eprime.essence -tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/model.expected.json -tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/stdout.expected -tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/eb60aacef45f3261fb8764a8c2d339a9.essence -tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/model.expected.json -tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/stdout.expected -tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/eb76f41475438c3ed398cb3e2dbd5b6b.essence -tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/model.expected.json -tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/stdout.expected -tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/ebd771c5c81dac1c206f28e4d3eaa737.essence -tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/model.expected.json -tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/stdout.expected -tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/ebee2b95d0090aad677f2fbfcf9e0274.essence -tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/model.expected.json -tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/stdout.expected -tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/ebf05e849ab1490bdd5852d44db646c8.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/model.expected.json -tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/stdout.expected -tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/ec1a6f796ecb53ab8b847c313c165256.essence -tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/model.expected.json -tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/stdout.expected -tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/ec9aed752e5eeb363b644516fc85dd8f.eprime.essence -tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/model.expected.json -tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/stdout.expected -tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/ecd0956ed566db30a05226812f9a24c2.eprime.essence -tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/model.expected.json -tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/stdout.expected -tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/ece12ae05e35cb440db8d49bdd6a83b8.essence -tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/model.expected.json -tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/stdout.expected -tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/ed0e6ab88e79cb8c6c179357811e4b33.eprime.essence -tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/model.expected.json -tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/stdout.expected -tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/ed2ddcbb96d234e4f4dd7147965b47fc.essence -tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/model.expected.json -tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/stdout.expected -tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/ed3c0907a796850d638f57e4004efc44.essence -tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/model.expected.json -tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/stdout.expected -tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/ed529213e4789b79a6929c96d89b6eb2.eprime.essence -tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/model.expected.json -tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/stdout.expected -tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/ed6e2ac3457110fd811f7f6066338883.eprime.essence -tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/model.expected.json -tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/stdout.expected -tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/ede82ece37232fcdcff220a71e6c4336.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/model.expected.json -tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/stdout.expected -tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/edeee104245da0f75d4b86e7146e073f.eprime.essence -tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/model.expected.json -tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/stdout.expected -tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/ee0f4f29b6fcae0b8a1a80540fff7469.eprime.essence -tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/model.expected.json -tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/stdout.expected -tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/ee3e8d0c49be4d87a16584a000657a1f.eprime.essence -tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/model.expected.json -tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/stdout.expected -tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/ee41686a3922fcd3e8d19cfa965b0277.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/model.expected.json -tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/stdout.expected -tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/ee779538eab812cac235345d906f97a0.solution.essence -tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/model.expected.json -tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/stdout.expected -tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/ee82afd2cd6a746ecf89368b7b1bc6f3.eprime.essence -tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/model.expected.json -tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/stdout.expected -tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/eea850512090333fd6ac248e3474adfe.eprime.essence -tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/model.expected.json -tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/stdout.expected -tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/eea88321d1ee362a31dd52ddf4ec6f75.essence -tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/model.expected.json -tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/stdout.expected -tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/eebf57c0e408c9d7b113317d714541bf.eprime.essence -tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/model.expected.json -tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/stdout.expected -tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/typecheck.expected -tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/eed1a2fb0387d257448ddfccff4bd5f5.essence -tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/model.expected.json -tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/stdout.expected -tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/eee79bab97319cb6a1cfb2a945bcc1a6.eprime.essence -tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/model.expected.json -tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/stdout.expected -tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/ef1db2a31177900e3baf4331a5942ac8.essence -tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/model.expected.json -tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/stdout.expected -tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/ef336eba26eb0a9a90de40b18d840b84.eprime.essence -tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/model.expected.json -tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/stdout.expected -tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/ef422b238d7533811a8ed2445009e19c.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/model.expected.json -tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/stdout.expected -tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/ef443db8cd28e24e1a6d7a75548c1de0.eprime.essence -tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/model.expected.json -tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/stdout.expected -tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/ef47512eb208c3dc333c0f019cdd3b41.essence -tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/model.expected.json -tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/stdout.expected -tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/ef483210845a518a24793add7f479305.eprime.essence -tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/model.expected.json -tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/stdout.expected -tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/f01773dda299c7dcb2eaf99eff9bf075.essence -tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/model.expected.json -tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/stdout.expected -tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/f019c5cdd99099f33d53cf9be0031c0b.essence -tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/model.expected.json -tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/stdout.expected -tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/f01fdac91e838e2203abc5cc7899830c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/model.expected.json -tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/stdout.expected -tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/f04824a85432120b11d2c0f024940b08.eprime.essence -tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/model.expected.json -tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/stdout.expected -tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/f08df3b51ad479d28a8ea0a94707f70c.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/model.expected.json -tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/stdout.expected -tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/f08f3252ac868467a41c8c6d7f0bd425.eprime.essence -tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/model.expected.json -tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/stdout.expected -tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/f0a8b4dc9eb64ca83b84026196a58e07.essence -tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/model.expected.json -tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/stdout.expected -tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/f0da1b32d64901550697edd2a56acbb1.essence -tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/model.expected.json -tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/stdout.expected -tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/f0fc2fcf48b2784adbc82bebe8debe1d.eprime.essence -tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/model.expected.json -tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/stdout.expected -tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/f11a6d1a6b6ea819dc5ab8227c9c909d.essence -tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/model.expected.json -tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/stdout.expected -tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/f17b4b0018354dbb3657f42a48ff8c38.essence -tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/model.expected.json -tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/stdout.expected -tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/f1fd537fecc6c852b01a571e701d7e59.eprime.essence -tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/model.expected.json -tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/stdout.expected -tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/f243bccb3b210797782c1c047cbf7643.essence -tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/model.expected.json -tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/stdout.expected -tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/f2555ccbaf900e06880e7a06e4d54635.eprime.essence -tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/model.expected.json -tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/stdout.expected -tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/f2b5914faa565573231cd3ddd7e5704c.essence -tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/model.expected.json -tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/stdout.expected -tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence -tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected -tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/f2e7d31ce6e0939bd05b0cb55c362a05.essence -tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/model.expected.json -tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/stdout.expected -tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/f2f725a26126338e19e3f08ef990f1da.eprime.essence -tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/model.expected.json -tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/stdout.expected -tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/f3366597baeed3d35bc64e12142e5d36.essence -tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/model.expected.json -tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/stdout.expected -tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/f3b4b055e266a994218c9c7c4772d7db.eprime.essence -tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/model.expected.json -tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/stdout.expected -tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/f41a286594c108909b183b37074c3e76.eprime.essence -tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/model.expected.json -tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/stdout.expected -tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/f42851729ee7b455bb9015d9c3e76513.eprime.essence -tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/model.expected.json -tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/stdout.expected -tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/f45d87813af8ef0ba7934476365e42b5.essence -tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/model.expected.json -tests/parse_print/autogen-bilals-fixed/f45d87813af8ef0ba7934476365e42b5/stdout.expected -tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/f47023c53362e918879df887cd577aad.essence -tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/model.expected.json -tests/parse_print/autogen-bilals-fixed/f47023c53362e918879df887cd577aad/stdout.expected -tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/f4db5a8548a15052f8da491f1a84ecbe.eprime.essence -tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/model.expected.json -tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/stdout.expected -tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/f5650f709d784157b7cac1ee24385d89.essence -tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/model.expected.json -tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/stdout.expected -tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/f57b04b76b4d073350370fd57711d175.solution.essence -tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/model.expected.json -tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/stdout.expected -tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/f57b3d11bf42b1452c009a9c008864fd.eprime.essence -tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/model.expected.json -tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/stdout.expected -tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/f5827ae829a0622e323234a0dda7c6a7.essence -tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/f5a3242772b8cd94e91769f8879256da.essence -tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/model.expected.json -tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/stdout.expected -tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/f5b84f33ec9ad582d7a93d92c0e8cba7.essence -tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/model.expected.json -tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/stdout.expected -tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/f5e0dd3dd1ecaf45dc4127467fcbd4dd.eprime.essence -tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/model.expected.json -tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/stdout.expected -tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/f62f9ea8b0746be5eaea19e9cede8737.essence -tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/model.expected.json -tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/stdout.expected -tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/f631685d83ae9335bfaa14ec9c45af5a.essence -tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/model.expected.json -tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/stdout.expected -tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/f6423154493aba2f92069b620dc65a81.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/model.expected.json -tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/stdout.expected -tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/f64a23f20f4b5987c912ace009afe7fa.param.essence -tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/model.expected.json -tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/stdout.expected -tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/f6964545525c08e038e50dbb7491e10f.eprime.essence -tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/model.expected.json -tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/stdout.expected -tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/f6f3227d62d29091577943cbcc8b7b7f.eprime.essence -tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/model.expected.json -tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/stdout.expected -tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/f6f7c303c2a2778d821d72c0850eac44.eprime.essence -tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/model.expected.json -tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/stdout.expected -tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/f744bd6464f77eed6047d49b3ab882d7.eprime-param.essence -tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/model.expected.json -tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/stdout.expected -tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/f76691ed63ac07df5afa89ebd0185bfc.essence -tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/model.expected.json -tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/f7735ba844b813417ce561c482cb8646.essence -tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/model.expected.json -tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/f7b45af6add056ea2e2175a1570992d2.essence -tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/model.expected.json -tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/f7c8ae4c852309475656603fd5f504ec.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/model.expected.json -tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/f7ca7b1d6cc6e70633f755ff96d8e503.eprime.essence -tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/model.expected.json -tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/f7e0e3cd39f57231ef5045587906ea06.essence -tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/model.expected.json -tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/f7faf3149f0cc222402ea4da0e2865f1.eprime.essence -tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/model.expected.json -tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/stdout.expected -tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/f82a4527f67eca4c2d17cab8c2c8925c.eprime.essence -tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/model.expected.json -tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/stdout.expected -tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/typecheck.expected -tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/f8544bf93a9335fb77cbf5bfacf6e962.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/model.expected.json -tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/stdout.expected -tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/f8551d2ded7dfbb7f4fc2fefcfe32146.essence -tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/model.expected.json -tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/stdout.expected -tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/f8fee1e382cb8c8e9f5b9a3ebea35fb9.essence -tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/model.expected.json -tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/stdout.expected -tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/f98271d6100357f37b1ed437cd031c73.essence -tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/model.expected.json -tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/stdout.expected -tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/f99a15c6848a54572cf2de6cb08a28a7.essence -tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/model.expected.json -tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/stdout.expected -tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/f9a76a3a228ae3fd65dcf7c0e2d89cdf.param.essence -tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/model.expected.json -tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/stdout.expected -tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/f9d485560d6cb58f7ee08ec9126031d2.essence -tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/model.expected.json -tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/stdout.expected -tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/f9d78cef087ed11d5d6a829969836193.essence -tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/model.expected.json -tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/stdout.expected -tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/fa438291f1596214e9904d9d6f8d6d2f.essence -tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/model.expected.json -tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/stdout.expected -tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/fa49a38ca4d09bdd3747fb2d64454682.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/model.expected.json -tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/stdout.expected -tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/fa781d63daf055c90275ea7edc79ec2d.eprime.essence -tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/model.expected.json -tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/stdout.expected -tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/fa79e79e1ecec248182967b52cc2b211.essence -tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/model.expected.json -tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/stdout.expected -tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/fbc3ef48d14e02ea27959c4d1eb1cd89.essence -tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/model.expected.json -tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/stdout.expected -tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/fbfe220f5450d8f205a3e3e9ec02f054.eprime.essence -tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/model.expected.json -tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/stdout.expected -tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/fc3b7a0fb6d208b6d517245174d48f1d.eprime.essence -tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/model.expected.json -tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/stdout.expected -tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/fc6449f2b4958962d63cffad0c3fa8bc.eprime.essence -tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/model.expected.json -tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/stdout.expected -tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/fc809d43c1d22b53118425514b8db93c.essence -tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/model.expected.json -tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/stdout.expected -tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/fcd0c80113acf558e792eecf20ab9b66.eprime-solution.essence -tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/model.expected.json -tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/stdout.expected -tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/fcd37dc5d1ffb7d6a0d6bb54244f1be9.eprime.essence -tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/model.expected.json -tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/stdout.expected -tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/fcda2c5f3d64e89af9ad58a5cc80d2ba.eprime.essence -tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/model.expected.json -tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/stdout.expected -tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/fd01009e3310a4fd69199a796116c7c6.eprime.essence -tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/model.expected.json -tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/stdout.expected -tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/fd678aa87d9bd31e9a7b2c15ba98bf45.eprime.essence -tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/model.expected.json -tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/stdout.expected -tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/fd7b6f7ecedac668274924e6b8b11ac0.solution.essence -tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/model.expected.json -tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/fe212de553740bfdc730e0a8d309134b.solution.essence -tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/fe305e153612d5a71fc20d4fa69a948e.eprime.essence -tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/fe69fefccf202453d52ce4d1db22e655.essence -tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/fe774ea400594cb14dd3fa5110d42c82.essence -tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/fe7777e1ad2badafc794d13da8eddcf4.eprime.essence -tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/typecheck.expected -tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/fe94536b17f67b32662685867f8081e2.eprime.essence -tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/stdout.expected -tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/fe9faaf55302fb0443c460ecf2f7d426.solution.essence -tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/model.expected.json -tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/stdout.expected -tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/fec2abdead2802a7ba6dedf110d62af8.essence -tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/model.expected.json -tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/stdout.expected -tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/feed8f610e58923dd317fd57dfee37e8.essence -tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/model.expected.json -tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/ff12462023888e1e691c92627d7a1c53.essence -tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/ff226931c79ca27e68e71f211b4aa84e.eprime.essence -tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/typecheck.expected -tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/ff24366e88f4086c0e1b6a272319c4cf.essence -tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/ff245493fc8f9f5cb71ace3838fe38ce.eprime.essence -tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/ff52b10be7a6ca5288aab35423d864fe.solution.essence -tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/ff5a4c2b2d4b2d7988a7eb5334e625ac.essence -tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/ff8b241d52c3ebd4d986c5218030d318.essence -tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/stdout.expected -tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/ff9d4f6eb338fa49d2628bab60bf48ac.eprime.essence -tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/model.expected.json -tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/stdout.expected -tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/ffb32a0c4fd02d6181ed0120a2781cb4.essence -tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/model.expected.json -tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/stdout.expected -tests/parse_print/autogen-bilals-fixed/import.sh -tests/parse_print/autogen/289~1435114959_70/model.expected.json -tests/parse_print/autogen/289~1435114959_70/spec.essence -tests/parse_print/autogen/289~1435114959_70/stdout.expected -tests/parse_print/autogen/289~1435114959_70/typecheck.expected -tests/parse_print/autogen/315~1435148451_38/model.expected.json -tests/parse_print/autogen/315~1435148451_38/spec.essence -tests/parse_print/autogen/315~1435148451_38/stdout.expected -tests/parse_print/autogen/315~1435148451_38/typecheck.expected -tests/parse_print/autogen/316~final/model.expected.json -tests/parse_print/autogen/316~final/spec.essence -tests/parse_print/autogen/316~final/stdout.expected -tests/parse_print/autogen/316~final/typecheck.expected -tests/parse_print/autogen/317~1435132020_93/model.expected.json -tests/parse_print/autogen/317~1435132020_93/spec.essence -tests/parse_print/autogen/317~1435132020_93/stdout.expected -tests/parse_print/autogen/317~1435132020_93/typecheck.expected -tests/parse_print/autogen/318~final/model.expected.json -tests/parse_print/autogen/318~final/spec.essence -tests/parse_print/autogen/318~final/stdout.expected -tests/parse_print/autogen/318~final/typecheck.expected -tests/parse_print/autogen/319~1435138340_66/model.expected.json -tests/parse_print/autogen/319~1435138340_66/spec.essence -tests/parse_print/autogen/319~1435138340_66/stdout.expected -tests/parse_print/autogen/319~1435138340_66/typecheck.expected -tests/parse_print/autogen/320~final/model.expected.json -tests/parse_print/autogen/320~final/spec.essence -tests/parse_print/autogen/320~final/stdout.expected -tests/parse_print/autogen/320~final/typecheck.expected -tests/parse_print/autogen/321~1435140010_44/model.expected.json -tests/parse_print/autogen/321~1435140010_44/spec.essence -tests/parse_print/autogen/321~1435140010_44/stdout.expected -tests/parse_print/autogen/321~1435140010_44/typecheck.expected -tests/parse_print/autogen/322~final/model.expected.json -tests/parse_print/autogen/322~final/spec.essence -tests/parse_print/autogen/322~final/stdout.expected -tests/parse_print/autogen/322~final/typecheck.expected -tests/parse_print/autogen/325~1435147026_26/model.expected.json -tests/parse_print/autogen/325~1435147026_26/spec.essence -tests/parse_print/autogen/325~1435147026_26/stdout.expected -tests/parse_print/autogen/325~1435147026_26/typecheck.expected -tests/parse_print/autogen/326~final/model.expected.json -tests/parse_print/autogen/326~final/spec.essence -tests/parse_print/autogen/326~final/stdout.expected -tests/parse_print/autogen/326~final/typecheck.expected -tests/parse_print/autogen/345~1435141546_33/model.expected.json -tests/parse_print/autogen/345~1435141546_33/spec.essence -tests/parse_print/autogen/345~1435141546_33/stdout.expected -tests/parse_print/autogen/345~1435141546_33/typecheck.expected -tests/parse_print/autogen/396~1435169954_27/model.expected.json -tests/parse_print/autogen/396~1435169954_27/spec.essence -tests/parse_print/autogen/396~1435169954_27/stdout.expected -tests/parse_print/autogen/396~1435169954_27/typecheck.expected -tests/parse_print/autogen/398~1435194081_33/model.expected.json -tests/parse_print/autogen/398~1435194081_33/spec.essence -tests/parse_print/autogen/398~1435194081_33/stdout.expected -tests/parse_print/autogen/398~1435194081_33/typecheck.expected -tests/parse_print/autogen/427~1435209539_80/model.expected.json -tests/parse_print/autogen/427~1435209539_80/spec.essence -tests/parse_print/autogen/427~1435209539_80/stdout.expected -tests/parse_print/autogen/427~1435209539_80/typecheck.expected -tests/parse_print/autogen/441~1435208191_85/model.expected.json -tests/parse_print/autogen/441~1435208191_85/spec.essence -tests/parse_print/autogen/441~1435208191_85/stdout.expected -tests/parse_print/autogen/441~1435208191_85/typecheck.expected -tests/parse_print/autogen/442~final/model.expected.json -tests/parse_print/autogen/442~final/spec.essence -tests/parse_print/autogen/442~final/stdout.expected -tests/parse_print/autogen/442~final/typecheck.expected -tests/parse_print/autogen/445~1435212982_68/model.expected.json -tests/parse_print/autogen/445~1435212982_68/spec.essence -tests/parse_print/autogen/445~1435212982_68/stdout.expected -tests/parse_print/autogen/445~1435212982_68/typecheck.expected -tests/parse_print/autogen/446~final/model.expected.json -tests/parse_print/autogen/446~final/spec.essence -tests/parse_print/autogen/446~final/stdout.expected -tests/parse_print/autogen/446~final/typecheck.expected -tests/parse_print/autogen/447~1435213364_36/model.expected.json -tests/parse_print/autogen/447~1435213364_36/spec.essence -tests/parse_print/autogen/447~1435213364_36/stdout.expected -tests/parse_print/autogen/447~1435213364_36/typecheck.expected -tests/parse_print/autogen/448~final/model.expected.json -tests/parse_print/autogen/448~final/spec.essence -tests/parse_print/autogen/448~final/stdout.expected -tests/parse_print/autogen/448~final/typecheck.expected -tests/parse_print/autogen/460~1435196486_42/model.expected.json -tests/parse_print/autogen/460~1435196486_42/spec.essence -tests/parse_print/autogen/460~1435196486_42/stdout.expected -tests/parse_print/autogen/460~1435196486_42/typecheck.expected -tests/parse_print/autogen/558~1435585187_20/model.expected.json -tests/parse_print/autogen/558~1435585187_20/spec.essence -tests/parse_print/autogen/558~1435585187_20/stdout.expected -tests/parse_print/autogen/558~1435585187_20/typecheck.expected -tests/parse_print/autogen/560~1436548014_12/model.expected.json -tests/parse_print/autogen/560~1436548014_12/spec.essence -tests/parse_print/autogen/560~1436548014_12/stdout.expected -tests/parse_print/autogen/560~1436548014_12/typecheck.expected -tests/parse_print/autogen/561~final/model.expected.json -tests/parse_print/autogen/561~final/spec.essence -tests/parse_print/autogen/561~final/stdout.expected -tests/parse_print/autogen/561~final/typecheck.expected -tests/parse_print/autogen/562~1436556139_51/model.expected.json -tests/parse_print/autogen/562~1436556139_51/spec.essence -tests/parse_print/autogen/562~1436556139_51/stdout.expected -tests/parse_print/autogen/562~1436556139_51/typecheck.expected -tests/parse_print/autogen/563~final/model.expected.json -tests/parse_print/autogen/563~final/spec.essence -tests/parse_print/autogen/563~final/stdout.expected -tests/parse_print/autogen/563~final/typecheck.expected -tests/parse_print/autogen/605~1436581770_45/model.expected.json -tests/parse_print/autogen/605~1436581770_45/spec.essence -tests/parse_print/autogen/605~1436581770_45/stdout.expected -tests/parse_print/autogen/605~1436581770_45/typecheck.expected -tests/parse_print/autogen/613~1436580506_52/model.expected.json -tests/parse_print/autogen/613~1436580506_52/spec.essence -tests/parse_print/autogen/613~1436580506_52/stdout.expected -tests/parse_print/autogen/613~1436580506_52/typecheck.expected -tests/parse_print/autogen/614~final/model.expected.json -tests/parse_print/autogen/614~final/spec.essence -tests/parse_print/autogen/614~final/stdout.expected -tests/parse_print/autogen/614~final/typecheck.expected -tests/parse_print/autogen/615~1436587408_39/model.expected.json -tests/parse_print/autogen/615~1436587408_39/spec.essence -tests/parse_print/autogen/615~1436587408_39/stdout.expected -tests/parse_print/autogen/615~1436587408_39/typecheck.expected -tests/parse_print/autogen/616~final/model.expected.json -tests/parse_print/autogen/616~final/spec.essence -tests/parse_print/autogen/616~final/stdout.expected -tests/parse_print/autogen/616~final/typecheck.expected -tests/parse_print/autogen/628~final/model.expected.json -tests/parse_print/autogen/628~final/spec.essence -tests/parse_print/autogen/628~final/stdout.expected -tests/parse_print/autogen/628~final/typecheck.expected -tests/parse_print/autogen/633~final/model.expected.json -tests/parse_print/autogen/633~final/spec.essence -tests/parse_print/autogen/633~final/stdout.expected -tests/parse_print/autogen/633~final/typecheck.expected -tests/parse_print/autogen/637~final/model.expected.json -tests/parse_print/autogen/637~final/spec.essence -tests/parse_print/autogen/637~final/stdout.expected -tests/parse_print/autogen/637~final/typecheck.expected -tests/parse_print/autogen/646~final/model.expected.json -tests/parse_print/autogen/646~final/spec.essence -tests/parse_print/autogen/646~final/stdout.expected -tests/parse_print/autogen/646~final/typecheck.expected -tests/parse_print/autogen/653~final/model.expected.json -tests/parse_print/autogen/653~final/spec.essence -tests/parse_print/autogen/653~final/stdout.expected -tests/parse_print/autogen/653~final/typecheck.expected -tests/parse_print/autogen/678~final/model.expected.json -tests/parse_print/autogen/678~final/spec.essence -tests/parse_print/autogen/678~final/stdout.expected -tests/parse_print/autogen/678~final/typecheck.expected -tests/parse_print/autogen/730~1439082038_16/model.expected.json -tests/parse_print/autogen/730~1439082038_16/spec.essence -tests/parse_print/autogen/730~1439082038_16/stdout.expected -tests/parse_print/autogen/730~1439082038_16/typecheck.expected -tests/parse_print/autogen/731~final/model.expected.json -tests/parse_print/autogen/731~final/spec.essence -tests/parse_print/autogen/731~final/stdout.expected -tests/parse_print/autogen/731~final/typecheck.expected -tests/parse_print/autogen/768~1439583525_36/model.expected.json -tests/parse_print/autogen/768~1439583525_36/spec.essence -tests/parse_print/autogen/768~1439583525_36/stdout.expected -tests/parse_print/autogen/768~1439583525_36/typecheck.expected -tests/parse_print/autogen/769~final/model.expected.json -tests/parse_print/autogen/769~final/spec.essence -tests/parse_print/autogen/769~final/stdout.expected -tests/parse_print/autogen/769~final/typecheck.expected -tests/parse_print/basic/typeErrorInDecl/model.expected.json -tests/parse_print/basic/typeErrorInDecl/stdout.expected -tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence -tests/parse_print/basic/typeErrorInDecl/typecheck.expected -tests/parse_print/heuristic/heuristic_conflict/heuristic_conflict.essence -tests/parse_print/heuristic/heuristic_conflict/model.expected.json -tests/parse_print/heuristic/heuristic_conflict/stdout.expected -tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence -tests/parse_print/heuristic/heuristic_magic/model.expected.json -tests/parse_print/heuristic/heuristic_magic/stdout.expected -tests/parse_print/heuristic/heuristic_magic/typecheck.expected -tests/parse_print/heuristic/heuristic_sdf/heuristic_sdf.essence -tests/parse_print/heuristic/heuristic_sdf/model.expected.json -tests/parse_print/heuristic/heuristic_sdf/stdout.expected -tests/parse_print/heuristic/heuristic_srf/heuristic_srf.essence -tests/parse_print/heuristic/heuristic_srf/model.expected.json -tests/parse_print/heuristic/heuristic_srf/stdout.expected -tests/parse_print/heuristic/heuristic_static/heuristic_static.essence -tests/parse_print/heuristic/heuristic_static/model.expected.json -tests/parse_print/heuristic/heuristic_static/stdout.expected -tests/parse_print/issues/130/130.essence -tests/parse_print/issues/130/model.expected.json -tests/parse_print/issues/130/stdout.expected -tests/parse_print/issues/130/typecheck.expected -tests/parse_print/issues/133/1/133_1.essence -tests/parse_print/issues/133/1/stderr.expected -tests/parse_print/issues/133/2/133_2.essence -tests/parse_print/issues/133/2/stderr.expected -tests/parse_print/issues/133/3/133_3.essence -tests/parse_print/issues/133/3/stderr.expected -tests/parse_print/issues/133/4/133_4.essence -tests/parse_print/issues/133/4/model.expected.json -tests/parse_print/issues/133/4/stdout.expected -tests/parse_print/issues/207/207.essence -tests/parse_print/issues/207/model.expected.json -tests/parse_print/issues/207/stdout.expected -tests/parse_print/issues/207/typecheck.expected -tests/parse_print/issues/352/find/find.essence -tests/parse_print/issues/352/find/model.expected.json -tests/parse_print/issues/352/find/stdout.expected -tests/parse_print/issues/352/find/typecheck.expected -tests/parse_print/issues/361/1/361_1.essence -tests/parse_print/issues/361/1/model.expected.json -tests/parse_print/issues/361/1/stdout.expected -tests/parse_print/issues/361/1/typecheck.expected -tests/parse_print/issues/361/2/361_2.essence -tests/parse_print/issues/361/2/stderr.expected -tests/parse_print/issues/363/1/363_1.essence -tests/parse_print/issues/363/1/stderr.expected -tests/parse_print/issues/363/2/363_2.essence -tests/parse_print/issues/363/2/stderr.expected -tests/parse_print/issues/425/1/425.essence -tests/parse_print/issues/425/1/stderr.expected -tests/parse_print/issues/425/2/425.essence -tests/parse_print/issues/425/2/stderr.expected -tests/parse_print/parsing01/parsing01.essence -tests/parse_print/parsing01/stderr.expected -tests/parse_print/parsing02/model.expected.json -tests/parse_print/parsing02/parsing02.essence -tests/parse_print/parsing02/stdout.expected -tests/parse_print/parsing03_nonassoc/nonassoc.essence -tests/parse_print/parsing03_nonassoc/stderr.expected -tests/parse_print/random_perturb/README.md -tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence -tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected -tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence -tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected -tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence -tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected -tests/parse_print/random_perturb/enum_liberated/change-04/change-04.essence -tests/parse_print/random_perturb/enum_liberated/change-04/model.expected.json -tests/parse_print/random_perturb/enum_liberated/change-04/stdout.expected -tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence -tests/parse_print/random_perturb/enum_liberated/change-05/model.expected.json -tests/parse_print/random_perturb/enum_liberated/change-05/stdout.expected -tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected -tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence -tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected -tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence -tests/parse_print/random_perturb/enum_liberated/change-07/model.expected.json -tests/parse_print/random_perturb/enum_liberated/change-07/stdout.expected -tests/parse_print/random_perturb/enum_liberated/change-07/typecheck.expected -tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence -tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected -tests/parse_print/random_perturb/enum_liberated/change-09/change-09.essence -tests/parse_print/random_perturb/enum_liberated/change-09/model.expected.json -tests/parse_print/random_perturb/enum_liberated/change-09/stdout.expected -tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence -tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence -tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence -tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence -tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence -tests/parse_print/random_perturb/enum_liberated/delete-04/model.expected.json -tests/parse_print/random_perturb/enum_liberated/delete-04/stdout.expected -tests/parse_print/random_perturb/enum_liberated/delete-04/typecheck.expected -tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence -tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence -tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence -tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence -tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence -tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected -tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence -tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected -tests/parse_print/random_perturb/enum_liberated/enum_liberated.essence -tests/parse_print/random_perturb/enum_liberated/model.expected.json -tests/parse_print/random_perturb/enum_liberated/stdout.expected -tests/parse_print/random_perturb/gen.hs -tests/parse_print/random_perturb/new.sh -tests/parse_print/random_perturb/set01/change-01/change-01.essence -tests/parse_print/random_perturb/set01/change-01/model.expected.json -tests/parse_print/random_perturb/set01/change-01/stdout.expected -tests/parse_print/random_perturb/set01/change-02/change-02.essence -tests/parse_print/random_perturb/set01/change-02/stderr.expected -tests/parse_print/random_perturb/set01/change-03/change-03.essence -tests/parse_print/random_perturb/set01/change-03/stderr.expected -tests/parse_print/random_perturb/set01/change-04/change-04.essence -tests/parse_print/random_perturb/set01/change-04/stderr.expected -tests/parse_print/random_perturb/set01/change-05/change-05.essence -tests/parse_print/random_perturb/set01/change-05/stderr.expected -tests/parse_print/random_perturb/set01/change-06/change-06.essence -tests/parse_print/random_perturb/set01/change-06/stderr.expected -tests/parse_print/random_perturb/set01/change-07/change-07.essence -tests/parse_print/random_perturb/set01/change-07/stderr.expected -tests/parse_print/random_perturb/set01/change-08/change-08.essence -tests/parse_print/random_perturb/set01/change-08/stderr.expected -tests/parse_print/random_perturb/set01/change-09/change-09.essence -tests/parse_print/random_perturb/set01/change-09/stderr.expected -tests/parse_print/random_perturb/set01/change-10/change-10.essence -tests/parse_print/random_perturb/set01/change-10/stderr.expected -tests/parse_print/random_perturb/set01/delete-01/delete-01.essence -tests/parse_print/random_perturb/set01/delete-01/stderr.expected -tests/parse_print/random_perturb/set01/delete-02/delete-02.essence -tests/parse_print/random_perturb/set01/delete-02/stderr.expected -tests/parse_print/random_perturb/set01/delete-03/delete-03.essence -tests/parse_print/random_perturb/set01/delete-03/stderr.expected -tests/parse_print/random_perturb/set01/delete-04/delete-04.essence -tests/parse_print/random_perturb/set01/delete-04/stderr.expected -tests/parse_print/random_perturb/set01/delete-05/delete-05.essence -tests/parse_print/random_perturb/set01/delete-05/stderr.expected -tests/parse_print/random_perturb/set01/delete-06/delete-06.essence -tests/parse_print/random_perturb/set01/delete-06/stderr.expected -tests/parse_print/random_perturb/set01/delete-07/delete-07.essence -tests/parse_print/random_perturb/set01/delete-07/stderr.expected -tests/parse_print/random_perturb/set01/delete-08/delete-08.essence -tests/parse_print/random_perturb/set01/delete-08/stderr.expected -tests/parse_print/random_perturb/set01/delete-09/delete-09.essence -tests/parse_print/random_perturb/set01/delete-09/stderr.expected -tests/parse_print/random_perturb/set01/delete-10/delete-10.essence -tests/parse_print/random_perturb/set01/delete-10/stderr.expected -tests/parse_print/random_perturb/set01/model.expected.json -tests/parse_print/random_perturb/set01/set01.essence -tests/parse_print/random_perturb/set01/stdout.expected -tests/parse_print/syntax_test/branching/branching.essence -tests/parse_print/syntax_test/branching/model.expected.json -tests/parse_print/syntax_test/branching/stdout.expected -tests/parse_print/syntax_test/declarations/enums/givens/givens.essence -tests/parse_print/syntax_test/declarations/enums/givens/model.expected.json -tests/parse_print/syntax_test/declarations/enums/givens/stdout.expected -tests/parse_print/syntax_test/declarations/enums/lettings/lettings.essence -tests/parse_print/syntax_test/declarations/enums/lettings/model.expected.json -tests/parse_print/syntax_test/declarations/enums/lettings/stdout.expected -tests/parse_print/syntax_test/declarations/enums/lettings/typecheck.expected -tests/parse_print/syntax_test/declarations/finds/finds.essence -tests/parse_print/syntax_test/declarations/finds/model.expected.json -tests/parse_print/syntax_test/declarations/finds/stdout.expected -tests/parse_print/syntax_test/declarations/givens/givens.essence -tests/parse_print/syntax_test/declarations/givens/model.expected.json -tests/parse_print/syntax_test/declarations/givens/stdout.expected -tests/parse_print/syntax_test/declarations/lettings/domain/lettings.essence -tests/parse_print/syntax_test/declarations/lettings/domain/model.expected.json -tests/parse_print/syntax_test/declarations/lettings/domain/stdout.expected -tests/parse_print/syntax_test/declarations/lettings/expression/lettings.essence -tests/parse_print/syntax_test/declarations/lettings/expression/model.expected.json -tests/parse_print/syntax_test/declarations/lettings/expression/stdout.expected -tests/parse_print/syntax_test/declarations/unnamed/model.expected.json -tests/parse_print/syntax_test/declarations/unnamed/stdout.expected -tests/parse_print/syntax_test/declarations/unnamed/unnamed.essence -tests/parse_print/syntax_test/domains/bool/bool.essence -tests/parse_print/syntax_test/domains/bool/model.expected.json -tests/parse_print/syntax_test/domains/bool/stdout.expected -tests/parse_print/syntax_test/domains/enum/enum.essence -tests/parse_print/syntax_test/domains/enum/model.expected.json -tests/parse_print/syntax_test/domains/enum/stdout.expected -tests/parse_print/syntax_test/domains/function/function.essence -tests/parse_print/syntax_test/domains/function/model.expected.json -tests/parse_print/syntax_test/domains/function/stdout.expected -tests/parse_print/syntax_test/domains/int/int.essence -tests/parse_print/syntax_test/domains/int/model.expected.json -tests/parse_print/syntax_test/domains/int/stdout.expected -tests/parse_print/syntax_test/domains/matrix/matrix.essence -tests/parse_print/syntax_test/domains/matrix/model.expected.json -tests/parse_print/syntax_test/domains/matrix/stdout.expected -tests/parse_print/syntax_test/domains/mset/model.expected.json -tests/parse_print/syntax_test/domains/mset/mset.essence -tests/parse_print/syntax_test/domains/mset/stdout.expected -tests/parse_print/syntax_test/domains/mset/typecheck.expected -tests/parse_print/syntax_test/domains/partition/model.expected.json -tests/parse_print/syntax_test/domains/partition/partition.essence -tests/parse_print/syntax_test/domains/partition/stdout.expected -tests/parse_print/syntax_test/domains/record/model.expected.json -tests/parse_print/syntax_test/domains/record/record.essence -tests/parse_print/syntax_test/domains/record/stdout.expected -tests/parse_print/syntax_test/domains/relation/model.expected.json -tests/parse_print/syntax_test/domains/relation/relation.essence -tests/parse_print/syntax_test/domains/relation/stdout.expected -tests/parse_print/syntax_test/domains/sequence/model.expected.json -tests/parse_print/syntax_test/domains/sequence/sequence.essence -tests/parse_print/syntax_test/domains/sequence/stdout.expected -tests/parse_print/syntax_test/domains/sequence/typecheck.expected -tests/parse_print/syntax_test/domains/set/model.expected.json -tests/parse_print/syntax_test/domains/set/set.essence -tests/parse_print/syntax_test/domains/set/stdout.expected -tests/parse_print/syntax_test/domains/tuple/model.expected.json -tests/parse_print/syntax_test/domains/tuple/stdout.expected -tests/parse_print/syntax_test/domains/tuple/tuple.essence -tests/parse_print/syntax_test/domains/unnamed/model.expected.json -tests/parse_print/syntax_test/domains/unnamed/stdout.expected -tests/parse_print/syntax_test/domains/unnamed/unnamed.essence -tests/parse_print/syntax_test/domains/variant/model.expected.json -tests/parse_print/syntax_test/domains/variant/stdout.expected -tests/parse_print/syntax_test/domains/variant/variant.essence -tests/parse_print/syntax_test/expressions/comprehensions/comprehension.essence -tests/parse_print/syntax_test/expressions/comprehensions/model.expected.json -tests/parse_print/syntax_test/expressions/comprehensions/stdout.expected -tests/parse_print/syntax_test/expressions/comprehensions/typecheck.expected -tests/parse_print/syntax_test/expressions/literals/literals.essence -tests/parse_print/syntax_test/expressions/literals/model.expected.json -tests/parse_print/syntax_test/expressions/literals/stdout.expected -tests/parse_print/syntax_test/expressions/literals/typecheck.expected -tests/parse_print/syntax_test/expressions/operators/model.expected.json -tests/parse_print/syntax_test/expressions/operators/operators.essence -tests/parse_print/syntax_test/expressions/operators/stdout.expected -tests/parse_print/syntax_test/expressions/operators/typecheck.expected -tests/parse_print/syntax_test/expressions/quantifications/model.expected.json -tests/parse_print/syntax_test/expressions/quantifications/qunatifications.essence -tests/parse_print/syntax_test/expressions/quantifications/stdout.expected -tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected diff --git a/tests/genAllFiles.sh b/tests/genAllFiles.sh deleted file mode 100644 index d5f9d04db2..0000000000 --- a/tests/genAllFiles.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -git ls-tree --full-tree --name-only -r HEAD > allfiles.txt \ No newline at end of file From 07c3746ec15c44c6dce6b502940aa236aeee1d19 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 2 Mar 2023 17:58:04 +0000 Subject: [PATCH 139/378] Cleans up ghc 9.0 deps --- etc/hs-deps/stack-9.0.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/etc/hs-deps/stack-9.0.yaml b/etc/hs-deps/stack-9.0.yaml index f202965300..1ff3a74a02 100644 --- a/etc/hs-deps/stack-9.0.yaml +++ b/etc/hs-deps/stack-9.0.yaml @@ -4,6 +4,4 @@ packages: system-ghc: true install-ghc: true extra-deps: -- megaparsec-9.3.0 -- aeson-typescript-0.4.0.0 -- shelly-1.10.0 \ No newline at end of file +- megaparsec-9.3.0 \ No newline at end of file From c1dd6d2f018f401b445de2cabdb707d3b0f542b9 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 9 Mar 2023 14:49:16 +0000 Subject: [PATCH 140/378] updates potentially incorrect syntax in test --- tests/custom/tugce_1/tugce_1.essence | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/custom/tugce_1/tugce_1.essence b/tests/custom/tugce_1/tugce_1.essence index 6ad82e2ea4..70e74ba8a0 100644 --- a/tests/custom/tugce_1/tugce_1.essence +++ b/tests/custom/tugce_1/tugce_1.essence @@ -7,5 +7,5 @@ letting individual be domain int(1,2) find p : function (total) (individual, menu, menus) --> probability -such that p(1,2,{1,2}) = 5 +such that p((1,2,{1,2})) = 5 such that sum([j | (i,j) <- p]) = 5 From c730801f9b8518a83b90e58b48e57975e791107d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 9 Mar 2023 15:11:15 +0000 Subject: [PATCH 141/378] updates image treatment in test 481 --- tests/custom/issues/481/stdout.expected | 54 ++++++++++++++++--------- 1 file changed, 34 insertions(+), 20 deletions(-) diff --git a/tests/custom/issues/481/stdout.expected b/tests/custom/issues/481/stdout.expected index c288624a9f..be0c0eba49 100644 --- a/tests/custom/issues/481/stdout.expected +++ b/tests/custom/issues/481/stdout.expected @@ -332,7 +332,7 @@ such that sum([toInt(q15[2]) | q15 <- init[cocktail_part2]]) >= init_cocktail_part2_percentage_min * |defined(init[cocktail_part2])| / 100 such that - and([and([!init[contains]((var_c, var_b)) + and([and([!image(init[contains], (var_c, var_b)) | var_b : int(1..120), var_b >= 0 + n_hand + n_level + 1, var_b <= 0 + n_hand + n_level + n_ingredient, var_b >= 0 + n_hand + n_level + n_ingredient + 1, var_b <= 0 + n_hand + n_level + n_ingredient + n_cocktail]) @@ -340,21 +340,26 @@ such that var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot, var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), - and([init[unshaked](var_s) /\ !init[shaked](var_s) + and([image(init[unshaked], var_s) /\ !image(init[shaked], var_s) | var_s : int(1..210), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), - and([(init[ontable](var_c) \/ 1 = sum([toInt(value = true) | ((_, p1), value) <- init[holding], var_c = p1])) /\ - !(init[ontable](var_c) /\ 1 = sum([toInt(value = true) | ((_, p1), value) <- init[holding], var_c = p1])) + and([(image(init[ontable], var_c) \/ 1 = sum([toInt(value = true) | ((_, p1), value) <- init[holding], var_c = p1])) + /\ + !(image(init[ontable], var_c) /\ + 1 = sum([toInt(value = true) | ((_, p1), value) <- init[holding], var_c = p1])) | var_c : int(1..210), var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot, var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), and([1 >= sum([toInt(value = true) | ((p0, _), value) <- init[holding], var_h = p0]) /\ - ((init[handempty](var_h) \/ 1 = sum([toInt(value = true) | ((p0, _), value) <- init[holding], var_h = p0])) /\ - !(init[handempty](var_h) /\ 1 = sum([toInt(value = true) | ((p0, _), value) <- init[holding], var_h = p0]))) + ((image(init[handempty], var_h) \/ + 1 = sum([toInt(value = true) | ((p0, _), value) <- init[holding], var_h = p0])) + /\ + !(image(init[handempty], var_h) /\ + 1 = sum([toInt(value = true) | ((p0, _), value) <- init[holding], var_h = p0]))) | var_h : int(1..30), var_h <= 0 + n_hand]), - and([init[empty](var_c) /\ init[clean](var_c) + and([image(init[empty], var_c) /\ image(init[clean], var_c) | var_c : int(1..210), var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot, var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, @@ -363,7 +368,7 @@ such that | var_s : int(1..210), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), - or([and([init[shaker_empty_level]((var_s, var_l)) /\ init[shaker_level]((var_s, var_l)) + or([and([image(init[shaker_empty_level], (var_s, var_l)) /\ image(init[shaker_level], (var_s, var_l)) | var_s : int(1..210), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]) @@ -377,7 +382,8 @@ such that | var_l : int(1..60), var_l >= 0 + n_hand + 1, var_l <= 0 + n_hand + n_level]) | var_i : int(1..60), var_i >= 0 + n_hand + 1, var_i <= 0 + n_hand + n_level]) | var_f : int(1..60), var_f >= 0 + n_hand + 1, var_f <= 0 + n_hand + n_level]), - and([!init[next]((var_l, var_l)) | var_l : int(1..60), var_l >= 0 + n_hand + 1, var_l <= 0 + n_hand + n_level]) + and([!image(init[next], (var_l, var_l)) + | var_l : int(1..60), var_l >= 0 + n_hand + 1, var_l <= 0 + n_hand + n_level]) given goal_ontable_cardMin: int(0..390) given goal_ontable_cardMax: int(0..390) given goal_ontable_defined_min: int(1..210) @@ -605,38 +611,46 @@ such that sum([toInt(q25[2]) | q25 <- goal[shaked]]) <= goal_shaked_percentage_max * |defined(goal[shaked])| / 100 /\ sum([toInt(q25[2]) | q25 <- goal[shaked]]) >= goal_shaked_percentage_min * |defined(goal[shaked])| / 100 such that - and([(goal[ontable](var_c) \/ 1 = sum([toInt(value = true) | ((_, p1), value) <- goal[holding], var_c = p1])) /\ - !(goal[ontable](var_c) /\ 1 = sum([toInt(value = true) | ((_, p1), value) <- goal[holding], var_c = p1])) + and([(image(goal[ontable], var_c) \/ 1 = sum([toInt(value = true) | ((_, p1), value) <- goal[holding], var_c = p1])) + /\ + !(image(goal[ontable], var_c) /\ + 1 = sum([toInt(value = true) | ((_, p1), value) <- goal[holding], var_c = p1])) | var_c : int(1..210), var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot, var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), and([1 >= sum([toInt(value = true) | ((p0, _), value) <- goal[holding], var_h = p0]) /\ - ((goal[handempty](var_h) \/ 1 = sum([toInt(value = true) | ((p0, _), value) <- goal[holding], var_h = p0])) /\ - !(goal[handempty](var_h) /\ 1 = sum([toInt(value = true) | ((p0, _), value) <- goal[holding], var_h = p0]))) + ((image(goal[handempty], var_h) \/ + 1 = sum([toInt(value = true) | ((p0, _), value) <- goal[holding], var_h = p0])) + /\ + !(image(goal[handempty], var_h) /\ + 1 = sum([toInt(value = true) | ((p0, _), value) <- goal[holding], var_h = p0]))) | var_h : int(1..30), var_h <= 0 + n_hand]), and([1 = sum([toInt(value = true) | ((p0, _), value) <- goal[shaker_level], var_s = p0]) | var_s : int(1..210), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), - and([(goal[clean](var_s) \/ 0 = sum([toInt(value = true) | ((p0, _), value) <- goal[used], var_s = p0])) /\ - !(goal[clean](var_s) /\ 0 = sum([toInt(value = true) | ((p0, _), value) <- goal[used], var_s = p0])) + and([(image(goal[clean], var_s) \/ 0 = sum([toInt(value = true) | ((p0, _), value) <- goal[used], var_s = p0])) /\ + !(image(goal[clean], var_s) /\ 0 = sum([toInt(value = true) | ((p0, _), value) <- goal[used], var_s = p0])) | var_s : int(1..180), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot]), - and([(goal[empty](var_c) \/ 1 <= sum([toInt(value = true) | ((p0, _), value) <- goal[contains], var_c = p0])) /\ - !(goal[empty](var_c) /\ 1 <= sum([toInt(value = true) | ((p0, _), value) <- goal[contains], var_c = p0])) + and([(image(goal[empty], var_c) \/ 1 <= sum([toInt(value = true) | ((p0, _), value) <- goal[contains], var_c = p0])) + /\ + !(image(goal[empty], var_c) /\ + 1 <= sum([toInt(value = true) | ((p0, _), value) <- goal[contains], var_c = p0])) | var_c : int(1..210), var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot, var_c >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_c <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), - and([(goal[clean](var_s) \/ goal[empty](var_s)) /\ !(goal[clean](var_s) /\ goal[empty](var_s)) + and([(image(goal[clean], var_s) \/ image(goal[empty], var_s)) /\ + !(image(goal[clean], var_s) /\ image(goal[empty], var_s)) | var_s : int(1..180), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot]), - and([goal[unshaked](var_s) /\ !goal[shaked](var_s) + and([image(goal[unshaked], var_s) /\ !image(goal[shaked], var_s) | var_s : int(1..210), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]), - and([goal[empty](var_s) /\ !goal[shaked](var_s) + and([image(goal[empty], var_s) /\ !image(goal[shaked], var_s) | var_s : int(1..210), var_s >= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + 1, var_s <= 0 + n_hand + n_level + n_ingredient + n_cocktail + n_dispenser + n_shot + n_shaker]) From 3d895daf919ae475d8dad316396dec437751b2c0 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 9 Mar 2023 15:28:06 +0000 Subject: [PATCH 142/378] Updates image use in paramgen01 --- .../custom/paramgen/record01/stdout.expected | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/custom/paramgen/record01/stdout.expected b/tests/custom/paramgen/record01/stdout.expected index 85e872bc06..e22b1ff63a 100644 --- a/tests/custom/paramgen/record01/stdout.expected +++ b/tests/custom/paramgen/record01/stdout.expected @@ -88,12 +88,12 @@ such that and([q7[2] >= init_total_fuel_used_range_min | q7 <- init[total_fuel_used]]), and([q7[2] <= init_total_fuel_used_range_max | q7 <- init[total_fuel_used]]) such that - and([init[fuel](a) > 0 /\ init[fuel](a) <= init[capacity](a) + and([image(init[fuel], a) > 0 /\ image(init[fuel], a) <= image(init[capacity], a) | a : int(0..100), a >= minid_aircraft, a <= maxid_aircraft]), - and([init[onboard](a) = sum([toInt(value) | ((_, p2), value) <- init[in_], p2 = a]) + and([image(init[onboard], a) = sum([toInt(value) | ((_, p2), value) <- init[in_], p2 = a]) | a : int(0..100), a >= minid_aircraft, a <= maxid_aircraft]), - init[total_fuel_used](0) = 0, - and([and([init[distance]((c1, c2)) = init[distance]((c2, c1)) /\ init[distance]((c1, c2)) > 0 + image(init[total_fuel_used], 0) = 0, + and([and([image(init[distance], (c1, c2)) = image(init[distance], (c2, c1)) /\ image(init[distance], (c1, c2)) > 0 | c2 : int(0..100), c2 >= minid_city, c2 <= maxid_city]) | c1 : int(0..100), c1 >= minid_city, c1 <= maxid_city]), and([1 = sum([toInt(value = true) | ((p1, _), value) <- init[at_], p1 = a]) @@ -160,7 +160,7 @@ such that and([q10[1] <= maxid_aircraft | q10 <- goal[onboard]]), and([q10[2] >= goal_onboard_range_min | q10 <- goal[onboard]]), and([q10[2] <= goal_onboard_range_max | q10 <- goal[onboard]]) -such that and([goal[onboard](a) >= 0 | a : int(0..100), a >= minid_aircraft, a <= maxid_aircraft]) +such that and([image(goal[onboard], a) >= 0 | a : int(0..100), a >= minid_aircraft, a <= maxid_aircraft]) -------------------- @@ -495,12 +495,12 @@ such that and([q7[2] >= init_total_fuel_used_range_min | q7 <- init[total_fuel_used]]), and([q7[2] <= init_total_fuel_used_range_max | q7 <- init[total_fuel_used]]) such that - and([init[fuel](a) > 0 /\ init[fuel](a) <= init[capacity](a) + and([image(init[fuel], a) > 0 /\ image(init[fuel], a) <= image(init[capacity], a) | a : int(-10..50), a >= minid_aircraft, a <= maxid_aircraft]), - and([init[onboard](a) = sum([toInt(value) | ((_, p2), value) <- init[in_], p2 = a]) + and([image(init[onboard], a) = sum([toInt(value) | ((_, p2), value) <- init[in_], p2 = a]) | a : int(-10..50), a >= minid_aircraft, a <= maxid_aircraft]), - init[total_fuel_used](0) = 0, - and([and([init[distance]((c1, c2)) = init[distance]((c2, c1)) /\ init[distance]((c1, c2)) > 0 + image(init[total_fuel_used], 0) = 0, + and([and([image(init[distance], (c1, c2)) = image(init[distance], (c2, c1)) /\ image(init[distance], (c1, c2)) > 0 | c2 : int(-10..50), c2 >= minid_city, c2 <= maxid_city]) | c1 : int(-10..50), c1 >= minid_city, c1 <= maxid_city]), and([1 = sum([toInt(value = true) | ((p1, _), value) <- init[at_], p1 = a]) @@ -567,7 +567,7 @@ such that and([q10[1] <= maxid_aircraft | q10 <- goal[onboard]]), and([q10[2] >= goal_onboard_range_min | q10 <- goal[onboard]]), and([q10[2] <= goal_onboard_range_max | q10 <- goal[onboard]]) -such that and([goal[onboard](a) >= 0 | a : int(-10..50), a >= minid_aircraft, a <= maxid_aircraft]) +such that and([image(goal[onboard], a) >= 0 | a : int(-10..50), a >= minid_aircraft, a <= maxid_aircraft]) -------------------- From da49a7db6e8d46df90e8f5494a310fc6cbcaed90 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 9 Mar 2023 15:37:43 +0000 Subject: [PATCH 143/378] updates typescipt test output (not fully correct) --- tests/custom/tsdef/stdout.expected | 390 ++++++++++++++--------------- 1 file changed, 195 insertions(+), 195 deletions(-) diff --git a/tests/custom/tsdef/stdout.expected b/tests/custom/tsdef/stdout.expected index 4f07cc6b42..2d2cdb0c69 100644 --- a/tests/custom/tsdef/stdout.expected +++ b/tests/custom/tsdef/stdout.expected @@ -2,52 +2,52 @@ type AbstractLiteral = IAbsLitTuple | IAbsLitRecord | IAbsLitVariant interface IAbsLitTuple { tag: "AbsLitTuple"; - contents: T[]; + contents: Expression[]; } interface IAbsLitRecord { tag: "AbsLitRecord"; - contents: [Name, T][]; + contents: [Name, Expression][]; } interface IAbsLitVariant { tag: "AbsLitVariant"; - contents: [[Name, Domain][], Name, T]; + contents: [[Name, Domain][], Name, Expression]; } interface IAbsLitMatrix { tag: "AbsLitMatrix"; - contents: [Domain, T[]]; + contents: [Domain, Expression[]]; } interface IAbsLitSet { tag: "AbsLitSet"; - contents: T[]; + contents: Expression[]; } interface IAbsLitMSet { tag: "AbsLitMSet"; - contents: T[]; + contents: Expression[]; } interface IAbsLitFunction { tag: "AbsLitFunction"; - contents: [T, T][]; + contents: [Expression, Expression][]; } interface IAbsLitSequence { tag: "AbsLitSequence"; - contents: T[]; + contents: Expression[]; } interface IAbsLitRelation { tag: "AbsLitRelation"; - contents: T[][]; + contents: Expression[][]; } interface IAbsLitPartition { tag: "AbsLitPartition"; - contents: T[][]; + contents: Expression[][]; } type AbstractPattern = ISingle | IAbsPatTuple | IAbsPatMatrix | IAbsPatSet | IAbstractPatternMetaVar; @@ -175,82 +175,82 @@ interface IDomainBool { interface IDomainIntE { tag: "DomainIntE"; - contents: T2; + contents: Expression; } interface IDomainInt { tag: "DomainInt"; - contents: [IntTag, Range[]]; + contents: [IntTag, Range[]]; } interface IDomainEnum { tag: "DomainEnum"; - contents: [Name, Range[], [Name, number][]]; + contents: [Name, Range[], [Name, number][]]; } interface IDomainUnnamed { tag: "DomainUnnamed"; - contents: [Name, T2]; + contents: [Name, Expression]; } interface IDomainTuple { tag: "DomainTuple"; - contents: Domain[]; + contents: Domain[]; } interface IDomainRecord { tag: "DomainRecord"; - contents: [Name, Domain][]; + contents: [Name, Domain][]; } interface IDomainVariant { tag: "DomainVariant"; - contents: [Name, Domain][]; + contents: [Name, Domain][]; } interface IDomainMatrix { tag: "DomainMatrix"; - contents: [Domain, Domain]; + contents: [Domain, Domain]; } interface IDomainSet { tag: "DomainSet"; - contents: [T1, SetAttr, Domain]; + contents: [void, SetAttr, Domain]; } interface IDomainMSet { tag: "DomainMSet"; - contents: [T1, MSetAttr, Domain]; + contents: [void, MSetAttr, Domain]; } interface IDomainFunction { tag: "DomainFunction"; - contents: [T1, FunctionAttr, Domain, Domain]; + contents: [void, FunctionAttr, Domain, Domain]; } interface IDomainSequence { tag: "DomainSequence"; - contents: [T1, SequenceAttr, Domain]; + contents: [void, SequenceAttr, Domain]; } interface IDomainRelation { tag: "DomainRelation"; - contents: [T1, RelationAttr, Domain[]]; + contents: [void, RelationAttr, Domain[]]; } interface IDomainPartition { tag: "DomainPartition"; - contents: [T1, PartitionAttr, Domain]; + contents: [void, PartitionAttr, Domain]; } interface IDomainOp { tag: "DomainOp"; - contents: [Name, Domain[]]; + contents: [Name, Domain[]]; } interface IDomainReference { tag: "DomainReference"; - contents: [Name, Domain]; + contents: [Name, Domain]; } interface IDomainMetaVar { @@ -309,7 +309,7 @@ type FindOrGiven = "Find" | "Given" | "Quantified" | "CutFind" | "LocalFind"; type FunctionAttr = IFunctionAttr; -type IFunctionAttr = [SizeAttr, PartialityAttr, JectivityAttr]; +type IFunctionAttr = [SizeAttr, PartialityAttr, JectivityAttr]; type Generator = IGenDomainNoRepr | IGenDomainHasRepr | IGenInExpr; @@ -496,7 +496,7 @@ interface IModelInfo { type MSetAttr = IMSetAttr; -type IMSetAttr = [SizeAttr, OccurAttr]; +type IMSetAttr = [SizeAttr, OccurAttr]; type Name = IName | IMachineName | INameMetaVar; @@ -525,708 +525,708 @@ interface IOccurAttr_None { interface IOccurAttr_MinOccur { tag: "OccurAttr_MinOccur"; - contents: T; + contents: Expression; } interface IOccurAttr_MaxOccur { tag: "OccurAttr_MaxOccur"; - contents: T; + contents: Expression; } interface IOccurAttr_MinMaxOccur { tag: "OccurAttr_MinMaxOccur"; - contents: [T, T]; + contents: [Expression, Expression]; } type Op = IMkOpActive | IMkOpAllDiff | IMkOpAllDiffExcept | IMkOpAnd | IMkOpApart | IMkOpAtLeast | IMkOpAtMost | IMkOpAttributeAsConstraint | IMkOpCatchUndef | IMkOpDefined | IMkOpDiv | IMkOpDontCare | IMkOpDotLeq | IMkOpDotLt | IMkOpEq | IMkOpFactorial | IMkOpFlatten | IMkOpFreq | IMkOpGCC | IMkOpGeq | IMkOpGt | IMkOpHist | IMkOpIff | IMkOpImage | IMkOpImageSet | IMkOpImply | IMkOpIn | IMkOpIndexing | IMkOpIntersect | IMkOpInverse | IMkOpLeq | IMkOpLexLeq | IMkOpLexLt | IMkOpLt | IMkOpMakeTable | IMkOpMax | IMkOpMin | IMkOpMinus | IMkOpMod | IMkOpNegate | IMkOpNeq | IMkOpNot | IMkOpOr | IMkOpParticipants | IMkOpParts | IMkOpParty | IMkOpPow | IMkOpPowerSet | IMkOpPreImage | IMkOpPred | IMkOpProduct | IMkOpRange | IMkOpRelationProj | IMkOpRestrict | IMkOpSlicing | IMkOpSubsequence | IMkOpSubset | IMkOpSubsetEq | IMkOpSubstring | IMkOpSucc | IMkOpSum | IMkOpSupset | IMkOpSupsetEq | IMkOpTable | IMkOpTildeLeq | IMkOpTildeLt | IMkOpToInt | IMkOpToMSet | IMkOpToRelation | IMkOpToSet | IMkOpTogether | IMkOpTransform | IMkOpTrue | IMkOpTwoBars | IMkOpUnion | IMkOpXor; interface IMkOpActive { tag: "MkOpActive"; - contents: OpActive; + contents: OpActive; } interface IMkOpAllDiff { tag: "MkOpAllDiff"; - contents: OpAllDiff; + contents: OpAllDiff; } interface IMkOpAllDiffExcept { tag: "MkOpAllDiffExcept"; - contents: OpAllDiffExcept; + contents: OpAllDiffExcept; } interface IMkOpAnd { tag: "MkOpAnd"; - contents: OpAnd; + contents: OpAnd; } interface IMkOpApart { tag: "MkOpApart"; - contents: OpApart; + contents: OpApart; } interface IMkOpAtLeast { tag: "MkOpAtLeast"; - contents: OpAtLeast; + contents: OpAtLeast; } interface IMkOpAtMost { tag: "MkOpAtMost"; - contents: OpAtMost; + contents: OpAtMost; } interface IMkOpAttributeAsConstraint { tag: "MkOpAttributeAsConstraint"; - contents: OpAttributeAsConstraint; + contents: OpAttributeAsConstraint; } interface IMkOpCatchUndef { tag: "MkOpCatchUndef"; - contents: OpCatchUndef; + contents: OpCatchUndef; } interface IMkOpDefined { tag: "MkOpDefined"; - contents: OpDefined; + contents: OpDefined; } interface IMkOpDiv { tag: "MkOpDiv"; - contents: OpDiv; + contents: OpDiv; } interface IMkOpDontCare { tag: "MkOpDontCare"; - contents: OpDontCare; + contents: OpDontCare; } interface IMkOpDotLeq { tag: "MkOpDotLeq"; - contents: OpDotLeq; + contents: OpDotLeq; } interface IMkOpDotLt { tag: "MkOpDotLt"; - contents: OpDotLt; + contents: OpDotLt; } interface IMkOpEq { tag: "MkOpEq"; - contents: OpEq; + contents: OpEq; } interface IMkOpFactorial { tag: "MkOpFactorial"; - contents: OpFactorial; + contents: OpFactorial; } interface IMkOpFlatten { tag: "MkOpFlatten"; - contents: OpFlatten; + contents: OpFlatten; } interface IMkOpFreq { tag: "MkOpFreq"; - contents: OpFreq; + contents: OpFreq; } interface IMkOpGCC { tag: "MkOpGCC"; - contents: OpGCC; + contents: OpGCC; } interface IMkOpGeq { tag: "MkOpGeq"; - contents: OpGeq; + contents: OpGeq; } interface IMkOpGt { tag: "MkOpGt"; - contents: OpGt; + contents: OpGt; } interface IMkOpHist { tag: "MkOpHist"; - contents: OpHist; + contents: OpHist; } interface IMkOpIff { tag: "MkOpIff"; - contents: OpIff; + contents: OpIff; } interface IMkOpImage { tag: "MkOpImage"; - contents: OpImage; + contents: OpImage; } interface IMkOpImageSet { tag: "MkOpImageSet"; - contents: OpImageSet; + contents: OpImageSet; } interface IMkOpImply { tag: "MkOpImply"; - contents: OpImply; + contents: OpImply; } interface IMkOpIn { tag: "MkOpIn"; - contents: OpIn; + contents: OpIn; } interface IMkOpIndexing { tag: "MkOpIndexing"; - contents: OpIndexing; + contents: OpIndexing; } interface IMkOpIntersect { tag: "MkOpIntersect"; - contents: OpIntersect; + contents: OpIntersect; } interface IMkOpInverse { tag: "MkOpInverse"; - contents: OpInverse; + contents: OpInverse; } interface IMkOpLeq { tag: "MkOpLeq"; - contents: OpLeq; + contents: OpLeq; } interface IMkOpLexLeq { tag: "MkOpLexLeq"; - contents: OpLexLeq; + contents: OpLexLeq; } interface IMkOpLexLt { tag: "MkOpLexLt"; - contents: OpLexLt; + contents: OpLexLt; } interface IMkOpLt { tag: "MkOpLt"; - contents: OpLt; + contents: OpLt; } interface IMkOpMakeTable { tag: "MkOpMakeTable"; - contents: OpMakeTable; + contents: OpMakeTable; } interface IMkOpMax { tag: "MkOpMax"; - contents: OpMax; + contents: OpMax; } interface IMkOpMin { tag: "MkOpMin"; - contents: OpMin; + contents: OpMin; } interface IMkOpMinus { tag: "MkOpMinus"; - contents: OpMinus; + contents: OpMinus; } interface IMkOpMod { tag: "MkOpMod"; - contents: OpMod; + contents: OpMod; } interface IMkOpNegate { tag: "MkOpNegate"; - contents: OpNegate; + contents: OpNegate; } interface IMkOpNeq { tag: "MkOpNeq"; - contents: OpNeq; + contents: OpNeq; } interface IMkOpNot { tag: "MkOpNot"; - contents: OpNot; + contents: OpNot; } interface IMkOpOr { tag: "MkOpOr"; - contents: OpOr; + contents: OpOr; } interface IMkOpParticipants { tag: "MkOpParticipants"; - contents: OpParticipants; + contents: OpParticipants; } interface IMkOpParts { tag: "MkOpParts"; - contents: OpParts; + contents: OpParts; } interface IMkOpParty { tag: "MkOpParty"; - contents: OpParty; + contents: OpParty; } interface IMkOpPow { tag: "MkOpPow"; - contents: OpPow; + contents: OpPow; } interface IMkOpPowerSet { tag: "MkOpPowerSet"; - contents: OpPowerSet; + contents: OpPowerSet; } interface IMkOpPreImage { tag: "MkOpPreImage"; - contents: OpPreImage; + contents: OpPreImage; } interface IMkOpPred { tag: "MkOpPred"; - contents: OpPred; + contents: OpPred; } interface IMkOpProduct { tag: "MkOpProduct"; - contents: OpProduct; + contents: OpProduct; } interface IMkOpRange { tag: "MkOpRange"; - contents: OpRange; + contents: OpRange; } interface IMkOpRelationProj { tag: "MkOpRelationProj"; - contents: OpRelationProj; + contents: OpRelationProj; } interface IMkOpRestrict { tag: "MkOpRestrict"; - contents: OpRestrict; + contents: OpRestrict; } interface IMkOpSlicing { tag: "MkOpSlicing"; - contents: OpSlicing; + contents: OpSlicing; } interface IMkOpSubsequence { tag: "MkOpSubsequence"; - contents: OpSubsequence; + contents: OpSubsequence; } interface IMkOpSubset { tag: "MkOpSubset"; - contents: OpSubset; + contents: OpSubset; } interface IMkOpSubsetEq { tag: "MkOpSubsetEq"; - contents: OpSubsetEq; + contents: OpSubsetEq; } interface IMkOpSubstring { tag: "MkOpSubstring"; - contents: OpSubstring; + contents: OpSubstring; } interface IMkOpSucc { tag: "MkOpSucc"; - contents: OpSucc; + contents: OpSucc; } interface IMkOpSum { tag: "MkOpSum"; - contents: OpSum; + contents: OpSum; } interface IMkOpSupset { tag: "MkOpSupset"; - contents: OpSupset; + contents: OpSupset; } interface IMkOpSupsetEq { tag: "MkOpSupsetEq"; - contents: OpSupsetEq; + contents: OpSupsetEq; } interface IMkOpTable { tag: "MkOpTable"; - contents: OpTable; + contents: OpTable; } interface IMkOpTildeLeq { tag: "MkOpTildeLeq"; - contents: OpTildeLeq; + contents: OpTildeLeq; } interface IMkOpTildeLt { tag: "MkOpTildeLt"; - contents: OpTildeLt; + contents: OpTildeLt; } interface IMkOpToInt { tag: "MkOpToInt"; - contents: OpToInt; + contents: OpToInt; } interface IMkOpToMSet { tag: "MkOpToMSet"; - contents: OpToMSet; + contents: OpToMSet; } interface IMkOpToRelation { tag: "MkOpToRelation"; - contents: OpToRelation; + contents: OpToRelation; } interface IMkOpToSet { tag: "MkOpToSet"; - contents: OpToSet; + contents: OpToSet; } interface IMkOpTogether { tag: "MkOpTogether"; - contents: OpTogether; + contents: OpTogether; } interface IMkOpTransform { tag: "MkOpTransform"; - contents: OpTransform; + contents: OpTransform; } interface IMkOpTrue { tag: "MkOpTrue"; - contents: OpTrue; + contents: OpTrue; } interface IMkOpTwoBars { tag: "MkOpTwoBars"; - contents: OpTwoBars; + contents: OpTwoBars; } interface IMkOpUnion { tag: "MkOpUnion"; - contents: OpUnion; + contents: OpUnion; } interface IMkOpXor { tag: "MkOpXor"; - contents: OpXor; + contents: OpXor; } type OpActive = IOpActive; -type IOpActive = [T, Name]; +type IOpActive = [Expression, Name]; type OpAllDiff = IOpAllDiff; -type IOpAllDiff = T; +type IOpAllDiff = Expression; type OpAllDiffExcept = IOpAllDiffExcept; -type IOpAllDiffExcept = [T, T]; +type IOpAllDiffExcept = [Expression, Expression]; type OpAnd = IOpAnd; -type IOpAnd = T; +type IOpAnd = Expression; type OpApart = IOpApart; -type IOpApart = [T, T]; +type IOpApart = [Expression, Expression]; type OpAtLeast = IOpAtLeast; -type IOpAtLeast = [T, T, T]; +type IOpAtLeast = [Expression, Expression, Expression]; type OpAtMost = IOpAtMost; -type IOpAtMost = [T, T, T]; +type IOpAtMost = [Expression, Expression, Expression]; type OpAttributeAsConstraint = IOpAttributeAsConstraint; -type IOpAttributeAsConstraint = [T, AttrName, T]; +type IOpAttributeAsConstraint = [Expression, AttrName, Expression]; type OpCatchUndef = IOpCatchUndef; -type IOpCatchUndef = [T, T]; +type IOpCatchUndef = [Expression, Expression]; type OpDefined = IOpDefined; -type IOpDefined = T; +type IOpDefined = Expression; type OpDiv = IOpDiv; -type IOpDiv = [T, T]; +type IOpDiv = [Expression, Expression]; type OpDontCare = IOpDontCare; -type IOpDontCare = T; +type IOpDontCare = Expression; type OpDotLeq = IOpDotLeq; -type IOpDotLeq = [T, T]; +type IOpDotLeq = [Expression, Expression]; type OpDotLt = IOpDotLt; -type IOpDotLt = [T, T]; +type IOpDotLt = [Expression, Expression]; type OpEq = IOpEq; -type IOpEq = [T, T]; +type IOpEq = [Expression, Expression]; type OpFactorial = IOpFactorial; -type IOpFactorial = T; +type IOpFactorial = Expression; type OpFlatten = IOpFlatten; -type IOpFlatten = [number, T]; +type IOpFlatten = [number, Expression]; type OpFreq = IOpFreq; -type IOpFreq = [T, T]; +type IOpFreq = [Expression, Expression]; type OpGCC = IOpGCC; -type IOpGCC = [T, T, T]; +type IOpGCC = [Expression, Expression, Expression]; type OpGeq = IOpGeq; -type IOpGeq = [T, T]; +type IOpGeq = [Expression, Expression]; type OpGt = IOpGt; -type IOpGt = [T, T]; +type IOpGt = [Expression, Expression]; type OpHist = IOpHist; -type IOpHist = T; +type IOpHist = Expression; type OpIff = IOpIff; -type IOpIff = [T, T]; +type IOpIff = [Expression, Expression]; type OpImage = IOpImage; -type IOpImage = [T, T]; +type IOpImage = [Expression, Expression]; type OpImageSet = IOpImageSet; -type IOpImageSet = [T, T]; +type IOpImageSet = [Expression, Expression]; type OpImply = IOpImply; -type IOpImply = [T, T]; +type IOpImply = [Expression, Expression]; type OpIn = IOpIn; -type IOpIn = [T, T]; +type IOpIn = [Expression, Expression]; type OpIndexing = IOpIndexing; -type IOpIndexing = [T, T]; +type IOpIndexing = [Expression, Expression]; type OpIntersect = IOpIntersect; -type IOpIntersect = [T, T]; +type IOpIntersect = [Expression, Expression]; type OpInverse = IOpInverse; -type IOpInverse = [T, T]; +type IOpInverse = [Expression, Expression]; type OpLeq = IOpLeq; -type IOpLeq = [T, T]; +type IOpLeq = [Expression, Expression]; type OpLexLeq = IOpLexLeq; -type IOpLexLeq = [T, T]; +type IOpLexLeq = [Expression, Expression]; type OpLexLt = IOpLexLt; -type IOpLexLt = [T, T]; +type IOpLexLt = [Expression, Expression]; type OpLt = IOpLt; -type IOpLt = [T, T]; +type IOpLt = [Expression, Expression]; type OpMax = IOpMax; -type IOpMax = T; +type IOpMax = Expression; type OpMin = IOpMin; -type IOpMin = T; +type IOpMin = Expression; type OpMinus = IOpMinus; -type IOpMinus = [T, T]; +type IOpMinus = [Expression, Expression]; type OpMod = IOpMod; -type IOpMod = [T, T]; +type IOpMod = [Expression, Expression]; type OpNegate = IOpNegate; -type IOpNegate = T; +type IOpNegate = Expression; type OpNeq = IOpNeq; -type IOpNeq = [T, T]; +type IOpNeq = [Expression, Expression]; type OpNot = IOpNot; -type IOpNot = T; +type IOpNot = Expression; type OpOr = IOpOr; -type IOpOr = T; +type IOpOr = Expression; type OpParticipants = IOpParticipants; -type IOpParticipants = T; +type IOpParticipants = Expression; type OpParts = IOpParts; -type IOpParts = T; +type IOpParts = Expression; type OpParty = IOpParty; -type IOpParty = [T, T]; +type IOpParty = [Expression, Expression]; type OpPow = IOpPow; -type IOpPow = [T, T]; +type IOpPow = [Expression, Expression]; type OpPowerSet = IOpPowerSet; -type IOpPowerSet = T; +type IOpPowerSet = Expression; type OpPred = IOpPred; -type IOpPred = T; +type IOpPred = Expression; type OpPreImage = IOpPreImage; -type IOpPreImage = [T, T]; +type IOpPreImage = [Expression, Expression]; type OpProduct = IOpProduct; -type IOpProduct = T; +type IOpProduct = Expression; type OpRange = IOpRange; -type IOpRange = T; +type IOpRange = Expression; type OpRelationProj = IOpRelationProj; -type IOpRelationProj = [T, T[]]; +type IOpRelationProj = [Expression, Expression[]]; type OpRestrict = IOpRestrict; -type IOpRestrict = [T, T]; +type IOpRestrict = [Expression, Expression]; type OpSlicing = IOpSlicing; -type IOpSlicing = [T, T, T]; +type IOpSlicing = [Expression, Expression, Expression]; type OpSubsequence = IOpSubsequence; -type IOpSubsequence = [T, T]; +type IOpSubsequence = [Expression, Expression]; type OpSubset = IOpSubset; -type IOpSubset = [T, T]; +type IOpSubset = [Expression, Expression]; type OpSubsetEq = IOpSubsetEq; -type IOpSubsetEq = [T, T]; +type IOpSubsetEq = [Expression, Expression]; type OpSubstring = IOpSubstring; -type IOpSubstring = [T, T]; +type IOpSubstring = [Expression, Expression]; type OpSucc = IOpSucc; -type IOpSucc = T; +type IOpSucc = Expression; type OpSum = IOpSum; -type IOpSum = T; +type IOpSum = Expression; type OpSupset = IOpSupset; -type IOpSupset = [T, T]; +type IOpSupset = [Expression, Expression]; type OpSupsetEq = IOpSupsetEq; -type IOpSupsetEq = [T, T]; +type IOpSupsetEq = [Expression, Expression]; type OpTable = IOpTable; -type IOpTable = [T, T]; +type IOpTable = [Expression, Expression]; type OpTildeLeq = IOpTildeLeq; -type IOpTildeLeq = [T, T]; +type IOpTildeLeq = [Expression, Expression]; type OpTildeLt = IOpTildeLt; -type IOpTildeLt = [T, T]; +type IOpTildeLt = [Expression, Expression]; type OpTogether = IOpTogether; -type IOpTogether = [T, T]; +type IOpTogether = [Expression, Expression]; type OpToInt = IOpToInt; -type IOpToInt = T; +type IOpToInt = Expression; type OpToMSet = IOpToMSet; -type IOpToMSet = T; +type IOpToMSet = Expression; type OpToRelation = IOpToRelation; -type IOpToRelation = T; +type IOpToRelation = Expression; type OpToSet = IOpToSet; -type IOpToSet = [boolean, T]; +type IOpToSet = [boolean, Expression]; type OpTransform = IOpTransform; -type IOpTransform = [T, T]; +type IOpTransform = [Expression, Expression]; type OpTrue = IOpTrue; -type IOpTrue = T; +type IOpTrue = Expression; type OpTwoBars = IOpTwoBars; -type IOpTwoBars = T; +type IOpTwoBars = Expression; type OpUnion = IOpUnion; -type IOpUnion = [T, T]; +type IOpUnion = [Expression, Expression]; type OpXor = IOpXor; -type IOpXor = T; +type IOpXor = Expression; type PartialityAttr = "PartialityAttr_Partial" | "PartialityAttr_Total"; type PartitionAttr = IPartitionAttr; interface IPartitionAttr { - partsNum: SizeAttr; - partsSize: SizeAttr; + partsNum: SizeAttr; + partsSize: SizeAttr; isRegular: boolean; } @@ -1238,22 +1238,22 @@ interface IRangeOpen { interface IRangeSingle { tag: "RangeSingle"; - contents: T; + contents: Type; } interface IRangeLowerBounded { tag: "RangeLowerBounded"; - contents: T; + contents: Type; } interface IRangeUpperBounded { tag: "RangeUpperBounded"; - contents: T; + contents: Type; } interface IRangeBounded { tag: "RangeBounded"; - contents: [T, T]; + contents: [Type, Type]; } type ReferenceTo = IAlias | IInComprehension | IDeclNoRepr | IDeclHasRepr | IRecordField | IVariantField; @@ -1301,7 +1301,7 @@ interface IRegion { type RelationAttr = IRelationAttr; -type IRelationAttr = [SizeAttr, BinaryRelationAttrs]; +type IRelationAttr = [SizeAttr, BinaryRelationAttrs]; type SearchOrder = IBranchingOn | ICut; @@ -1317,11 +1317,11 @@ interface ICut { type SequenceAttr = ISequenceAttr; -type ISequenceAttr = [SizeAttr, JectivityAttr]; +type ISequenceAttr = [SizeAttr, JectivityAttr]; type SetAttr = ISetAttr; -type ISetAttr = SizeAttr; +type ISetAttr = SizeAttr; type SizeAttr = ISizeAttr_None | ISizeAttr_Size | ISizeAttr_MinSize | ISizeAttr_MaxSize | ISizeAttr_MinMaxSize; @@ -1331,22 +1331,22 @@ interface ISizeAttr_None { interface ISizeAttr_Size { tag: "SizeAttr_Size"; - contents: T; + contents: Type; } interface ISizeAttr_MinSize { tag: "SizeAttr_MinSize"; - contents: T; + contents: Type; } interface ISizeAttr_MaxSize { tag: "SizeAttr_MaxSize"; - contents: T; + contents: Type; } interface ISizeAttr_MinMaxSize { tag: "SizeAttr_MinMaxSize"; - contents: [T, T]; + contents: [Type, Type]; } type Statement = IDeclaration | ISearchOrder | ISearchHeuristic | IWhere | IObjective | ISuchThat; From f823427ec624bc5984e1d8cec3f2854a68552ec3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 9 Mar 2023 15:38:25 +0000 Subject: [PATCH 144/378] Fixes incorrect parsing of single parenthesised domains --- src/Conjure/Language/AST/ASTParser.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index a423b016e6..7340de0389 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -650,7 +650,11 @@ parseShortTuple = do openB <- need L_OpenParen lst <- commaList parseDomain closeB <- want L_CloseParen - return $ ShortTupleDomainNode $ ListNode (RealToken openB) lst closeB + return $ case lst of + Seq [SeqElem d Nothing] -> d + Seq _ -> ShortTupleDomainNode $ ListNode (RealToken openB) lst closeB + + parseRecord :: Parser DomainNode parseRecord = do From 4cbeb18e94485813ac0c4395555ef7b87abe94fc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 9 Mar 2023 16:09:40 +0000 Subject: [PATCH 145/378] update ghc version --- .github/workflows/build.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c15d9ccfe0..73b8095c7a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - GHC_VERSION: [8.6] + GHC_VERSION: [9.2] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 139990ca01..b61e7a5ab9 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - GHC_VERSION: [8.6] + GHC_VERSION: [9.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b63c3266e8..c328b6908b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: strategy: matrix: - GHC_VERSION: [8.6] + GHC_VERSION: [9.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} From dfe7145efcb7e2d9d3b885d90394abf9bc451b65 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 10 Mar 2023 11:35:13 +0000 Subject: [PATCH 146/378] Try with ghc 9.0 --- .github/workflows/build.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73b8095c7a..0b7904312b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.2] + GHC_VERSION: [9.0] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index b61e7a5ab9..9780aadb22 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.2] + GHC_VERSION: [9.0] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c328b6908b..bad8bd2248 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.2] + GHC_VERSION: [9.0] os: [ubuntu-latest] runs-on: ${{ matrix.os }} From 9b5ff481fdc8a5aa73d5c3f99955ddcc433ec996 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 10 Mar 2023 11:37:34 +0000 Subject: [PATCH 147/378] Stop ghc version being rounded by github --- .github/workflows/build.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0b7904312b..0bb6b6cdff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.0] + GHC_VERSION: ["9.0"] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 9780aadb22..24e001497e 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.0] + GHC_VERSION: ["9.0"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bad8bd2248..e643c06729 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.0] + GHC_VERSION: ["9.0"] os: [ubuntu-latest] runs-on: ${{ matrix.os }} From 2adadb117daa4551850b14b7b2c483c03703297a Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 10 Mar 2023 15:08:42 +0000 Subject: [PATCH 148/378] Updates tests affected by domain tuple fix --- .../random_perturb/set01/change-07/stderr.expected | 6 ------ .../random_perturb/set01/delete-02/stderr.expected | 6 ------ .../random_perturb/set01/delete-03/stderr.expected | 6 ------ 3 files changed, 18 deletions(-) diff --git a/tests/parse_print/random_perturb/set01/change-07/stderr.expected b/tests/parse_print/random_perturb/set01/change-07/stderr.expected index c032092dfb..7b0d1f9e4b 100644 --- a/tests/parse_print/random_perturb/set01/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-07/stderr.expected @@ -17,9 +17,3 @@ tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: 3 | find x : set (sizo 2) of int(1..3) | ^^^^^^^^^^^^^^^ Skipped tokens - -tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: - | -3 | find x : set (sizo 2) of int(1..3) - | ^ -Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected index 4ab3864827..ebbc06e716 100644 --- a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected @@ -17,9 +17,3 @@ tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: 3 | find x : set (siz 2) of int(1..3) | ^^^^^^^^^^^^^^^ Skipped tokens - -tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: - | -3 | find x : set (siz 2) of int(1..3) - | ^ -Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected index f4ae2cf405..22dbea5800 100644 --- a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected @@ -17,9 +17,3 @@ tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: 3 | find x : set (sze 2) of int(1..3) | ^^^^^^^^^^^^^^^ Skipped tokens - -tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: - | -3 | find x : set (sze 2) of int(1..3) - | ^ -Missing ) From f53b5c1a0b728a094f5fa7957aae0bfb52b7683d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 10 Mar 2023 15:08:58 +0000 Subject: [PATCH 149/378] Updates test output --- tests/custom/issues/424/stdout.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/custom/issues/424/stdout.expected b/tests/custom/issues/424/stdout.expected index 2faeecee59..093b3a24eb 100644 --- a/tests/custom/issues/424/stdout.expected +++ b/tests/custom/issues/424/stdout.expected @@ -1,5 +1,5 @@ 9 knapsack.essence -159 conjure-output/model000001.eprime +160 conjure-output/model000001.eprime 200008 large.param 8841 large.eprime-param -209017 total +209018 total From ec1f6e99369e588dd8828813c08bf9b5fc2f4cff Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 10 Mar 2023 15:10:12 +0000 Subject: [PATCH 150/378] Updates test script to hide passing tests to reduce CI loggin --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 13256acce1..e2b48c29db 100644 --- a/Makefile +++ b/Makefile @@ -47,11 +47,11 @@ install: .PHONY: test test: @if ${COVERAGE}; then \ - stack test --coverage --test-arguments '--limit-time ${LIMIT_TIME}';\ + stack test --coverage --test-arguments '--hide-successes --limit-time ${LIMIT_TIME}';\ stack hpc report conjure-cp $(find . -name conjure.tix);\ ls .stack-work/install/*/*/*/hpc/combined/custom;\ else\ - stack test --test-arguments '--limit-time ${LIMIT_TIME}';\ + stack test --test-arguments '--hide-successes --limit-time ${LIMIT_TIME}';\ fi stack.yaml: From 00614efc2a751dd0cd15e4001deb5c74538d6d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 13:08:20 +0000 Subject: [PATCH 151/378] 2023 and adjusting the author list through git --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index aee6d839ea..e2e4a8705a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -52,8 +52,8 @@ # General information about the project. project = u'Conjure' -copyright = u'2009–2022, Conjure developers' -author = u'Özgür Akgün, Saad Attieh, Juliana Bowles, Nguyen Dang, Joan Espasa Arxer, Jordina Francès de Mas, Ian Gent, Ruth Hoffmann, Chris Jefferson, Gökberk Koçak, Alice Lynch, Ian Miguel, András Salamon and Christopher Stone' +copyright = u'2009–2023, Conjure developers' +author = u'Özgür Akgün, Saad Attieh, Nguyen Dang, Joan Espasa Arxer, Ian Gent, Ruth Hoffmann, Chris Jefferson, Gökberk Koçak, Alice Lynch, Ian Miguel, András Salamon and Christopher Stone' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the From e964eb29ff4e170e7541cf1e6680ffd292234886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 13:31:41 +0000 Subject: [PATCH 152/378] read contributors from the contributors.md file --- CONTRIBUTORS.md | 16 ++++++++++------ docs/contact.rst | 12 ++---------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 32056c365e..b05c9928b8 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1,8 +1,12 @@ We thank the following people for their help and contributions. -- András Salamon ([@ott2](http://github.com/ott2)) -- Bilal Hussain ([@Bilalh](http://github.com/Bilalh)) -- Billy Brown ([@Druid-of-Luhn](http://github.com/Druid-of-Luhn)) -- Chris Jefferson ([@ChrisJefferson](http://github.com/ChrisJefferson)) -- Özgür Akgün ([@ozgurakgun](http://github.com/ozgurakgun)) -- Peter Nightingale ([@pwn1](http://github.com/pwn1)) +- `Özgür Akgün `_ +- `Alan Frisch `_ +- `András Salamon `_ +- `Bilal Syed Hussain `_ +- `Billy Brown `_ +- `Brahim Hnich `_ +- `Chris Jefferson `_ +- `Ian Gent `_ +- `Ian Miguel `_ +- `Peter Nightingale `_ diff --git a/docs/contact.rst b/docs/contact.rst index 25cb089359..8ddb863d38 100644 --- a/docs/contact.rst +++ b/docs/contact.rst @@ -17,13 +17,5 @@ We will do our best to help! Contributors ------------ -The following list of people have contributed to the development of Conjure. - -- `Özgür Akgün `_ -- `Alan Frisch `_ -- `Ian Gent `_ -- `Brahim Hnich `_ -- `Bilal Syed Hussain `_ -- `Chris Jefferson `_ -- `Ian Miguel `_ -- `Peter Nightingale `_ +.. include:: ../CONTRIBUTORS.md + From f457fde89298ac83824a1c7323403c3efc3fed8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 15:18:32 +0000 Subject: [PATCH 153/378] documentation updates to add references and typset authors better --- docs/conf.py | 23 ++- docs/introduction.rst | 32 +++ docs/refs.bib | 423 ++++++++++++++++++++++++++++++++++++++++ docs/requirements.txt | 3 +- docs/tutorials/BIBD.rst | 2 +- 5 files changed, 473 insertions(+), 10 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index e2e4a8705a..52007d99e3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -53,7 +53,18 @@ # General information about the project. project = u'Conjure' copyright = u'2009–2023, Conjure developers' -author = u'Özgür Akgün, Saad Attieh, Nguyen Dang, Joan Espasa Arxer, Ian Gent, Ruth Hoffmann, Chris Jefferson, Gökberk Koçak, Alice Lynch, Ian Miguel, András Salamon and Christopher Stone' +author = u'''Özgür Akgün \\and +Saad Attieh \\and +Nguyen Dang \\and +Joan Espasa Arxer \\and +Ian Gent \\and +Ruth Hoffmann \\and +Chris Jefferson \\and +Gökberk Koçak \\and +Alice Lynch \\and +Ian Miguel \\and +András Salamon \\and +Christopher Stone''' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -238,11 +249,7 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'Conjure.tex', u'Conjure Documentation, Release %s' % version, - u'''Özgür Akgün, Saad Attieh, Juliana Bowles, - Nguyen Dang, Joan Espasa Arxer, Jordina Francès de Mas, - Ian Gent, Ruth Hoffmann, Chris Jefferson, Gökberk Koçak, Alice Lynch, - Ian Miguel, András Salamon and Christopher Stone''', 'manual'), + (master_doc, 'Conjure.tex', u'Conjure Documentation', author, 'manual'), ] @@ -272,7 +279,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'conjure', u'Conjure Documentation, Release %s' % version, + (master_doc, 'conjure', u'Conjure Documentation', [author], 1) ] @@ -286,7 +293,7 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'Conjure', u'Conjure Documentation, Release %s' % version, + (master_doc, 'Conjure', u'Conjure Documentation', author, 'Conjure', 'Conjure: The Automated Constraint Modelling Tool', 'Miscellaneous'), ] diff --git a/docs/introduction.rst b/docs/introduction.rst index 508ad7c98e..f2f62b2c67 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -23,4 +23,36 @@ In the case of a Sudoku, the parameter values are the contents of the hint cells Operating at the class level has one very important benefit: Conjure needs to be executed only once to create one (or more) Essence' models for a problem. Once the models are generated, they can be used to solve many instances of the same class. +Conjure has been the basis of several research publications. See the following for some examples. + +- :cite:`ba536fe7d91a49a8924844c107ffd83e` +- :cite:`1436930e0d004c7fa6adee33e4c98bd6` +- :cite:`c341e68df4c14ab5b77b0693aa1cc90f` +- :cite:`36323c314240451291f8377d5a4f9668` +- :cite:`ae7faa006d3d4ecbb19a14df924e2088` +- :cite:`d868096c9b0a428f83a1d508f98736a5` +- :cite:`17528eb080e74cb6ac61a8387e9ac515` +- :cite:`04b6f9716a204104b26a8a664d101d92` +- :cite:`5d418525265e4c2189449a84ef9db61e` +- :cite:`e74974988ec540bab669443ad10422b3` +- :cite:`4b54ed2e79924712bcf8e6fea3211d72` +- :cite:`ce8510eb25d34db48cd8c3c7682edfdf` +- :cite:`b1d1e65f1ecf4431bc087cff9ef9b9dd` +- :cite:`921a03b374654acdb3cf8b608e1ef86a` +- :cite:`8f516aac022d4bcdb34e5f63976bdd78` +- :cite:`56bd918cab3c4a66b6fae5b71f88b1b6` +- :cite:`413b9d1324cf4826b5ea1a130eb96159` +- :cite:`6eef5285c1a0471ebba55a9179298de8` +- :cite:`8a56ff34e5bc4dada3bcc63d391de55e` +- :cite:`9dd26cea0c54476f8d0418df430909da` +- :cite:`dd9347655a2d45f2bef81ebcb8778daa` +- :cite:`0ef98e79e0bd426eb92227f281f4ee4e` +- :cite:`ec7a3b357c8b4af4ba335c281ea87ba3` +- :cite:`dfc0e4b721844d9d801fb27c264086ff` +- :cite:`066dfdbd563a40c68df2eaae83a342cd` +- :cite:`ed9a3c921f40425b964217636a5af521` +- :cite:`ecb8ca42a8eb4098a685daa84c821da3` +- :cite:`aee46a0c83b14b25b687813677855191` +- :cite:`586c88ee08c1404391bc48c26d66e523` + diff --git a/docs/refs.bib b/docs/refs.bib index d4ee1eaef1..d85c9b9d1e 100644 --- a/docs/refs.bib +++ b/docs/refs.bib @@ -51,3 +51,426 @@ @phdthesis{hoffmann2015thesis year={2015}, school={University of St Andrews} } + + + + + + + + + +@article{ba536fe7d91a49a8924844c107ffd83e, + title = {CONJURE: automatic generation of constraint models from problem specifications}, + abstract = {When solving a combinatorial problem, the formulation or model of the problem is critical tothe efficiency of the solver. Automating the modelling process has long been of interest because of the expertise and time required to produce an effective model of a given problem. We describe a method to automatically produce constraint models from a problem specification written in the abstract constraint specification language Essence. Our approach is to incrementally refine the specification into a concrete model by applying a chosen refinement rule at each step. Any nontrivial specification may be refined in multiple ways, creating a space of models to choose from.The handling of symmetries is a particularly important aspect of automated modelling. Many combinatorial optimisation problems contain symmetry, which can lead to redundant search. If a partial assignment is shown to be invalid, we are wasting time if we ever consider a symmetric equivalent of it. A particularly important class of symmetries are those introduced by the constraint modelling process: modelling symmetries. We show how modelling symmetries may be broken automatically as they enter a model during refinement, obviating the need for an expensive symmetry detection step following model formulation.Our approach is implemented in a system called Conjure. We compare the models producedby Conjure to constraint models from the literature that are known to be effective. Our empirical results confirm that Conjure can reproduce successfully the kernels of the constraint models of 42 benchmark problems found in the literature.}, + keywords = {Constraint satisfaction problem, Constraint modelling, Constraint programming, Combinatorial optimization}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M.} and Gent, {Ian P.} and Christopher Jefferson and Miguel, {Ian J.} and Peter Nightingale}, + year = {2022}, + month = {sep}, + doi = {10.1016/j.artint.2022.103751}, + language = {English}, + volume = {310}, + journal = {Artificial Intelligence}, + issn = {0004-3702}, + publisher = {Elsevier}, +} + +@inproceedings{1436930e0d004c7fa6adee33e4c98bd6, + title = {Understanding how people approach constraint modelling and solving}, + abstract = {Research in constraint programming typically focuses on problem solving efficiency. However, the way users conceptualise problems and communicate with constraint programming tools is often sidelined. How humans think about constraint problems can be important for the development of efficient tools that are useful to a broader audience. For example, a system incorporating knowledge on how people think about constraint problems can provide explanations to users and improve the communication between the human and the solver.We present an initial step towards a better understanding of the human side of the constraint solving process. To our knowledge, this is the first human-centred study addressing how people approach constraint modelling and solving. We observed three sets of ten users each (constraint programmers, computer scientists and non-computer scientists) and analysed how they find solutions for well-known constraint problems. We found regularities offering clues about how to design systems that are more intelligible to humans.}, + keywords = {Constraint modelling, HCI, User study, Grounded theory}, + author = {Ruth Hoffmann and Xu Zhu and {\"O}zg{\"u}r Akg{\"u}n and Miguel Nacenta}, + year = {2022}, + month = {jul}, + day = {23}, + doi = {10.4230/LIPIcs.CP.2022.28}, + language = {English}, + publisher = {Schloss Dagstuhl- Leibniz-Zentrum fur Informatik GmbH, Dagstuhl Publishing}, + editor = {Christine Solnon}, + booktitle = {28th International Conference on Principles and Practice of Constraint Programming (CP 2022)}, + url = {https://cp2022.a4cp.org/}, +} + +@inproceedings{c341e68df4c14ab5b77b0693aa1cc90f, + title = {A framework for generating informative benchmark instances}, + abstract = {Benchmarking is an important tool for assessing the relative performance of alternative solving approaches. However, the utility of benchmarking is limited by the quantity and quality of the available problem instances. Modern constraint programming languages typically allow the specification of a class-level model that is parameterised over instance data. This separation presents an opportunity for automated approaches to generate instance data that define instances that are graded (solvable at a certain difficulty level for a solver) or can discriminate between two solving approaches. In this paper, we introduce a framework that combines these two properties to generate a large number of benchmark instances, purposely generated for effective and informative benchmarking. We use five problems that were used in the MiniZinc competition to demonstrate the usage of our framework. In addition to producing a ranking among solvers, our framework gives a broader understanding of the behaviour of each solver for the whole instance space; for example by finding subsets of instances where the solver performance significantly varies from its average performance.}, + keywords = {Instance generation, Benchmarking, Constraint programming}, + author = {Nguyen Dang and {\"O}zg{\"u}r Akg{\"u}n and {Espasa Arxer}, Joan and Miguel, {Ian} and Peter Nightingale}, + year = {2022}, + month = {jul}, + day = {23}, + doi = {10.4230/LIPIcs.CP.2022.18}, + language = {English}, + publisher = {Schloss Dagstuhl- Leibniz-Zentrum fur Informatik GmbH, Dagstuhl Publishing}, + editor = {Christine Solon}, + booktitle = {28th International Conference on Principles and Practice of Constraint Programming (CP 2022)}, +} + +@inproceedings{36323c314240451291f8377d5a4f9668, + title = {Towards reformulating Essence specifications for robustness}, + abstract = {The Essence language allows a user to specify a constraint problem at a level of abstraction above that at which constraint modelling decisions are made. Essence specifications are refined into constraint models using the Conjure automated modelling tool, which employs a suite of refinement rules. However, Essence is a rich language in which there are many equivalent ways to specify a given problem. A user may therefore omit the use of domain attributes or abstract types, resulting in fewer refinement rules being applicable and therefore a reduced set of output models from which to select. This paper addresses the problem of recovering this information automatically to increase the robustness of the quality of the output constraint models in the face of variation in the input Essence specification. We present reformulation rules that can change the type of a decision variable or add attributes that shrink its domain. We demonstrate the efficacy of this approach in terms of the quantity and quality of models Conjure can produce from the transformed specification compared with the original. }, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M.} and Gent, {Ian P.} and Christopher Jefferson and Ian Miguel and Peter Nightingale and Salamon, {Andr{\'a}s Z.}}, + year = {2021}, + month = {oct}, + day = {25}, + language = {English}, + booktitle = {ModRef 2021 - The 20th workshop on Constraint Modelling and Reformulation (ModRef)}, + url = {https://modref.github.io/ModRef2021.html}, +} + +@inproceedings{ae7faa006d3d4ecbb19a14df924e2088, + title = {Efficient incremental modelling and solving}, + abstract = {In various scenarios, a single phase of modelling and solving is either not sufficient or not feasible to solve the problem at hand. A standard approach to solving AI planning problems, for example, is to incrementally extend the planning horizon and solve the problem of trying to find a plan of a particular length. Indeed, any optimization problem can be solved as a sequence of decision problems in which the objective value is incrementally updated. Another example is constraint dominance programming (CDP), in which search is organized into a sequence of levels. The contribution of this work is to enable a native interaction between SAT solvers and the automated modelling system Savile Row to support efficient incremental modelling and solving. This allows adding new decision variables, posting new constraints and removing existing constraints (via assumptions) between incremental steps. Two additional benefits of the native coupling of modelling and solving are the ability to retain learned information between SAT solver calls and to enable SAT assumptions, further improving flexibility and efficiency. Experiments on one optimisation problem and five pattern mining tasks demonstrate that the native interaction between the modelling system and SAT solver consistently improves performance significantly. }, + keywords = {Constraint programming, Constraint modelling, Incremental solving, Constraint optimization, Planning, Data mining, Itemset mining, Pattern mining, Dominance programming}, + author = {G{\"o}kberk Ko{\c c}ak and {\"O}zg{\"u}r Akg{\"u}n and Nguyen Dang and Ian Miguel}, + year = {2020}, + month = {sep}, + day = {7}, + language = {English}, + booktitle = {ModRef 2020 - The 19th workshop on Constraint Modelling and Reformulation}, + url = {https://modref.github.io/ModRef2020.html}, +} + + +@inproceedings{d868096c9b0a428f83a1d508f98736a5, + title = {Towards portfolios of streamlined constraint models: a case study with the balanced academic curriculum problem}, + abstract = {Augmenting a base constraint model with additional constraints can strengthen the inferences made by a solver and therefore reduce search effort. We focus on the automatic addition of streamliner constraints, derived from the types present in an abstract Essence specification of a problem class of interest, which trade completeness for potentially very significant reduction in search. The refinement of streamlined Essence specifications into constraint models suitable for input to constraint solvers gives rise to a large number of modelling choices in addition to those required for the base Essence specification. Previous automated streamlining approaches have been limited in evaluating only a single default model for each streamlined specification. In this paper we explore the effect of model selection in the context of streamlined specifications. We propose a new best-first search method that generates a portfolio of Pareto Optimal streamliner-model combinations by evaluating for each streamliner a portfolio of models to search and explore the variability in performance and find the optimal model. Various forms of racing are utilised to constrain the computational cost of training. }, + keywords = {Constraint programming, Streamliners}, + author = {Patrick Spracklen and Nguyen Dang and {\"O}zg{\"u}r Akg{\"u}n and Ian Miguel}, + year = {2020}, + month = {sep}, + day = {7}, + language = {English}, + booktitle = {ModRef 2020 - The 19th workshop on Constraint Modelling and Reformulation}, + url = {https://modref.github.io/ModRef2020.html}, +} + +@inproceedings{17528eb080e74cb6ac61a8387e9ac515, + title = {Exploiting incomparability in solution dominance: improving general purpose constraint-based mining}, + abstract = {In data mining, finding interesting patterns is a challenging task. Constraint-based mining is a well-known approach to this, and one for which constraint programming has been shown to be a well-suited and generic framework. Constraint dominance programming (CDP) has been proposed as an extension that can capture an even wider class of constraint-based mining problems, by allowing us to compare relations between patterns. In this paper we improve CDP with the ability to specify an incomparability condition. This allows us to overcome two major shortcomings of CDP: finding dominated solutions that must then be filtered out after search, and unnecessarily adding dominance blocking constraints between incomparable solutions. We demonstrate the efficacy of our approach by extending the problem specification language ESSENCE and implementing it in a solver-independent manner on top of the constraint modelling tool CONJURE. Our experiments on pattern mining tasks with both a CP solver and a SAT solver show that using the incomparability condition during search significantly improves the efficiency of dominance programming and reduces (and often eliminates entirely) the need for post-processing to filter dominated solutions.}, + author = {Gokberk Kocak and {\"O}zg{\"u}r Akg{\"u}n and Tias Guns and Miguel, {Ian}}, + year = {2020}, + month = {aug}, + day = {29}, + doi = {10.3233/FAIA200110}, + language = {English}, + isbn = {9781643681009}, + publisher = {IOS Press}, + pages = {331--338}, + editor = {{De Giacomo}, Giuseppe and Alejandro Catala and Bistra Dilkina and Michela Milano and Sen{\'e}n Barro and Alberto Bugar{\'i}n and J{\'e}r{\^o}me Lang}, + booktitle = {ECAI 2020}, + address = {Netherlands}, + url = {https://ecai2020.eu/}, +} + +@inproceedings{04b6f9716a204104b26a8a664d101d92, + title = {Discriminating instance generation from abstract specifications: a case study with CP and MIP}, + abstract = {We extend automatic instance generation methods to allow cross-paradigm comparisons. We demonstrate that it is possible to completely automate the search for benchmark instances that help to discriminate between solvers. Our system starts from a high level human-provided problem specification, which is translated into a specification for valid instances. We use the automated algorithm configuration tool irace to search for instances, which are translated into inputs for both MIP and CP solvers by means of the Conjure, Savile Row, and MiniZinc tools. These instances are then solved by CPLEX and Chuffed, respectively. We constrain our search for instances by requiring them to exhibit a significant advantage for MIP over CP, or vice versa. Experimental results on four optimisation problem classes demonstrate the effectiveness of our method in identifying instances that highlight differences in performance of the two solvers.}, + keywords = {Constraint Programming, Instance generation, MIP}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Nguyen Dang and Ian Miguel and Salamon, {Andr{\'a}s Z.} and Patrick Spracklen and Christopher Stone}, + year = {2020}, + doi = {10.1007/978-3-030-58942-4_3}, + language = {English}, + isbn = {9783030589417}, + publisher = {Springer}, + pages = {41--51}, + editor = {Emmanuel Hebrard and Nysret Musliu}, + booktitle = {Integration of Constraint Programming, Artificial Intelligence, and Operations Research}, + address = {Netherlands}, + url = {https://cpaior2020.dbai.tuwien.ac.at/}, +} + +@inproceedings{5d418525265e4c2189449a84ef9db61e, + title = {Effective encodings of constraint programming models to SMT}, + abstract = {Satisfiability Modulo Theories (SMT) is a well-established methodology that generalises propositional satisfiability (SAT) by adding support for a variety of theories such as integer arithmetic and bit-vector operations. SMT solvers have made rapid progress in recent years. In part, the efficiency of modern SMT solvers derives from the use of specialised decision procedures for each theory. In this paper we explore how the Essence Prime constraint modelling language can be translated to the standard SMT-LIB language. We target four theories: bit-vectors (QF_BV), linear integer arithmetic (QF_LIA), non-linear integer arithmetic (QF_NIA), and integer difference logic (QF_IDL). The encodings are implemented in the constraint modelling tool Savile Row. In an extensive set of experiments, we compare our encodings for the four theories, showing some notable differences and complementary strengths. We also compare our new encodings to the existing work targeting SMT and SAT, and to a well-established learning CP solver. Our two proposed encodings targeting the theory of bit-vectors (QF_BV) both substantially outperform earlier work on encoding to QF_BV on a large and diverse set of problem classes.}, + keywords = {Constraint modelling, SMT, Automated reformulation}, + author = {Ewan Davidson and {\"O}zg{\"u}r Akg{\"u}n and {Espasa Arxer}, Joan and Peter Nightingale}, + year = {2020}, + doi = {10.1007/978-3-030-58475-7_9}, + language = {English}, + isbn = {9783030584740}, + publisher = {Springer}, + pages = {143--159}, + editor = {Helmut Simonis}, + booktitle = {Twenty-Sixth International Conference on Principles and Practice of Constraint Programming (CP 2020)}, + address = {Netherlands}, + url = {https://cp2020.a4cp.org/}, +} + +@inproceedings{e74974988ec540bab669443ad10422b3, + title = {Towards improving solution dominance with incomparability conditions: a case-study using Generator Itemset Mining}, + abstract = {Finding interesting patterns is a challenging task in data mining. Constraint based mining is a well-known approach to this, and one for which constraint programming has been shown to be a well-suited and generic framework.Dominance programming has been proposed as an extension that can capture aneven wider class of constraint-based mining problems, by allowing to comparerelations between patterns. In this paper, in addition to specifying a dominancerelation, we introduce the ability to specify an incomparability condition. Usingthese two concepts we devise a generic framework that can do a batch-wise searchthat avoids checking incomparable solutions. We extend the ESSENCE languageand underlying modelling pipeline to support this. We use generator itemset mining problem as a test case and give a declarative specification for that. We alsopresent preliminary experimental results on this specific problem class with a CPsolver backend to show that using the incomparability condition during searchcan improve the efficiency of dominance programming and reduces the need forpost-processing to filter dominated solutions.}, + keywords = {Constraint programming, Constraint modelling, Data mining, Itemset mining, Pattern mining, Dominance programming}, + author = {Gokberk Kocak and {\"O}zg{\"u}r Akg{\"u}n and Ian Miguel and Tias Guns}, + year = {2019}, + month = {sep}, + day = {30}, + language = {English}, + booktitle = {The 18th workshop on Constraint Modelling and Reformulation (ModRef 2019), Proceedings}, + url = {http://cp2019.a4cp.org}, +} + +@article{4b54ed2e79924712bcf8e6fea3211d72, + title = {How people visually represent discrete constraint problems}, + abstract = {Problems such as timetabling or personnel allocation can be modeled and solved using discrete constraint programming languages. However, while existing constraint solving software solves such problems quickly in many cases, these systems involve specialized languages that require significant time and effort to learn and apply. These languages are typically text-based and often difficult to interpret and understand quickly, especially for people without engineering or mathematics backgrounds. Visualization could provide an alternative way to model and understand such problems. Although many visual programming languages exist for procedural languages, visual encoding of problem specifications has not received much attention. Future problem visualization languages could represent problem elements and their constraints unambiguously, but without unnecessary cognitive burdens for those needing to translate their problem's mental representation into diagrams. As a first step towards such languages, we executed a study that catalogs how people represent constraint problems graphically. We studied three groups with different expertise: non-computer scientists, computer scientists and constraint programmers and analyzed their marks on paper (e.g., arrows), gestures (e.g., pointing) and the mappings to problem concepts (e.g., containers, sets). We provide foundations to guide future tool designs allowing people to effectively grasp, model and solve problems through visual representations.}, + keywords = {Problem visualization, Problem modeling, Problem solving, Constraint programming, Visual programming languages}, + author = {Xu Zhu and Miguel Nacenta and {\"O}zg{\"u}r Akg{\"u}n and Nightingale, {Peter William}}, + year = {2019}, + month = {jan}, + day = {24}, + doi = {10.1109/TVCG.2019.2895085}, + language = {English}, + volume = {26}, + pages = {2603 -- 2619}, + journal = {IEEE Transactions on Visualization and Computer Graphics}, + issn = {1077-2626}, + publisher = {IEEE Computer Society}, + number = {8}, +} + +@inproceedings{ce8510eb25d34db48cd8c3c7682edfdf, + title = {Automatic streamlining for constrained optimisation}, + abstract = {Augmenting a base constraint model with additional constraints can strengthen the inferences made by a solver and therefore reduce search effort. We focus on the automatic addition of streamliner constraints, which trade completeness for potentially very significant reduction in search. Recently an automated approach has been proposed, which produces streamliners via a set of streamliner generation rules. This existing automated approach to streamliner generation has two key limitations. First, it outputs a single streamlined model. Second, the approach is limited to satisfaction problems. We remove both limitations by providing a method to produce automatically a portfolio of streamliners, each representing a different balance between three criteria: how aggressively the search space is reduced, the proportion of training instances for which the streamliner admitted at least one solution, and the average reduction in quality of the objective value versus the unstreamlined model. In support of our new method, we present an automated approach to training and test instance generation, and provide several approaches to the selection and application of the streamliners from the portfolio. Empirical results demonstrate drastic improvements both to the time required to find good solutions early and to prove optimality on three problem classes.}, + keywords = {Constraint programming, Streamliners}, + author = {Patrick Spracklen and Nguyen Dang and {\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian}}, + year = {2019}, + doi = {10.1007/978-3-030-30048-7_22}, + language = {English}, + isbn = {9783030300470}, + publisher = {Springer}, + pages = {366--383}, + editor = {Thomas Schiex and {de Givry}, Simon}, + booktitle = {Twenty-Fifth International Conference on Principles and Practice of Constraint Programming (CP 2019)}, + address = {Netherlands}, + url = {http://cp2019.a4cp.org}, +} + +@inproceedings{b1d1e65f1ecf4431bc087cff9ef9b9dd, + title = {Instance generation via generator instances}, + abstract = {Access to good benchmark instances is always desirable when developing new algorithms, new constraint models, or when comparing existing ones. Hand-written instances are of limited utility and are time-consuming to produce. A common method for generating instances is constructing special purpose programs for each class of problems. This can be better than manually producing instances, but developing such instance generators also has drawbacks. In this paper, we present a method for generating graded instances completely automatically starting from a class-level problem specification. A graded instance in our present setting is one which is neither too easy nor too difficult for a given solver. We start from an abstract problem specification written in the Essence language and provide a system to transform the problem specification, via automated type-specific rewriting rules, into a new abstract specification which we call a generator specification. The generator specification is itself parameterised by a number of integer parameters; these are used to characterise a certain region of the parameter space. The solutions of each such generator instance form valid problem instances. We use the parameter tuner irace to explore the space of possible generator parameters, aiming to find parameter values that yield graded instances. We perform an empirical evaluation of our system for five problem classes from CSPlib, demonstrating promising results.}, + keywords = {Automated modelling, Instance generation, Parameter tuning}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Nguyen Dang and Miguel, {Ian} and Salamon, {Andr{\'a}s Z.} and Stone, {Christopher}}, + year = {2019}, + doi = {10.1007/978-3-030-30048-7_1}, + language = {English}, + isbn = {9783030300470}, + publisher = {Springer}, + pages = {3--19}, + editor = {Thomas Schiex and {de Givry}, Simon}, + booktitle = {Twenty-Fifth International Conference on Principles and Practice of Constraint Programming (CP 2019)}, + address = {Netherlands}, + url = {http://cp2019.a4cp.org}, +} + +@inproceedings{921a03b374654acdb3cf8b608e1ef86a, + title = {Closed frequent itemset mining with arbitrary side constraints}, + abstract = {Frequent itemset mining (FIM) is a method for finding regularities in transaction databases. It has several application areas, such as market basket analysis, genome analysis, and drug design. Finding frequent itemsets allows further analysis to focus on a small subset of the data. For large datasets the number of frequent itemsets can also be very large, defeating their purpose. Therefore, several extensions to FIM have been studied, such as adding high-utility (or low-cost) constraints and only finding closed (or maximal) frequent itemsets. This paper presents a constraint programming based approach that combines arbitrary side constraints with closed frequent itemset mining. Our approach allows arbitrary side constraints to be expressed in a high level and declarative language which is then translated automatically for efficient solution by a SAT solver. We compare our approach with state-of-the-art algorithms via the MiningZinc system (where possible) and show significant contributions in terms of performance and applicability.}, + keywords = {Data mining, Pattern mining, Frequent itemset mining, Closed frequent itemset mining, Constraint modelling}, + author = {Gokberk Kocak and {\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian} and Nightingale, {Peter William}}, + year = {2018}, + month = {nov}, + day = {17}, + doi = {10.1109/ICDMW.2018.00175}, + language = {English}, + isbn = {9781538692899}, + pages = {1224 -- 1232}, + editor = {Hanghang Tong and Li, {Zhenhui (Jessie)} and Feida Zhu and Jeffrey Yu}, + booktitle = {2018 IEEE International Conference on Data Mining Workshops (ICDMW)}, + publisher = {IEEE Computer Society}, + address = {United States}, + url = {https://qizhiquan.github.io/OEDM-18/}, +} + +@inproceedings{8f516aac022d4bcdb34e5f63976bdd78, + title = {Memory consistency models using constraints}, + abstract = {Memory consistency models (MCMs) are at the heart of concurrent programming. They represent the behaviour of concurrent programs at the chip level. To test these models small program snippets called litmus test are generated, which show allowed or forbidden behaviour of different MCMs. This paper is showcasing the use of constraint programming to automate the generation and testing of litmus tests for memory consistency models. We produce a few exemplary case studies for two MCMs, namely Sequential Consistency and Total Store Order. These studies demonstrate the flexibility of constrains programming in this context and lay foundation to the direct verification of MCMs against the software facing cache coherence protocols. }, + keywords = {Memory consistency, Concurrent programming, Litmus tests, Constraints programming, Modelling}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Ruth Hoffmann and Susmit Sarkar}, + year = {2018}, + month = {aug}, + day = {27}, + language = {English}, + booktitle = {The Seventeenth Workshop on Constraint Modelling and Reformulation (ModRef 2018), Proceedings}, + url = {http://cp2018.a4cp.org/}, +} + +@inproceedings{56bd918cab3c4a66b6fae5b71f88b1b6, + title = {Modelling Langford's Problem: a viewpoint for search}, + abstract = {The performance of enumerating all solutions to an instance of Langford's Problem is sensitive to the model and the search strategy. In this paper we compare the performance of a large variety of models, all derived from two base viewpoints. We empirically show that a channelled model with a static branching order on one of the viewpoints offers the best performance out of all the options we consider. Surprisingly, one of the base models proves very effective for propagation, while the other provides an effective means of stating a static search order. }, + author = {{\"O}zg{\"u}r Akg{\"u}n and Ian Miguel}, + year = {2018}, + month = {aug}, + day = {27}, + language = {English}, + booktitle = {The Seventeenth Workshop on Constraint Modelling and Reformulation (ModRef 2018), Proceedings}, + url = {http://cp2018.a4cp.org/}, +} + +@inproceedings{413b9d1324cf4826b5ea1a130eb96159, + title = {A framework for constraint based local search using ESSENCE}, + abstract = {Structured Neighbourhood Search (SNS) is a framework for constraint-based local search for problems expressed in the Essence abstract constraint specification language. The local search explores a structured neighbourhood, where each state in the neighbourhood preserves a high level structural feature of the problem. SNS derives highly structured problem-specific neighbourhoods automatically and directly from the features of the ESSENCE specification of the problem. Hence, neighbourhoods can represent important structural features of the problem, such as partitions of sets, even if that structure is obscured in the low-level input format required by a constraint solver. SNS expresses each neighbourhood as a constrained optimisation problem, which is solved with a constraint solver. We have implemented SNS, together with automatic generation of neighbourhoods for high level structures, and report high quality results for several optimisation problems.}, + keywords = {Constraints and SAT: constraint satisfaction, Constraints and SAT: modeling; formulation, Constraints and SAT: constraint ptimisation, Constraints and SAT: Constraints: solvers and tools}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Attieh, {Saad Wasim A} and Gent, {Ian Philip} and Jefferson, {Christopher} and Miguel, {Ian} and Nightingale, {Peter William} and Salamon, {Andr{\'a}s Z.} and Patrick Spracklen and Wetter, {James Patrick}}, + year = {2018}, + month = {jul}, + day = {13}, + doi = {10.24963/ijcai.2018/173}, + language = {English}, + pages = {1242--1248}, + editor = {J{\'e}r{\^o}me Lang}, + booktitle = {Proceedings of the Twenty-Seventh International Joint Conference on Artificial Intelligence}, + publisher = {International Joint Conferences on Artificial Intelligence}, + url = {https://www.ijcai-18.org/}, +} + +@inproceedings{6eef5285c1a0471ebba55a9179298de8, + title = {Automatic generation and selection of streamlined constraint models via Monte Carlo search on a model lattice}, + abstract = {Streamlined constraint reasoning is the addition of uninferred constraints to a constraint model to reduce the search space, while retaining at least one solution. Previously it has been established that it is possible to generate streamliners automatically from abstract constraint specifications in Essence and that effective combinations of streamliners can allow instances of much larger scale to be solved. A shortcoming of the previous approach was the crude exploration of the power set of all combinations using depth and breadth first search. We present a new approach based on Monte Carlo search over the lattice of streamlined models, which efficiently identifies effective streamliner combinations.}, + author = {Patrick Spracklen and {\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian}}, + year = {2018}, + doi = {10.1007/978-3-319-98334-9_24}, + language = {English}, + isbn = {9783319983332}, + publisher = {Springer}, + pages = {362--372}, + editor = {John Hooker}, + booktitle = {Twenty-Fourth International Conference on Principles and Practice of Constraint Programming (CP 2018)}, + address = {Netherlands}, +} + +@article{8a56ff34e5bc4dada3bcc63d391de55e, + title = {Automatically improving constraint models in Savile Row}, + abstract = {When solving a combinatorial problem using Constraint Programming (CP) or Satisfiability (SAT), modelling and formulation are vital and difficult tasks. Even an expert human may explore many alternatives in modelling a single problem. We make a number of contributions in the automated modelling and reformulation of constraint models. We study a range of automated reformulation techniques, finding combinations of techniques which perform particularly well together. We introduce and describe in detail a new algorithm, X-CSE, to perform Associative-Commutative Common Subexpression Elimination (AC-CSE) in constraint problems, significantly improving existing CSE techniques for associative and commutative operators such as +. We demonstrate that these reformulation techniques can be integrated in a single automated constraint modelling tool, called Savile Row, whose architecture we describe. We use Savile Row as an experimental testbed to evaluate each reformulation on a set of 50 problem classes, with 596 instances in total. Our recommended reformulations are well worthwhile even including overheads, especially on harder instances where solver time dominates. With a SAT solver we observed a geometric mean of 2.15 times speedup compared to a straightforward tailored model without recommended reformulations. Using a CP solver, we obtained a geometric mean of 5.96 times speedup for instances taking over 10 seconds to solve.}, + keywords = {Constraint satisfaction, Common subexpression elimination, Modelling, Reformulation, Propositional satisfiability}, + author = {Peter Nightingale and {\"O}zg{\"u}r Akg{\"u}n and Gent, {Ian P.} and Christopher Jefferson and Ian Miguel and Patrick Spracklen}, + year = {2017}, + month = {oct}, + doi = {10.1016/j.artint.2017.07.001}, + language = {English}, + volume = {251}, + pages = {35--61}, + journal = {Artificial Intelligence}, + issn = {0004-3702}, + publisher = {Elsevier}, +} + +@inproceedings{9dd26cea0c54476f8d0418df430909da, + title = {Automatically generating streamlined constraint models with ESSENCE and CONJURE}, + abstract = {Streamlined constraint reasoning is the addition of uninferred constraints to a constraint model to reduce the search space, while retaining at least one solution. Previously, effective streamlined models have been constructed by hand, requiring an expert to examine closely solutions to small instances of a problem class and identify regularities. We present a system that automatically generates many conjectured regularities for a given Essence specification of a problem class by examining the domains of decision variables present in the problem specification. These conjectures are evaluated independently and in conjunction with one another on a set of instances from the specified class via an automated modelling tool-chain comprising of Conjure, Savile Row and Minion. Once the system has identified effective conjectures they are used to generate streamlined models that allow instances of much larger scale to be solved. Our results demonstrate good models can be identified for problems in combinatorial design, Ramsey theory, graph theory and group theory - often resulting in order of magnitude speed-ups.}, + author = {James Wetter and {\"O}zg{\"u}r Akg{\"u}n and Ian Miguel}, + year = {2015}, + month = {aug}, + day = {13}, + doi = {10.1007/978-3-319-23219-5_34}, + language = {English}, + isbn = {9783319232188}, + publisher = {Springer}, + pages = {480--496}, + editor = {Gilles Pesant}, + booktitle = {Twenty-First International Conference on Principles and Practice of Constraint Programming (CP 2015)}, + address = {Netherlands}, +} + +@inbook{dd9347655a2d45f2bef81ebcb8778daa, + title = {Breaking conditional symmetry in automated constraint modelling with CONJURE}, + abstract = {Many constraint problems contain symmetry, which can lead to redundant search. If a partial assignment is shown to be invalid, we are wasting time if we ever consider a symmetric equivalent of it. A particularly important class of symmetries are those introduced by the constraint modelling process: model symmetries. We present a systematic method by which the automated constraint modelling tool CONJURE can break conditional symmetry as it enters a model during refinement. Our method extends, and is compatible with, our previous work on automated symmetry breaking in CONJURE. The result is the automatic and complete removal of model symmetries for the entire problem class represented by the input specification. This applies to arbitrarily nested conditional symmetries and represents a significant step forward for automated constraint modelling.}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Ian Gent and Chris Jefferson and Ian Miguel and Peter Nightingale}, + year = {2014}, + month = {aug}, + day = {18}, + doi = {10.3233/978-1-61499-419-0-3}, + language = {English}, + isbn = {9781614994183}, + volume = {263}, + publisher = {IOS Press}, + pages = {3--8}, + editor = {Torsten Schaub and Gerhard Friedrich and Barry O'Sullivan}, + booktitle = {ECAI 2014}, + address = {Netherlands}, +} + +@misc{0ef98e79e0bd426eb92227f281f4ee4e, + title = {Extensible automated constraint modelling via refinement of abstract problem specifications}, + abstract = {Constraint Programming (CP) is a powerful technique for solving large-scale combinatorial (optimisation) problems. Constraint solving a given problem proceeds in two phases: modelling and solving. Effective modelling has an huge impact on the performance of the solving process. This thesis presents a framework in which the users are not required to make modelling decisions, concrete CP models are automatically generated from a high level problem specification. In this framework, modelling decisions are encoded as generic rewrite rules applicable to many different problems. First, modelling decisions are divided into two broad categories. This categorisation guides the automation of each kind of modelling decision and also leads us to the architecture of the automated modelling tool. Second, a domain-specific declarative rewrite rule language is introduced. Thanks to the rule language, automated modelling transformations and the core system are decoupled. The rule language greatly increases the extensibility and maintainability of the rewrite rules database. The database of rules represents the modelling knowledge acquired after analysis of expert models. This database must be easily extensible to best benefit from the active research on constraint modelling. Third, the automated modelling system Conjure is implemented as a realisation of these ideas; having an implementation enables empirical testing of the quality of generated models. The ease with which rewrite rules can be encoded to produce good models is shown. Furthermore, thanks to the generality of the system, one needs to add a very small number of rules to encode many transformations. Finally, the work is evaluated by comparing the generated models to expert models found in the literature for a wide variety of benchmark problems. This evaluation confirms the hypothesis that expert models can be automatically generated starting from high level problem specifications. An method of automatically identifying good models is also presented. In summary, this thesis presents a framework to enable the automatic generation of efficient constraint models from problem specifications. It provides a pleasant environment for both problem owners and modelling experts. Problem owners are presented with a fully automated constraint solution process, once they have a precise description of their problem. Modelling experts can now encode their precious modelling expertise as rewrite rules instead of merely modelling a single problem; resulting in reusable constraint modelling knowledge.}, + author = {{\"O}zg{\"u}r Akg{\"u}n}, + year = {2014}, + language = {English}, + publisher = {University of St Andrews}, + url = {http://hdl.handle.net/10023/6547}, +} + +@inproceedings{ec7a3b357c8b4af4ba335c281ea87ba3, + title = {An Automated Constraint Modelling and Solving Toolchain}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Gent, {Ian Philip} and Hussain, {Bilal Syed} and Jefferson, {Christopher} and Lars Kotthoff and Miguel, {Ian} and Nightingale, {Peter William}}, + year = {2013}, + language = {English}, + booktitle = {ARW 2013 - 20th Automated Reasoning Workshop}, + url = {http://staff.computing.dundee.ac.uk/katya/arw13/papers/paper_13.pdf}, +} + +@inproceedings{dfc0e4b721844d9d801fb27c264086ff, + title = {Automated Modelling and Model Selection in Constraint Programming: Current Achievements and Future Directions}, + abstract = {In attacking the modelling bottleneck, we present current achievements in automated model generation and selection in constraint programming (CP). We also discuss promising future directions in automated model selection, which we believe are of key importance in enabling successful automated modelling in CP.}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Jefferson, {Christopher} and Miguel, {Ian}}, + year = {2013}, + language = {English}, + booktitle = {COSpeL: The first Workshop on Domain Specific Languages in Combinatorial Optimization}, + url = {http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.388.5906&rep=rep1&type=pdf}, +} + +@inproceedings{066dfdbd563a40c68df2eaae83a342cd, + title = {Automated Symmetry Breaking and Model Selection in Conjure}, + abstract = {Constraint modelling is widely recognised as a key bottleneck in applying constraint solving to a problem of interest. The Conjure automated constraint modelling system addresses this problem by automatically refining constraint models from problem specifications written in the Essence language. Essence provides familiar mathematical concepts like sets, functions and relations nested to any depth. To date, Conjure has been able to produce a set of alternative model kernels (i.e. without advanced features such as symmetry breaking or implied constraints) for a given specification. The first contribution of this paper is a method by which Conjure can break symmetry in a model as it is introduced by the modelling process. This works at the problem class level, rather than just individual instances, and does not require an expensive detection step after the model has been formulated. This allows Conjure to produce a higher quality set of models. A further limitation of Conjure has been the lack of a mechanism to select among the models it produces. The second contribution of this paper is to present two such mechanisms, allowing effective models to be chosen automatically.}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Gent, {Ian Philip} and Hussain, {Bilal Syed} and Jefferson, {Christopher} and Lars Kotthoff and Miguel, {Ian} and Nightingale, {Peter William}}, + year = {2013}, + doi = {10.1007/978-3-642-40627-0_11}, + language = {English}, + booktitle = {CP 2013 - Principles and Practice of Constraint Programming, 19th International Conference}, +} + +@inproceedings{ed9a3c921f40425b964217636a5af521, + title = {Extensible Automated Constraint Modelling}, + abstract = {In constraint solving, a critical bottleneck is the formulation of an effective constraint model of a given problem. The CONJURE system described in this paper, a substantial step forward over prototype versions of CONJURE previously reported, makes a valuable contribution to the automation of constraint modelling by automatically producing constraint models from their specifications in the abstract constraint specification language ESSENCE. A set of rules is used to refine an abstract specification into a concrete constraint model. We demonstrate that this set of rules is readily extensible to increase the space of possible constraint models CONJURE can produce. Our empirical results confirm that CONJURE can reproduce successfully the kernels of the constraint models of 32 benchmark problems found in the literature.}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian} and Jefferson, {Christopher} and Frisch, {Alan M.} and Brahim Hnich}, + year = {2011}, + language = {English}, + isbn = {978-157735508-3}, + pages = {4--11}, + booktitle = {Proceedings of the Twenty-Fifth AAAI Conference on Artificial Intelligence}, + publisher = {AAAI Press}, + url = {http://www.aaai.org/ocs/index.php/AAAI/AAAI11/paper/view/3687}, +} + +@inproceedings{ecb8ca42a8eb4098a685daa84c821da3, + title = {The Open Stacks Problem: An automated modelling case study}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian} and Jefferson, {Christopher}}, + year = {2011}, + language = {English}, + pages = {15}, + booktitle = {ERCIM Workshop on Constraint Solving and Constraint Logic Programming}, + url = {https://csclp2011.cs.st-andrews.ac.uk/csclp2011proceedings.pdf#page=21}, +} + +@inbook{aee46a0c83b14b25b687813677855191, + title = {Conjure Revisited: Towards Automated Constraint Modelling}, + abstract = {Automating the constraint modelling process is one of thekey challenges facing the constraints field, and one of the principal obstaclespreventing widespread adoption of constraint solving. This paperfocuses on the refinement-based approach to automated modelling, wherea user specifies a problem in an abstract constraint specification languageand it is then automatically refined into a constraint model. In particular,we revisit the Conjure system that first appeared in prototype formin 2005 and present a new implementation with a much greater coverageof the specification language Essence}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Brahim Hnich and Jefferson, {Christopher} and Miguel, {Ian}}, + year = {2010}, + language = {English}, + booktitle = {ModRef 2010 - The 9th International Workshop on Constraint Modelling and Reformulation}, + publisher={}, + url = {https://it.uu.se/research/group/astra/ModRef10/papers/{\"O}zg{\"u}r%20Akg{\"u}n,%20Alan%20Frisch,%20Brahim%20Hnich,%20Chris%20Jefferson%20and%20Ian%20Miguel.%20%20Conjure%20Revisited,%20Towards%20Automated%20Constraint%20Modelling%20-%20ModRef%202010.pdf}, +} + +@inproceedings{586c88ee08c1404391bc48c26d66e523, + title = {Refining Portfolios of Constraint Models with Conjure}, + abstract = {Modelling is one of the key challenges in Constraint Programming(CP). There are many ways in which to model a given problem.The model chosen has a substantial effect on the solving efficiency. Itis difficult to know what the best model is. To overcome this problem wetake a portfolio approach: Given a high level specification of a combinatorialproblem, we employ non-deterministic rewrite techniques to obtaina portfolio of constraint models. The specification language (Essence)does not require humans to make modelling decisions; therefore it helpsus remove the modelling bottleneck.}, + author = {{\"O}zg{\"u}r Akg{\"u}n}, + year = {2010}, + language = {English}, + pages = {1--6}, + booktitle = {CP 2010 - Principles and Practice of Constraint Programming, 16th International Conference, Doctoral Program}, + url = {https://s3.amazonaws.com/academia.edu.documents/30783376/DP10Proceedings.pdf?AWSAccessKeyId=AKIAIWOWYYGZ2Y53UL3A&Expires=1533056575&Signature=x2Slk0PdJ3tZOc%2FvWV%2FHOkIGgCc%3D&response-content-disposition=inline%3B%20filename%3DRefining_Portfolios_of_Constraint_Models.pdf#page=6}, +} + + diff --git a/docs/requirements.txt b/docs/requirements.txt index 719babec34..2261578874 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 -sphinx_rtd_theme==1.0.0 +sphinx_rtd_theme==1.2.0 +sphinx==6.1.3 diff --git a/docs/tutorials/BIBD.rst b/docs/tutorials/BIBD.rst index 18738ca504..b5b96f9caf 100644 --- a/docs/tutorials/BIBD.rst +++ b/docs/tutorials/BIBD.rst @@ -189,7 +189,7 @@ There is a nicer way to do the final constraint, instead of using a second ``for -Providing information in the find statements rather than as constraints often leads to better perform. Essence provides :ref:`attributes` which can be attached to find statements . One of them is size k, which tells Essence that a set is of size k. In our model the number of farms and the number of crops per farm are in effect the size of the crop_assignment set and the size of the sets within the crop_assignment set. Therefore we can move these definitions out of the list of constraints and into the find statement. +Providing information in the find statements rather than as constraints often leads to better perform. Essence provides domain attributes which can be attached to find statements . One of them is size k, which tells Essence that a set is of size k. In our model the number of farms and the number of crops per farm are in effect the size of the crop_assignment set and the size of the sets within the crop_assignment set. Therefore we can move these definitions out of the list of constraints and into the find statement. .. code-block:: essence From 7e971d2229c2b3f27e8e0f1ff8723edc3c1c0a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 15:20:50 +0000 Subject: [PATCH 154/378] update url --- docs/refs.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/refs.bib b/docs/refs.bib index d85c9b9d1e..558e50100a 100644 --- a/docs/refs.bib +++ b/docs/refs.bib @@ -459,7 +459,7 @@ @inbook{aee46a0c83b14b25b687813677855191 language = {English}, booktitle = {ModRef 2010 - The 9th International Workshop on Constraint Modelling and Reformulation}, publisher={}, - url = {https://it.uu.se/research/group/astra/ModRef10/papers/{\"O}zg{\"u}r%20Akg{\"u}n,%20Alan%20Frisch,%20Brahim%20Hnich,%20Chris%20Jefferson%20and%20Ian%20Miguel.%20%20Conjure%20Revisited,%20Towards%20Automated%20Constraint%20Modelling%20-%20ModRef%202010.pdf}, + url = {https://www.it.uu.se/research/group/astra/ModRef10/papers/Ozgur%20Akgun,%20Alan%20Frisch,%20Brahim%20Hnich,%20Chris%20Jefferson%20and%20Ian%20Miguel.%20%20Conjure%20Revisited,%20Towards%20Automated%20Constraint%20Modelling%20-%20ModRef%202010.pdf}, } @inproceedings{586c88ee08c1404391bc48c26d66e523, From 38f10a6ad758e0609a617ab1c902c6a7210d2d47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 15:41:35 +0000 Subject: [PATCH 155/378] add .readthedocs.yaml --- .readthedocs.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..e466f8c3e9 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,20 @@ + +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.11" + +sphinx: + configuration: docs/conf.py + +formats: + - pdf + - epub + +python: + install: + - requirements: docs/requirements.txt From c432b4a45aba6e5f16122a438ceb47164e7aee4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 15:50:36 +0000 Subject: [PATCH 156/378] update url --- docs/refs.bib | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/refs.bib b/docs/refs.bib index 558e50100a..5ad55fa185 100644 --- a/docs/refs.bib +++ b/docs/refs.bib @@ -470,7 +470,8 @@ @inproceedings{586c88ee08c1404391bc48c26d66e523 language = {English}, pages = {1--6}, booktitle = {CP 2010 - Principles and Practice of Constraint Programming, 16th International Conference, Doctoral Program}, - url = {https://s3.amazonaws.com/academia.edu.documents/30783376/DP10Proceedings.pdf?AWSAccessKeyId=AKIAIWOWYYGZ2Y53UL3A&Expires=1533056575&Signature=x2Slk0PdJ3tZOc%2FvWV%2FHOkIGgCc%3D&response-content-disposition=inline%3B%20filename%3DRefining_Portfolios_of_Constraint_Models.pdf#page=6}, + url = {https://arxiv.org/pdf/1109.1774.pdf}, +}, } From 9915f7c045dd414c23c149a0f9fa8cbbceedb6bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 15 Mar 2023 16:24:25 +0000 Subject: [PATCH 157/378] pete's name in bib --- docs/refs.bib | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/refs.bib b/docs/refs.bib index 5ad55fa185..c546189849 100644 --- a/docs/refs.bib +++ b/docs/refs.bib @@ -214,7 +214,7 @@ @article{4b54ed2e79924712bcf8e6fea3211d72 title = {How people visually represent discrete constraint problems}, abstract = {Problems such as timetabling or personnel allocation can be modeled and solved using discrete constraint programming languages. However, while existing constraint solving software solves such problems quickly in many cases, these systems involve specialized languages that require significant time and effort to learn and apply. These languages are typically text-based and often difficult to interpret and understand quickly, especially for people without engineering or mathematics backgrounds. Visualization could provide an alternative way to model and understand such problems. Although many visual programming languages exist for procedural languages, visual encoding of problem specifications has not received much attention. Future problem visualization languages could represent problem elements and their constraints unambiguously, but without unnecessary cognitive burdens for those needing to translate their problem's mental representation into diagrams. As a first step towards such languages, we executed a study that catalogs how people represent constraint problems graphically. We studied three groups with different expertise: non-computer scientists, computer scientists and constraint programmers and analyzed their marks on paper (e.g., arrows), gestures (e.g., pointing) and the mappings to problem concepts (e.g., containers, sets). We provide foundations to guide future tool designs allowing people to effectively grasp, model and solve problems through visual representations.}, keywords = {Problem visualization, Problem modeling, Problem solving, Constraint programming, Visual programming languages}, - author = {Xu Zhu and Miguel Nacenta and {\"O}zg{\"u}r Akg{\"u}n and Nightingale, {Peter William}}, + author = {Xu Zhu and Miguel Nacenta and {\"O}zg{\"u}r Akg{\"u}n and Nightingale, {Peter}}, year = {2019}, month = {jan}, day = {24}, @@ -266,7 +266,7 @@ @inproceedings{921a03b374654acdb3cf8b608e1ef86a title = {Closed frequent itemset mining with arbitrary side constraints}, abstract = {Frequent itemset mining (FIM) is a method for finding regularities in transaction databases. It has several application areas, such as market basket analysis, genome analysis, and drug design. Finding frequent itemsets allows further analysis to focus on a small subset of the data. For large datasets the number of frequent itemsets can also be very large, defeating their purpose. Therefore, several extensions to FIM have been studied, such as adding high-utility (or low-cost) constraints and only finding closed (or maximal) frequent itemsets. This paper presents a constraint programming based approach that combines arbitrary side constraints with closed frequent itemset mining. Our approach allows arbitrary side constraints to be expressed in a high level and declarative language which is then translated automatically for efficient solution by a SAT solver. We compare our approach with state-of-the-art algorithms via the MiningZinc system (where possible) and show significant contributions in terms of performance and applicability.}, keywords = {Data mining, Pattern mining, Frequent itemset mining, Closed frequent itemset mining, Constraint modelling}, - author = {Gokberk Kocak and {\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian} and Nightingale, {Peter William}}, + author = {Gokberk Kocak and {\"O}zg{\"u}r Akg{\"u}n and Miguel, {Ian} and Nightingale, {Peter}}, year = {2018}, month = {nov}, day = {17}, @@ -310,7 +310,7 @@ @inproceedings{413b9d1324cf4826b5ea1a130eb96159 title = {A framework for constraint based local search using ESSENCE}, abstract = {Structured Neighbourhood Search (SNS) is a framework for constraint-based local search for problems expressed in the Essence abstract constraint specification language. The local search explores a structured neighbourhood, where each state in the neighbourhood preserves a high level structural feature of the problem. SNS derives highly structured problem-specific neighbourhoods automatically and directly from the features of the ESSENCE specification of the problem. Hence, neighbourhoods can represent important structural features of the problem, such as partitions of sets, even if that structure is obscured in the low-level input format required by a constraint solver. SNS expresses each neighbourhood as a constrained optimisation problem, which is solved with a constraint solver. We have implemented SNS, together with automatic generation of neighbourhoods for high level structures, and report high quality results for several optimisation problems.}, keywords = {Constraints and SAT: constraint satisfaction, Constraints and SAT: modeling; formulation, Constraints and SAT: constraint ptimisation, Constraints and SAT: Constraints: solvers and tools}, - author = {{\"O}zg{\"u}r Akg{\"u}n and Attieh, {Saad Wasim A} and Gent, {Ian Philip} and Jefferson, {Christopher} and Miguel, {Ian} and Nightingale, {Peter William} and Salamon, {Andr{\'a}s Z.} and Patrick Spracklen and Wetter, {James Patrick}}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Attieh, {Saad Wasim A} and Gent, {Ian Philip} and Jefferson, {Christopher} and Miguel, {Ian} and Nightingale, {Peter} and Salamon, {Andr{\'a}s Z.} and Patrick Spracklen and Wetter, {James Patrick}}, year = {2018}, month = {jul}, day = {13}, @@ -401,7 +401,7 @@ @misc{0ef98e79e0bd426eb92227f281f4ee4e @inproceedings{ec7a3b357c8b4af4ba335c281ea87ba3, title = {An Automated Constraint Modelling and Solving Toolchain}, - author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Gent, {Ian Philip} and Hussain, {Bilal Syed} and Jefferson, {Christopher} and Lars Kotthoff and Miguel, {Ian} and Nightingale, {Peter William}}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Gent, {Ian Philip} and Hussain, {Bilal Syed} and Jefferson, {Christopher} and Lars Kotthoff and Miguel, {Ian} and Nightingale, {Peter}}, year = {2013}, language = {English}, booktitle = {ARW 2013 - 20th Automated Reasoning Workshop}, @@ -421,7 +421,7 @@ @inproceedings{dfc0e4b721844d9d801fb27c264086ff @inproceedings{066dfdbd563a40c68df2eaae83a342cd, title = {Automated Symmetry Breaking and Model Selection in Conjure}, abstract = {Constraint modelling is widely recognised as a key bottleneck in applying constraint solving to a problem of interest. The Conjure automated constraint modelling system addresses this problem by automatically refining constraint models from problem specifications written in the Essence language. Essence provides familiar mathematical concepts like sets, functions and relations nested to any depth. To date, Conjure has been able to produce a set of alternative model kernels (i.e. without advanced features such as symmetry breaking or implied constraints) for a given specification. The first contribution of this paper is a method by which Conjure can break symmetry in a model as it is introduced by the modelling process. This works at the problem class level, rather than just individual instances, and does not require an expensive detection step after the model has been formulated. This allows Conjure to produce a higher quality set of models. A further limitation of Conjure has been the lack of a mechanism to select among the models it produces. The second contribution of this paper is to present two such mechanisms, allowing effective models to be chosen automatically.}, - author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Gent, {Ian Philip} and Hussain, {Bilal Syed} and Jefferson, {Christopher} and Lars Kotthoff and Miguel, {Ian} and Nightingale, {Peter William}}, + author = {{\"O}zg{\"u}r Akg{\"u}n and Frisch, {Alan M} and Gent, {Ian Philip} and Hussain, {Bilal Syed} and Jefferson, {Christopher} and Lars Kotthoff and Miguel, {Ian} and Nightingale, {Peter}}, year = {2013}, doi = {10.1007/978-3-642-40627-0_11}, language = {English}, From 32987710d132ad84fd25d431ed373a02757516fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Mar 2023 12:09:22 +0000 Subject: [PATCH 158/378] trying without the rtd.yml file --- .readthedocs.yaml | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml deleted file mode 100644 index e466f8c3e9..0000000000 --- a/.readthedocs.yaml +++ /dev/null @@ -1,20 +0,0 @@ - -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details - -version: 2 - -build: - os: ubuntu-22.04 - tools: - python: "3.11" - -sphinx: - configuration: docs/conf.py - -formats: - - pdf - - epub - -python: - install: - - requirements: docs/requirements.txt From d69bb4eccc59ca4aca00c6f2ba6f290207666935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Mar 2023 12:12:25 +0000 Subject: [PATCH 159/378] and reverting sphinx_rtd_theme version --- docs/requirements.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 2261578874..719babec34 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,3 @@ sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 -sphinx_rtd_theme==1.2.0 -sphinx==6.1.3 +sphinx_rtd_theme==1.0.0 From cffd8e7bd7777f9cad369ada82eedfed3ae16a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Mar 2023 12:30:17 +0000 Subject: [PATCH 160/378] just the yml --- .readthedocs.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..aefe3ee785 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,18 @@ + +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3.11" + +sphinx: + configuration: docs/conf.py + +formats: all + +python: + install: + - requirements: docs/requirements.txt From b1d26b8c1a5aa4726f3c59edfe4a58964cf84057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Mar 2023 12:47:59 +0000 Subject: [PATCH 161/378] configuring html_theme_options explicitly --- docs/conf.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 52007d99e3..225ebae233 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -124,13 +124,28 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -if not on_rtd: - html_theme = 'sphinx_rtd_theme' +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -#html_theme_options = {} +html_theme_options = { + 'analytics_id': 'G-6T6SSFK9G1', + 'analytics_anonymize_ip': False, + 'logo_only': False, + 'display_version': True, + 'prev_next_buttons_location': 'bottom', + 'style_external_links': False, + # 'vcs_pageview_mode': '', + # 'style_nav_header_background': 'white', + # Toc options + 'collapse_navigation': True, + 'sticky_navigation': True, + 'navigation_depth': 4, + 'includehidden': True, + 'titles_only': False +} + # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] From 1286bd0aab8682cd7a8f21294d153012e93252e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 16 Mar 2023 12:56:41 +0000 Subject: [PATCH 162/378] updating sphinx versions --- docs/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 719babec34..2261578874 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 -sphinx_rtd_theme==1.0.0 +sphinx_rtd_theme==1.2.0 +sphinx==6.1.3 From baad30b592592e8cc11cea85ede9fe59d54758fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 16 Mar 2023 21:01:55 +0000 Subject: [PATCH 163/378] zenodo wants this file --- CITATION.cff | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 CITATION.cff diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 0000000000..694855bd67 --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,9 @@ +cff-version: 1.1.0 +message: "If you want to cite Conjure, please cite it as below." +authors: + - family-names: Akgün + given-names: Özgür + orcid: https://orcid.org/0000-0001-9519-938X +title: Conjure: The Automated Constraint Modelling Tool +version: v2.4.0 +date-released: 2022-11-15 From 5ddb92392ad7a05bf2593129b3ae156cce7141c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 16 Mar 2023 21:04:01 +0000 Subject: [PATCH 164/378] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 8ee4b6b317..e8ae984e2f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2009-2022 Özgür Akgün +Copyright 2009-2023 Özgür Akgün School of Computer Science, University of St Andrews All rights reserved. From 59710328581801ea8d48efe8093f125af6682b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 16 Mar 2023 21:57:00 +0000 Subject: [PATCH 165/378] add link to zenodo --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2a3f164f93..05fec711a8 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,17 @@ Conjure is an automated modelling tool for Constraint Programming. This repository contains the development version of the tool. -For release versions please see the [releases](https://github.com/conjure-cp/conjure/releases) section. -[![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause) +- For release versions please see the [releases](https://github.com/conjure-cp/conjure/releases) section. +- If you want to cite Conjure, use the instructions on Zenodo [![DOI](https://zenodo.org/badge/57966170.svg)](https://zenodo.org/badge/latestdoi/57966170) +- Conjure's license is BSD3 [![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause) +- Documentation is hosted on Read the Docs [![Documentation Status](https://readthedocs.org/projects/conjure/badge/?version=latest)](https://conjure.readthedocs.io) +- Continuous testing on Github actions + - [![Building on all platforms](https://github.com/conjure-cp/conjure/actions/workflows/build.yml/badge.svg)](https://github.com/conjure-cp/conjure/actions/workflows/build.yml) + - [![Running all tests](https://github.com/conjure-cp/conjure/actions/workflows/test.yml/badge.svg)](https://github.com/conjure-cp/conjure/actions/workflows/test.yml) + - Code coverage report available at: https://conjure-cp.github.io/conjure-code-coverage -[![Documentation Status](https://readthedocs.org/projects/conjure/badge/?version=latest)](https://conjure.readthedocs.io) -[![Building on all platforms](https://github.com/conjure-cp/conjure/actions/workflows/build.yml/badge.svg)](https://github.com/conjure-cp/conjure/actions/workflows/build.yml) - -[![Running all tests](https://github.com/conjure-cp/conjure/actions/workflows/test.yml/badge.svg)](https://github.com/conjure-cp/conjure/actions/workflows/test.yml) ## Documentation From 9b85639ef5ca687993750afcd42c8f11a1a71f6a Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Sat, 1 Apr 2023 15:34:28 +0100 Subject: [PATCH 166/378] fix #522, also clarify text --- docs/tutorials/LabelledConnectedGraphs.rst | 90 ++++++++++++---------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/docs/tutorials/LabelledConnectedGraphs.rst b/docs/tutorials/LabelledConnectedGraphs.rst index 916f92d71e..bb3fc7a6e2 100644 --- a/docs/tutorials/LabelledConnectedGraphs.rst +++ b/docs/tutorials/LabelledConnectedGraphs.rst @@ -4,13 +4,13 @@ Labelled connected graphs Author: András Salamon (with thanks to Roy Dyckhoff for proofreading) -We now illustrate the use of Conjure for a more realistic modelling task, to enumerate all labelled connected graphs. -The number of labelled connected graphs over a fixed set of n distinct labels grows quickly; this is `OEIS sequence A001187 `_. +We illustrate the use of Conjure to enumerate all labelled connected graphs. +The number of labelled connected graphs over a fixed set of ``n`` distinct labels grows quickly; this is `OEIS sequence A001187 `_. We first need to decide how to represent graphs. A standard representation is to list the edges. One natural representation for each edge is as a set of two distinct vertices. -Vertices of the graph are labelled with integers between 1 and n, and each vertex is regarded as part of the graph, whether there is some edge involving that vertex or not. +Vertices of the graph are labelled with integers between 1 and ``n``, and each vertex is regarded as part of the graph, whether there is some edge involving that vertex or not. .. code-block:: essence @@ -18,8 +18,8 @@ Vertices of the graph are labelled with integers between 1 and n, and each verte letting G be {{1,2},{2,3},{3,4}} In this specification, we declare two aliases. -The number of vertices n is first defined as 4. -Then G is defined as a set of edges. +The number of vertices ``n`` is first defined as 4. +Then ``G`` is defined as a set of edges. This specification is saved in a file ``path-4.param`` that we refer to later. We should also have a different graph that is not connected: @@ -38,12 +38,12 @@ Model 1: distance matrix ~~~~~~~~~~~~~~~~~~~~~~~~ In our first attempt, we use a matrix of distances. -Each entry ``reach[u,v]`` represents the length of a shortest path from u to v, or n if there is no path from u to v. +Each entry ``reach[u,v]`` represents the length of a shortest path from ``u`` to ``v``, or ``n`` if there is no path from ``u`` to ``v``. To enforce this property, we use several constraints, one for each possible length; there are four ranges of values we need to cover. -A distance of 0 happens when u and v are the same vertex. -A distance of 1 happens when there is an edge from u to v. -When the distance is greater than 1 but less than n, then there must be some vertex that is a neighbour of u from which v is reachable in one less step. -Finally, the distance of n is used when no neighbour of u can reach v (and in this case, the neighbours all have distance of n to v as well). +A distance of 0 happens when ``u`` and ``v`` are the same vertex. +A distance of 1 happens when there is an edge from ``u`` to ``v``. +When the distance is greater than 1 but less than ``n``, then there must be some vertex that is a neighbour of ``u`` from which ``v`` is reachable in one less step. +Finally, the distance of ``n`` is used when no neighbour of ``u`` can reach ``v`` (and in this case, the neighbours all have distance of ``n`` to ``v`` as well). .. code-block:: essence @@ -63,10 +63,10 @@ Finally, the distance of n is used when no neighbour of u can reach v (and in th connected = (forAll u,v : vertices . reach[u,v] < n) This is stored in file ``gc1.essence``. -The values of n and G will be specified later as parameters, such as via the ``path-4.param`` or ``disconnected-4.param`` files. +The values of ``n`` and ``G`` will be specified later as parameters, such as via the ``path-4.param`` or ``disconnected-4.param`` files. In the model, first the matrix ``reach`` is specified by imposing the four conditions that we mentioned. -Finally a Boolean variable is used to conveniently indicate whether the ``reach`` matrix represents a connected graph or not; in a connected graph every vertex is reachable from every other vertex. +Finally a Boolean variable ``connected`` is used to conveniently indicate whether the ``reach`` matrix represents a connected graph or not; in a connected graph every vertex is reachable from every other vertex. Let's now try this model with the two graphs defined so far. @@ -120,8 +120,8 @@ Model 2: reachability matrix ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In the following model, stored as file ``gc2.essence``, the reachability matrix uses Boolean values for the distances rather than integers, with ``true`` representing reachable and ``false`` unreachable. -Each entry ``reach[u,v]`` represents whether it is possible to reach v by some path that starts at u. -This is modelled as the disjunction of three conditions: u is reachable from itself, any neighbour of u is reachable from it, and if v is not a neighbour of u then there should be a neighbour w of u so that v is reachable from w. +Each entry ``reach[u,v]`` represents whether it is possible to reach ``v`` by some path that starts at ``u``. +This is modelled as the disjunction of three conditions: ``u`` is reachable from itself, any neighbour of ``u`` is reachable from it, and if ``v`` is not a neighbour of ``u`` then there should be a neighbour ``w`` of ``u`` so that ``v`` is reachable from ``w``. .. code-block:: essence @@ -170,6 +170,8 @@ In contrast, in the disconnected graph there are some false entries: $ _ _ T T This model takes about half as long as the previous one, but is still rather slow for large graphs. +Moreover, this model fails to capture all the constraints: it will always allow the all-true reachability matrix as one solution, and so it will potentially always consider every graph to be connected. +The reader is encouraged to think about this flaw in the model. Model 3: structured reachability matrices @@ -180,9 +182,9 @@ It is possible to improve performance by guiding the search to consider nearby v The following model ``gc3.essence`` uses additional decision variables to more precisely control how the desired reachability matrix should be computed. There are multiple reachability matrices. Each corresponds to a specific maximum distance. -The first n by n matrix ``reach[0]`` expresses reachability in one step, and is simply the adjacency matrix of the graph. -The entry ``reach[k,u,v]`` expresses whether v is reachable from u via a path of length at most 2**k. -If a vertex v is reachable from some vertex u, then it can be reached in at most n-1 steps. +The first ``n`` by ``n`` matrix ``reach[0]`` expresses reachability in one step, and is simply the adjacency matrix of the graph. +The entry ``reach[k,u,v]`` expresses whether ``v`` is reachable from ``u`` via a path of length at most ``2**k``. +If a vertex ``v`` is reachable from some vertex ``u``, then it can be reached in at most ``n-1`` steps. (Note: in this model a vertex cannot reach itself in zero steps, so a graph with a single vertex is not regarded as connected.) .. code-block:: essence @@ -200,12 +202,14 @@ If a vertex v is reachable from some vertex u, then it can be reached in at most such that connected = (forAll u,v : vertices . reach[m,u,v]) -The variable m is used to compute the number of matrices that are required; this is the smallest integer that is not less than the base-2 logarithm of n. -(This is computed by discrete integration as Conjure currently does not support a logarithm operator; this may change in a future release.) +The variable ``m`` is used to compute the number of matrices that are required; this is the smallest integer that is not less than the base-2 logarithm of ``n``. +(This is computed by discrete integration as Essence currently does not have a logarithm operator.) The value of ``connected`` is then based on whether whether ``reach[m]`` contains any false entries. -This model is the fastest yet, but it generates intermediate distance matrices, each containing n**2 variables. -We omit the solutions here, but they show how the number of true values increases, until reaching a fixed point. +This model performs well for small graphs, but it generates intermediate distance matrices, each containing ``n**2`` variables. +For large graphs the number of intermediate variables used to represent these intermediate distance matrices grows quickly, which causes Savile Row to run out of memory. +We omit the solutions here. +The sequence of solutions shows how the number of true values in the reachability matrices increases, until reaching a fixed point. Model 4: connected component @@ -218,11 +222,11 @@ For sparse graphs, and especially those with many vertices, it is therefore impo The next model ``gc4.essence`` uses this insight, and is indeed faster than any of the three previous ones. The model builds on the fact that a graph is disconnected if, and only if, its vertices can be partitioned into two sets, with no edges between vertices in the two different sets. -Here C is used to indicate a subset of the vertices. +Here ``C`` is used to indicate a subset of the vertices. There are three constraints. -The first is that C must contain some vertex. -The second is that C must be a connected component; each vertex in C is connected to some other vertex in C (unless C only contains a single vertex). -The third is that the value of ``connected`` is determined by whether it is possible to find some vertex that is not in C. +The first is that ``C`` must contain some vertex. +The second is that ``C`` must be a connected component; each vertex in ``C`` is connected to some other vertex in ``C`` (unless ``C`` only contains a single vertex). +The third is that the value of ``connected`` is determined by whether it is possible to find some vertex that is not in ``C``. The following is an attempt to capture these constraints in an Essence specification. .. code-block:: essence @@ -245,7 +249,7 @@ This is the solution for ``disconnected-4.param``: letting connected be false Model ``gc4.essence`` yields a solution quickly. -Unfortunately it can also give incorrect results: letting C be the set of all vertices and letting ``connected`` be true is always a solution, whether the graph is connected or not. +Unfortunately, like Model 2 above, it can also give incorrect results: letting ``C`` be the set of all vertices and letting ``connected`` be true is always a solution, whether the graph is connected or not. This can be confirmed by asking Conjure to generate all solutions: .. code-block:: essence @@ -262,28 +266,31 @@ This gives two solutions, the one above and the following one: It is actually possible to ensure that this "solution" is never the first one generated, and then to ask Conjure to only look for the first solution; if the graph is not connected then the first solution will correctly indicate its status. However, this relies on precise knowledge of the ordering heuristics being employed at each stage of the toolchain. -The problem with this fourth specification is that it only captures the property that C is a union of connected components. +The problem with this fourth specification is that it only captures the property that ``C`` is a union of connected components. We would need to add additional constraints to enforce the property that C should contain only one connected component. This can be done, but is not especially efficent. +For the mathematically minded, the problem is that connectivity is not expressible in monadic existential second order logic, forcing us to express the problem differently, such as in non-monadic existential or monadic universal second order logic, or in first-order logic with fixed points. +The first two approaches tend to increase the search effort, while Essence lacks fixed point operators so we can't use the third approach. + Model 5: minimal connected component ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Let's look for a robust approach that won't unexpectedly fail if parts of the toolchain change which optimisations they perform or the order in which evaluations occur. -One option could be to look for solutions of a more restrictive model which includes an additional constraint that requires some vertex to not be in C. +One option could be to look for solutions of a more restrictive model which includes an additional constraint that requires some vertex to not be in ``C``. This model would have a solution precisely if the graph is *not* connected. Failure to find solutions to this model would then indicate connectivity. It is possible to call Conjure from a script that uses the failure to find solutions to conclude connectivity, but the Conjure toolchain currently does not support testing for the presence of solutions directly. -In place of the missing "if-has-solution" directive, we could instead quantify over all possible subsets of vertices. -Such an approach quickly becomes infeasible as n grows (and is much worse than the models considered so far), because it attempts to check 2**n subsets. +In place of such an "if-has-solution" directive (which is not currently supported), we could instead quantify over all possible subsets of vertices. +Such an approach quickly becomes infeasible as ``n`` grows (and is much worse than the models considered so far), because it attempts to check ``2**n`` subsets. -As another option, we can make use of the optimisation features of Essence to find a solution with a C of minimal cardinality. -This ensures that C can only contain one connected component. -Choosing a minimal C ensures that when there is more than one solution, then the one that is generated always indicates the failure of connectivity. -Since we don't care about the minimal C, as long as it is smaller than the set of all vertices if possible, we also replace the general requirement for non-emptiness by a constraint that always forces the set C to contain the vertex labelled 1. +As another option, we can make use of the optimisation features of Essence to find a solution with a ``C`` of minimal cardinality. +This ensures that ``C`` can only contain one connected component. +Choosing a minimal ``C`` ensures that when there is more than one solution, then the one that is generated always indicates the failure of connectivity. +Since we don't care about the minimal ``C``, as long as it is smaller than the set of all vertices if possible, we also replace the general requirement for non-emptiness by a constraint that always forces the set ``C`` to contain the vertex labelled 1. .. code-block:: essence @@ -299,6 +306,7 @@ Since we don't care about the minimal C, as long as it is smaller than the set o This model ``gc5.essence`` is still straightforward, even with the additional complication to rule out incorrect solutions. Out of the correct models so far, this tends to generate the smallest input files for the back-end constraint or SAT solver, and also tends to be the fastest. +Moreover, it scales to large sparse graphs as it avoids quadratic growth in the number of intermediate variables. Generating all connected graphs @@ -327,18 +335,18 @@ We now ask for all solutions: However, this finds only one solution! The solver finds one solution that minimises ``|C|``; this minimisation is performed globally over all possible solutions. -This is what we intended when G was given, but is not what we want if our goal is to generate *all* connected graphs. -We want to minimise C for each choice of G, producing one solution for each G. -Currently there is no way to tell Conjure that minimisation should be restricted to the decision variable C. +This is what we intended when ``G`` was given, but is not what we want if our goal is to generate *all* connected graphs. +We want to minimise ``C`` for each choice of ``G``, producing one solution for each ``G``. +There is no way to tell Conjure that minimisation should be restricted to the decision variable ``C``. Checking whether there is a nontrivial connected component seems to be the most efficient model for graph connectivity, but it doesn't work in the setting of generating all connected graphs. We therefore need to choose one of the other models to start with, say the iterated adjacency matrix representation. We now use this model of connectivity to enumerate the labelled connected graphs over the vertices ``{1,2,3,4}``. -Previously we checked connectivity of a given graph G. -We now instead ask the solver to find G, specifying that it be connected. -We do this by asking for the same adjacency matrix ``reach`` as before, but in addition asking for the graph G. -We also hardcode n, so no parameter file is needed, and add the condition that previously determined the value of the ``connected`` decision variable as a constraint. +Previously we checked connectivity of a given graph ``G``. +We now instead ask the solver to find ``G``, specifying that it be connected. +We do this by asking for the same adjacency matrix ``reach`` as before, but in addition asking for the graph ``G``. +We also hardcode ``n``, so no parameter file is needed, and add the condition that previously determined the value of the ``connected`` decision variable as a constraint. .. code-block:: essence From ce1e4b481da898b1529501ba705eab1109f29983 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Sat, 1 Apr 2023 17:58:55 +0100 Subject: [PATCH 167/378] copy-edits in two other tutorials --- docs/tutorials/BIBD.rst | 18 +++++++++--------- docs/tutorials/NurseRostering.rst | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/tutorials/BIBD.rst b/docs/tutorials/BIBD.rst index b5b96f9caf..dc37609301 100644 --- a/docs/tutorials/BIBD.rst +++ b/docs/tutorials/BIBD.rst @@ -11,7 +11,7 @@ The Problem Balanced Incomplete Block Design (BIBD) is a problem from the field of experimental design. It is best explained with an example. -Emily wants to establish which crops (🥔,🌽,🥦,🥕,🥒, 🍅) grow best in Scotland. She has recruited 4 farmers who are happy to help by growing some of the crops. Unfortunately none of the farmers have enough space to grow every crop, they can each grow 3 different crops. Emily is concerned that the different environment of each farm may impact the crops growth. Therefore she wants to make sure that each farmer grows a different combination of crops and that every crop has been grown in the same number of different farms. This approach is called Balanced Incomplete Block Design (BIBD). +Emily wants to establish which crops (🥔, 🌽, 🥦, 🥕, 🥒, 🍅) grow best in Scotland. She has recruited 4 farmers who are happy to help by growing some of the crops. Unfortunately none of the farmers have enough space to grow every crop, they can each grow 3 different crops. Emily is concerned that the different environment of each farm may impact the crops growth. Therefore she wants to make sure that each farmer grows a different combination of crops and that every crop has been grown in the same number of different farms. This approach is called Balanced Incomplete Block Design (BIBD). We can build a model to tell us the crops that each farm should grow. @@ -25,7 +25,7 @@ Essence will take a .param file containing the values of the initial parameters. .. code-block:: essence - letting crops be new type enum {🥔,🌽,🥦,🥕,🥒, 🍅} + letting crops be new type enum {🥔, 🌽, 🥦, 🥕, 🥒, 🍅} letting farms be 4 letting crops_per_farm be 3 letting farms_per_crop be 2 @@ -38,7 +38,7 @@ The model will be in a .essence file. It should start by accessing the provided given farms, crops_per_farm, farms_per_crop, overlap: int given crops new type enum -Next, we need to define what we are looking for. The 'find' keyword indicates that the solver should find a value to for that variable. We want to find a set containing sets of crops. Each set of crops is a crop assignment for a farm. +Next, we need to define what we are looking for. The ``find`` keyword indicates that the solver should find a value for that variable. We want to find a set containing sets of crops. Each set of crops is a crop assignment for a farm. .. code-block:: essence @@ -47,7 +47,7 @@ Next, we need to define what we are looking for. The 'find' keyword indicates th find crop_assignment: set of set of crops -Once the parameters and ***targets?** of the model have been defined, we should define the constraints. ``such that`` indicates the start of the constraints. +Once the parameters and decision variables of the model have been defined, we should define the constraints. ``such that`` indicates the start of the constraints. .. code-block:: essence @@ -64,7 +64,7 @@ Result:: With no constraints it produces an empty set for crop assignment. -The first, basic, constraints is the number of farms. The number of sets in the crop_assignment set should equal the numbers of farms. ``|crop_assignment|`` indicates the size of the crop_assignment set. By setting the size equal to the number of farms (after the such that keyword) the solver will only produce solutions where the size of the set is the same as the number of farms. A comma on the end of line indicates that there are more constraints to follow. +The first, basic, constraint is the number of farms. The number of sets in the crop_assignment set should equal the number of farms. ``|crop_assignment|`` indicates the size of the crop_assignment set. By setting the size equal to the number of farms (after the ``such that`` keyword) the solver will only produce solutions where the size of the set is the same as the number of farms. A comma separates constraints, so at the end of a line this indicates that there are more constraints to follow (none for the moment). .. code-block:: essence @@ -108,7 +108,7 @@ Result:: {🥦, 🥒, 🍅}, {🥕, 🥒, 🍅}} -The model now has the correct number of farms and assigns the correct number of crops per farms, but doesn't assign all types of crops. +The model now has the correct number of farms and assigns the correct number of crops per farm, but doesn't assign all types of crops. The next constraint is number of farms with a given crop. This is more complex than the previous constraints. Let's go over it step by step. For every crop we need to find the number of farms assigned that crop and set it to equal the parameter Emily chose for farms per crop. In order to find this we first use a ``forAll`` to apply the constraint to every crop. ``forAll crop : crops . [OurCalculation] = farms_per_crop`` @@ -137,9 +137,9 @@ Result:: Our model now produces a crop assignment that assigns the correct number of crops to each farmer and the correct number of crops in total but there is lot of overlap between the first and second farmer and between the third and fourth farmer but very little overlap between the two pairs. This is why Emily specified the overlap constraint (sometimes called lambda in BIBD models). In order to make sure that every pair of farmers have at least 1 crop in common we need to define another constraint. -We need to check every pair of farms, we can do this by using two ``forAll`` keywords (``forAll farm1 in crop_assignment. forAll farm2 in crop_assignment . [OurConstraint]``). We can then use the ``intersect`` keyword to get all crops that the two farms have in common. The ``||`` notation can be used to get the size of the intersect which we can then set equal to the overlap parameter (``|farm1 intersect farm2| = overlap``). +We need to check every pair of farms, we can do this by using two ``forAll`` keywords (``forAll farm1 in crop_assignment. forAll farm2 in crop_assignment . [OurConstraint]``). We can then use the ``intersect`` keyword to get all crops that the two farms have in common, and require the size of this intersection to be equal to the overlap parameter (``|farm1 intersect farm2| = overlap``). -However, running the model at this point produces no solutions, as iterating over the crop_assignment in this way means that sometimes farm1 and farm2 will be the same farm, so the intersection will be the number of crops assigned to the farm (3) and never be 1 (the overlap parameter), resulting in no valid solutions. +However, running the model at this point produces no solutions, as iterating over the crop_assignment in this way means that sometimes ``farm1`` and ``farm2`` will be the same farm, so the intersection will be the number of crops assigned to the farm (3) and never be 1 (the overlap parameter), resulting in no valid solutions. In order to avoid this we need to add an further condition to the constraint which checks they are not the same farm before applying the constraint. ``->`` is used, where the left hand side has a condition and the right hand side has a constraint which is only used if the left hand side is true. ``farm1 != farm2 -> |farm1 intersect farm2| = overlap`` @@ -189,7 +189,7 @@ There is a nicer way to do the final constraint, instead of using a second ``for -Providing information in the find statements rather than as constraints often leads to better perform. Essence provides domain attributes which can be attached to find statements . One of them is size k, which tells Essence that a set is of size k. In our model the number of farms and the number of crops per farm are in effect the size of the crop_assignment set and the size of the sets within the crop_assignment set. Therefore we can move these definitions out of the list of constraints and into the find statement. +Providing information in the ``find`` statements rather than as constraints often leads to better performance. Essence provides domain attributes which can be attached to ``find`` statements . One of them is ``size k``, which tells Essence that a set is of size ``k``. In our model the number of farms and the number of crops per farm are in effect the size of the ``crop_assignment`` set and the size of the sets within the ``crop_assignment`` set. Therefore we can move these definitions out of the list of constraints and into the ``find`` statement. .. code-block:: essence diff --git a/docs/tutorials/NurseRostering.rst b/docs/tutorials/NurseRostering.rst index f8029efafa..493a60f417 100644 --- a/docs/tutorials/NurseRostering.rst +++ b/docs/tutorials/NurseRostering.rst @@ -3,7 +3,7 @@ Nurse rostering *Authors: András Salamon, Nguyen Dang, Saad Attieh* -We now discuss a version of `Nurse Rostering `, a constrained scheduling problem. +We now discuss a version of `Nurse Rostering `_, a constrained scheduling problem. Variants of this problem are also known by other names, such as *workforce planning* and *staff scheduling*. Unlike versions of this problem studied by operations research practitioners and researchers (such as competition instances :cite:`ceschia2019second`), we here focus on just a few of the simplest constraints. From 6bd76e8321faeb6649b830a4c2f5c234346255ac Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Sat, 1 Apr 2023 18:06:29 +0100 Subject: [PATCH 168/378] more copy-edits --- docs/tutorials/BIBD.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/tutorials/BIBD.rst b/docs/tutorials/BIBD.rst index dc37609301..8c3ae62c22 100644 --- a/docs/tutorials/BIBD.rst +++ b/docs/tutorials/BIBD.rst @@ -21,7 +21,7 @@ We need to specify the crops, the number of farms, the number of crops that can Emily has decided that she wants each crop to be grown in 2 different farms, and that each pair of farmers will have 1 crop in common. -Essence will take a .param file containing the values of the initial parameters. In the .param file we should define the parameters: +Essence will take a ``.param`` file containing the values of the initial parameters. In the ``.param`` file we should define the parameters: .. code-block:: essence @@ -31,7 +31,7 @@ Essence will take a .param file containing the values of the initial parameters. letting farms_per_crop be 2 letting overlap be 1 -The model will be in a .essence file. It should start by accessing the provided parameters, this uses the given keyword, followed by the names of the parameters and their type. +The model will be in a ``.essence`` file. It should start by accessing the provided parameters, this uses the ``given`` keyword, followed by the names of the parameters and their type. .. code-block:: essence @@ -64,7 +64,7 @@ Result:: With no constraints it produces an empty set for crop assignment. -The first, basic, constraint is the number of farms. The number of sets in the crop_assignment set should equal the number of farms. ``|crop_assignment|`` indicates the size of the crop_assignment set. By setting the size equal to the number of farms (after the ``such that`` keyword) the solver will only produce solutions where the size of the set is the same as the number of farms. A comma separates constraints, so at the end of a line this indicates that there are more constraints to follow (none for the moment). +The first, basic, constraint is the number of farms. The number of sets in the ``crop_assignment`` set should equal the number of farms. ``|crop_assignment|`` indicates the size of the ``crop_assignment`` set. By setting the size equal to the number of farms (after the ``such that`` keyword) the solver will only produce solutions where the size of the set is the same as the number of farms. A comma separates constraints, so at the end of a line this indicates that there are more constraints to follow (none for the moment). .. code-block:: essence @@ -139,9 +139,9 @@ Our model now produces a crop assignment that assigns the correct number of crop We need to check every pair of farms, we can do this by using two ``forAll`` keywords (``forAll farm1 in crop_assignment. forAll farm2 in crop_assignment . [OurConstraint]``). We can then use the ``intersect`` keyword to get all crops that the two farms have in common, and require the size of this intersection to be equal to the overlap parameter (``|farm1 intersect farm2| = overlap``). -However, running the model at this point produces no solutions, as iterating over the crop_assignment in this way means that sometimes ``farm1`` and ``farm2`` will be the same farm, so the intersection will be the number of crops assigned to the farm (3) and never be 1 (the overlap parameter), resulting in no valid solutions. +However, running the model at this point produces no solutions, as iterating over the ``crop_assignment`` in this way means that sometimes ``farm1`` and ``farm2`` will be the same farm, so the intersection will be the number of crops assigned to the farm (3) and never be 1 (the overlap parameter), resulting in no valid solutions. -In order to avoid this we need to add an further condition to the constraint which checks they are not the same farm before applying the constraint. ``->`` is used, where the left hand side has a condition and the right hand side has a constraint which is only used if the left hand side is true. ``farm1 != farm2 -> |farm1 intersect farm2| = overlap`` +In order to avoid this we need to add a further condition to the constraint which checks they are not the same farm before applying the constraint. ``->`` is used, where the left hand side has a condition and the right hand side has a constraint which is only used if the left hand side is true. ``farm1 != farm2 -> |farm1 intersect farm2| = overlap`` .. code-block:: essence From fe0b9f8a5ecda2e1aa8d4d276bfbaefbb04d5810 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Sat, 1 Apr 2023 20:34:17 +0100 Subject: [PATCH 169/378] fix Joan's name in reference list twice --- docs/refs.bib | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/refs.bib b/docs/refs.bib index c546189849..1a87e5a6c9 100644 --- a/docs/refs.bib +++ b/docs/refs.bib @@ -95,7 +95,7 @@ @inproceedings{c341e68df4c14ab5b77b0693aa1cc90f title = {A framework for generating informative benchmark instances}, abstract = {Benchmarking is an important tool for assessing the relative performance of alternative solving approaches. However, the utility of benchmarking is limited by the quantity and quality of the available problem instances. Modern constraint programming languages typically allow the specification of a class-level model that is parameterised over instance data. This separation presents an opportunity for automated approaches to generate instance data that define instances that are graded (solvable at a certain difficulty level for a solver) or can discriminate between two solving approaches. In this paper, we introduce a framework that combines these two properties to generate a large number of benchmark instances, purposely generated for effective and informative benchmarking. We use five problems that were used in the MiniZinc competition to demonstrate the usage of our framework. In addition to producing a ranking among solvers, our framework gives a broader understanding of the behaviour of each solver for the whole instance space; for example by finding subsets of instances where the solver performance significantly varies from its average performance.}, keywords = {Instance generation, Benchmarking, Constraint programming}, - author = {Nguyen Dang and {\"O}zg{\"u}r Akg{\"u}n and {Espasa Arxer}, Joan and Miguel, {Ian} and Peter Nightingale}, + author = {Nguyen Dang and {\"O}zg{\"u}r Akg{\"u}n and {Espasa}, Joan and Miguel, {Ian} and Peter Nightingale}, year = {2022}, month = {jul}, day = {23}, @@ -184,7 +184,7 @@ @inproceedings{5d418525265e4c2189449a84ef9db61e title = {Effective encodings of constraint programming models to SMT}, abstract = {Satisfiability Modulo Theories (SMT) is a well-established methodology that generalises propositional satisfiability (SAT) by adding support for a variety of theories such as integer arithmetic and bit-vector operations. SMT solvers have made rapid progress in recent years. In part, the efficiency of modern SMT solvers derives from the use of specialised decision procedures for each theory. In this paper we explore how the Essence Prime constraint modelling language can be translated to the standard SMT-LIB language. We target four theories: bit-vectors (QF_BV), linear integer arithmetic (QF_LIA), non-linear integer arithmetic (QF_NIA), and integer difference logic (QF_IDL). The encodings are implemented in the constraint modelling tool Savile Row. In an extensive set of experiments, we compare our encodings for the four theories, showing some notable differences and complementary strengths. We also compare our new encodings to the existing work targeting SMT and SAT, and to a well-established learning CP solver. Our two proposed encodings targeting the theory of bit-vectors (QF_BV) both substantially outperform earlier work on encoding to QF_BV on a large and diverse set of problem classes.}, keywords = {Constraint modelling, SMT, Automated reformulation}, - author = {Ewan Davidson and {\"O}zg{\"u}r Akg{\"u}n and {Espasa Arxer}, Joan and Peter Nightingale}, + author = {Ewan Davidson and {\"O}zg{\"u}r Akg{\"u}n and {Espasa}, Joan and Peter Nightingale}, year = {2020}, doi = {10.1007/978-3-030-58475-7_9}, language = {English}, From 3642f93320738a46c2e6622176f168d29b883ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 11:10:40 +0100 Subject: [PATCH 170/378] add readme --- etc/build/homebrew/readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 etc/build/homebrew/readme.md diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md new file mode 100644 index 0000000000..baed54be1d --- /dev/null +++ b/etc/build/homebrew/readme.md @@ -0,0 +1,12 @@ +Copy the conjure.rb file to /opt/homebrew/Library/Taps/homebrew/homebrew-cask/Casks/conjure.rb + +Run brew install conjure + +This should copy Conjure, Savile Row and a bunch of solvers to your path. + +Todo + +- [] The ??? in the file for the intel release should be updated +- [] Test on an intel machine +- [] Release to homebrew? + From bf7789264a931a48010eba5c202028d9755661ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 11:10:59 +0100 Subject: [PATCH 171/378] a first draft for a homebrew (cask) recipe --- etc/build/homebrew/conjure.rb | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 etc/build/homebrew/conjure.rb diff --git a/etc/build/homebrew/conjure.rb b/etc/build/homebrew/conjure.rb new file mode 100644 index 0000000000..508ad39ad7 --- /dev/null +++ b/etc/build/homebrew/conjure.rb @@ -0,0 +1,38 @@ +cask "conjure" do + + arch arm: "arm", intel: "intel" + + version "2.4.0" + sha256 arm: "0634a83c895abee4124236ea4ff297393bc1f1756461eeaa766815d6be5a5bc8", + intel: "???" + + url "https://github.com/conjure-cp/conjure/releases/download/v#{version}/conjure-v#{version}-macos-#{arch}-with-solvers.zip" + name "conjure" + desc "Conjure: The Automated Constraint Modelling Tool" + homepage "https://conjure.readthedocs.io/en/latest/welcome.html" + + binary "conjure-v#{version}-macos-arm-with-solvers/bc_minisat_all_release" + binary "conjure-v#{version}-macos-arm-with-solvers/boolector" + binary "conjure-v#{version}-macos-arm-with-solvers/cadical" + binary "conjure-v#{version}-macos-arm-with-solvers/conjure" + binary "conjure-v#{version}-macos-arm-with-solvers/fzn-chuffed" + binary "conjure-v#{version}-macos-arm-with-solvers/fzn-gecode" + binary "conjure-v#{version}-macos-arm-with-solvers/glucose" + binary "conjure-v#{version}-macos-arm-with-solvers/glucose-syrup" + binary "conjure-v#{version}-macos-arm-with-solvers/kissat" + # binary "conjure-v#{version}-macos-arm-with-solvers/lib" + binary "conjure-v#{version}-macos-arm-with-solvers/lingeling" + binary "conjure-v#{version}-macos-arm-with-solvers/minion" + binary "conjure-v#{version}-macos-arm-with-solvers/nbc_minisat_all_release" + binary "conjure-v#{version}-macos-arm-with-solvers/open-wbo" + binary "conjure-v#{version}-macos-arm-with-solvers/plingeling" + binary "conjure-v#{version}-macos-arm-with-solvers/savilerow" + binary "conjure-v#{version}-macos-arm-with-solvers/savilerow.jar" + binary "conjure-v#{version}-macos-arm-with-solvers/treengeling" + binary "conjure-v#{version}-macos-arm-with-solvers/yices" + binary "conjure-v#{version}-macos-arm-with-solvers/yices-sat" + binary "conjure-v#{version}-macos-arm-with-solvers/yices-smt" + binary "conjure-v#{version}-macos-arm-with-solvers/yices-smt2" + binary "conjure-v#{version}-macos-arm-with-solvers/z3" + +end From 66daf97d25b15de6db16f78473e2c3d27bbcb1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 11:12:06 +0100 Subject: [PATCH 172/378] remove commented out line --- etc/build/homebrew/conjure.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/etc/build/homebrew/conjure.rb b/etc/build/homebrew/conjure.rb index 508ad39ad7..14387341ad 100644 --- a/etc/build/homebrew/conjure.rb +++ b/etc/build/homebrew/conjure.rb @@ -20,7 +20,6 @@ binary "conjure-v#{version}-macos-arm-with-solvers/glucose" binary "conjure-v#{version}-macos-arm-with-solvers/glucose-syrup" binary "conjure-v#{version}-macos-arm-with-solvers/kissat" - # binary "conjure-v#{version}-macos-arm-with-solvers/lib" binary "conjure-v#{version}-macos-arm-with-solvers/lingeling" binary "conjure-v#{version}-macos-arm-with-solvers/minion" binary "conjure-v#{version}-macos-arm-with-solvers/nbc_minisat_all_release" From a43cebac4e6d34f9114ac54871dda840e189e48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 10 Apr 2023 11:14:09 +0100 Subject: [PATCH 173/378] typesetting --- etc/build/homebrew/readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index baed54be1d..15e53bc849 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -1,4 +1,4 @@ -Copy the conjure.rb file to /opt/homebrew/Library/Taps/homebrew/homebrew-cask/Casks/conjure.rb +Copy the `conjure.rb` file to `/opt/homebrew/Library/Taps/homebrew/homebrew-cask/Casks/conjure.rb` Run brew install conjure @@ -6,7 +6,7 @@ This should copy Conjure, Savile Row and a bunch of solvers to your path. Todo -- [] The ??? in the file for the intel release should be updated -- [] Test on an intel machine -- [] Release to homebrew? +- [ ] The ??? in the file for the intel release should be updated +- [ ] Test on an intel machine +- [ ] Release to homebrew? From bebdd31a2e6a72f24f9a9ac974f2cf3ae7bd0835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 12:11:48 +0100 Subject: [PATCH 174/378] Add an additional command line argument to SR so it does not have to guess which solver to use (fix #505) --- src/Conjure/UI/MainHelper.hs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 4bf3cf9c29..a52b45cbb6 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -964,6 +964,7 @@ srMkArgs Solve{..} outBase modelPath = do , case lookup solverName solverExecutables of Nothing -> bug ("solverExecutables" <+> pretty solverName) Just ex -> stringToText ex + , stringToText ("-" ++ solverName) ] _ -> userErr1 ("Unknown solver:" <+> pretty solver) From a6ca34dd9ceaf9fed11bb29f1224432e8b3b941a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 12:26:29 +0100 Subject: [PATCH 175/378] fixing the SR cli flag so it works for yices as well --- src/Conjure/UI/MainHelper.hs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index a52b45cbb6..4c42d70770 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -851,6 +851,12 @@ solverExecutables = smtSolvers :: [String] smtSolvers = ["boolector", "yices", "z3"] +smtSolversSRFlag :: String -> String +smtSolversSRFlag "boolector" = "-boolector" +smtSolversSRFlag "yices" = "-yices2" +smtSolversSRFlag "z3" = "-z3" +smtSolversSRFlag _ = bug "smtSolversSRFlag" + smtSupportedLogics :: String -> [String] smtSupportedLogics "boolector" = ["bv"] smtSupportedLogics "yices" = ["bv", "lia", "idl"] @@ -964,7 +970,7 @@ srMkArgs Solve{..} outBase modelPath = do , case lookup solverName solverExecutables of Nothing -> bug ("solverExecutables" <+> pretty solverName) Just ex -> stringToText ex - , stringToText ("-" ++ solverName) + , stringToText (smtSolversSRFlag solverName) ] _ -> userErr1 ("Unknown solver:" <+> pretty solver) From 2009ccfb064c2a3bfa7030755c33943d2f08450e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 13:34:17 +0100 Subject: [PATCH 176/378] remove echo -e --- tests/allsolvers/run.sh | 54 ++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/tests/allsolvers/run.sh b/tests/allsolvers/run.sh index 34c22a0dcc..ee2c0e5357 100755 --- a/tests/allsolvers/run.sh +++ b/tests/allsolvers/run.sh @@ -1,101 +1,101 @@ -echo -e "default, minion" +echo "default, minion" conjure solve test.essence # CP solvers -echo -e "\nminion" +echo "\nminion" conjure solve test.essence --solver minion -echo -e "\ngecode" +echo "\ngecode" conjure solve test.essence --solver gecode -echo -e "\nchuffed" +echo "\nchuffed" conjure solve test.essence --solver chuffed # SAT solvers -echo -e "\nglucose" +echo "\nglucose" conjure solve test.essence --solver glucose -echo -e "\nglucose-syrup" +echo "\nglucose-syrup" conjure solve test.essence --solver glucose-syrup -echo -e "\nlingeling" +echo "\nlingeling" conjure solve test.essence --solver lingeling -echo -e "\nplingeling" +echo "\nplingeling" conjure solve test.essence --solver plingeling -echo -e "\ntreengeling" +echo "\ntreengeling" conjure solve test.essence --solver treengeling -echo -e "\ncadical" +echo "\ncadical" conjure solve test.essence --solver cadical -echo -e "\nminisat" +echo "\nminisat" conjure solve test.essence --solver minisat # AllSAT solvers -echo -e "\nbc_minisat_all --number-of-solutions=all" +echo "\nbc_minisat_all --number-of-solutions=all" conjure solve test.essence --solver bc_minisat_all --number-of-solutions=all -echo -e "\nnbc_minisat_all --number-of-solutions=all" +echo "\nnbc_minisat_all --number-of-solutions=all" conjure solve test.essence --solver nbc_minisat_all --number-of-solutions=all # MaxSAT solvers -echo -e "\nopen-wbo" +echo "\nopen-wbo" conjure solve testo.essence --solver open-wbo # MIP solvers (via MiniZinc) -echo -e "\ncoin-or" +echo "\ncoin-or" conjure solve test.essence --solver coin-or -echo -e "\ncplex" +echo "\ncplex" conjure solve test.essence --solver cplex # SMT solvers -echo -e "\nboolector" +echo "\nboolector" conjure solve test.essence --solver boolector -echo -e "\nboolector-bv" +echo "\nboolector-bv" conjure solve test.essence --solver boolector-bv -echo -e "\nyices" +echo "\nyices" conjure solve test.essence --solver yices -echo -e "\nyices-bv" +echo "\nyices-bv" conjure solve test.essence --solver yices-bv -echo -e "\nyices-lia" +echo "\nyices-lia" conjure solve test.essence --solver yices-lia -echo -e "\nyices-idl" +echo "\nyices-idl" conjure solve test.essence --solver yices-idl -echo -e "\nz3" +echo "\nz3" conjure solve test.essence --solver z3 -echo -e "\nz3-bv" +echo "\nz3-bv" conjure solve test.essence --solver z3-bv -echo -e "\nz3-lia" +echo "\nz3-lia" conjure solve test.essence --solver z3-lia -echo -e "\nz3-nia" +echo "\nz3-nia" conjure solve test.essence --solver z3-nia -echo -e "\nz3-idl" +echo "\nz3-idl" conjure solve test.essence --solver z3-idl From 5470ae2a24baf50a4e5be6dd10b39f4d4cf2377c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 10 Apr 2023 13:51:17 +0100 Subject: [PATCH 177/378] add verified so brew audit is happy --- etc/build/homebrew/conjure.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/etc/build/homebrew/conjure.rb b/etc/build/homebrew/conjure.rb index 14387341ad..154c85f774 100644 --- a/etc/build/homebrew/conjure.rb +++ b/etc/build/homebrew/conjure.rb @@ -6,7 +6,8 @@ sha256 arm: "0634a83c895abee4124236ea4ff297393bc1f1756461eeaa766815d6be5a5bc8", intel: "???" - url "https://github.com/conjure-cp/conjure/releases/download/v#{version}/conjure-v#{version}-macos-#{arch}-with-solvers.zip" + url "https://github.com/conjure-cp/conjure/releases/download/v#{version}/conjure-v#{version}-macos-#{arch}-with-solvers.zip", + verified: "github.com/conjure-cp/conjure" name "conjure" desc "Conjure: The Automated Constraint Modelling Tool" homepage "https://conjure.readthedocs.io/en/latest/welcome.html" From d5464358a15619a520f19dd0f9d94e78940f0b54 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Mon, 10 Apr 2023 14:51:52 +0100 Subject: [PATCH 178/378] update docs --- etc/build/homebrew/readme.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index 15e53bc849..63f74661b8 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -1,8 +1,10 @@ -Copy the `conjure.rb` file to `/opt/homebrew/Library/Taps/homebrew/homebrew-cask/Casks/conjure.rb` +Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run +``` +brew edit --cask conjure.rb +``` +and save the file. This puts the cask in the caskroom of the brew installation. -Run brew install conjure - -This should copy Conjure, Savile Row and a bunch of solvers to your path. +Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solvers to your path. Todo From b5c477c09204db563e3183556fe72481529da310 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Mon, 10 Apr 2023 14:52:10 +0100 Subject: [PATCH 179/378] add Intel hash --- etc/build/homebrew/conjure.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/build/homebrew/conjure.rb b/etc/build/homebrew/conjure.rb index 154c85f774..8de62b7ca1 100644 --- a/etc/build/homebrew/conjure.rb +++ b/etc/build/homebrew/conjure.rb @@ -4,7 +4,7 @@ version "2.4.0" sha256 arm: "0634a83c895abee4124236ea4ff297393bc1f1756461eeaa766815d6be5a5bc8", - intel: "???" + intel: "3e2e3d7a56181c6a12785a9081cde789cad4a91480d8a3de78c5d6d0f85fc516" url "https://github.com/conjure-cp/conjure/releases/download/v#{version}/conjure-v#{version}-macos-#{arch}-with-solvers.zip", verified: "github.com/conjure-cp/conjure" From 94d45c9508b193c671edd59a811e5c3a0fc9745e Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Mon, 10 Apr 2023 16:47:24 +0100 Subject: [PATCH 180/378] fix Intel install, correct errors in readme, no longer installs z3 --- etc/build/homebrew/conjure.rb | 50 ++++++++++++++++++++--------------- etc/build/homebrew/readme.md | 14 +++++++--- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/etc/build/homebrew/conjure.rb b/etc/build/homebrew/conjure.rb index 8de62b7ca1..df5bf149c2 100644 --- a/etc/build/homebrew/conjure.rb +++ b/etc/build/homebrew/conjure.rb @@ -12,27 +12,33 @@ desc "Conjure: The Automated Constraint Modelling Tool" homepage "https://conjure.readthedocs.io/en/latest/welcome.html" - binary "conjure-v#{version}-macos-arm-with-solvers/bc_minisat_all_release" - binary "conjure-v#{version}-macos-arm-with-solvers/boolector" - binary "conjure-v#{version}-macos-arm-with-solvers/cadical" - binary "conjure-v#{version}-macos-arm-with-solvers/conjure" - binary "conjure-v#{version}-macos-arm-with-solvers/fzn-chuffed" - binary "conjure-v#{version}-macos-arm-with-solvers/fzn-gecode" - binary "conjure-v#{version}-macos-arm-with-solvers/glucose" - binary "conjure-v#{version}-macos-arm-with-solvers/glucose-syrup" - binary "conjure-v#{version}-macos-arm-with-solvers/kissat" - binary "conjure-v#{version}-macos-arm-with-solvers/lingeling" - binary "conjure-v#{version}-macos-arm-with-solvers/minion" - binary "conjure-v#{version}-macos-arm-with-solvers/nbc_minisat_all_release" - binary "conjure-v#{version}-macos-arm-with-solvers/open-wbo" - binary "conjure-v#{version}-macos-arm-with-solvers/plingeling" - binary "conjure-v#{version}-macos-arm-with-solvers/savilerow" - binary "conjure-v#{version}-macos-arm-with-solvers/savilerow.jar" - binary "conjure-v#{version}-macos-arm-with-solvers/treengeling" - binary "conjure-v#{version}-macos-arm-with-solvers/yices" - binary "conjure-v#{version}-macos-arm-with-solvers/yices-sat" - binary "conjure-v#{version}-macos-arm-with-solvers/yices-smt" - binary "conjure-v#{version}-macos-arm-with-solvers/yices-smt2" - binary "conjure-v#{version}-macos-arm-with-solvers/z3" + # fix: unclear how to handle JDK dependency + # depends_on cask:"openjdk" + # fix: use brew z3 if installed, otherwise install ours + # depends_on cask:"z3" + + binary "conjure-v#{version}-macos-#{arch}-with-solvers/bc_minisat_all_release" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/boolector" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/cadical" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/conjure" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/fzn-chuffed" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/fzn-gecode" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/glucose" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/glucose-syrup" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/kissat" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/lingeling" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/minion" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/nbc_minisat_all_release" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/open-wbo" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/plingeling" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/savilerow" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/savilerow.jar" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/treengeling" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/yices" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/yices-sat" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/yices-smt" + binary "conjure-v#{version}-macos-#{arch}-with-solvers/yices-smt2" +# conflicts with already installed brew z3: +# binary "conjure-v#{version}-macos-#{arch}-with-solvers/z3" end diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index 63f74661b8..780fe5a943 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -1,14 +1,20 @@ Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run ``` -brew edit --cask conjure.rb +brew create --cask --set-name conjure --no-fetch placeholder ``` -and save the file. This puts the cask in the caskroom of the brew installation. +and save the file. This puts a placeholder cask in the correct place. Now run +``` +cp -p conjure.rb `brew edit --cask --print-path conjure` +``` +to overwrite the placeholder with the contents of this cask. Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solvers to your path. Todo -- [ ] The ??? in the file for the intel release should be updated -- [ ] Test on an intel machine +- [X] The ??? in the file for the intel release should be updated +- [X] Test on an intel machine +- [ ] Deal with JDK dependency properly +- [ ] Work with z3 if already installed, otherwise install our own - [ ] Release to homebrew? From e885afbc99a0abbbe88cca3418cd47f53a79a03f Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Mon, 10 Apr 2023 17:01:15 +0100 Subject: [PATCH 181/378] add more detail to readme --- etc/build/homebrew/readme.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index 780fe5a943..0730b3814a 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -1,3 +1,9 @@ +# Conjure cask for Homebrew + +`conjure.rb` is a Homebrew cask for Conjure. It installs the appropriate MacOS binary distribution from github. This currently results in quarantine warnings since these binaries are not signed. + +# How to install this cask + Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run ``` brew create --cask --set-name conjure --no-fetch placeholder @@ -10,7 +16,7 @@ to overwrite the placeholder with the contents of this cask. Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solvers to your path. -Todo +# Todo - [X] The ??? in the file for the intel release should be updated - [X] Test on an intel machine From f786a4e00244456e26f9b34af132c3c230f3ada3 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Tue, 11 Apr 2023 00:17:09 +0100 Subject: [PATCH 182/378] fix syntax error, deal with case where git fails --- etc/build/copy-conjure-branch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/build/copy-conjure-branch.sh b/etc/build/copy-conjure-branch.sh index 56a7804d3c..ecef3814f9 100755 --- a/etc/build/copy-conjure-branch.sh +++ b/etc/build/copy-conjure-branch.sh @@ -3,7 +3,7 @@ export BRANCH=$(git rev-parse --abbrev-ref HEAD) # make a copy of the executable and call it conjure-${BRANCH} -if [ ${BRANCH} != "main" ] && [ ${BRANCH} != "HEAD" ]; then +if [ "x${BRANCH}" != 'xmain' -a "x${BRANCH}" != 'xHEAD' -a "x${BRANCH}" != 'x' ]; then cp ${BIN_DIR}/conjure ${BIN_DIR}/conjure-${BRANCH} echo "- conjure-${BRANCH}" fi From 7e7342375cb8c84553ffd5d197884d83e23141e0 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Tue, 11 Apr 2023 01:12:29 +0100 Subject: [PATCH 183/378] add formula for homebrew, add docs, some caveats --- etc/build/homebrew/conjure-formula.rb | 41 +++++++++++++++++++++++++++ etc/build/homebrew/readme.md | 28 +++++++++++++++--- 2 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 etc/build/homebrew/conjure-formula.rb diff --git a/etc/build/homebrew/conjure-formula.rb b/etc/build/homebrew/conjure-formula.rb new file mode 100644 index 0000000000..540643d3ff --- /dev/null +++ b/etc/build/homebrew/conjure-formula.rb @@ -0,0 +1,41 @@ +class Conjure < Formula + desc "Conjure: The Automated Constraint Modelling Tool" + homepage "https://github.com/conjure-cp/conjure" + url "https://github.com/conjure-cp/conjure/archive/refs/tags/v2.4.0.tar.gz" + sha256 "2c5aa0065d00d8289b2da93a5d6dbe276d7248c6dd63de09096741ac89c4dc1d" + license "BSD-3-Clause" + + # depends_on "ghc@8.6" => :build # rely on conjure to sort this out + depends_on "python@3.11" => :build # for docs + depends_on "openjdk" # for Savile Row + # depends_on "z3" + + def install + # pick up dependencies to build the documentation + system "pip3", "install", "sphinx-rtd-theme", "sphinxcontrib-bibtex" + + # place binaries where brew wants to put them + ENV["BIN_DIR"] = "#{bin}" + system "make", "install" + # to build kissat a C compiler must be installed, e.g. clang from Xcode + # system "etc/build/install-kissat.sh" + + system "make", "docs" + doc.install "docs/_build/latex/Conjure.pdf" + doc.install Dir["docs/_build/singlehtml/*"] + end + + test do + # `test do` will create, run in and delete a temporary directory. + # Run the test with `brew test conjure`. Options passed + # to `brew install` such as `--HEAD` also need to be provided to `brew test`. + # The installed folder is not in the path, so use the entire path to any + # executables being tested: `system "#{bin}/program", "do", "something"`. + system "cp", "#{buildpath}/docs/tutorials/futoshiki/futoshiki.essence", "." + system "cp", "#{buildpath}/docs/tutorials/futoshiki/futoshiki.essence-param", "." + assert_match "Copying solution to:", shell_output( + "#{bin}/conjure solve futoshiki.essence futoshiki.essence-param" + ).chomp + end + +end diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index 0730b3814a..81447adc50 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -1,8 +1,11 @@ -# Conjure cask for Homebrew +# Conjure cask and formula for Homebrew -`conjure.rb` is a Homebrew cask for Conjure. It installs the appropriate MacOS binary distribution from github. This currently results in quarantine warnings since these binaries are not signed. +`conjure.rb` is a Homebrew cask for Conjure. It installs the appropriate MacOS binary distribution from github. This includes a full set of solvers except `z3`. Solver `z3` is not installed because it is a brew package and installing it could conflict with the brew version. *Note: installing this cask currently results in quarantine warnings since these binaries from github are not signed.* -# How to install this cask +`conjure-formula.rb` is a Homebrew formula for Conjure. This process first runs a binary `stack` downloaded from the official Haskell web site and then downloads a large index of Haskell packages. It then builds Conjure from source and installs it, as well as an official binary distribution of Savile Row. + + +# How to install the cask Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run ``` @@ -14,7 +17,23 @@ cp -p conjure.rb `brew edit --cask --print-path conjure` ``` to overwrite the placeholder with the contents of this cask. -Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solvers to your path. +Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solvers to the Homebrew path. + + +# How to install the formula + +Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run +``` +brew create --formula --set-name conjure --no-fetch placeholder +``` +and save the file. This puts a placeholder cask in the correct place. Now run +``` +cp -p conjure-formula.rb `brew edit --formula --print-path conjure` +``` +to overwrite the placeholder with the contents of this formula. + +Next run `brew install conjure` to install Conjure and Savile Row to the Homebrew cellar. Note that this will not install any solvers, so you might want to run `brew install z3` to install a suitable solver. + # Todo @@ -22,5 +41,6 @@ Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solve - [X] Test on an intel machine - [ ] Deal with JDK dependency properly - [ ] Work with z3 if already installed, otherwise install our own +- [ ] Ensure the formula build ends with Minion or another solver installed - [ ] Release to homebrew? From bcc7f94fdcc0a6b36e0b68ebe76c37ea3f67778b Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Tue, 11 Apr 2023 22:26:00 +0100 Subject: [PATCH 184/378] simplify instructions, more clearly document limitations --- .../conjure.rb} | 0 etc/build/homebrew/readme.md | 36 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) rename etc/build/homebrew/{conjure-formula.rb => formula/conjure.rb} (100%) diff --git a/etc/build/homebrew/conjure-formula.rb b/etc/build/homebrew/formula/conjure.rb similarity index 100% rename from etc/build/homebrew/conjure-formula.rb rename to etc/build/homebrew/formula/conjure.rb diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index 81447adc50..87f559a9fb 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -1,46 +1,46 @@ # Conjure cask and formula for Homebrew -`conjure.rb` is a Homebrew cask for Conjure. It installs the appropriate MacOS binary distribution from github. This includes a full set of solvers except `z3`. Solver `z3` is not installed because it is a brew package and installing it could conflict with the brew version. *Note: installing this cask currently results in quarantine warnings since these binaries from github are not signed.* +`conjure.rb` is a Homebrew cask for Conjure. It installs the appropriate MacOS binary distribution from github. This includes a full set of solvers except `z3`. Solver `z3` is not installed because it is a brew package and installing it could conflict with the brew version. *Note: running any of the solvers installed by this cask currently results in quarantine warnings since the solver binaries from github are not signed.* -`conjure-formula.rb` is a Homebrew formula for Conjure. This process first runs a binary `stack` downloaded from the official Haskell web site and then downloads a large index of Haskell packages. It then builds Conjure from source and installs it, as well as an official binary distribution of Savile Row. +`conjure-formula.rb` is a Homebrew formula for Conjure, but is still being developed. After installing some Python modules, this formula downloads a binary `stack` from the official Haskell web site and runs it to fetch the complete index of Haskell packages. It then builds Conjure from source: this currently requires some work-arounds to complete. Once built, Conjure is installed as well as an official binary distribution of Savile Row, but no additional solvers. # How to install the cask -Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run +Run ``` -brew create --cask --set-name conjure --no-fetch placeholder +brew install --cask conjure.rb ``` -and save the file. This puts a placeholder cask in the correct place. Now run +to install Conjure, Savile Row and a bunch of solvers to the Homebrew path. + + +# How to uninstall the cask + +Run ``` -cp -p conjure.rb `brew edit --cask --print-path conjure` +brew uninstall --cask conjure ``` -to overwrite the placeholder with the contents of this cask. - -Next run `brew install conjure` to copy Conjure, Savile Row and a bunch of solvers to the Homebrew path. +to remove Conjure, Savile Row, and the solvers it installed. # How to install the formula -Set environment variable `EDITOR` to a preferred editor if the default `vi` is not a good choice, then run -``` -brew create --formula --set-name conjure --no-fetch placeholder -``` -and save the file. This puts a placeholder cask in the correct place. Now run +Run ``` -cp -p conjure-formula.rb `brew edit --formula --print-path conjure` +brew install --formula formula/conjure.rb ``` -to overwrite the placeholder with the contents of this formula. +to install Conjure and Savile Row. Note that this will not install any solvers, so you might want to run `brew install z3` to install a solver. -Next run `brew install conjure` to install Conjure and Savile Row to the Homebrew cellar. Note that this will not install any solvers, so you might want to run `brew install z3` to install a suitable solver. +The formula currently uses the 2.4.0 release, which doesn't support the minimal path used by Homebrew for source builds. # Todo - [X] The ??? in the file for the intel release should be updated - [X] Test on an intel machine -- [ ] Deal with JDK dependency properly +- [ ] Deal with JDK dependency properly in both cask and formula - [ ] Work with z3 if already installed, otherwise install our own - [ ] Ensure the formula build ends with Minion or another solver installed +- [ ] Formula fails to build 2.4.0, update to use a fixed release - [ ] Release to homebrew? From 4f59a491875ac8458222e577f8305a5e61981172 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Tue, 11 Apr 2023 22:29:30 +0100 Subject: [PATCH 185/378] correct path, add formula uninstall --- etc/build/homebrew/readme.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/etc/build/homebrew/readme.md b/etc/build/homebrew/readme.md index 87f559a9fb..7678521470 100644 --- a/etc/build/homebrew/readme.md +++ b/etc/build/homebrew/readme.md @@ -2,7 +2,7 @@ `conjure.rb` is a Homebrew cask for Conjure. It installs the appropriate MacOS binary distribution from github. This includes a full set of solvers except `z3`. Solver `z3` is not installed because it is a brew package and installing it could conflict with the brew version. *Note: running any of the solvers installed by this cask currently results in quarantine warnings since the solver binaries from github are not signed.* -`conjure-formula.rb` is a Homebrew formula for Conjure, but is still being developed. After installing some Python modules, this formula downloads a binary `stack` from the official Haskell web site and runs it to fetch the complete index of Haskell packages. It then builds Conjure from source: this currently requires some work-arounds to complete. Once built, Conjure is installed as well as an official binary distribution of Savile Row, but no additional solvers. +`formula/conjure.rb` is a Homebrew formula for Conjure, but is still being developed. After installing some Python modules, this formula downloads a binary `stack` from the official Haskell web site and runs it to fetch the complete index of Haskell packages. It then builds Conjure from source: this currently requires some work-arounds to complete. Once built, Conjure is installed as well as an official binary distribution of Savile Row, but no additional solvers. # How to install the cask @@ -34,6 +34,15 @@ to install Conjure and Savile Row. Note that this will not install any solvers, The formula currently uses the 2.4.0 release, which doesn't support the minimal path used by Homebrew for source builds. +# How to uninstall the formula + +Run +``` +brew uninstall --formula conjure +``` +to remove the version of Conjure and Savile Row installed by the formula. + + # Todo - [X] The ??? in the file for the intel release should be updated From 474e1671ffcf0273be050078c0832212ab8cb86d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 11:59:44 +0100 Subject: [PATCH 186/378] Removed TSDef --- docs/conjure-help.txt | 9 - src/Conjure/UI.hs | 21 -- src/Conjure/UI/TypeScript.hs | 413 ----------------------------------- 3 files changed, 443 deletions(-) delete mode 100644 src/Conjure/UI/TypeScript.hs diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index bdcaa12714..a55f8baf72 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -459,13 +459,4 @@ Default: 120 General: --limit-time=INT Time limit in seconds (real time). - - conjure tsdef [OPTIONS] - Generate data type definitions in TypeScript. - These can be used when interfacing with Conjure via JSON. - - Logging & Output: - --log-level=LOGLEVEL Log level. - General: - --limit-time=INT Limit in seconds of real time. diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index 9e2da99007..3cabdd3eda 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -207,10 +207,6 @@ data UI , outputFormat :: OutputFormat -- Essence by default , lineWidth :: Int -- 120 by default } - | TSDEF -- generate TypeScript definitions - { logLevel :: LogLevel - , limitTime :: Maybe Int - } deriving (Eq, Ord, Show, Data, Typeable, Generic) instance Serialize UI @@ -1389,23 +1385,6 @@ ui = modes &= help "Strengthen an Essence model as described in \"Reformulating \ \Essence Specifications for Robustness\",\n\ \which aims to make search faster." - , TSDEF - { logLevel - = def - &= name "log-level" - &= groupname "Logging & Output" - &= explicit - &= help "Log level." - , limitTime - = Nothing - &= name "limit-time" - &= groupname "General" - &= explicit - &= help "Limit in seconds of real time." - } &= name "tsdef" - &= explicit - &= help "Generate data type definitions in TypeScript.\n\ - \These can be used when interfacing with Conjure via JSON." ] &= program "conjure" &= helpArg [explicit, name "help"] &= versionArg [explicit, name "version"] diff --git a/src/Conjure/UI/TypeScript.hs b/src/Conjure/UI/TypeScript.hs deleted file mode 100644 index 5740d58a05..0000000000 --- a/src/Conjure/UI/TypeScript.hs +++ /dev/null @@ -1,413 +0,0 @@ -{-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE KindSignatures #-} -{-# OPTIONS_GHC -fno-warn-orphans #-} -{-# LANGUAGE InstanceSigs #-} -{-# LANGUAGE MonoLocalBinds #-} -{-# LANGUAGE UndecidableInstances #-} - - -module Conjure.UI.TypeScript ( tsDef ) where - - -import Conjure.Prelude hiding ( (<>) ) -import Conjure.Language -- ( Model, Expression ) - --- aeson -import Data.Aeson.Types ( defaultOptions ) - --- import Conjure.UI.TypeScriptDefs (numDefs) -import Data.Traversable --- aeson-typescript -import Data.Aeson.TypeScript.TH as TS -import qualified Data.Aeson.TypeScript.TH as TS -import qualified Data.Aeson.TypeScript.Recursive as TS - - - - - --- instance (TypeScript a,TypeScript b) => TypeScript (Domain b a) where --- getTypeScriptType :: Proxy (Domain b a) -> String --- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy (Domain () a)) --- instance TypeScript Expression where --- getTypeScriptType :: Proxy Expression -> String --- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy Expression) --- deriveTypeScript defaultOptions ''AttrName --- deriveTypeScript defaultOptions ''Name --- deriveTypeScript defaultOptions ''OpActive --- deriveTypeScript defaultOptions ''OpAllDiff --- deriveTypeScript defaultOptions ''OpAllDiffExcept --- deriveTypeScript defaultOptions ''OpAnd --- deriveTypeScript defaultOptions ''OpApart --- deriveTypeScript defaultOptions ''OpAtLeast --- deriveTypeScript defaultOptions ''OpAtMost --- deriveTypeScript defaultOptions ''OpAttributeAsConstraint --- deriveTypeScript defaultOptions ''OpCatchUndef --- deriveTypeScript defaultOptions ''OpDefined --- deriveTypeScript defaultOptions ''OpDiv --- deriveTypeScript defaultOptions ''OpDontCare --- deriveTypeScript defaultOptions ''OpDotLeq --- deriveTypeScript defaultOptions ''OpDotLt --- deriveTypeScript defaultOptions ''OpEq --- deriveTypeScript defaultOptions ''OpFactorial --- deriveTypeScript defaultOptions ''OpFlatten --- deriveTypeScript defaultOptions ''OpFreq --- deriveTypeScript defaultOptions ''OpGCC --- deriveTypeScript defaultOptions ''OpGeq --- deriveTypeScript defaultOptions ''OpGt --- deriveTypeScript defaultOptions ''OpHist --- deriveTypeScript defaultOptions ''OpIff --- deriveTypeScript defaultOptions ''OpImage --- deriveTypeScript defaultOptions ''OpImageSet --- deriveTypeScript defaultOptions ''OpImply --- deriveTypeScript defaultOptions ''OpIn --- deriveTypeScript defaultOptions ''OpIndexing --- deriveTypeScript defaultOptions ''OpIntersect --- deriveTypeScript defaultOptions ''OpInverse --- deriveTypeScript defaultOptions ''OpLeq --- deriveTypeScript defaultOptions ''OpLexLeq --- deriveTypeScript defaultOptions ''OpLexLt --- deriveTypeScript defaultOptions ''OpLt --- deriveTypeScript defaultOptions ''OpMakeTable --- deriveTypeScript defaultOptions ''OpMax --- deriveTypeScript defaultOptions ''OpMin --- deriveTypeScript defaultOptions ''OpMinus --- deriveTypeScript defaultOptions ''OpMod --- deriveTypeScript defaultOptions ''OpNegate --- deriveTypeScript defaultOptions ''OpNeq --- deriveTypeScript defaultOptions ''OpNot --- deriveTypeScript defaultOptions ''OpOr --- deriveTypeScript defaultOptions ''OpParticipants --- deriveTypeScript defaultOptions ''OpParts --- deriveTypeScript defaultOptions ''OpParty --- deriveTypeScript defaultOptions ''OpPow --- deriveTypeScript defaultOptions ''OpPowerSet --- deriveTypeScript defaultOptions ''OpPred --- deriveTypeScript defaultOptions ''OpPreImage --- deriveTypeScript defaultOptions ''OpProduct --- deriveTypeScript defaultOptions ''OpRange --- deriveTypeScript defaultOptions ''OpRelationProj --- deriveTypeScript defaultOptions ''OpRestrict --- deriveTypeScript defaultOptions ''OpSlicing --- deriveTypeScript defaultOptions ''OpSubsequence --- deriveTypeScript defaultOptions ''OpSubset --- deriveTypeScript defaultOptions ''OpSubsetEq --- deriveTypeScript defaultOptions ''OpSubstring --- deriveTypeScript defaultOptions ''OpSucc --- deriveTypeScript defaultOptions ''OpSum --- deriveTypeScript defaultOptions ''OpSupset --- deriveTypeScript defaultOptions ''OpSupsetEq --- deriveTypeScript defaultOptions ''OpTable --- deriveTypeScript defaultOptions ''OpTildeLeq --- deriveTypeScript defaultOptions ''OpTildeLt --- deriveTypeScript defaultOptions ''OpTogether --- deriveTypeScript defaultOptions ''OpToInt --- deriveTypeScript defaultOptions ''OpToMSet --- deriveTypeScript defaultOptions ''OpToRelation --- deriveTypeScript defaultOptions ''OpToSet --- deriveTypeScript defaultOptions ''OpTransform --- deriveTypeScript defaultOptions ''OpTrue --- deriveTypeScript defaultOptions ''OpTwoBars --- deriveTypeScript defaultOptions ''OpUnion --- deriveTypeScript defaultOptions ''OpXor --- deriveTypeScript defaultOptions ''Op --- -- --- -- --- -- --- -- --- -- --- deriveTypeScript defaultOptions ''AbstractPattern --- -- --- deriveTypeScript defaultOptions ''BinaryRelationAttr --- deriveTypeScript defaultOptions ''BinaryRelationAttrs --- deriveTypeScript defaultOptions ''IntTag --- deriveTypeScript defaultOptions ''AbstractLiteral --- deriveTypeScript defaultOptions ''Type --- -- --- deriveTypeScript defaultOptions ''Constant --- deriveTypeScript defaultOptions ''Decision --- deriveTypeScript defaultOptions ''FindOrGiven --- deriveTypeScript defaultOptions ''Declaration --- deriveTypeScript defaultOptions ''HasRepresentation --- deriveTypeScript defaultOptions ''Generator --- deriveTypeScript defaultOptions ''GeneratorOrCondition --- deriveTypeScript defaultOptions ''SearchOrder --- deriveTypeScript defaultOptions ''Objective --- deriveTypeScript defaultOptions ''Statement --- deriveTypeScript defaultOptions ''InBubble --- deriveTypeScript defaultOptions ''LanguageVersion - --- deriveTypeScript defaultOptions ''JectivityAttr --- deriveTypeScript defaultOptions ''OccurAttr --- deriveTypeScript defaultOptions ''SizeAttr --- deriveTypeScript defaultOptions ''PartialityAttr - --- deriveTypeScript defaultOptions ''Region --- deriveTypeScript defaultOptions ''ReferenceTo --- -- deriveTypeScript defaultOptions ''Tree -- base --- deriveTypeScript defaultOptions ''Strategy --- -- deriveTypeScript defaultOptions ''Expression --- deriveTypeScript defaultOptions ''MSetAttr --- deriveTypeScript defaultOptions ''PartitionAttr --- deriveTypeScript defaultOptions ''Range --- deriveTypeScript defaultOptions ''FunctionAttr --- deriveTypeScript defaultOptions ''RelationAttr --- deriveTypeScript defaultOptions ''SequenceAttr --- deriveTypeScript defaultOptions ''SetAttr --- deriveTypeScript defaultOptions ''TrailRewrites - --- deriveTypeScript defaultOptions ''ModelInfo --- deriveTypeScript defaultOptions ''Model - --- instance TypeScript a => TypeScript (Tree a) where --- getTypeScriptType :: TypeScript a => Proxy (Tree a) -> String --- getTypeScriptType _ = TS.getTypeScriptType (Proxy :: Proxy (Tree a)) - -$( mconcat - <$> traverse - (deriveTypeScript defaultOptions) - [''AbstractLiteral - ,''AbstractPattern - ,''AttrName - ,''BinaryRelationAttr - ,''BinaryRelationAttrs - ,''Constant - ,''Decision - ,''Declaration - ,''Domain - ,''Expression - ,''FindOrGiven - ,''FunctionAttr - ,''Generator - ,''GeneratorOrCondition - ,''HasRepresentation - ,''InBubble - ,''IntTag - ,''JectivityAttr - ,''LanguageVersion - ,''Model - ,''ModelInfo - ,''MSetAttr - ,''Name - ,''Objective - ,''OccurAttr - ,''Op - ,''OpActive - ,''OpAllDiff - ,''OpAllDiffExcept - ,''OpAnd - ,''OpApart - ,''OpAtLeast - ,''OpAtMost - ,''OpAttributeAsConstraint - ,''OpCatchUndef - ,''OpDefined - ,''OpDiv - ,''OpDontCare - ,''OpDotLeq - ,''OpDotLt - ,''OpEq - ,''OpFactorial - ,''OpFlatten - ,''OpFreq - ,''OpGCC - ,''OpGeq - ,''OpGt - ,''OpHist - ,''OpIff - ,''OpImage - ,''OpImageSet - ,''OpImply - ,''OpIn - ,''OpIndexing - ,''OpIntersect - ,''OpInverse - ,''OpLeq - ,''OpLexLeq - ,''OpLexLt - ,''OpLt - ,''OpMakeTable - ,''OpMax - ,''OpMin - ,''OpMinus - ,''OpMod - ,''OpNegate - ,''OpNeq - ,''OpNot - ,''OpOr - ,''OpParticipants - ,''OpParts - ,''OpParty - ,''OpPow - ,''OpPowerSet - ,''OpPred - ,''OpPreImage - ,''OpProduct - ,''OpRange - ,''OpRelationProj - ,''OpRestrict - ,''OpSlicing - ,''OpSubsequence - ,''OpSubset - ,''OpSubsetEq - ,''OpSubstring - ,''OpSucc - ,''OpSum - ,''OpSupset - ,''OpSupsetEq - ,''OpTable - ,''OpTildeLeq - ,''OpTildeLt - ,''OpTogether - ,''OpToInt - ,''OpToMSet - ,''OpToRelation - ,''OpToSet - ,''OpTransform - ,''OpTrue - ,''OpTwoBars - ,''OpUnion - ,''OpXor - ,''PartialityAttr - ,''PartitionAttr - ,''Range - ,''ReferenceTo - ,''Region - ,''RelationAttr - ,''SearchOrder - ,''SequenceAttr - ,''SetAttr - ,''SizeAttr - ,''Statement - ,''Strategy - ,''TrailRewrites - ,''Tree - ,''Type - ] - ) - --- qq :: [TSDeclaration] --- qq = getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) - -tsDef :: IO () -tsDef = putStrLn $ formatTSDeclarations $ mconcat - [ getTypeScriptDeclarations (Proxy :: Proxy (AbstractLiteral Expression)) - , getTypeScriptDeclarations (Proxy :: Proxy AbstractPattern) - , getTypeScriptDeclarations (Proxy :: Proxy AttrName) - , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttr) - , getTypeScriptDeclarations (Proxy :: Proxy BinaryRelationAttrs) - , getTypeScriptDeclarations (Proxy :: Proxy Constant) - , getTypeScriptDeclarations (Proxy :: Proxy Decision) - , getTypeScriptDeclarations (Proxy :: Proxy Declaration) - , getTypeScriptDeclarations (Proxy :: Proxy (Domain () Expression)) - , getTypeScriptDeclarations (Proxy :: Proxy Expression) - , getTypeScriptDeclarations (Proxy :: Proxy FindOrGiven) - , getTypeScriptDeclarations (Proxy :: Proxy (FunctionAttr Expression)) - , getTypeScriptDeclarations (Proxy :: Proxy Generator) - , getTypeScriptDeclarations (Proxy :: Proxy GeneratorOrCondition) - , getTypeScriptDeclarations (Proxy :: Proxy HasRepresentation) - , getTypeScriptDeclarations (Proxy :: Proxy InBubble) - , getTypeScriptDeclarations (Proxy :: Proxy IntTag) - , getTypeScriptDeclarations (Proxy :: Proxy JectivityAttr) - , getTypeScriptDeclarations (Proxy :: Proxy LanguageVersion) - , getTypeScriptDeclarations (Proxy :: Proxy Model) - , getTypeScriptDeclarations (Proxy :: Proxy ModelInfo) - , getTypeScriptDeclarations (Proxy :: Proxy (MSetAttr Expression)) - , getTypeScriptDeclarations (Proxy :: Proxy Name) - , getTypeScriptDeclarations (Proxy :: Proxy Objective) - , getTypeScriptDeclarations (Proxy :: Proxy (OccurAttr Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (Op Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpActive Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiff Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpAllDiffExcept Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpAnd Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpApart Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpAtLeast Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpAtMost Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpAttributeAsConstraint Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpCatchUndef Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpDefined Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpDiv Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpDontCare Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLeq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpDotLt Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpEq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpFactorial Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpFlatten Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpFreq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpGCC Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpGeq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpGt Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpHist Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpIff Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpImage Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpImageSet Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpImply Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpIn Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpIndexing Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpIntersect Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpInverse Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpLeq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLeq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpLexLt Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpLt Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpMax Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpMin Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpMinus Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpMod Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpNegate Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpNeq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpNot Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpOr Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpParticipants Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpParts Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpParty Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpPow Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpPowerSet Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpPred Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpPreImage Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpProduct Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpRange Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpRelationProj Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpRestrict Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSlicing Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsequence Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSubset Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSubsetEq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSubstring Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSucc Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSum Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSupset Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpSupsetEq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTable Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLeq Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTildeLt Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTogether Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpToInt Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpToMSet Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpToRelation Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpToSet Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTransform Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTrue Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpTwoBars Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpUnion Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy (OpXor Expression )) - , getTypeScriptDeclarations (Proxy :: Proxy PartialityAttr) - , getTypeScriptDeclarations (Proxy :: Proxy (PartitionAttr Type)) - , getTypeScriptDeclarations (Proxy :: Proxy (Range Type)) - , getTypeScriptDeclarations (Proxy :: Proxy ReferenceTo) - , getTypeScriptDeclarations (Proxy :: Proxy Region) - , getTypeScriptDeclarations (Proxy :: Proxy (RelationAttr Type)) - , getTypeScriptDeclarations (Proxy :: Proxy SearchOrder) - , getTypeScriptDeclarations (Proxy :: Proxy (SequenceAttr Type)) - , getTypeScriptDeclarations (Proxy :: Proxy (SetAttr Type)) - , getTypeScriptDeclarations (Proxy :: Proxy (SizeAttr Type)) - , getTypeScriptDeclarations (Proxy :: Proxy Statement) - , getTypeScriptDeclarations (Proxy :: Proxy Strategy) - , getTypeScriptDeclarations (Proxy :: Proxy TrailRewrites) - -- , getTypeScriptDeclarations (Proxy :: Proxy Tree) - , getTypeScriptDeclarations (Proxy :: Proxy Type) - ] - --- tsDef :: IO () --- tsDef = putStrLn "<>" \ No newline at end of file From 19311bd7cf5bb2efb2917f5fa13953c1088e4e7e Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 12:06:12 +0100 Subject: [PATCH 187/378] New lexer is now just lexer --- conjure-cp.cabal | 2 - docs/conjure-help.html | 8 - src/Conjure/Language/AST/ASTParser.hs | 2 +- src/Conjure/Language/AST/Helpers.hs | 2 +- src/Conjure/Language/AST/Reformer.hs | 2 +- src/Conjure/Language/AST/Syntax.hs | 2 +- src/Conjure/Language/Definition.hs | 5 +- .../Language/Expression/Op/Internal/Common.hs | 7 +- src/Conjure/Language/Expression/Op/Negate.hs | 7 +- src/Conjure/Language/Expression/OpTypes.hs | 124 +- src/Conjure/Language/Lexemes.hs | 3 + src/Conjure/Language/Lexer.hs | 493 +++--- src/Conjure/Language/NewLexer.hs | 309 ---- src/Conjure/Language/Parser.hs | 1045 +----------- src/Conjure/Language/Validator.hs | 15 +- src/Conjure/UI/ErrorDisplay.hs | 4 +- src/Conjure/UI/IO.hs | 2 + src/Conjure/UI/MainHelper.hs | 3 +- src/test/Conjure/ModelAllSolveAll.hs | 14 +- src/test/Conjure/ParserFuzz.hs | 2 +- tests/custom/tsdef/run.sh | 1 - tests/custom/tsdef/stdout.expected | 1511 ----------------- 22 files changed, 344 insertions(+), 3219 deletions(-) delete mode 100644 src/Conjure/Language/NewLexer.hs delete mode 100755 tests/custom/tsdef/run.sh delete mode 100644 tests/custom/tsdef/stdout.expected diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 1ed50194c3..c7cb82585f 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -143,7 +143,6 @@ Library , Conjure.Language.ModelDiff , Conjure.Language.ModelStats , Conjure.Language.Lexer - , Conjure.Language.NewLexer , Conjure.Language.NameResolution , Conjure.Language.Parser , Conjure.Language.ParserC @@ -252,7 +251,6 @@ Library , Conjure.UI.VarSymBreaking , Conjure.UI.ParameterGenerator , Conjure.UI.NormaliseQuantified - , Conjure.UI.TypeScript , Conjure.UI.ErrorDisplay build-depends : base >= 4.12.0 diff --git a/docs/conjure-help.html b/docs/conjure-help.html index 757af548bb..053c8cf247 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -238,14 +238,6 @@  --line-width=INTLine width to use during pretty printing.
Default: 120 General:  --limit-time=INTTime limit in seconds (real time). -  -conjure tsdef [OPTIONS] -Generate data type definitions in TypeScript.
These can be used when interfacing with Conjure via JSON. -  -Logging & Output: - --log-level=LOGLEVELLog level. -General: - --limit-time=INTLimit in seconds of real time.
diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 7340de0389..80d885032e 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -17,7 +17,7 @@ import Conjure.Prelude hiding (many,some) import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax -import Conjure.Language.NewLexer +import Conjure.Language.Lexer -- import Conjure.Language.AST.Expression import Conjure.Language.Lexemes diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 1f72b2990a..372db19993 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -27,7 +27,7 @@ module Conjure.Language.AST.Helpers ( import Conjure.Language.AST.Syntax import Conjure.Language.Attributes (allAttributLexemes) import Conjure.Language.Lexemes -import Conjure.Language.NewLexer +import Conjure.Language.Lexer import Conjure.Prelude hiding (many) import qualified Data.Set as Set import Data.Void diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index 5066152fdf..ab8b68b6f9 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -1,7 +1,7 @@ module Conjure.Language.AST.Reformer (Flattenable(..)) where import Conjure.Language.AST.Syntax -import Conjure.Language.NewLexer (ETok (..)) +import Conjure.Language.Lexer (ETok (..)) import Conjure.Prelude import Data.Sequence ((><)) import qualified Data.Sequence as S diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 41ea9bcf6d..c9a80e6d25 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -1,6 +1,6 @@ module Conjure.Language.AST.Syntax where -import Conjure.Language.NewLexer (ETok, prettySplitComments) +import Conjure.Language.Lexer (ETok(..), prettySplitComments) import Conjure.Prelude hiding (Doc, group) import Prettyprinter diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index a946f0497d..fe122e2278 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -90,13 +90,14 @@ instance SimpleJSON Model where toSimpleJSON m = do inners <- mapM toSimpleJSON (mStatements m) let (innersAsMaps, rest) = unzip [ case i of JSON.Object mp -> ([mp], []); _ -> ([], [i]) | i <- inners ] - |> (\ (xs, ys) -> ((mconcat) <$> xs, concat ys)) + |> (\ (xs, ys) -> (mconcat <$> xs, concat ys)) unless (null rest) $ bug $ "Expected json objects only, but got:" <+> vcat (map pretty rest) return (JSON.Object $ mconcat innersAsMaps) fromSimpleJSON = noFromSimpleJSON "Model" fromSimpleJSONModel :: (?typeCheckerMode :: TypeCheckerMode) => + MonadLog m => MonadUserError m => Model -> JSON.Value -> @@ -120,7 +121,7 @@ fromSimpleJSONModel essence json = -- traceM $ show $ "value " <+> pretty value return $ Just $ Declaration (Letting (Name name) value) _ -> do - -- logWarn $ "Ignoring" <+> pretty name <+> "from the JSON file." + logWarn $ "Ignoring" <+> pretty name <+> "from the JSON file." return Nothing return def { mStatements = catMaybes stmts } _ -> noFromSimpleJSON "Model" TypeAny json diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index 86cf42bb48..e23b25904f 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -31,7 +31,8 @@ import Conjure.Language.Domain as X import Conjure.Language.TypeOf as X import Conjure.Language.Pretty as X import Conjure.Language.AdHoc as X -import Conjure.Language.Lexer as X ( Lexeme(..), textToLexeme, lexemeFace ) +import Conjure.Language.Lexemes as X (lexemeFaceDoc) +import Conjure.Language.Lexer as X ( Lexeme(..), textToLexeme ) class SimplifyOp op x where @@ -48,7 +49,7 @@ class BinaryOperator op where -- | just the operator not the arguments opPretty :: BinaryOperator op => proxy op -> Doc -opPretty = lexemeFace . opLexeme +opPretty = lexemeFaceDoc . opLexeme opFixityPrec :: BinaryOperator op => proxy op -> (Fixity, Int) opFixityPrec op = @@ -238,8 +239,6 @@ operators = , ( BinaryOp L_TildeGeq FNone , 400 ) , ( UnaryPrefix L_Minus , 2000 ) , ( UnaryPrefix L_ExclamationMark , 2000 ) - , ( UnaryPrefix L_Minus , 2000 ) - , ( UnaryPrefix L_ExclamationMark , 2000 ) ] --Functional operators that clash with other constructs so require no spaces overloadedFunctionals :: [Lexeme] diff --git a/src/Conjure/Language/Expression/Op/Negate.hs b/src/Conjure/Language/Expression/Op/Negate.hs index 5da9dca8bf..d4ec20c204 100644 --- a/src/Conjure/Language/Expression/Op/Negate.hs +++ b/src/Conjure/Language/Expression/Op/Negate.hs @@ -21,10 +21,11 @@ instance FromJSON x => FromJSON (OpNegate x) where parseJSON = genericParseJSO instance (TypeOf x, Pretty x) => TypeOf (OpNegate x) where typeOf p@(OpNegate a) = do - typeOfA <- typeOf a --TODO: unsure of this refactor - case typeOfA of - TypeInt t -> return $ TypeInt t + TypeInt t <- typeOf a + case t of + TagInt -> return () _ -> raiseTypeError p + return (TypeInt t) instance SimplifyOp OpNegate x where simplifyOp _ = na "simplifyOp{OpNegate}" diff --git a/src/Conjure/Language/Expression/OpTypes.hs b/src/Conjure/Language/Expression/OpTypes.hs index 02ac7ad7a6..3633abaa35 100644 --- a/src/Conjure/Language/Expression/OpTypes.hs +++ b/src/Conjure/Language/Expression/OpTypes.hs @@ -1,4 +1,4 @@ -module Conjure.Language.Expression.OpTypes () where +module Conjure.Language.Expression.OpTypes where import Conjure.Language.Lexemes (Lexeme) import Conjure.Language.Expression.Op.Internal.Common (Type (..)) import Conjure.Prelude @@ -15,46 +15,6 @@ rightArgDep f _ = f leftArgDep :: (Type-> Type) -> TypeMapping2 leftArgDep f a _ = f a --- binOpType :: Lexeme -> TypeMapping2 --- binOpType L_Plus = const id --- binOpType L_Minus = const id --- binOpType L_Times = const id --- binOpType L_Div = constInt --- binOpType L_Mod = constInt --- binOpType L_Pow = constInt --- binOpType L_Eq = constBool --- binOpType L_Neq = constBool --- binOpType L_Lt = constBool --- binOpType L_Leq = constBool --- binOpType L_Gt = constBool --- binOpType L_Geq = constBool --- binOpType L_in = constBool --- binOpType L_And = constBool --- binOpType L_Or = constBool --- binOpType L_Imply = constBool --- binOpType L_Iff = constBool -- b b b --- binOpType L_subset = constBool -- set mset func rel --- binOpType L_subsetEq = constBool -- ^^^ --- binOpType L_supset = constBool -- ^^^^ --- binOpType L_supsetEq = constBool -- ^^ --- binOpType L_subsequence = constBool -- seq - seq -bool --- binOpType L_substring = constBool -- seq - seq -bool --- binOpType L_intersect = const id --- binOpType L_union = const id --- binOpType L_LexLt = constBool --- binOpType L_LexLeq = constBool --- binOpType L_LexGt = constBool --- binOpType L_LexGeq = constBool --- binOpType L_DotLt = constBool -- same same bool --- binOpType L_DotLeq = constBool --- binOpType L_DotGt = constBool --- binOpType L_DotGeq = constBool --- binOpType L_TildeLt = constBool --- binOpType L_TildeLeq = constBool --- binOpType L_TildeGt = constBool --- binOpType L_TildeGeq = constBool --- binOpType _ = constantTyped2 TypeAny - constInt :: TypeMapping2 constInt = constantTyped2 (TypeInt TagInt) @@ -64,85 +24,3 @@ constBool = constantTyped2 TypeBool same :: (Type -> Type) same = id --- mkOp :: (Op x :< x, ReferenceContainer x, ExpressionLike x) => OpType -> [x] -> x --- mkOp op xs = case op of --- PrefixOp lex -> case lex of --- L_ExclamationMark -> inject $ MkOpNot $ OpNot (arg xs 0 "not") --- L_Minus -> inject $ MkOpNegate $ OpNegate (arg xs 0 "negate") --- _ -> bug $ "Unexpected Prefix operator :" <+> pretty (show lex) --- FactorialOp -> inject $ MkOpFactorial $ OpFactorial (arg xs 0 "factorial") --- TwoBarOp -> inject $ MkOpTwoBars $ OpTwoBars (arg xs 0 "twoBars") --- FunctionOp lex -> case lex of --- L_fAnd -> inject $ MkOpAnd $ OpAnd (arg xs 0 "and") --- L_fOr -> inject $ MkOpOr $ OpOr (arg xs 0 "or") --- L_fXor -> inject $ MkOpXor $ OpXor (arg xs 0 "xor") --- L_Sum -> inject $ MkOpSum $ OpSum (arg xs 0 "sum") --- L_Product -> inject $ MkOpProduct $ OpProduct (arg xs 0 "product") --- -- _ -> opImage (fromName (Name op)) xs --- L_true -> inject $ MkOpTrue $ OpTrue (arg xs 0 "true") --- L_toInt -> inject $ MkOpToInt $ OpToInt (arg xs 0 "toInt") --- L_makeTable -> inject $ MkOpMakeTable $ OpMakeTable (arg xs 0 "makeTable") --- L_table -> inject $ MkOpTable $ OpTable (arg xs 0 "table") (arg xs 1 "table") --- L_gcc -> inject $ MkOpGCC $ OpGCC (arg xs 0 "gcc") (arg xs 1 "gcc") (arg xs 2 "gcc") --- L_atleast -> inject $ MkOpAtLeast $ OpAtLeast (arg xs 0 "atleast") (arg xs 1 "atleast") (arg xs 2 "atleast") --- L_atmost -> inject $ MkOpAtMost $ OpAtMost (arg xs 0 "atmost" ) (arg xs 1 "atmost" ) (arg xs 2 "atmost" ) --- L_defined -> inject $ MkOpDefined $ OpDefined (arg xs 0 "defined") --- L_range -> inject $ MkOpRange $ OpRange (arg xs 0 "range") --- L_restrict -> inject $ MkOpRestrict $ OpRestrict (arg xs 0 "restrict") (arg xs 1 "restrict") --- L_allDiff -> inject $ MkOpAllDiff $ OpAllDiff (arg xs 0 "allDiff") --- L_alldifferent_except -> inject $ MkOpAllDiffExcept $ OpAllDiffExcept --- (arg xs 0 "allDiffExcept") --- (arg xs 1 "allDiffExcept") --- L_catchUndef -> inject $ MkOpCatchUndef $ OpCatchUndef (arg xs 0 "catchUndef") --- (arg xs 1 "catchUndef") --- L_dontCare -> inject $ MkOpDontCare $ OpDontCare (arg xs 0 "dontCare") --- L_toSet -> inject $ MkOpToSet $ OpToSet False (arg xs 0 "toSet") --- L_toMSet -> inject $ MkOpToMSet $ OpToMSet (arg xs 0 "toMSet") --- L_toRelation -> inject $ MkOpToRelation $ OpToRelation (arg xs 0 "toRelation") --- L_max -> inject $ MkOpMax $ OpMax (arg xs 0 "max") --- L_min -> inject $ MkOpMin $ OpMin (arg xs 0 "min") --- L_image -> inject $ MkOpImage $ OpImage (arg xs 0 "image") --- (arg xs 1 "image") --- L_transform -> inject $ MkOpTransform $ OpTransform (arg xs 0 "transform") --- (arg xs 1 "transform") - --- L_imageSet -> inject $ MkOpImageSet $ OpImageSet (arg xs 0 "imageSet") --- (arg xs 1 "imageSet") --- L_preImage -> inject $ MkOpPreImage $ OpPreImage (arg xs 0 "preImage") --- (arg xs 1 "preImage") --- L_inverse -> inject $ MkOpInverse $ OpInverse (arg xs 0 "inverse") --- (arg xs 1 "inverse") --- L_freq -> inject $ MkOpFreq $ OpFreq (arg xs 0 "freq") --- (arg xs 1 "freq") --- L_hist -> inject $ MkOpHist $ OpHist (arg xs 0 "hist") --- L_parts -> inject $ MkOpParts $ OpParts (arg xs 0 "parts") --- L_together -> inject $ MkOpTogether $ OpTogether (arg xs 0 "together") --- (arg xs 1 "together") --- L_apart -> inject $ MkOpApart $ OpApart (arg xs 0 "apart") --- (arg xs 1 "apart") --- L_party -> inject $ MkOpParty $ OpParty (arg xs 0 "party") --- (arg xs 1 "party") --- L_participants -> inject $ MkOpParticipants $ OpParticipants (arg xs 0 "participants") --- L_active -> inject $ MkOpActive $ OpActive (arg xs 0 "active") --- (arg xs 1 "active" |> nameOut |> fromMaybe (bug "active")) --- L_pred -> inject $ MkOpPred $ OpPred (arg xs 0 "pred") --- L_succ -> inject $ MkOpSucc $ OpSucc (arg xs 0 "succ") --- L_factorial -> inject $ MkOpFactorial $ OpFactorial (arg xs 0 "factorial") --- L_powerSet -> inject $ MkOpPowerSet $ OpPowerSet (arg xs 0 "powerSet") --- L_concatenate -> inject $ MkOpFlatten $ OpFlatten (Just 1) --- (arg xs 0 "concatenate") --- L_flatten -> --- case xs of --- [m] -> inject $ MkOpFlatten $ OpFlatten Nothing m --- [n,m] -> --- let n' = fromInteger $ fromMaybe (bug "The 1st argument of flatten has to be a constant integer.") (intOut "flatten" n) --- in inject $ MkOpFlatten $ OpFlatten (Just n') m --- _ -> bug "flatten takes 1 or 2 arguments." --- _ -> bug ("Unknown lexeme for function type operator:" <+> pretty (show lex)) - - --- arg :: [a] -> Int -> Doc -> a --- arg xs n op = --- case atMay xs n of --- Nothing -> bug ("Missing argument" <+> pretty (n+1) <+> "for operator" <+> op) --- Just v -> v diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 9233cd36ef..1a081e7eb1 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -525,6 +525,9 @@ lexemeFace l = Nothing -> (show l) Just t -> (T.unpack t) +lexemeFaceDoc :: Lexeme -> Doc +lexemeFaceDoc = stringToDoc . lexemeFace + lexemeText :: Lexeme -> T.Text lexemeText l = fromMaybe (T.pack $ show l) (M.lookup l mapLexemeToText) diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index fdfd22e1a9..156f662733 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -1,28 +1,58 @@ -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE InstanceSigs #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use camelCase" #-} module Conjure.Language.Lexer ( Lexeme(..) , LexemePos(..) - , textToLexeme + , textToLexeme, + ETok(..), + Offsets(..), + Reformable(..), + prettySplitComments, + eLex, + reformList, + tokenSourcePos, + totalLength, + trueLength, + tokenStart, + sourcePos0, + LexerError(..), + runLexer, + ETokenStream(..) , lexemeText - , lexemeFace ) where -import Conjure.Prelude hiding (some,many) -import Conjure.Language.Lexemes hiding (lexemeFace) -import Data.Char ( isAlpha, isAlphaNum ) + +import Conjure.Language.Lexemes +import Conjure.Prelude hiding (many, some,Text) +import Data.Char (isAlpha, isAlphaNum) import Data.Void -import qualified Data.HashMap.Strict as M + import qualified Data.Text as T import qualified Data.Text.Lazy as L -import Conjure.Language.Pretty -import qualified Text.Megaparsec.Char.Lexer as L +import Data.Text (Text) +import Text.Megaparsec hiding (State) import Text.Megaparsec.Char +import Data.List (splitAt) +import qualified Data.List.NonEmpty as NE +import qualified Text.Megaparsec as L +import Prelude (read) +import qualified Prettyprinter as Pr +import Conjure.Prelude hiding (some,many) + +import qualified Data.HashMap.Strict as M +import qualified Data.Text as T + +import Conjure.Language.Pretty + + import Text.Megaparsec --( SourcePos, initialPos, incSourceLine, incSourceColumn, setSourceColumn ) import Text.Megaparsec.Stream () @@ -33,51 +63,33 @@ data LexemePos = LexemePos SourcePos -- source position, just after this lexeme, including whitespace after the lexeme deriving (Show,Eq, Ord) +sourcePos0 :: SourcePos +sourcePos0 = SourcePos "" (mkPos 1) (mkPos 1) -lexemeFace :: Lexeme -> Doc -lexemeFace L_Newline = "new line" -lexemeFace L_Carriage = "\\r" -lexemeFace L_Space = "space character" -lexemeFace L_Tab = "tab character" -lexemeFace (LIntLiteral i) = pretty i -lexemeFace (LIdentifier i) = pretty (T.unpack i) --- lexemeFace (LComment i) = Pr.text (T.unpack i) -lexemeFace l = - case M.lookup l mapLexemeToText of - Nothing -> pretty (show l) - Just t -> pretty . T.unpack $ t - -isLexemeSpace :: Lexeme -> Bool -isLexemeSpace L_Newline {} = True -isLexemeSpace L_Carriage{} = True -isLexemeSpace L_Tab {} = True -isLexemeSpace L_Space {} = True --- isLexemeSpace LComment {} = True -isLexemeSpace _ = False - -tryLex :: T.Text -> (T.Text, Lexeme) -> Maybe (T.Text, Lexeme) -tryLex running (face,lexeme) = do - rest <- T.stripPrefix face running - if T.all isIdentifierLetter face - then - case T.uncons rest of - Just (ch, _) | isIdentifierLetter ch -> Nothing - _ -> Just (rest, lexeme) - else Just (rest, lexeme) - --- tryLexIntLiteral :: T.Text -> Maybe (T.Text, Lexeme) --- tryLexIntLiteral t = --- case T.decimal t of --- Left _ -> Nothing --- Right (x, rest) -> Just (rest, LIntLiteral x) +class Reformable a where + reform :: a -> L.Text +instance Reformable ETok where + reform e | oTLength (offsets e) == 0 = "" + reform (ETok{capture=cap,trivia=triv}) = L.append (L.concat $ map showTrivia triv) (L.fromStrict cap) + where + showTrivia :: Trivia -> L.Text + showTrivia x = case x of + WhiteSpace txt -> L.fromStrict txt + LineComment txt -> L.fromStrict txt + BlockComment txt -> L.fromStrict txt -emojis :: [Char] -emojis = concat [['\x1f600'..'\x1F64F'], - ['\x1f300'..'\x1f5ff'], - ['\x1f680'..'\x1f999'], - ['\x1f1e0'..'\x1f1ff']] +reformList :: (Traversable t ,Reformable a) => t a -> L.Text +reformList = L.concat . map reform . toList +emojis :: [Char] +emojis = + concat + [ ['\x1f600' .. '\x1F64F'] + , ['\x1f300' .. '\x1f5ff'] + , ['\x1f680' .. '\x1f999'] + , ['\x1f1e0' .. '\x1f1ff'] + ] isIdentifierFirstLetter :: Char -> Bool isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem` emojis @@ -85,179 +97,258 @@ isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis -tryLexMetaVar :: T.Text -> Maybe (T.Text, Lexeme) -tryLexMetaVar running = do - ('&', rest) <- T.uncons running - (rest2, LIdentifier iden) <- tryLexIden rest - return (rest2, LMetaVar iden) - -tryLexIden :: T.Text -> Maybe (T.Text, Lexeme) -tryLexIden running = do - let (iden,rest) = T.span isIdentifierLetter running - (ch, _) <- T.uncons running - if isIdentifierFirstLetter ch - then - if T.null iden - then Nothing - else Just (rest, LIdentifier iden) - else Nothing - -tryLexQuotedIden :: T.Text -> Maybe (T.Text, Lexeme) -tryLexQuotedIden running = do - let - go inp = do - ('\"', rest) <- T.uncons inp - go2 "\"" rest - - -- after the first " - go2 sofar inp = do - (ch, rest) <- T.uncons inp - case ch of - -- end - '\"' - | sofar /= "\"" -- so we don't allow empty strings - -> Just (rest, LIdentifier (T.pack (reverse ('\"' : sofar)))) - -- escaped - '\\' -> do - (ch2, rest2) <- T.uncons rest - case ch2 of - '\"' -> go2 ('\"':sofar) rest2 - '\\' -> go2 ('\\':sofar) rest2 - _ -> Nothing - _ -> go2 (ch:sofar) rest - go running - --- tryLexComment :: T.Text -> Maybe (T.Text, Lexeme) --- tryLexComment running = let (dollar,rest1) = T.span (=='$') running --- in if T.null dollar --- then Nothing --- else let (commentLine,rest2) = T.span (/='\n') rest1 --- in Just (rest2, LComment commentLine) - - --- instance ShowToken [LexemePos] where --- showToken = intercalate ", " . map showToken - --- instance ShowToken LexemePos where --- showToken (LexemePos tok _ _) = showToken tok - --- instance ShowToken Lexeme where --- showToken = show . lexemeFace - ---Generic - --- instance Hashable Lexeme - -type Offsets = (Int,Int,Int,Lexeme) -type Parser = Parsec Void T.Text -data Trivia = WhiteSpace T.Text | LineComment T.Text | BlockComment T.Text - deriving (Show,Eq,Ord) -data ETok = ETok { - offsets :: Offsets, - trivia :: [Trivia], - lexeme :: Lexeme -} - deriving (Eq,Ord) - - -makeToken :: Offsets -> [Trivia] -> Lexeme -> ETok +data Offsets =Offsets {oStart::Int,oTrueStart :: Int,oTLength::Int,oSourcePos::SourcePos} + deriving (Show, Eq, Ord) +type Lexer = Parsec Void Text + +-- type Lexer = Parsec Void Text ETokenStream + +data Trivia = WhiteSpace Text | LineComment Text | BlockComment Text + deriving (Show, Eq, Ord) + +data ETok = ETok + { offsets :: Offsets + , trivia :: [Trivia] + , lexeme :: Lexeme + , capture :: Text + } + deriving (Eq, Ord) + +instance Pr.Pretty ETok where + pretty = Pr.unAnnotate . uncurry (Pr.<>) . prettySplitComments + +prettySplitComments :: ETok -> (Pr.Doc ann, Pr.Doc ann) +prettySplitComments (ETok _ tr _ capture) = (Pr.hcat [Pr.pretty t Pr.<> Pr.hardline | LineComment t <- tr],Pr.pretty capture) + + +totalLength :: ETok -> Int +totalLength = oTLength . offsets + +trueLength :: ETok -> Int +trueLength (ETok{offsets = (Offsets o d l _)}) = max 0 (l + (o-d)) + +tokenStart :: ETok -> Int +tokenStart (ETok{offsets = (Offsets _ s _ _)}) = s + +tokenSourcePos :: ETok -> SourcePos +tokenSourcePos = oSourcePos . offsets +sourcePosAfter :: ETok -> SourcePos +sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) + +makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok -eLex :: Parser [ETok] -eLex = manyTill aToken eof +data LexerError = LexerError String + deriving (Show) -aToken :: Parser ETok +runLexer :: Text -> Either LexerError ETokenStream +runLexer txt = case runParser eLex "Lexer" txt of + Left peb -> Left $ LexerError $ errorBundlePretty peb + Right ets -> Right $ ETokenStream txt ets + + +eLex :: Lexer [ETok] +eLex = + do + main <- many $ try aToken + end <- pEOF + return $ main ++ [end] + +aToken :: Lexer ETok aToken = do - start <- getOffset - whiteSpace <- pTrivia - wse <- getOffset - tok <- aLexeme - tokenEnd <- getOffset - return $ makeToken (start,wse,tokenEnd-start,tok) whiteSpace tok - -aLexeme :: Parser Lexeme -aLexeme = try pEOF - <|> try pNumber - <|> try (choice $ map pLexeme lexemes) - <|> try pIdentifier - <|> try pMetaVar - -pEOF :: Parser Lexeme + start <- getOffset + whiteSpace <- pTrivia + wse <- getOffset + spos <- getSourcePos + (tok,cap) <- aLexeme + tokenEnd <- getOffset + return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace tok cap + +pEOF :: Lexer ETok pEOF = do - eof - return L_EOF + start <- getOffset + whiteSpace <- pTrivia + wse <- getOffset + spos <- getSourcePos + eof + tokenEnd <- getOffset + return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace L_EOF "" -pNumber :: Parser Lexeme -pNumber = do - LIntLiteral <$> L.decimal -pMetaVar :: Parser Lexeme -pMetaVar = do - empty - return $ LMetaVar "TODO" +aLexeme :: Lexer (Lexeme,Text) +aLexeme = aLexemeStrict <|> pFallback +aLexemeStrict :: Lexer (Lexeme,Text) +aLexemeStrict = + try + pNumber + <|> try (choice (map pLexeme lexemes) "Lexeme") + <|> try pIdentifier + <|> try pQuotedIdentifier + <|> try pMetaVar -pIdentifier :: Parser Lexeme -pIdentifier = do - firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter - rest <- takeWhileP Nothing isIdentifierLetter - return $ LIdentifier (T.append firstLetter rest) +pNumber :: Lexer (Lexeme,Text) +pNumber = do + v <- takeWhile1P Nothing (`elem` ['1','2','3','4','5','6','7','8','9','0']) + let n = read $ T.unpack v + return (LIntLiteral n,v) + "Numeric Literal" -pLexeme :: (T.Text,Lexeme) -> Parser Lexeme -pLexeme (s,l) = do - tok <- string s - return l +pMetaVar :: Lexer (Lexeme,Text) +pMetaVar = do + amp <- chunk "&" + (_,cap) <- pIdentifier + return (LMetaVar cap,amp `T.append` cap) -pTrivia :: Parser [Trivia] +pIdentifier :: Lexer (Lexeme,Text) +pIdentifier = do + firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter + rest <- takeWhileP Nothing isIdentifierLetter + let ident = T.append firstLetter rest + return ( LIdentifier ident, ident) + "Identifier" + +pQuotedIdentifier :: Lexer (Lexeme,Text) +pQuotedIdentifier = do + l <- quoted + return (LIdentifier l,l) + +pFallback :: Lexer (Lexeme,Text) +pFallback = do + q <- T.pack <$> someTill anySingle (lookAhead $ try somethingValid) + return (LUnexpected q,q) + where + somethingValid :: Lexer () + somethingValid = void pTrivia <|> void aLexemeStrict <|> eof + +pLexeme :: (Text, Lexeme) -> Lexer (Lexeme,Text) +pLexeme (s, l) = do + tok <- string s + notFollowedBy $ if isIdentifierLetter $ T.last tok then nonIden else empty + return (l,tok) + "Lexeme :" ++ show l + where + nonIden = takeWhile1P Nothing isIdentifierLetter + +pTrivia :: Lexer [Trivia] pTrivia = many (whiteSpace <|> lineComment <|> blockComment) -whiteSpace :: Parser Trivia +whiteSpace :: Lexer Trivia whiteSpace = do - s <- some spaceChar - return $ WhiteSpace $ T.pack s + s <- some spaceChar + return $ WhiteSpace $ T.pack s -lineEnd :: Parser () -lineEnd = do - _ <- optional eol - _ <- optional eof - return () +quoted :: Lexer Text +quoted = do + open <- char '\"' + (body,end) <- manyTill_ anySingle $ char '\"' + return $ T.pack $ open:body++[end] -lineComment :: Parser Trivia +lineEnd :: Lexer [Char] +lineEnd = T.unpack <$> eol <|> ( eof >> return []) + +lineComment :: Lexer Trivia lineComment = do - _<-try (chunk "$") - text <- manyTill L.charLiteral lineEnd - return $ LineComment $ T.pack text + _ <- try (chunk "$") + (text,end) <- manyTill_ anySingle lineEnd + return $ LineComment $ T.pack ('$' : text++end) -blockComment :: Parser Trivia +blockComment :: Lexer Trivia blockComment = do - _ <- try (chunk "/*") - text <- manyTill L.charLiteral (chunk "*/") - return $ BlockComment $ T.pack text + _ <- try (chunk "/*") + text <- manyTill L.anySingle (lookAhead (void(chunk "*/") <|>eof)) + cl <- optional $ chunk "*/" + let cl' = fromMaybe "" cl + return $ BlockComment $ T.concat ["/*",T.pack text ,cl' ] -instance Show ETok where - show (ETok _ _ q) = show q -newtype ETokenStream = ETokenStream [ETok] +data ETokenStream = ETokenStream + { streamSourceText :: Text + , streamTokens :: [ETok] + } instance Stream ETokenStream where - type Token ETokenStream= ETok - type Tokens ETokenStream= [ETok] - tokenToChunk proxy x = [x] - tokensToChunk proxy xs= xs - chunkToTokens proxy = id - chunkLength proxy = length - chunkEmpty proxy xs = False - take1_ (ETokenStream (x:xs)) = Just (x, ETokenStream xs) - take1_ (ETokenStream []) = Nothing - takeN_ n xs | n<=0 = Just([],xs) - takeN_ n (ETokenStream []) = Nothing - takeN_ n (ETokenStream xs) = Just (take n xs,ETokenStream $ drop n xs) - takeWhile_ p (ETokenStream xs) = (takeWhile p xs,ETokenStream $ dropWhile p xs) + type Token ETokenStream = ETok + type Tokens ETokenStream = [ETok] + tokenToChunk _ x = [x] + tokensToChunk _ xs = xs + chunkToTokens _ = id + chunkLength _ = length + chunkEmpty _ [] = True + chunkEmpty _ _ = False + take1_ :: ETokenStream -> Maybe (Token ETokenStream, ETokenStream) + take1_ (ETokenStream _ (x : xs)) = Just (x, buildStream xs) + take1_ (ETokenStream _ []) = Nothing + takeN_ :: Int -> ETokenStream -> Maybe (Tokens ETokenStream, ETokenStream) + takeN_ n xs | n <= 0 = Just ([], xs) + takeN_ _ (ETokenStream _ []) = Nothing + takeN_ n (ETokenStream s xs) = Just (take n xs, buildStream $ drop n xs) + takeWhile_ :: (Token ETokenStream -> Bool) -> ETokenStream -> (Tokens ETokenStream, ETokenStream) + takeWhile_ p (ETokenStream _ xs) = + (a, buildStream b) + where + (a, b) = span p xs + +-- (takeWhile p xs,ETokenStream $ dropWhile p xs) + +buildStream :: [ETok] -> ETokenStream +buildStream xs = case NE.nonEmpty xs of + Nothing -> ETokenStream "" xs + Just _ -> ETokenStream (T.pack "showTokens pxy s") xs + instance VisualStream ETokenStream where - showTokens p q = concat $ show <$> q - tokensLength p ls = sum $ len <$> ls - where len (ETok (_,_,x,_) _ _) = x + showTokens _ = L.unpack . reformList + tokensLength _ = sum . fmap ( oTLength . offsets ) +-- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where - reachOffset i s = (Nothing, s) - reachOffsetNoLine i s = s \ No newline at end of file + reachOffset o PosState{..} = + ( Just (prefix ++ restOfLine) + , PosState + { pstateInput = buildStream post + , pstateOffset = max pstateOffset o + , pstateSourcePos = newSourcePos + , pstateTabWidth = pstateTabWidth + , pstateLinePrefix = prefix + } + ) + where + prefix = + if sameLine + then pstateLinePrefix ++ preLine + else preLine + sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos + newSourcePos = + case post of + [] -> pstateSourcePos + (x : _) -> tokenSourcePos x + (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) + (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) + preLine = reverse . takeWhile (/= '\n') . reverse $ preStr + restOfLine = takeWhile (/= '\n') postStr + +pxy :: Proxy ETokenStream +pxy = Proxy + + +-- lexemeFace :: Lexeme -> Doc +-- lexemeFace L_Newline = "new line" +-- lexemeFace L_Carriage = "\\r" +-- lexemeFace L_Space = "space character" +-- lexemeFace L_Tab = "tab character" +-- lexemeFace (LIntLiteral i) = pretty i +-- lexemeFace (LIdentifier i) = pretty (T.unpack i) +-- lexemeFace l = +-- case M.lookup l mapLexemeToText of +-- Nothing -> pretty (show l) +-- Just t -> pretty . T.unpack $ t + + +instance Show ETok where + show (ETok _ _ _ q) = show q + + + +-- instance TraversableStream ETokenStream where +-- reachOffset i s = (Nothing, s) +-- reachOffsetNoLine i s = s \ No newline at end of file diff --git a/src/Conjure/Language/NewLexer.hs b/src/Conjure/Language/NewLexer.hs deleted file mode 100644 index bbf569d725..0000000000 --- a/src/Conjure/Language/NewLexer.hs +++ /dev/null @@ -1,309 +0,0 @@ -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE InstanceSigs #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE TypeFamilies #-} - -module Conjure.Language.NewLexer ( - ETok(..), - Offsets(..), - Reformable(..), - prettySplitComments, - eLex, - reformList, - tokenSourcePos, - totalLength, - trueLength, - tokenStart, - sourcePos0, - LexerError(..), - runLexer, - ETokenStream(..) - ) where - -import Conjure.Language.Lexemes -import Conjure.Prelude hiding (many, some,Text) -import Data.Char (isAlpha, isAlphaNum) -import Data.Void - -import qualified Data.Text as T -import qualified Data.Text.Lazy as L -import Data.Text (Text) -import Text.Megaparsec hiding (State) -import Text.Megaparsec.Char - -import Data.List (splitAt) -import qualified Data.List.NonEmpty as NE -import qualified Text.Megaparsec as L -import Prelude (read) -import Prettyprinter as Pr - - -sourcePos0 :: SourcePos -sourcePos0 = SourcePos "" (mkPos 1) (mkPos 1) - -class Reformable a where - reform :: a -> L.Text - -instance Reformable ETok where - reform e | oTLength (offsets e) == 0 = "" - reform (ETok{capture=cap,trivia=triv}) = L.append (L.concat $ map showTrivia triv) (L.fromStrict cap) - where - showTrivia :: Trivia -> L.Text - showTrivia x = case x of - WhiteSpace txt -> L.fromStrict txt - LineComment txt -> L.fromStrict txt - BlockComment txt -> L.fromStrict txt - -reformList :: (Traversable t ,Reformable a) => t a -> L.Text -reformList = L.concat . map reform . toList - -emojis :: [Char] -emojis = - concat - [ ['\x1f600' .. '\x1F64F'] - , ['\x1f300' .. '\x1f5ff'] - , ['\x1f680' .. '\x1f999'] - , ['\x1f1e0' .. '\x1f1ff'] - ] - -isIdentifierFirstLetter :: Char -> Bool -isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem` emojis - -isIdentifierLetter :: Char -> Bool -isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis - -data Offsets =Offsets {oStart::Int,oTrueStart :: Int,oTLength::Int,oSourcePos::SourcePos} - deriving (Show, Eq, Ord) -type Lexer = Parsec Void Text - --- type Lexer = Parsec Void Text ETokenStream - -data Trivia = WhiteSpace Text | LineComment Text | BlockComment Text - deriving (Show, Eq, Ord) - -data ETok = ETok - { offsets :: Offsets - , trivia :: [Trivia] - , lexeme :: Lexeme - , capture :: Text - } - deriving (Eq, Ord) - -instance Pr.Pretty ETok where - pretty = Pr.unAnnotate . uncurry (<>) . prettySplitComments - -prettySplitComments :: ETok -> (Pr.Doc ann, Pr.Doc ann) -prettySplitComments (ETok _ tr _ capture) = (Pr.hcat [Pr.pretty t <> Pr.hardline | LineComment t <- tr],Pr.pretty capture) - - -totalLength :: ETok -> Int -totalLength = oTLength . offsets - -trueLength :: ETok -> Int -trueLength (ETok{offsets = (Offsets o d l _)}) = max 0 (l + (o-d)) - -tokenStart :: ETok -> Int -tokenStart (ETok{offsets = (Offsets _ s _ _)}) = s - -tokenSourcePos :: ETok -> SourcePos -tokenSourcePos = oSourcePos . offsets -sourcePosAfter :: ETok -> SourcePos -sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) - -makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok -makeToken = ETok - -data LexerError = LexerError String - deriving (Show) - -runLexer :: Text -> Either LexerError ETokenStream -runLexer txt = case runParser eLex "Lexer" txt of - Left peb -> Left $ LexerError $ errorBundlePretty peb - Right ets -> Right $ ETokenStream txt ets - - -eLex :: Lexer [ETok] -eLex = - do - main <- many $ try aToken - end <- pEOF - return $ main ++ [end] - -aToken :: Lexer ETok -aToken = do - start <- getOffset - whiteSpace <- pTrivia - wse <- getOffset - spos <- getSourcePos - (tok,cap) <- aLexeme - tokenEnd <- getOffset - return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace tok cap - -pEOF :: Lexer ETok -pEOF = do - start <- getOffset - whiteSpace <- pTrivia - wse <- getOffset - spos <- getSourcePos - eof - tokenEnd <- getOffset - return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace L_EOF "" - - -aLexeme :: Lexer (Lexeme,Text) -aLexeme = aLexemeStrict <|> pFallback - -aLexemeStrict :: Lexer (Lexeme,Text) -aLexemeStrict = - try - pNumber - <|> try (choice (map pLexeme lexemes) "Lexeme") - <|> try pIdentifier - <|> try pQuotedIdentifier - <|> try pMetaVar - - -pNumber :: Lexer (Lexeme,Text) -pNumber = do - v <- takeWhile1P Nothing (`elem` ['1','2','3','4','5','6','7','8','9','0']) - let n = read $ T.unpack v - return (LIntLiteral n,v) - "Numeric Literal" - -pMetaVar :: Lexer (Lexeme,Text) -pMetaVar = do - amp <- chunk "&" - (_,cap) <- pIdentifier - return (LMetaVar cap,amp `T.append` cap) - -pIdentifier :: Lexer (Lexeme,Text) -pIdentifier = do - firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter - rest <- takeWhileP Nothing isIdentifierLetter - let ident = T.append firstLetter rest - return ( LIdentifier ident, ident) - "Identifier" - -pQuotedIdentifier :: Lexer (Lexeme,Text) -pQuotedIdentifier = do - l <- quoted - return (LIdentifier l,l) - -pFallback :: Lexer (Lexeme,Text) -pFallback = do - q <- T.pack <$> someTill anySingle (lookAhead $ try somethingValid) - return (LUnexpected q,q) - where - somethingValid :: Lexer () - somethingValid = void pTrivia <|> void aLexemeStrict <|> eof - -pLexeme :: (Text, Lexeme) -> Lexer (Lexeme,Text) -pLexeme (s, l) = do - tok <- string s - notFollowedBy $ if isIdentifierLetter $ T.last tok then nonIden else empty - return (l,tok) - "Lexeme :" ++ show l - where - nonIden = takeWhile1P Nothing isIdentifierLetter - -pTrivia :: Lexer [Trivia] -pTrivia = many (whiteSpace <|> lineComment <|> blockComment) - -whiteSpace :: Lexer Trivia -whiteSpace = do - s <- some spaceChar - return $ WhiteSpace $ T.pack s - -quoted :: Lexer Text -quoted = do - open <- char '\"' - (body,end) <- manyTill_ anySingle $ char '\"' - return $ T.pack $ open:body++[end] - -lineEnd :: Lexer [Char] -lineEnd = T.unpack <$> eol <|> ( eof >> return []) - -lineComment :: Lexer Trivia -lineComment = do - _ <- try (chunk "$") - (text,end) <- manyTill_ anySingle lineEnd - return $ LineComment $ T.pack ('$' : text++end) - -blockComment :: Lexer Trivia -blockComment = do - _ <- try (chunk "/*") - text <- manyTill L.anySingle (lookAhead (void(chunk "*/") <|>eof)) - cl <- optional $ chunk "*/" - let cl' = fromMaybe "" cl - return $ BlockComment $ T.concat ["/*",T.pack text ,cl' ] - -instance Show ETok where - show (ETok _ _ q _) = show q - -data ETokenStream = ETokenStream - { streamSourceText :: Text - , streamTokens :: [ETok] - } -instance Stream ETokenStream where - type Token ETokenStream = ETok - type Tokens ETokenStream = [ETok] - tokenToChunk _ x = [x] - tokensToChunk _ xs = xs - chunkToTokens _ = id - chunkLength _ = length - chunkEmpty _ [] = True - chunkEmpty _ _ = False - take1_ :: ETokenStream -> Maybe (Token ETokenStream, ETokenStream) - take1_ (ETokenStream _ (x : xs)) = Just (x, buildStream xs) - take1_ (ETokenStream _ []) = Nothing - takeN_ :: Int -> ETokenStream -> Maybe (Tokens ETokenStream, ETokenStream) - takeN_ n xs | n <= 0 = Just ([], xs) - takeN_ _ (ETokenStream _ []) = Nothing - takeN_ n (ETokenStream s xs) = Just (take n xs, buildStream $ drop n xs) - takeWhile_ :: (Token ETokenStream -> Bool) -> ETokenStream -> (Tokens ETokenStream, ETokenStream) - takeWhile_ p (ETokenStream _ xs) = - (a, buildStream b) - where - (a, b) = span p xs - --- (takeWhile p xs,ETokenStream $ dropWhile p xs) - -buildStream :: [ETok] -> ETokenStream -buildStream xs = case NE.nonEmpty xs of - Nothing -> ETokenStream "" xs - Just _ -> ETokenStream (T.pack "showTokens pxy s") xs - -instance VisualStream ETokenStream where - showTokens _ = L.unpack . reformList - tokensLength _ = sum . fmap ( oTLength . offsets ) - --- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams -instance TraversableStream ETokenStream where - reachOffset o PosState{..} = - ( Just (prefix ++ restOfLine) - , PosState - { pstateInput = buildStream post - , pstateOffset = max pstateOffset o - , pstateSourcePos = newSourcePos - , pstateTabWidth = pstateTabWidth - , pstateLinePrefix = prefix - } - ) - where - prefix = - if sameLine - then pstateLinePrefix ++ preLine - else preLine - sameLine = sourceLine newSourcePos == sourceLine pstateSourcePos - newSourcePos = - case post of - [] -> pstateSourcePos - (x : _) -> tokenSourcePos x - (pre, post) :: ([ETok], [ETok]) = splitAt (o - pstateOffset) (streamTokens pstateInput) - (preStr, postStr) = (maybe "" (showTokens pxy) (NE.nonEmpty pre), maybe "" (showTokens pxy) (NE.nonEmpty post)) - preLine = reverse . takeWhile (/= '\n') . reverse $ preStr - restOfLine = takeWhile (/= '\n') postStr - -pxy :: Proxy ETokenStream -pxy = Proxy \ No newline at end of file diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 9b57907bce..aeb44548d5 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -17,30 +17,18 @@ module Conjure.Language.Parser -- conjure import Conjure.Prelude --- import Conjure.Bug + import Conjure.Language.Definition import Conjure.Language.Domain --- import Conjure.Language.Domain.AddAttributes --- import Conjure.Language.Type --- import Conjure.Language.TypeOf --- import Conjure.Language.Expression.Op --- import Conjure.Language.Pretty -import qualified Conjure.Language.NewLexer as L --- megaparsec --- megaparsec --- megaparsec --- megaparsec + +import qualified Conjure.Language.Lexer as L + import Text.Megaparsec (Parsec) --- import Text.Megaparsec.Error ( ParseError(..),ErrorItem, errorOffset ) --- import Text.Megaparsec.Pos ( SourcePos(..), sourceLine, sourceColumn , Pos) --- import Control.Applicative.Combinators ( between, sepBy, sepBy1, sepEndBy, sepEndBy1 ) --- import Text.Megaparsec.Stream --- import Control.Monad.Combinators.Expr ( makeExprParser, Operator(..) ) --- import qualified Text.Megaparsec as P ( runParser ) + -- text import qualified Data.Text as T -import Conjure.Language.NewLexer (ETokenStream, LexerError) +import Conjure.Language.Lexer (ETokenStream, LexerError) import Conjure.Language.Validator (Validator(..), (?=>)) import qualified Conjure.Language.Validator as V import qualified Conjure.Language.AST.ASTParser as P @@ -78,38 +66,12 @@ runPipeline (parse,val,tc) (fp,txt) = do let x = V.runValidator (val parseResult) (V.initialState parseResult){V.typeChecking= tc} case x of (m, ds,_) | not $ any V.isError ds -> Right m - (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves fp txt) - -- Validator (Just res) [] -> Right res - -- Validator _ xs -> Left $ ValidatorError xs + (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves fp txt) parseModel :: Pipeline ProgramTree Model parseModel = (parseProgram, V.validateModel,True) - -- inCompleteFile $ do - -- let - -- pLanguage :: Parser LanguageVersion - -- pLanguage = do - -- lexeme L_language - -- pos1 <- getPosition - -- l <- identifierText - -- -- ESSENCE' is accepted, just for convenience - -- unless (l `elem` ["Essence", "ESSENCE", "ESSENCE'"]) $ do - -- setPosition pos1 - -- failDoc $ "language name has to be Essence, but given:" <+> pretty l - -- pos2 <- getPosition - -- is <- sepBy1 integer dot - -- unless (is >= [1]) $ do - -- setPosition pos2 - -- failDoc $ "language version expected to be at least 1.0, but given:" <+> - -- pretty (intercalate "." (map show is)) - -- return (LanguageVersion (Name l) (map fromInteger is)) - -- l <- optional pLanguage - -- xs <- many parseTopLevels - -- return Model - -- { mLanguage = fromMaybe def l - -- , mStatements = concat xs - -- , mInfo = def - -- } + parseIO :: (MonadFailDoc m, Flattenable i) => Pipeline i a -> String -> m a @@ -119,14 +81,6 @@ parseIO p s = do Right x -> return x --- translateQnName :: Text -> Text --- translateQnName qnName = case qnName of --- "forAll" -> "and" --- "exists" -> "or" --- _ -> qnName - - - -- -------------------------------------------------------------------------------- @@ -135,116 +89,8 @@ parseIO p s = do parseTopLevels :: Pipeline [S.StatementNode] [Statement] parseTopLevels = (P.parseTopLevels, V.validateProgramTree,False) --- let one = satisfyL $ \case --- L_find -> Just $ do --- decls <- flip sepEndBy1 comma $ do --- is <- commaSeparated parseNameOrMeta --- j <- colon >> parseDomain --- return [ Declaration (FindOrGiven Find i j) --- | i <- is ] --- return $ concat decls --- L_given -> Just $ do --- decls <- commaSeparated $ do --- is <- commaSeparated parseName --- msum --- [ do --- colon --- j <- parseDomain --- return [ Declaration (FindOrGiven Given i j) --- | i <- is ] --- , do --- lexeme L_new --- msum --- [ do --- lexeme L_type --- lexeme L_enum --- modify (\ st -> st { enumDomains = is ++ enumDomains st } ) --- return [ Declaration (GivenDomainDefnEnum i) --- | i <- is ] --- ] --- ] --- return $ concat decls --- L_letting -> Just $ do --- decls <- commaSeparated $ do --- is <- commaSeparated parseName --- lexeme L_be --- msum --- [ do --- lexeme L_new --- lexeme L_type --- msum --- [ do --- lexeme L_of --- lexeme $ LIdentifier "size" --- j <- parseExpr --- return [ Declaration (LettingDomainDefnUnnamed i j) --- | i <- is --- ] --- , do --- lexeme L_enum --- ys <- braces (commaSeparated parseName) <|> return [] --- modify (\ st -> st { enumDomains = is ++ enumDomains st } ) --- return [ Declaration (LettingDomainDefnEnum i ys) --- | i <- is --- ] --- ] --- , do --- lexeme L_domain --- j <- parseDomain --- return [ Declaration (Letting i (Domain j)) --- | i <- is --- ] --- , do --- j <- parseExpr --- return [ Declaration (Letting i j) --- | i <- is --- ] --- ] --- return $ concat decls --- L_where -> Just $ do --- xs <- commaSeparated parseExpr --- return [Where xs] --- L_such -> Just $ do --- lexeme L_that --- xs <- commaSeparated parseExpr --- return [SuchThat xs] --- L_minimising -> Just $ do --- x <- parseExpr --- return [ Objective Minimising x ] --- L_maximising -> Just $ do --- x <- parseExpr --- return [ Objective Maximising x ] --- L_branching -> Just $ do --- lexeme L_on --- xs <- brackets $ commaSeparated parseSearchOrder --- return [ SearchOrder xs ] --- L_heuristic -> Just $ do --- nm <- parseName --- return [ SearchHeuristic nm ] --- _ -> Nothing --- concat <$> some (one "statement") --- parseSearchOrder :: Parser SearchOrder --- parseSearchOrder = msum [try pBranchingOn, pCut] --- where --- pBranchingOn = BranchingOn <$> parseName --- pCut = Cut <$> parseExpr --- parseRange :: Parser a -> Parser (Range a) --- parseRange p = msum [try pRange, pSingle] "range" --- where --- pRange = do --- fr <- optional p --- dotdot --- to <- optional p --- return $ case (fr,to) of --- (Nothing, Nothing) -> RangeOpen --- (Just x , Nothing) -> RangeLowerBounded x --- (Nothing, Just y ) -> RangeUpperBounded y --- (Just x , Just y ) -> RangeBounded x y --- pSingle = do --- x <- p --- return (RangeSingle x) parseDomain :: Pipeline DomainNode (Domain () Expression) parseDomain = (P.parseDomain,fmap V.untype . V.validateDomain,True) @@ -252,892 +98,17 @@ parseDomain = (P.parseDomain,fmap V.untype . V.validateDomain,True) parseDomainWithRepr :: Pipeline DomainNode (Domain HasRepresentation Expression) parseDomainWithRepr = (P.parseDomain, fmap V.untype . V.validateDomainWithRepr,True) --- -- TODO: uncomment the following to parse (union, intersect and minus) for domains --- -- let --- -- mergeOp op before after = DomainOp (Name (lexemeText op)) [before,after] --- -- --- -- in --- -- makeExprParser (pDomainAtom "domain") --- -- [ [ InfixL $ do lexeme L_Minus --- -- return $ mergeOp L_Minus --- -- , InfixL $ do lexeme L_union --- -- return $ mergeOp L_union --- -- ] --- -- , [ InfixL $ do lexeme L_intersect --- -- return $ mergeOp L_intersect --- -- ] --- -- ] - --- where - --- pDomainAtom = msum --- [ pBool, try pIntFromExpr, pInt, try pEnum, try pReference --- , pMatrix, try pTupleWithout, pTupleWith --- , pRecord, pVariant --- , pSet --- , pMSet --- , try pFunction', pFunction --- , pSequence --- , pRelation --- , pPartition --- , DomainMetaVar <$> parseMetaVariable, parens parseDomainWithRepr --- ] - --- parseRepr = return NoRepresentation --- -- -- Parsing set {representation} of ... notation if needed --- -- parseRepr = msum [ braces parseReprInner --- -- , return NoRepresentation --- -- ] --- -- --- -- parseReprInner = do --- -- pos <- getPosition --- -- nm <- identifierText --- -- inners <- fromMaybe [] <$> optional (brackets (commaSeparated parseReprInner)) --- -- case textToRepresentation nm inners of --- -- Nothing -> do --- -- setPosition pos --- -- failDoc ("Not a valid representation:" <+> pretty nm) --- -- Just r -> return r - --- pBool = do --- lexeme L_bool --- -- parse and discard, compatibility with SR --- _ <- optional $ parens $ commaSeparated0 $ parseRange parseExpr --- return DomainBool - --- pIntFromExpr = do --- lexeme L_int --- x <- parens parseExpr --- case (let ?typeCheckerMode = StronglyTyped in typeOf x) of --- Just (TypeInt TagInt) -> return $ DomainInt TagInt [RangeSingle x] --- _ -> return $ DomainIntE x - --- pInt = do --- lexeme L_int --- mxs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr --- let xs = fromMaybe [] mxs --- return $ DomainInt TagInt xs - --- pReference = do --- r <- identifierText --- return $ DomainReference (Name r) Nothing - --- pEnum = do --- r <- identifierText --- xs <- optional $ parens $ commaSeparated0 $ parseRange parseExpr --- st <- get --- guard (Name r `elem` enumDomains st) --- return $ DomainEnum (Name r) xs Nothing - --- pMatrix = do --- lexeme L_matrix --- void $ optional $ lexeme L_indexed --- void $ optional $ lexeme L_by --- xs <- brackets (commaSeparated parseDomain) --- lexeme L_of --- y <- parseDomainWithRepr --- return $ foldr DomainMatrix y xs - --- pTupleWith = do --- lexeme L_tuple --- xs <- parens $ commaSeparated0 parseDomainWithRepr --- return $ DomainTuple xs - --- pTupleWithout = do --- xs <- parens $ countSepAtLeast 2 parseDomainWithRepr comma --- return $ DomainTuple xs - --- pRecord = do --- lexeme L_record --- let one = do n <- parseName --- lexeme L_Colon --- d <- parseDomainWithRepr --- return (n,d) --- xs <- braces $ commaSeparated0 one --- return $ DomainRecord xs - --- pVariant = do --- lexeme L_variant --- let one = do n <- parseName --- lexeme L_Colon --- d <- parseDomainWithRepr --- return (n,d) --- xs <- braces $ commaSeparated0 one --- return $ DomainVariant xs - --- pSet = do --- lexeme L_set --- r <- parseRepr --- x <- parseSetAttr --- y <- lexeme L_of >> parseDomainWithRepr --- return $ DomainSet r x y - --- pMSet = do --- lexeme L_mset --- r <- parseRepr --- x <- parseMSetAttr --- y <- lexeme L_of >> parseDomainWithRepr --- return $ DomainMSet r x y - --- pFunction' = do --- lexeme L_function --- r <- parseRepr --- (y,z) <- arrowedPair parseDomainWithRepr --- return $ DomainFunction r def y z - --- pFunction = do --- lexeme L_function --- r <- parseRepr --- x <- parseFunctionAttr --- (y,z) <- arrowedPair parseDomainWithRepr --- return $ DomainFunction r x y z - --- pSequence = do --- lexeme L_sequence --- r <- parseRepr --- x <- parseSequenceAttr --- y <- lexeme L_of >> parseDomainWithRepr --- return $ DomainSequence r x y - --- pRelation = do --- lexeme L_relation --- r <- parseRepr --- pos <- getPosition --- x <- parseRelationAttr --- lexeme L_of --- ys <- parens (parseDomainWithRepr `sepBy` lexeme L_Times) --- let RelationAttr _ (BinaryRelationAttrs binAttrs) = x --- when (length ys /= 2 && not (S.null binAttrs)) $ do --- setPosition pos --- failDoc $ "Only binary relations can have these attributes:" <+> --- prettyList id "," (S.toList binAttrs) --- return $ DomainRelation r x ys - --- pPartition = do --- lexeme L_partition --- r <- parseRepr --- x <- parsePartitionAttr --- lexeme L_from --- y <- parseDomainWithRepr --- return $ DomainPartition r x y --- parseAttributes :: Parser (DomainAttributes Expression) --- parseAttributes = do --- xs <- parens (commaSeparated0 parseAttribute) <|> return [] --- return $ DomainAttributes xs --- where --- parseAttribute = msum [parseDontCare, try parseNameValue, parseDAName] --- parseNameValue = DANameValue <$> (Name <$> identifierText) <*> parseExpr --- parseDAName = DAName <$> (Name <$> identifierText) --- parseDontCare = do dotdot ; return DADotDot --- parseSetAttr :: Parser (SetAttr Expression) --- parseSetAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "set" attrs --- ["size", "minSize", "maxSize"] --- SetAttr <$> case filterSizey attrs of --- [] -> return SizeAttr_None --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) - --- parseMSetAttr :: Parser (MSetAttr Expression) --- parseMSetAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "mset" attrs --- [ "size", "minSize", "maxSize" --- , "minOccur", "maxOccur" --- ] --- size <- case filterSizey attrs of --- [] -> return SizeAttr_None --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- occur <- case filterAttrName ["minOccur", "maxOccur"] attrs of --- [] -> return OccurAttr_None --- [DANameValue "minOccur" a] -> return (OccurAttr_MinOccur a) --- [DANameValue "maxOccur" a] -> return (OccurAttr_MaxOccur a) --- [DANameValue "maxOccur" b, DANameValue "minOccur" a] -> return (OccurAttr_MinMaxOccur a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- return (MSetAttr size occur) - --- parseFunctionAttr :: Parser (FunctionAttr Expression) --- parseFunctionAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "function" attrs --- [ "size", "minSize", "maxSize" --- , "injective", "surjective", "bijective" --- , "total" --- ] --- size <- case filterSizey attrs of --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- [] -> return SizeAttr_None --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- let partiality = if DAName "total" `elem` attrs --- then PartialityAttr_Total --- else PartialityAttr_Partial --- jectivity <- case filterJectivity attrs of --- [] -> return JectivityAttr_None --- [DAName "bijective" ] -> return JectivityAttr_Bijective --- [DAName "injective" ] -> return JectivityAttr_Injective --- [DAName "surjective"] -> return JectivityAttr_Surjective --- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- return (FunctionAttr size partiality jectivity) - --- parseSequenceAttr :: Parser (SequenceAttr Expression) --- parseSequenceAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "sequence" attrs --- [ "size", "minSize", "maxSize" --- , "injective", "surjective", "bijective" --- ] --- size <- case filterSizey attrs of --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- [] -> return SizeAttr_None --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- jectivity <- case filterJectivity attrs of --- [] -> return JectivityAttr_None --- [DAName "bijective" ] -> return JectivityAttr_Bijective --- [DAName "injective" ] -> return JectivityAttr_Injective --- [DAName "surjective"] -> return JectivityAttr_Surjective --- [DAName "injective", DAName "surjective"] -> return JectivityAttr_Bijective --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- return (SequenceAttr size jectivity) - --- parseRelationAttr :: Parser (RelationAttr Expression) --- parseRelationAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "relation" attrs --- [ "size", "minSize", "maxSize" --- , "reflexive", "irreflexive", "coreflexive" --- , "symmetric", "antiSymmetric", "aSymmetric" --- , "transitive", "total", "leftTotal", "rightTotal", "connex", "Euclidean" --- , "serial", "equivalence", "weakOrder", "preOrder", "partialOrder", "strictPartialOrder", "linearOrder" --- ] --- size <- case filterSizey attrs of --- [] -> return SizeAttr_None --- [DANameValue "size" a] -> return (SizeAttr_Size a) --- [DANameValue "minSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxSize" b, DANameValue "minSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- let readBinRel' (DAName (Name a)) = readBinRel (fromString (textToString a)) --- readBinRel' a = do --- setPosition pos --- failDoc $ "Not a binary relation attribute:" <+> pretty a --- binRels <- mapM readBinRel' (filterBinRel attrs) --- return (RelationAttr size (BinaryRelationAttrs (S.fromList binRels))) - --- parsePartitionAttr :: Parser (PartitionAttr Expression) --- parsePartitionAttr = do --- pos <- getPosition --- DomainAttributes attrs <- parseAttributes --- checkExtraAttributes pos "partition" attrs --- [ "size", "minSize", "maxSize" --- , "regular" --- , "numParts", "minNumParts", "maxNumParts" --- , "partSize", "minPartSize", "maxPartSize" --- ] --- unless (null $ filterAttrName ["complete"] attrs) $ do --- setPosition pos --- failDoc $ vcat [ "Partitions do not support the 'complete' attribute." --- , "They are complete by default." --- ] --- unless (null $ filterSizey attrs) $ do --- setPosition pos --- failDoc $ vcat [ "Partitions do not support these attributes:" <+> prettyList id "," (filterSizey attrs) --- , "This is because partitions are complete by default." --- ] --- partsNum <- case filterAttrName ["numParts", "minNumParts", "maxNumParts"] attrs of --- [] -> return SizeAttr_None --- [DANameValue "numParts" a] -> return (SizeAttr_Size a) --- [DANameValue "minNumParts" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxNumParts" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxNumParts" b, DANameValue "minNumParts" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- partsSize <- case filterAttrName ["partSize", "minPartSize", "maxPartSize"] attrs of --- [] -> return SizeAttr_None --- [DANameValue "partSize" a] -> return (SizeAttr_Size a) --- [DANameValue "minPartSize" a] -> return (SizeAttr_MinSize a) --- [DANameValue "maxPartSize" a] -> return (SizeAttr_MaxSize a) --- [DANameValue "maxPartSize" b, DANameValue "minPartSize" a] -> return (SizeAttr_MinMaxSize a b) --- as -> do --- setPosition pos --- failDoc ("incompatible attributes:" <+> stringToDoc (show as)) --- let isRegular = DAName "regular" `elem` attrs --- return PartitionAttr {..} - - --- checkExtraAttributes :: SourcePos -> Doc -> [DomainAttribute a] -> [Name] -> Parser () --- checkExtraAttributes pos ty attrs supported = do --- let extras = mapMaybe f attrs --- unless (null extras) $ do --- setPosition pos --- failDoc $ vcat [ "Unsupported attributes for" <+> ty <> ":" <+> prettyList id "," extras --- , "Only these are supported:" <+> prettyList id "," supported --- ] --- where --- f (DANameValue nm _) | nm `notElem` supported = Just nm --- f (DAName nm ) | nm `notElem` supported = Just nm --- f _ = Nothing - --- filterAttrName :: Ord a => [Name] -> [DomainAttribute a] -> [DomainAttribute a] --- filterAttrName keep = sort . filter f --- where --- f (DANameValue nm _) | nm `elem` keep = True --- f (DAName nm ) | nm `elem` keep = True --- f _ = False - --- filterSizey :: Ord a => [DomainAttribute a] -> [DomainAttribute a] --- filterSizey = filterAttrName ["size", "minSize", "maxSize"] - --- filterJectivity :: Ord a => [DomainAttribute a] -> [DomainAttribute a] --- filterJectivity = filterAttrName ["injective", "surjective", "bijective"] - --- filterBinRel :: Ord a => [DomainAttribute a] -> [DomainAttribute a] --- filterBinRel = filterAttrName (map (Name . stringToText) binRelNames) - --- parseMetaVariable :: Parser String --- parseMetaVariable = do --- let isMeta LMetaVar{} = True --- isMeta _ = False --- LMetaVar iden <- satisfyT isMeta --- return (T.unpack iden) - --- metaVarInE :: String -> Expression --- metaVarInE = ExpressionMetaVar parseExpr :: Pipeline S.ExpressionNode Expression parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAny,True) --- let --- mergeOp op = mkBinOp (lexemeText op) - --- operatorsGrouped = operators --- |> sortBy (\ (_,a) (_,b) -> compare a b ) --- |> groupBy (\ (_,a) (_,b) -> a == b ) --- |> reverse - --- parseUnaryNegate = do --- lexeme L_Minus --- return $ \ x -> mkOp "negate" [x] - --- parseUnaryNot = do --- lexeme L_ExclamationMark --- return $ \ x -> mkOp "not" [x] - --- in --- makeExprParser parseAtomicExpr --- [ [ case descr of --- BinaryOp op FLeft -> InfixL $ do lexeme op --- return $ mergeOp op --- BinaryOp op FNone -> InfixN $ do lexeme op --- return $ mergeOp op --- BinaryOp op FRight -> InfixR $ do lexeme op --- return $ mergeOp op --- UnaryPrefix L_Minus -> Prefix $ foldr1 (.) <$> some parseUnaryNegate --- UnaryPrefix L_ExclamationMark -> Prefix $ foldr1 (.) <$> some parseUnaryNot --- UnaryPrefix l -> bug ("Unknown UnaryPrefix" <+> pretty (show l)) --- | (descr, _) <- operatorsInGroup --- ] --- | operatorsInGroup <- operatorsGrouped --- ] "expression" - --- parseAtomicExpr :: Parser Expression --- parseAtomicExpr = do --- let --- prefixes = do --- fs <- some $ msum parsePrefixes --- return $ foldr1 (.) fs --- postfixes = do --- fs <- some $ msum parsePostfixes --- return $ foldr1 (.) (reverse fs) --- withPrefix x = try x <|> do f <- prefixes; i <- x; return $ f i --- withPostfix x = do i <- x; mf <- optional postfixes; return $ case mf of Nothing -> i --- Just f -> f i --- withPrefix (withPostfix parseAtomicExprNoPrePost) "expression" - - --- parseAtomicExprNoPrePost :: Parser Expression --- parseAtomicExprNoPrePost = msum $ map try $ concat --- [ [parseQuantifiedExpr] --- , parseOthers --- , [metaVarInE <$> parseMetaVariable] --- , [parseAAC] --- , [parseReference] --- , [parseLiteral] --- , [parseDomainAsExpr] --- , [parseWithLocals] --- , [parseComprehension] --- , [parens parseExpr] --- ] - --- parseComprehension :: Parser Expression --- parseComprehension = brackets $ do --- x <- parseExpr --- lexeme L_Bar --- gens <- commaSeparated (letting <|> try generator <|> condition) --- return (Comprehension x (concat gens)) --- where --- generator :: Parser [GeneratorOrCondition] --- generator = do --- pats <- commaSeparated parseAbstractPattern --- msum --- [ do --- lexeme L_Colon --- domain <- parseDomain --- return [Generator (GenDomainNoRepr pat domain) | pat <- pats] --- , do --- lexeme L_LeftArrow --- expr <- parseExpr --- return [Generator (GenInExpr pat expr) | pat <- pats] --- ] --- condition :: Parser [GeneratorOrCondition] --- condition = return . Condition <$> parseExpr --- letting :: Parser [GeneratorOrCondition] --- letting = do --- lexeme L_letting --- pat <- parseAbstractPattern --- lexeme L_be --- x <- parseExpr --- return [ComprehensionLetting pat x] - --- parseDomainAsExpr :: Parser Expression --- parseDomainAsExpr = Domain <$> betweenTicks parseDomain - --- parsePrefixes :: [Parser (Expression -> Expression)] --- parsePrefixes = [parseUnaryMinus, parseUnaryNot] --- where --- parseUnaryMinus = do --- lexeme L_Minus --- return $ \ x -> mkOp "negate" [x] --- parseUnaryNot = do --- lexeme L_ExclamationMark --- return $ \ x -> mkOp "not" [x] - --- parsePostfixes :: [Parser (Expression -> Expression)] --- parsePostfixes = [parseIndexed,parseFactorial,parseFuncApply] --- where --- parseIndexed :: Parser (Expression -> Expression) --- parseIndexed = do --- let --- pIndexer = try pRList <|> (do i <- parseExpr ; return $ \ m -> Op (MkOpIndexing (OpIndexing m i))) --- pRList = do --- i <- optional parseExpr --- dotdot --- j <- optional parseExpr --- return $ \ m -> Op (MkOpSlicing (OpSlicing m i j)) --- is <- brackets $ commaSeparated pIndexer --- return $ \ x -> foldl (\ m f -> f m ) x is --- parseFactorial :: Parser (Expression -> Expression) --- parseFactorial = do --- lexeme L_ExclamationMark --- return $ \ x -> mkOp "factorial" [x] --- parseFuncApply :: Parser (Expression -> Expression) --- parseFuncApply = parens $ do --- xs <- commaSeparated parseExpr --- let underscore = Reference "_" Nothing --- let ys = [ if underscore == x then Nothing else Just x | x <- xs ] --- return $ \ x -> Op $ MkOpRelationProj $ OpRelationProj x ys - --- parseAAC :: Parser Expression --- parseAAC = do --- let --- isAttr (LIdentifier txt) | Just _ <- Name txt `lookup` allSupportedAttributes = True --- isAttr _ = False --- LIdentifier attr <- satisfyT isAttr --- let n = fromMaybe (bug "parseAAC") (lookup (Name attr) allSupportedAttributes) --- args <- parens $ countSep (n+1) parseExpr comma --- case (n, args) of --- (0, [e ]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e --- (fromString (textToString attr)) Nothing --- (1, [e,v]) -> return $ Op $ MkOpAttributeAsConstraint $ OpAttributeAsConstraint e --- (fromString (textToString attr)) (Just v) --- _ -> failDoc "parseAAC" - --- parseOthers :: [Parser Expression] --- parseOthers = [ parseFunctional l --- | l <- functionals --- ] ++ [parseTyped, parseTwoBars] --- where --- parseTwoBars :: Parser Expression --- parseTwoBars = do --- x <- between (lexeme L_Bar) (lexeme L_Bar) parseExpr --- return (mkOp "twoBars" [x]) - --- parseTyped :: Parser Expression --- parseTyped = parens $ do --- x <- parseExpr --- lexeme L_Colon --- d <- betweenTicks parseDomain --- ty <- let ?typeCheckerMode = StronglyTyped in typeOfDomain d --- return (Typed x ty) - --- parseFunctional :: Lexeme -> Parser Expression --- parseFunctional l = do --- lexeme l --- xs <- parens $ commaSeparated parseExpr --- return $ case (l,xs) of --- (L_image, [y,z]) -> Op $ MkOpImage $ OpImage y z --- _ -> mkOp (fromString $ show $ lexemeFace l) xs - --- parseWithLocals :: Parser Expression --- parseWithLocals = braces $ do --- i <- parseExpr --- lexeme L_At --- js <- parseTopLevels --- let decls = --- [ Declaration (FindOrGiven LocalFind nm dom) --- | Declaration (FindOrGiven Find nm dom) <- js ] --- let cons = concat --- [ xs --- | SuchThat xs <- js --- ] --- let locals = if null decls --- then DefinednessConstraints cons --- else AuxiliaryVars (decls ++ [SuchThat cons]) --- return (WithLocals i locals) - --- parseNameOrMeta :: Parser Name --- parseNameOrMeta = parseName <|> NameMetaVar <$> parseMetaVariable - --- parseName :: Parser Name --- parseName = Name <$> identifierText - --- parseReference :: Parser Expression --- parseReference = Reference <$> parseName <*> pure Nothing - --- parseQuantifiedExpr :: Parser Expression --- parseQuantifiedExpr = do --- qnName <- parseQuantifiedName --- qnPats <- commaSeparated parseAbstractPattern --- qnOver <- msum [ Left <$> (colon *> parseDomain) --- , Right <$> do --- lexeme L_in --- over <- parseExpr --- return (\ pat -> GenInExpr pat over ) --- , Right <$> do --- lexeme L_subsetEq --- over <- parseExpr --- return (\ pat -> GenInExpr pat (Op $ MkOpPowerSet $ OpPowerSet over) ) --- ] --- qnGuard <- optional (comma *> parseExpr) --- qnBody <- dot *> parseExpr "body of a quantified expression" - --- let qnMap pat = case qnOver of --- Left dom -> GenDomainNoRepr pat dom --- Right op -> op pat - --- return $ mkOp (translateQnName qnName) --- $ return --- $ Comprehension qnBody --- $ [ Generator (qnMap pat) | pat <- qnPats ] ++ --- [ Condition g | Just g <- [qnGuard] ] - - --- parseQuantifiedName :: Parser Text --- parseQuantifiedName = do --- let --- isIdentifier (LIdentifier q) = q `elem` ["forAll", "exists", "sum", "product"] --- isIdentifier _ = False --- LIdentifier n <- satisfyT isIdentifier --- return n - - --- parseAbstractPattern :: Parser AbstractPattern --- parseAbstractPattern = label "pattern" $ msum --- [ AbstractPatternMetaVar <$> parseMetaVariable --- , Single <$> parseName --- , do --- void $ optional $ lexeme L_tuple --- xs <- parens $ commaSeparated parseAbstractPattern --- return (AbsPatTuple xs) --- , do --- xs <- brackets $ commaSeparated parseAbstractPattern --- return (AbsPatMatrix xs) --- , do --- xs <- braces $ commaSeparated parseAbstractPattern --- return (AbsPatSet xs) --- ] - --- parseLiteral :: Parser Expression --- parseLiteral = label "value" $ msum --- [ Constant <$> pBool --- , Constant <$> pInt --- , mkAbstractLiteral <$> pMatrix --- , mkAbstractLiteral <$> pTupleWith --- , mkAbstractLiteral <$> pTupleWithout --- , mkAbstractLiteral <$> pRecord --- , AbstractLiteral <$> pVariant --- , mkAbstractLiteral <$> pSet --- , mkAbstractLiteral <$> pMSet --- , mkAbstractLiteral <$> pFunction --- , mkAbstractLiteral <$> pSequence --- , mkAbstractLiteral <$> pRelation --- , mkAbstractLiteral <$> pPartition --- ] --- where - --- -- convert x to a constant if possible --- -- might save us from evaluating it again and again later --- mkAbstractLiteral x = --- case e2c (AbstractLiteral x) of --- Nothing -> AbstractLiteral x --- Just c -> Constant c - --- pBool = do --- x <- False <$ lexeme L_false --- <|> --- True <$ lexeme L_true --- return (ConstantBool x) - --- pInt = ConstantInt TagInt . fromInteger <$> integer - --- pMatrix = do --- lexeme L_OpenBracket --- xs <- commaSeparated0 parseExpr --- msum --- [ do --- let r = mkDomainIntB 1 (fromInt (genericLength xs)) --- lexeme L_CloseBracket --- return (AbsLitMatrix r xs) --- , do --- lexeme L_SemiColon --- r <- parseDomain --- lexeme L_CloseBracket --- return (AbsLitMatrix r xs) --- ] - --- pTupleWith = do --- lexeme L_tuple --- xs <- parens $ commaSeparated0 parseExpr --- return (AbsLitTuple xs) - --- pTupleWithout = do --- xs <- parens $ countSepAtLeast 2 parseExpr comma --- return (AbsLitTuple xs) - --- pRecord = do --- lexeme L_record --- let one = do n <- parseName --- lexeme L_Eq --- x <- parseExpr --- return (n,x) --- xs <- braces $ commaSeparated0 one --- return $ AbsLitRecord xs - --- pVariant = do --- lexeme L_variant --- let one = do n <- parseName --- lexeme L_Eq --- x <- parseExpr --- return (n,x) --- (n,x) <- braces one --- return $ AbsLitVariant Nothing n x - --- pSet = do --- xs <- braces (commaSeparated0 parseExpr) --- return (AbsLitSet xs) - --- pMSet = do --- lexeme L_mset --- xs <- parens (commaSeparated0 parseExpr) --- return (AbsLitMSet xs) - --- pFunction = do --- lexeme L_function --- xs <- parens (commaSeparated0 inner) --- return (AbsLitFunction xs) --- where --- inner = arrowedPair parseExpr - --- pSequence = do --- lexeme L_sequence --- xs <- parens (commaSeparated0 parseExpr) --- return (AbsLitSequence xs) - --- pRelation = do --- lexeme L_relation --- xs <- parens (commaSeparated0 (pTupleWith <|> pTupleWithout)) --- xsFiltered <- forM xs $ \case --- -- Constant (ConstantAbstract (AbsLitTuple is)) -> ... --- AbsLitTuple is -> return is --- x -> failDoc ("Cannot parse as part of relation literal:" <+> vcat [pretty x, pretty (show x)]) --- return (AbsLitRelation xsFiltered) - --- pPartition = do --- lexeme L_partition --- xs <- parens (commaSeparated0 inner) --- return (AbsLitPartition xs) --- where --- inner = braces (commaSeparated0 parseExpr) - - - --- data ParserState = ParserState { enumDomains :: [Name] } --- type Parser a = StateT ParserState (ParsecT [LexemePos] T.Text Identity) a runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p (Just file,inp) of Left pe -> Left $ "Parser error in file:" <+> pretty file <+> pretty ("Error is:\n" ++ show pe) Right a -> Right a --- ls <- runLexer inp --- case runParser p file ls of --- Left (msg, line, col) -> --- let theLine = T.lines inp |> drop (line-1) |> take 1 --- in failDoc $ vcat --- [ msg --- , vcat (map pretty theLine) --- , pretty $ replicate (col-1) ' ' ++ "^" --- ] --- Right x -> return x - --- runParser :: Parser a -> String -> [LexemePos] -> Either (Doc, Int, Int) a --- runParser p file ls = either modifyErr Right (P.runParser (evalStateT p (ParserState [])) file ls) --- where --- modifyErr :: ParseError Pos Int -> Either (Doc, Int, Int) a --- modifyErr e = Left $ --- let pos = errorPos e --- in ( if file `isPrefixOf` show e --- then pretty (show e) --- else pretty file <> ":" <> pretty (show e) --- , sourceLine pos --- , sourceColumn pos --- ) - --- identifierText :: Parser T.Text --- identifierText = do --- LIdentifier i <- satisfyT isIdentifier --- return i --- where --- isIdentifier (LIdentifier "forAll") = False --- isIdentifier (LIdentifier "exists") = False --- isIdentifier LIdentifier{} = True --- isIdentifier _ = False - --- satisfyT :: (Lexeme -> Bool) -> Parser Lexeme --- satisfyT predicate = token nextPos testTok --- where --- testTok :: LexemePos -> Either [ErrorItem String] Lexeme --- testTok (LexemePos tok _ _) = if predicate tok then Right tok else Left [Unexpected (showToken tok)] --- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos --- nextPos _ _ (LexemePos _ _ pos) = pos - --- satisfyL :: forall a . (Lexeme -> Maybe (Parser a)) -> Parser a --- satisfyL predicate = do --- p <- token nextPos testTok --- p --- where --- testTok :: LexemePos -> Either [ErrorItem String] (Parser a) --- testTok (LexemePos tok _ _) = --- -- trace ("satisfyL: " ++ show pos ++ "\t" ++ show tok) $ --- case predicate tok of --- Nothing -> Left [Unexpected (showToken tok)] --- Just res -> Right res - --- nextPos :: Int -> SourcePos -> LexemePos -> SourcePos --- nextPos _ _ (LexemePos _ _ pos) = pos - --- integer :: Parser Integer --- integer = do --- LIntLiteral i <- satisfyT isInt --- return i --- where isInt LIntLiteral {} = True --- isInt _ = False - --- -- parse a comma separated list of things. can be 0 things. --- commaSeparated0 :: Parser a -> Parser [a] --- commaSeparated0 p = sepEndBy p comma - --- -- parse a comma separated list of things. has to be at least 1 thing. --- commaSeparated :: Parser a -> Parser [a] --- commaSeparated p = sepEndBy1 p comma - --- comma :: Parser () --- comma = lexeme L_Comma "comma" - --- dot :: Parser () --- dot = lexeme L_Dot "dot" - --- dotdot :: Parser () --- dotdot = (dot >> dot) ".." - --- colon :: Parser () --- colon = lexeme L_Colon "colon" - - --- -- parses a specified number of elements separated by the given separator --- countSep :: Int -> Parser a -> Parser sep -> Parser [a] --- countSep 1 p _ = (:[]) <$> p --- countSep i p separator | i > 1 = (:) <$> (p <* separator) <*> countSep (i-1) p separator --- countSep _ _ _ = return [] - --- -- parses at least a given number of elements separated by the given separator --- countSepAtLeast :: Int -> Parser a -> Parser sep -> Parser [a] --- countSepAtLeast i p separator = (++) <$> countSep i p separator <*> many (separator *> p) - --- betweenTicks :: Parser a -> Parser a --- betweenTicks = between (lexeme L_BackTick) (lexeme L_BackTick) - --- parens :: Parser a -> Parser a --- parens = between (lexeme L_OpenParen) (lexeme L_CloseParen) - --- braces :: Parser a -> Parser a --- braces = between (lexeme L_OpenCurly) (lexeme L_CloseCurly) - --- brackets :: Parser a -> Parser a --- brackets = between (lexeme L_OpenBracket) (lexeme L_CloseBracket) - --- lexeme :: Lexeme -> Parser () --- lexeme l = void (satisfyT (l==)) show (lexemeFace l) - --- arrowedPair :: Parser a -> Parser (a,a) --- arrowedPair p = do --- i <- p --- lexeme L_LongArrow --- j <- p --- return (i,j) - --- inCompleteFile :: Parser a -> Parser a --- inCompleteFile parser = do --- result <- parser --- eof --- return result prettyPrintWithChecks :: MonadFailDoc m => Text -> m (Pr.Doc ann) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 13dd42ed81..b67944df10 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -2,6 +2,18 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE UndecidableInstances #-} +-- This module is where the syntax tree is mapped to the model. +-- This has three main roles +-- Syntax checking: +-- When it comes to missing tokens these should usually be handled by the +-- low level token validation functions, however in some special cases +-- where the tokens are manipulated manually the checks need to be added +-- Type checking: +-- +-- Metadata additions: +-- this includeds things like marking tokens for documentation, as well as +-- setting up structural regions such as quantigied expressions + module Conjure.Language.Validator where import Conjure.Language.AST.Syntax as S @@ -10,7 +22,7 @@ import qualified Conjure.Language.Expression as D ( Expression(Typed) ) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.NewLexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, sourcePos0) +import Conjure.Language.Lexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, sourcePos0) import Conjure.Language.Attributes import Conjure.Prelude @@ -204,7 +216,6 @@ data StructuralType | SGuard | SGen | SBody - deriving Show data RegionInfo = RegionInfo { diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 1812f8685c..b59468aa6a 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -6,7 +6,7 @@ import Data.Void (Void) import qualified Data.Set as Set import Conjure.Language.AST.Syntax import Conjure.Language.AST.ASTParser -import Conjure.Language.NewLexer +import Conjure.Language.Lexer import Conjure.Language.Lexemes import qualified Data.Text import qualified Data.Text as T @@ -33,7 +33,7 @@ instance ShowErrorComponent DiagnosticForPrint where tokenErrorToDisplay :: LToken -> String tokenErrorToDisplay (RealToken _ ) = error "tokenError with valid token" -tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ show t +tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ (lexemeFace $ lexeme t) tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of L_Missing s -> s LMissingIdentifier -> "" diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index fb5cc30db3..0f3f07e71d 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -88,6 +88,7 @@ readParamJSON :: (?typeCheckerMode :: TypeCheckerMode) => MonadIO m => MonadFail m => + MonadLog m => MonadUserError m => Model -> FilePath -> m Model readParamJSON model fp = do @@ -103,6 +104,7 @@ readParamJSON model fp = do readParamOrSolutionFromFile :: (?typeCheckerMode :: TypeCheckerMode) => MonadIO m => + MonadLog m => MonadFailDoc m => MonadUserError m => Model -> FilePath -> m Model diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 486eefb9db..221f84dd4e 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -19,7 +19,7 @@ import Conjure.UI.Split ( outputSplittedModels, removeUnusedDecls ) import Conjure.UI.VarSymBreaking ( outputVarSymBreaking ) import Conjure.UI.ParameterGenerator ( parameterGenerator ) import Conjure.UI.NormaliseQuantified ( normaliseQuantifiedVariables ) -import Conjure.UI.TypeScript ( tsDef ) + import Conjure.Language.Name ( Name(..) ) import Conjure.Language.Definition ( Model(..), ModelInfo(..), Statement(..), Declaration(..), FindOrGiven(..) ) @@ -75,7 +75,6 @@ mainWithArgs :: forall m . NameGen m => (?typeCheckerMode :: TypeCheckerMode) => UI -> m () -mainWithArgs TSDEF{} = liftIO tsDef mainWithArgs mode@Modelling{..} = do essenceM <- readModelFromFile essence doIfNotCached -- start the show! diff --git a/src/test/Conjure/ModelAllSolveAll.hs b/src/test/Conjure/ModelAllSolveAll.hs index 657f3b59ec..34f1e4a573 100644 --- a/src/test/Conjure/ModelAllSolveAll.hs +++ b/src/test/Conjure/ModelAllSolveAll.hs @@ -227,7 +227,7 @@ savileRowNoParam step srOptions TestDirFiles{..} modelPath = do <$> getDirectoryContents outputsDir forM_ (take nbEprimeSolutions allNats) $ \ i -> do let eprimeSolutionPath = outBase ++ ".eprime-solution." ++ padLeft 6 '0' (show i) - eprimeSolution <- readParamOrSolutionFromFile eprimeModel (outputsDir eprimeSolutionPath) + eprimeSolution <- runLoggerPipeIO LogDebug $ readParamOrSolutionFromFile eprimeModel (outputsDir eprimeSolutionPath) res <- runUserErrorT $ ignoreLogs $ runNameGen () $ translateSolution eprimeModel def eprimeSolution case res of @@ -252,7 +252,7 @@ savileRowWithParams step srOptions TestDirFiles{..} modelPath paramPath = do fileShouldExist (outputsDir modelPath) fileShouldExist (tBaseDir paramPath) eprimeModel <- readModelInfoFromFile (outputsDir modelPath) - param <- readParamOrSolutionFromFile eprimeModel (tBaseDir paramPath) + param <- runLoggerPipeIO LogDebug $ readParamOrSolutionFromFile eprimeModel (tBaseDir paramPath) eprimeParam <- ignoreLogs $ runNameGen () $ translateParameter False eprimeModel param let outBase = dropExtension modelPath ++ "-" ++ dropExtension paramPath writeFile (outputsDir outBase ++ ".eprime-param") (renderNormal eprimeParam) @@ -276,7 +276,7 @@ savileRowWithParams step srOptions TestDirFiles{..} modelPath paramPath = do <$> getDirectoryContents outputsDir forM_ (take nbEprimeSolutions allNats) $ \ i -> do let eprimeSolutionPath = outBase ++ ".eprime-solution." ++ padLeft 6 '0' (show i) - eprimeSolution <- readParamOrSolutionFromFile eprimeModel (outputsDir eprimeSolutionPath) + eprimeSolution <- runLoggerPipeIO LogDebug $ readParamOrSolutionFromFile eprimeModel (outputsDir eprimeSolutionPath) res <- runUserErrorT $ ignoreLogs $ runNameGen () $ translateSolution eprimeModel param eprimeSolution case res of @@ -301,7 +301,7 @@ validateSolutionNoParam step TestDirFiles{..} solutionPaths = do forM_ solutionPaths $ \ solutionPath -> do step (unwords ["Validating solution:", solutionPath]) fileShouldExist (outputsDir solutionPath) - solution <- readParamOrSolutionFromFile essence (outputsDir solutionPath) + solution <- runLoggerPipeIO LogDebug $ readParamOrSolutionFromFile essence (outputsDir solutionPath) result <- runUserErrorT $ ignoreLogs $ runNameGen () $ do [essence2, param2, solution2] <- resolveNamesMulti [essence, def, solution] validateSolution essence2 param2 solution2 @@ -319,11 +319,11 @@ validateSolutionWithParams step TestDirFiles{..} paramSolutionPaths = do essence <- readModelFromFile essenceFile forM_ paramSolutionPaths $ \ (paramPath, solutionPaths) -> do fileShouldExist (tBaseDir paramPath) - param <- readParamOrSolutionFromFile essence (tBaseDir paramPath) + param <- runLoggerPipeIO LogDebug $ readParamOrSolutionFromFile essence (tBaseDir paramPath) forM_ solutionPaths $ \ solutionPath -> do step (unwords ["Validating solution:", paramPath, solutionPath]) fileShouldExist (outputsDir solutionPath) - solution <- readParamOrSolutionFromFile essence (outputsDir solutionPath) + solution <- runLoggerPipeIO LogDebug $ readParamOrSolutionFromFile essence (outputsDir solutionPath) result <- runUserErrorT $ ignoreLogs $ runNameGen () $ do [essence2, param2, solution2] <- resolveNamesMulti [essence, param, solution] validateSolution essence2 param2 solution2 @@ -444,7 +444,7 @@ noDuplicateSolutions step TestDirFiles{..} = do models <- sort . filter (".eprime" `isSuffixOf`) <$> getDirectoryContents outputsDir params <- sort . filter (".eprime-param" `isSuffixOf`) <$> getDirectoryContents outputsDir solutions <- filter (".solution" `isSuffixOf`) <$> getDirectoryContents outputsDir - solutionContents <- forM solutions $ \ s -> do m <- readParamOrSolutionFromFile (def :: Model) (outputsDir s) + solutionContents <- forM solutions $ \ s -> do m <-runLoggerPipeIO LogDebug (readParamOrSolutionFromFile (def :: Model) (outputsDir s)) return (s, m) let grouped :: [ ( Maybe String -- the parameter diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index ee370e39f3..77bed83c69 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -14,7 +14,7 @@ import Test.Tasty.HUnit (assertFailure, testCaseSteps, assertEqual) import Conjure.Language.Parser (runLexerAndParser) import Conjure.Language.AST.ASTParser (runASTParser, parseProgram) -import Conjure.Language.NewLexer (runLexer, Reformable (reform), reformList) +import Conjure.Language.Lexer (runLexer, Reformable (reform), reformList) import qualified Data.Text as T (pack, lines, unpack) import qualified Data.Text.Lazy as L import Data.ByteString.Char8(hPutStrLn, pack, unpack) diff --git a/tests/custom/tsdef/run.sh b/tests/custom/tsdef/run.sh deleted file mode 100755 index d611a05d7d..0000000000 --- a/tests/custom/tsdef/run.sh +++ /dev/null @@ -1 +0,0 @@ -conjure tsdef diff --git a/tests/custom/tsdef/stdout.expected b/tests/custom/tsdef/stdout.expected deleted file mode 100644 index 2d2cdb0c69..0000000000 --- a/tests/custom/tsdef/stdout.expected +++ /dev/null @@ -1,1511 +0,0 @@ -type AbstractLiteral = IAbsLitTuple | IAbsLitRecord | IAbsLitVariant | IAbsLitMatrix | IAbsLitSet | IAbsLitMSet | IAbsLitFunction | IAbsLitSequence | IAbsLitRelation | IAbsLitPartition; - -interface IAbsLitTuple { - tag: "AbsLitTuple"; - contents: Expression[]; -} - -interface IAbsLitRecord { - tag: "AbsLitRecord"; - contents: [Name, Expression][]; -} - -interface IAbsLitVariant { - tag: "AbsLitVariant"; - contents: [[Name, Domain][], Name, Expression]; -} - -interface IAbsLitMatrix { - tag: "AbsLitMatrix"; - contents: [Domain, Expression[]]; -} - -interface IAbsLitSet { - tag: "AbsLitSet"; - contents: Expression[]; -} - -interface IAbsLitMSet { - tag: "AbsLitMSet"; - contents: Expression[]; -} - -interface IAbsLitFunction { - tag: "AbsLitFunction"; - contents: [Expression, Expression][]; -} - -interface IAbsLitSequence { - tag: "AbsLitSequence"; - contents: Expression[]; -} - -interface IAbsLitRelation { - tag: "AbsLitRelation"; - contents: Expression[][]; -} - -interface IAbsLitPartition { - tag: "AbsLitPartition"; - contents: Expression[][]; -} - -type AbstractPattern = ISingle | IAbsPatTuple | IAbsPatMatrix | IAbsPatSet | IAbstractPatternMetaVar; - -interface ISingle { - tag: "Single"; - contents: Name; -} - -interface IAbsPatTuple { - tag: "AbsPatTuple"; - contents: AbstractPattern[]; -} - -interface IAbsPatMatrix { - tag: "AbsPatMatrix"; - contents: AbstractPattern[]; -} - -interface IAbsPatSet { - tag: "AbsPatSet"; - contents: AbstractPattern[]; -} - -interface IAbstractPatternMetaVar { - tag: "AbstractPatternMetaVar"; - contents: string; -} - -type AttrName = "AttrName_size" | "AttrName_minSize" | "AttrName_maxSize" | "AttrName_minOccur" | "AttrName_maxOccur" | "AttrName_numParts" | "AttrName_minNumParts" | "AttrName_maxNumParts" | "AttrName_partSize" | "AttrName_minPartSize" | "AttrName_maxPartSize" | "AttrName_total" | "AttrName_injective" | "AttrName_surjective" | "AttrName_bijective" | "AttrName_regular" | "AttrName_reflexive" | "AttrName_irreflexive" | "AttrName_coreflexive" | "AttrName_symmetric" | "AttrName_antiSymmetric" | "AttrName_aSymmetric" | "AttrName_transitive" | "AttrName_leftTotal" | "AttrName_rightTotal" | "AttrName_connex" | "AttrName_Euclidean" | "AttrName_serial" | "AttrName_equivalence" | "AttrName_partialOrder" | "AttrName_linearOrder" | "AttrName_weakOrder" | "AttrName_preOrder" | "AttrName_strictPartialOrder"; - -type BinaryRelationAttr = "BinRelAttr_Reflexive" | "BinRelAttr_Irreflexive" | "BinRelAttr_Coreflexive" | "BinRelAttr_Symmetric" | "BinRelAttr_AntiSymmetric" | "BinRelAttr_ASymmetric" | "BinRelAttr_Transitive" | "BinRelAttr_Total" | "BinRelAttr_LeftTotal" | "BinRelAttr_RightTotal" | "BinRelAttr_Connex" | "BinRelAttr_Euclidean" | "BinRelAttr_Serial" | "BinRelAttr_Equivalence" | "BinRelAttr_PartialOrder" | "BinRelAttr_LinearOrder" | "BinRelAttr_WeakOrder" | "BinRelAttr_PreOrder" | "BinRelAttr_StrictPartialOrder"; - -type BinaryRelationAttrs = IBinaryRelationAttrs; - -type IBinaryRelationAttrs = BinaryRelationAttr[]; - -type Constant = IConstantBool | IConstantInt | IConstantEnum | IConstantField | IConstantAbstract | IDomainInConstant | ITypedConstant | IConstantUndefined; - -interface IConstantBool { - tag: "ConstantBool"; - contents: boolean; -} - -interface IConstantInt { - tag: "ConstantInt"; - contents: [IntTag, number]; -} - -interface IConstantEnum { - tag: "ConstantEnum"; - contents: [Name, Name[], Name]; -} - -interface IConstantField { - tag: "ConstantField"; - contents: [Name, Type]; -} - -interface IConstantAbstract { - tag: "ConstantAbstract"; - contents: AbstractLiteral; -} - -interface IDomainInConstant { - tag: "DomainInConstant"; - contents: Domain; -} - -interface ITypedConstant { - tag: "TypedConstant"; - contents: [Constant, Type]; -} - -interface IConstantUndefined { - tag: "ConstantUndefined"; - contents: [string, Type]; -} - -type Decision = IDecision; - -interface IDecision { - dDescription: string[]; - dNumOptions: number | null; - dDecision: number; -} - -type Declaration = IFindOrGiven | ILetting | IGivenDomainDefnEnum | ILettingDomainDefnEnum | ILettingDomainDefnUnnamed; - -interface IFindOrGiven { - tag: "FindOrGiven"; - contents: [FindOrGiven, Name, Domain]; -} - -interface ILetting { - tag: "Letting"; - contents: [Name, Expression]; -} - -interface IGivenDomainDefnEnum { - tag: "GivenDomainDefnEnum"; - contents: Name; -} - -interface ILettingDomainDefnEnum { - tag: "LettingDomainDefnEnum"; - contents: [Name, Name[]]; -} - -interface ILettingDomainDefnUnnamed { - tag: "LettingDomainDefnUnnamed"; - contents: [Name, Expression]; -} - -type Domain = IDomainAny | IDomainBool | IDomainIntE | IDomainInt | IDomainEnum | IDomainUnnamed | IDomainTuple | IDomainRecord | IDomainVariant | IDomainMatrix | IDomainSet | IDomainMSet | IDomainFunction | IDomainSequence | IDomainRelation | IDomainPartition | IDomainOp | IDomainReference | IDomainMetaVar; - -interface IDomainAny { - tag: "DomainAny"; - contents: [string, Type]; -} - -interface IDomainBool { - tag: "DomainBool"; -} - -interface IDomainIntE { - tag: "DomainIntE"; - contents: Expression; -} - -interface IDomainInt { - tag: "DomainInt"; - contents: [IntTag, Range[]]; -} - -interface IDomainEnum { - tag: "DomainEnum"; - contents: [Name, Range[], [Name, number][]]; -} - -interface IDomainUnnamed { - tag: "DomainUnnamed"; - contents: [Name, Expression]; -} - -interface IDomainTuple { - tag: "DomainTuple"; - contents: Domain[]; -} - -interface IDomainRecord { - tag: "DomainRecord"; - contents: [Name, Domain][]; -} - -interface IDomainVariant { - tag: "DomainVariant"; - contents: [Name, Domain][]; -} - -interface IDomainMatrix { - tag: "DomainMatrix"; - contents: [Domain, Domain]; -} - -interface IDomainSet { - tag: "DomainSet"; - contents: [void, SetAttr, Domain]; -} - -interface IDomainMSet { - tag: "DomainMSet"; - contents: [void, MSetAttr, Domain]; -} - -interface IDomainFunction { - tag: "DomainFunction"; - contents: [void, FunctionAttr, Domain, Domain]; -} - -interface IDomainSequence { - tag: "DomainSequence"; - contents: [void, SequenceAttr, Domain]; -} - -interface IDomainRelation { - tag: "DomainRelation"; - contents: [void, RelationAttr, Domain[]]; -} - -interface IDomainPartition { - tag: "DomainPartition"; - contents: [void, PartitionAttr, Domain]; -} - -interface IDomainOp { - tag: "DomainOp"; - contents: [Name, Domain[]]; -} - -interface IDomainReference { - tag: "DomainReference"; - contents: [Name, Domain]; -} - -interface IDomainMetaVar { - tag: "DomainMetaVar"; - contents: string; -} - -type Expression = IConstant | IAbstractLiteral | IDomain | IReference | IWithLocals | IComprehension | ITyped | IOp | IExpressionMetaVar; - -interface IConstant { - tag: "Constant"; - contents: Constant; -} - -interface IAbstractLiteral { - tag: "AbstractLiteral"; - contents: AbstractLiteral; -} - -interface IDomain { - tag: "Domain"; - contents: Domain; -} - -interface IReference { - tag: "Reference"; - contents: [Name, ReferenceTo]; -} - -interface IWithLocals { - tag: "WithLocals"; - contents: [Expression, InBubble]; -} - -interface IComprehension { - tag: "Comprehension"; - contents: [Expression, GeneratorOrCondition[]]; -} - -interface ITyped { - tag: "Typed"; - contents: [Expression, Type]; -} - -interface IOp { - tag: "Op"; - contents: Op; -} - -interface IExpressionMetaVar { - tag: "ExpressionMetaVar"; - contents: string; -} - -type FindOrGiven = "Find" | "Given" | "Quantified" | "CutFind" | "LocalFind"; - -type FunctionAttr = IFunctionAttr; - -type IFunctionAttr = [SizeAttr, PartialityAttr, JectivityAttr]; - -type Generator = IGenDomainNoRepr | IGenDomainHasRepr | IGenInExpr; - -interface IGenDomainNoRepr { - tag: "GenDomainNoRepr"; - contents: [AbstractPattern, Domain]; -} - -interface IGenDomainHasRepr { - tag: "GenDomainHasRepr"; - contents: [Name, Domain]; -} - -interface IGenInExpr { - tag: "GenInExpr"; - contents: [AbstractPattern, Expression]; -} - -type GeneratorOrCondition = IGenerator | ICondition | IComprehensionLetting; - -interface IGenerator { - tag: "Generator"; - contents: Generator; -} - -interface ICondition { - tag: "Condition"; - contents: Expression; -} - -interface IComprehensionLetting { - tag: "ComprehensionLetting"; - contents: [AbstractPattern, Expression]; -} - -type HasRepresentation = INoRepresentation | ISet_Occurrence | ISet_Explicit | ISet_ExplicitVarSizeWithFlags | ISet_ExplicitVarSizeWithMarker | ISet_ExplicitVarSizeWithDummy | IMSet_Occurrence | IMSet_ExplicitWithFlags | IMSet_ExplicitWithRepetition | IFunction_1D | IFunction_1DPartial | IFunction_ND | IFunction_NDPartial | IFunction_NDPartialDummy | IFunction_AsRelation | ISequence_ExplicitBounded | IRelation_AsMatrix | IRelation_AsSet | IPartition_AsSet | IPartition_Occurrence; - -interface INoRepresentation { - tag: "NoRepresentation"; -} - -interface ISet_Occurrence { - tag: "Set_Occurrence"; -} - -interface ISet_Explicit { - tag: "Set_Explicit"; -} - -interface ISet_ExplicitVarSizeWithFlags { - tag: "Set_ExplicitVarSizeWithFlags"; -} - -interface ISet_ExplicitVarSizeWithMarker { - tag: "Set_ExplicitVarSizeWithMarker"; -} - -interface ISet_ExplicitVarSizeWithDummy { - tag: "Set_ExplicitVarSizeWithDummy"; -} - -interface IMSet_Occurrence { - tag: "MSet_Occurrence"; -} - -interface IMSet_ExplicitWithFlags { - tag: "MSet_ExplicitWithFlags"; -} - -interface IMSet_ExplicitWithRepetition { - tag: "MSet_ExplicitWithRepetition"; -} - -interface IFunction_1D { - tag: "Function_1D"; -} - -interface IFunction_1DPartial { - tag: "Function_1DPartial"; -} - -interface IFunction_ND { - tag: "Function_ND"; -} - -interface IFunction_NDPartial { - tag: "Function_NDPartial"; -} - -interface IFunction_NDPartialDummy { - tag: "Function_NDPartialDummy"; -} - -interface IFunction_AsRelation { - tag: "Function_AsRelation"; - contents: HasRepresentation; -} - -interface ISequence_ExplicitBounded { - tag: "Sequence_ExplicitBounded"; -} - -interface IRelation_AsMatrix { - tag: "Relation_AsMatrix"; -} - -interface IRelation_AsSet { - tag: "Relation_AsSet"; - contents: HasRepresentation; -} - -interface IPartition_AsSet { - tag: "Partition_AsSet"; - contents: [HasRepresentation, HasRepresentation]; -} - -interface IPartition_Occurrence { - tag: "Partition_Occurrence"; -} - -type InBubble = IAuxiliaryVars | IDefinednessConstraints; - -interface IAuxiliaryVars { - tag: "AuxiliaryVars"; - contents: Statement[]; -} - -interface IDefinednessConstraints { - tag: "DefinednessConstraints"; - contents: Expression[]; -} - -type IntTag = ITagInt | ITagEnum | ITagUnnamed; - -interface ITagInt { - tag: "TagInt"; -} - -interface ITagEnum { - tag: "TagEnum"; - contents: string; -} - -interface ITagUnnamed { - tag: "TagUnnamed"; - contents: string; -} - -type JectivityAttr = "JectivityAttr_None" | "JectivityAttr_Injective" | "JectivityAttr_Surjective" | "JectivityAttr_Bijective"; - -type LanguageVersion = ILanguageVersion; - -type ILanguageVersion = [Name, number[]]; - -type Model = IModel; - -interface IModel { - mLanguage: LanguageVersion; - mStatements: Statement[]; - mInfo: ModelInfo; -} - -type ModelInfo = IModelInfo; - -interface IModelInfo { - miGivens: Name[]; - miFinds: Name[]; - miLettings: [Name, Expression][]; - miEnumGivens: Name[]; - miEnumLettings: Declaration[]; - miUnnameds: [Name, Expression][]; - miOriginalDomains: [Name, Domain][]; - miRepresentations: [Name, Domain][]; - miRepresentationsTree: [Name, Tree[]][]; - miStrategyQ: Strategy; - miStrategyA: Strategy; - miTrailCompact: [number, number, number][]; - miTrailGeneralised: [number, number][]; - miTrailVerbose: Decision[]; - miTrailRewrites: TrailRewrites[]; - miNameGenState: [string, number][]; - miNbExtraGivens: number; -} - -type MSetAttr = IMSetAttr; - -type IMSetAttr = [SizeAttr, OccurAttr]; - -type Name = IName | IMachineName | INameMetaVar; - -interface IName { - tag: "Name"; - contents: string; -} - -interface IMachineName { - tag: "MachineName"; - contents: [string, number, string[]]; -} - -interface INameMetaVar { - tag: "NameMetaVar"; - contents: string; -} - -type Objective = "Minimising" | "Maximising"; - -type OccurAttr = IOccurAttr_None | IOccurAttr_MinOccur | IOccurAttr_MaxOccur | IOccurAttr_MinMaxOccur; - -interface IOccurAttr_None { - tag: "OccurAttr_None"; -} - -interface IOccurAttr_MinOccur { - tag: "OccurAttr_MinOccur"; - contents: Expression; -} - -interface IOccurAttr_MaxOccur { - tag: "OccurAttr_MaxOccur"; - contents: Expression; -} - -interface IOccurAttr_MinMaxOccur { - tag: "OccurAttr_MinMaxOccur"; - contents: [Expression, Expression]; -} - -type Op = IMkOpActive | IMkOpAllDiff | IMkOpAllDiffExcept | IMkOpAnd | IMkOpApart | IMkOpAtLeast | IMkOpAtMost | IMkOpAttributeAsConstraint | IMkOpCatchUndef | IMkOpDefined | IMkOpDiv | IMkOpDontCare | IMkOpDotLeq | IMkOpDotLt | IMkOpEq | IMkOpFactorial | IMkOpFlatten | IMkOpFreq | IMkOpGCC | IMkOpGeq | IMkOpGt | IMkOpHist | IMkOpIff | IMkOpImage | IMkOpImageSet | IMkOpImply | IMkOpIn | IMkOpIndexing | IMkOpIntersect | IMkOpInverse | IMkOpLeq | IMkOpLexLeq | IMkOpLexLt | IMkOpLt | IMkOpMakeTable | IMkOpMax | IMkOpMin | IMkOpMinus | IMkOpMod | IMkOpNegate | IMkOpNeq | IMkOpNot | IMkOpOr | IMkOpParticipants | IMkOpParts | IMkOpParty | IMkOpPow | IMkOpPowerSet | IMkOpPreImage | IMkOpPred | IMkOpProduct | IMkOpRange | IMkOpRelationProj | IMkOpRestrict | IMkOpSlicing | IMkOpSubsequence | IMkOpSubset | IMkOpSubsetEq | IMkOpSubstring | IMkOpSucc | IMkOpSum | IMkOpSupset | IMkOpSupsetEq | IMkOpTable | IMkOpTildeLeq | IMkOpTildeLt | IMkOpToInt | IMkOpToMSet | IMkOpToRelation | IMkOpToSet | IMkOpTogether | IMkOpTransform | IMkOpTrue | IMkOpTwoBars | IMkOpUnion | IMkOpXor; - -interface IMkOpActive { - tag: "MkOpActive"; - contents: OpActive; -} - -interface IMkOpAllDiff { - tag: "MkOpAllDiff"; - contents: OpAllDiff; -} - -interface IMkOpAllDiffExcept { - tag: "MkOpAllDiffExcept"; - contents: OpAllDiffExcept; -} - -interface IMkOpAnd { - tag: "MkOpAnd"; - contents: OpAnd; -} - -interface IMkOpApart { - tag: "MkOpApart"; - contents: OpApart; -} - -interface IMkOpAtLeast { - tag: "MkOpAtLeast"; - contents: OpAtLeast; -} - -interface IMkOpAtMost { - tag: "MkOpAtMost"; - contents: OpAtMost; -} - -interface IMkOpAttributeAsConstraint { - tag: "MkOpAttributeAsConstraint"; - contents: OpAttributeAsConstraint; -} - -interface IMkOpCatchUndef { - tag: "MkOpCatchUndef"; - contents: OpCatchUndef; -} - -interface IMkOpDefined { - tag: "MkOpDefined"; - contents: OpDefined; -} - -interface IMkOpDiv { - tag: "MkOpDiv"; - contents: OpDiv; -} - -interface IMkOpDontCare { - tag: "MkOpDontCare"; - contents: OpDontCare; -} - -interface IMkOpDotLeq { - tag: "MkOpDotLeq"; - contents: OpDotLeq; -} - -interface IMkOpDotLt { - tag: "MkOpDotLt"; - contents: OpDotLt; -} - -interface IMkOpEq { - tag: "MkOpEq"; - contents: OpEq; -} - -interface IMkOpFactorial { - tag: "MkOpFactorial"; - contents: OpFactorial; -} - -interface IMkOpFlatten { - tag: "MkOpFlatten"; - contents: OpFlatten; -} - -interface IMkOpFreq { - tag: "MkOpFreq"; - contents: OpFreq; -} - -interface IMkOpGCC { - tag: "MkOpGCC"; - contents: OpGCC; -} - -interface IMkOpGeq { - tag: "MkOpGeq"; - contents: OpGeq; -} - -interface IMkOpGt { - tag: "MkOpGt"; - contents: OpGt; -} - -interface IMkOpHist { - tag: "MkOpHist"; - contents: OpHist; -} - -interface IMkOpIff { - tag: "MkOpIff"; - contents: OpIff; -} - -interface IMkOpImage { - tag: "MkOpImage"; - contents: OpImage; -} - -interface IMkOpImageSet { - tag: "MkOpImageSet"; - contents: OpImageSet; -} - -interface IMkOpImply { - tag: "MkOpImply"; - contents: OpImply; -} - -interface IMkOpIn { - tag: "MkOpIn"; - contents: OpIn; -} - -interface IMkOpIndexing { - tag: "MkOpIndexing"; - contents: OpIndexing; -} - -interface IMkOpIntersect { - tag: "MkOpIntersect"; - contents: OpIntersect; -} - -interface IMkOpInverse { - tag: "MkOpInverse"; - contents: OpInverse; -} - -interface IMkOpLeq { - tag: "MkOpLeq"; - contents: OpLeq; -} - -interface IMkOpLexLeq { - tag: "MkOpLexLeq"; - contents: OpLexLeq; -} - -interface IMkOpLexLt { - tag: "MkOpLexLt"; - contents: OpLexLt; -} - -interface IMkOpLt { - tag: "MkOpLt"; - contents: OpLt; -} - -interface IMkOpMakeTable { - tag: "MkOpMakeTable"; - contents: OpMakeTable; -} - -interface IMkOpMax { - tag: "MkOpMax"; - contents: OpMax; -} - -interface IMkOpMin { - tag: "MkOpMin"; - contents: OpMin; -} - -interface IMkOpMinus { - tag: "MkOpMinus"; - contents: OpMinus; -} - -interface IMkOpMod { - tag: "MkOpMod"; - contents: OpMod; -} - -interface IMkOpNegate { - tag: "MkOpNegate"; - contents: OpNegate; -} - -interface IMkOpNeq { - tag: "MkOpNeq"; - contents: OpNeq; -} - -interface IMkOpNot { - tag: "MkOpNot"; - contents: OpNot; -} - -interface IMkOpOr { - tag: "MkOpOr"; - contents: OpOr; -} - -interface IMkOpParticipants { - tag: "MkOpParticipants"; - contents: OpParticipants; -} - -interface IMkOpParts { - tag: "MkOpParts"; - contents: OpParts; -} - -interface IMkOpParty { - tag: "MkOpParty"; - contents: OpParty; -} - -interface IMkOpPow { - tag: "MkOpPow"; - contents: OpPow; -} - -interface IMkOpPowerSet { - tag: "MkOpPowerSet"; - contents: OpPowerSet; -} - -interface IMkOpPreImage { - tag: "MkOpPreImage"; - contents: OpPreImage; -} - -interface IMkOpPred { - tag: "MkOpPred"; - contents: OpPred; -} - -interface IMkOpProduct { - tag: "MkOpProduct"; - contents: OpProduct; -} - -interface IMkOpRange { - tag: "MkOpRange"; - contents: OpRange; -} - -interface IMkOpRelationProj { - tag: "MkOpRelationProj"; - contents: OpRelationProj; -} - -interface IMkOpRestrict { - tag: "MkOpRestrict"; - contents: OpRestrict; -} - -interface IMkOpSlicing { - tag: "MkOpSlicing"; - contents: OpSlicing; -} - -interface IMkOpSubsequence { - tag: "MkOpSubsequence"; - contents: OpSubsequence; -} - -interface IMkOpSubset { - tag: "MkOpSubset"; - contents: OpSubset; -} - -interface IMkOpSubsetEq { - tag: "MkOpSubsetEq"; - contents: OpSubsetEq; -} - -interface IMkOpSubstring { - tag: "MkOpSubstring"; - contents: OpSubstring; -} - -interface IMkOpSucc { - tag: "MkOpSucc"; - contents: OpSucc; -} - -interface IMkOpSum { - tag: "MkOpSum"; - contents: OpSum; -} - -interface IMkOpSupset { - tag: "MkOpSupset"; - contents: OpSupset; -} - -interface IMkOpSupsetEq { - tag: "MkOpSupsetEq"; - contents: OpSupsetEq; -} - -interface IMkOpTable { - tag: "MkOpTable"; - contents: OpTable; -} - -interface IMkOpTildeLeq { - tag: "MkOpTildeLeq"; - contents: OpTildeLeq; -} - -interface IMkOpTildeLt { - tag: "MkOpTildeLt"; - contents: OpTildeLt; -} - -interface IMkOpToInt { - tag: "MkOpToInt"; - contents: OpToInt; -} - -interface IMkOpToMSet { - tag: "MkOpToMSet"; - contents: OpToMSet; -} - -interface IMkOpToRelation { - tag: "MkOpToRelation"; - contents: OpToRelation; -} - -interface IMkOpToSet { - tag: "MkOpToSet"; - contents: OpToSet; -} - -interface IMkOpTogether { - tag: "MkOpTogether"; - contents: OpTogether; -} - -interface IMkOpTransform { - tag: "MkOpTransform"; - contents: OpTransform; -} - -interface IMkOpTrue { - tag: "MkOpTrue"; - contents: OpTrue; -} - -interface IMkOpTwoBars { - tag: "MkOpTwoBars"; - contents: OpTwoBars; -} - -interface IMkOpUnion { - tag: "MkOpUnion"; - contents: OpUnion; -} - -interface IMkOpXor { - tag: "MkOpXor"; - contents: OpXor; -} - -type OpActive = IOpActive; - -type IOpActive = [Expression, Name]; - -type OpAllDiff = IOpAllDiff; - -type IOpAllDiff = Expression; - -type OpAllDiffExcept = IOpAllDiffExcept; - -type IOpAllDiffExcept = [Expression, Expression]; - -type OpAnd = IOpAnd; - -type IOpAnd = Expression; - -type OpApart = IOpApart; - -type IOpApart = [Expression, Expression]; - -type OpAtLeast = IOpAtLeast; - -type IOpAtLeast = [Expression, Expression, Expression]; - -type OpAtMost = IOpAtMost; - -type IOpAtMost = [Expression, Expression, Expression]; - -type OpAttributeAsConstraint = IOpAttributeAsConstraint; - -type IOpAttributeAsConstraint = [Expression, AttrName, Expression]; - -type OpCatchUndef = IOpCatchUndef; - -type IOpCatchUndef = [Expression, Expression]; - -type OpDefined = IOpDefined; - -type IOpDefined = Expression; - -type OpDiv = IOpDiv; - -type IOpDiv = [Expression, Expression]; - -type OpDontCare = IOpDontCare; - -type IOpDontCare = Expression; - -type OpDotLeq = IOpDotLeq; - -type IOpDotLeq = [Expression, Expression]; - -type OpDotLt = IOpDotLt; - -type IOpDotLt = [Expression, Expression]; - -type OpEq = IOpEq; - -type IOpEq = [Expression, Expression]; - -type OpFactorial = IOpFactorial; - -type IOpFactorial = Expression; - -type OpFlatten = IOpFlatten; - -type IOpFlatten = [number, Expression]; - -type OpFreq = IOpFreq; - -type IOpFreq = [Expression, Expression]; - -type OpGCC = IOpGCC; - -type IOpGCC = [Expression, Expression, Expression]; - -type OpGeq = IOpGeq; - -type IOpGeq = [Expression, Expression]; - -type OpGt = IOpGt; - -type IOpGt = [Expression, Expression]; - -type OpHist = IOpHist; - -type IOpHist = Expression; - -type OpIff = IOpIff; - -type IOpIff = [Expression, Expression]; - -type OpImage = IOpImage; - -type IOpImage = [Expression, Expression]; - -type OpImageSet = IOpImageSet; - -type IOpImageSet = [Expression, Expression]; - -type OpImply = IOpImply; - -type IOpImply = [Expression, Expression]; - -type OpIn = IOpIn; - -type IOpIn = [Expression, Expression]; - -type OpIndexing = IOpIndexing; - -type IOpIndexing = [Expression, Expression]; - -type OpIntersect = IOpIntersect; - -type IOpIntersect = [Expression, Expression]; - -type OpInverse = IOpInverse; - -type IOpInverse = [Expression, Expression]; - -type OpLeq = IOpLeq; - -type IOpLeq = [Expression, Expression]; - -type OpLexLeq = IOpLexLeq; - -type IOpLexLeq = [Expression, Expression]; - -type OpLexLt = IOpLexLt; - -type IOpLexLt = [Expression, Expression]; - -type OpLt = IOpLt; - -type IOpLt = [Expression, Expression]; - -type OpMax = IOpMax; - -type IOpMax = Expression; - -type OpMin = IOpMin; - -type IOpMin = Expression; - -type OpMinus = IOpMinus; - -type IOpMinus = [Expression, Expression]; - -type OpMod = IOpMod; - -type IOpMod = [Expression, Expression]; - -type OpNegate = IOpNegate; - -type IOpNegate = Expression; - -type OpNeq = IOpNeq; - -type IOpNeq = [Expression, Expression]; - -type OpNot = IOpNot; - -type IOpNot = Expression; - -type OpOr = IOpOr; - -type IOpOr = Expression; - -type OpParticipants = IOpParticipants; - -type IOpParticipants = Expression; - -type OpParts = IOpParts; - -type IOpParts = Expression; - -type OpParty = IOpParty; - -type IOpParty = [Expression, Expression]; - -type OpPow = IOpPow; - -type IOpPow = [Expression, Expression]; - -type OpPowerSet = IOpPowerSet; - -type IOpPowerSet = Expression; - -type OpPred = IOpPred; - -type IOpPred = Expression; - -type OpPreImage = IOpPreImage; - -type IOpPreImage = [Expression, Expression]; - -type OpProduct = IOpProduct; - -type IOpProduct = Expression; - -type OpRange = IOpRange; - -type IOpRange = Expression; - -type OpRelationProj = IOpRelationProj; - -type IOpRelationProj = [Expression, Expression[]]; - -type OpRestrict = IOpRestrict; - -type IOpRestrict = [Expression, Expression]; - -type OpSlicing = IOpSlicing; - -type IOpSlicing = [Expression, Expression, Expression]; - -type OpSubsequence = IOpSubsequence; - -type IOpSubsequence = [Expression, Expression]; - -type OpSubset = IOpSubset; - -type IOpSubset = [Expression, Expression]; - -type OpSubsetEq = IOpSubsetEq; - -type IOpSubsetEq = [Expression, Expression]; - -type OpSubstring = IOpSubstring; - -type IOpSubstring = [Expression, Expression]; - -type OpSucc = IOpSucc; - -type IOpSucc = Expression; - -type OpSum = IOpSum; - -type IOpSum = Expression; - -type OpSupset = IOpSupset; - -type IOpSupset = [Expression, Expression]; - -type OpSupsetEq = IOpSupsetEq; - -type IOpSupsetEq = [Expression, Expression]; - -type OpTable = IOpTable; - -type IOpTable = [Expression, Expression]; - -type OpTildeLeq = IOpTildeLeq; - -type IOpTildeLeq = [Expression, Expression]; - -type OpTildeLt = IOpTildeLt; - -type IOpTildeLt = [Expression, Expression]; - -type OpTogether = IOpTogether; - -type IOpTogether = [Expression, Expression]; - -type OpToInt = IOpToInt; - -type IOpToInt = Expression; - -type OpToMSet = IOpToMSet; - -type IOpToMSet = Expression; - -type OpToRelation = IOpToRelation; - -type IOpToRelation = Expression; - -type OpToSet = IOpToSet; - -type IOpToSet = [boolean, Expression]; - -type OpTransform = IOpTransform; - -type IOpTransform = [Expression, Expression]; - -type OpTrue = IOpTrue; - -type IOpTrue = Expression; - -type OpTwoBars = IOpTwoBars; - -type IOpTwoBars = Expression; - -type OpUnion = IOpUnion; - -type IOpUnion = [Expression, Expression]; - -type OpXor = IOpXor; - -type IOpXor = Expression; - -type PartialityAttr = "PartialityAttr_Partial" | "PartialityAttr_Total"; - -type PartitionAttr = IPartitionAttr; - -interface IPartitionAttr { - partsNum: SizeAttr; - partsSize: SizeAttr; - isRegular: boolean; -} - -type Range = IRangeOpen | IRangeSingle | IRangeLowerBounded | IRangeUpperBounded | IRangeBounded; - -interface IRangeOpen { - tag: "RangeOpen"; -} - -interface IRangeSingle { - tag: "RangeSingle"; - contents: Type; -} - -interface IRangeLowerBounded { - tag: "RangeLowerBounded"; - contents: Type; -} - -interface IRangeUpperBounded { - tag: "RangeUpperBounded"; - contents: Type; -} - -interface IRangeBounded { - tag: "RangeBounded"; - contents: [Type, Type]; -} - -type ReferenceTo = IAlias | IInComprehension | IDeclNoRepr | IDeclHasRepr | IRecordField | IVariantField; - -interface IAlias { - tag: "Alias"; - contents: Expression; -} - -interface IInComprehension { - tag: "InComprehension"; - contents: Generator; -} - -interface IDeclNoRepr { - tag: "DeclNoRepr"; - contents: [FindOrGiven, Name, Domain, Region]; -} - -interface IDeclHasRepr { - tag: "DeclHasRepr"; - contents: [FindOrGiven, Name, Domain]; -} - -interface IRecordField { - tag: "RecordField"; - contents: [Name, Type]; -} - -interface IVariantField { - tag: "VariantField"; - contents: [Name, Type]; -} - -type Region = INoRegion | IRegion; - -interface INoRegion { - tag: "NoRegion"; -} - -interface IRegion { - tag: "Region"; - contents: number; -} - -type RelationAttr = IRelationAttr; - -type IRelationAttr = [SizeAttr, BinaryRelationAttrs]; - -type SearchOrder = IBranchingOn | ICut; - -interface IBranchingOn { - tag: "BranchingOn"; - contents: Name; -} - -interface ICut { - tag: "Cut"; - contents: Expression; -} - -type SequenceAttr = ISequenceAttr; - -type ISequenceAttr = [SizeAttr, JectivityAttr]; - -type SetAttr = ISetAttr; - -type ISetAttr = SizeAttr; - -type SizeAttr = ISizeAttr_None | ISizeAttr_Size | ISizeAttr_MinSize | ISizeAttr_MaxSize | ISizeAttr_MinMaxSize; - -interface ISizeAttr_None { - tag: "SizeAttr_None"; -} - -interface ISizeAttr_Size { - tag: "SizeAttr_Size"; - contents: Type; -} - -interface ISizeAttr_MinSize { - tag: "SizeAttr_MinSize"; - contents: Type; -} - -interface ISizeAttr_MaxSize { - tag: "SizeAttr_MaxSize"; - contents: Type; -} - -interface ISizeAttr_MinMaxSize { - tag: "SizeAttr_MinMaxSize"; - contents: [Type, Type]; -} - -type Statement = IDeclaration | ISearchOrder | ISearchHeuristic | IWhere | IObjective | ISuchThat; - -interface IDeclaration { - tag: "Declaration"; - contents: Declaration; -} - -interface ISearchOrder { - tag: "SearchOrder"; - contents: SearchOrder[]; -} - -interface ISearchHeuristic { - tag: "SearchHeuristic"; - contents: Name; -} - -interface IWhere { - tag: "Where"; - contents: Expression[]; -} - -interface IObjective { - tag: "Objective"; - contents: [Objective, Expression]; -} - -interface ISuchThat { - tag: "SuchThat"; - contents: Expression[]; -} - -type Strategy = IPickFirst | IPickAll | IInteractive | IAtRandom | ICompact | ISparse | IAuto; - -interface IPickFirst { - tag: "PickFirst"; -} - -interface IPickAll { - tag: "PickAll"; -} - -interface IInteractive { - tag: "Interactive"; -} - -interface IAtRandom { - tag: "AtRandom"; -} - -interface ICompact { - tag: "Compact"; -} - -interface ISparse { - tag: "Sparse"; -} - -interface IAuto { - tag: "Auto"; - contents: Strategy; -} - -type TrailRewrites = ITrailRewrites; - -interface ITrailRewrites { - trRule: string; - trBefore: string[]; - trAfter: string[]; -} - -type Type = ITypeAny | ITypeBool | ITypeInt | ITypeEnum | ITypeUnnamed | ITypeTuple | ITypeRecord | ITypeRecordMember | ITypeVariant | ITypeVariantMember | ITypeList | ITypeMatrix | ITypeSet | ITypeMSet | ITypeFunction | ITypeSequence | ITypeRelation | ITypePartition; - -interface ITypeAny { - tag: "TypeAny"; -} - -interface ITypeBool { - tag: "TypeBool"; -} - -interface ITypeInt { - tag: "TypeInt"; - contents: IntTag; -} - -interface ITypeEnum { - tag: "TypeEnum"; - contents: Name; -} - -interface ITypeUnnamed { - tag: "TypeUnnamed"; - contents: Name; -} - -interface ITypeTuple { - tag: "TypeTuple"; - contents: Type[]; -} - -interface ITypeRecord { - tag: "TypeRecord"; - contents: [Name, Type][]; -} - -interface ITypeRecordMember { - tag: "TypeRecordMember"; - contents: [Name, [Name, Type][]]; -} - -interface ITypeVariant { - tag: "TypeVariant"; - contents: [Name, Type][]; -} - -interface ITypeVariantMember { - tag: "TypeVariantMember"; - contents: [Name, [Name, Type][]]; -} - -interface ITypeList { - tag: "TypeList"; - contents: Type; -} - -interface ITypeMatrix { - tag: "TypeMatrix"; - contents: [Type, Type]; -} - -interface ITypeSet { - tag: "TypeSet"; - contents: Type; -} - -interface ITypeMSet { - tag: "TypeMSet"; - contents: Type; -} - -interface ITypeFunction { - tag: "TypeFunction"; - contents: [Type, Type]; -} - -interface ITypeSequence { - tag: "TypeSequence"; - contents: Type; -} - -interface ITypeRelation { - tag: "TypeRelation"; - contents: Type[]; -} - -interface ITypePartition { - tag: "TypePartition"; - contents: Type; -} From 22605591c230fb816f766bc3311327b280ffc452 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 12:06:26 +0100 Subject: [PATCH 188/378] ghc version bump --- .github/workflows/build.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0bb6b6cdff..73b8095c7a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - GHC_VERSION: ["9.0"] + GHC_VERSION: [9.2] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index 24e001497e..b61e7a5ab9 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - GHC_VERSION: ["9.0"] + GHC_VERSION: [9.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e643c06729..c328b6908b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: strategy: matrix: - GHC_VERSION: ["9.0"] + GHC_VERSION: [9.2] os: [ubuntu-latest] runs-on: ${{ matrix.os }} From 4689ef1520934444bbcc3acc238c2eb3d0e4d141 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 12:46:44 +0100 Subject: [PATCH 189/378] Improved error message format --- src/Conjure/Language/Parser.hs | 12 +++++++++--- src/Conjure/UI/ErrorDisplay.hs | 4 ++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index aeb44548d5..f9342cdcf6 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -47,12 +47,18 @@ import Conjure.Language.AST.Reformer (Flattenable (flatten)) import Conjure.Language.Pretty import qualified Prettyprinter as Pr - type Pipeline a b = ( (Parsec Void ETokenStream) a ,a -> V.ValidatorS b,Bool) data PipelineError = LexErr LexerError | ParserError ParserError | ValidatorError Doc - deriving (Show) + deriving Show + +instance Pretty PipelineError where + pretty (ValidatorError d) = d + pretty e = pretty $ show e + + + lexAndParse :: Flattenable a => P.Parser a -> Text -> Either PipelineError a lexAndParse parse t = do @@ -107,7 +113,7 @@ parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAn runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p (Just file,inp) of - Left pe -> Left $ "Parser error in file:" <+> pretty file <+> pretty ("Error is:\n" ++ show pe) + Left pe -> Left $ pretty pe Right a -> Right a diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index b59468aa6a..3aaf320ead 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -50,12 +50,12 @@ displayError x = case x of SemanticError txt -> "Error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt TypeError expected got -> "Type error:\n\tExpected: " ++ show (pretty expected) ++ "\n\tGot: " ++ show (pretty got) - ComplexTypeError msg ty -> "Type error:\n\tExpected:" ++ show msg ++ "\n\tGot: " ++ (show $ pretty ty) + ComplexTypeError msg ty -> "Type error:\n\tExpected: " ++ show msg ++ "\n\tGot: " ++ (show $ pretty ty) SkippedTokens -> "Skipped tokens" UnexpectedArg -> "Unexpected argument" MissingArgsError expected got -> "Insufficient args, expected " ++ (show expected) ++ " got " ++ (show got) InternalError -> "Pattern match failiure" - InternalErrorS txt -> "Something went wrong:" ++ T.unpack txt + InternalErrorS txt -> "Something went wrong: " ++ T.unpack txt WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) KindError a b -> show $ "Tried to use a " <> pretty b <> " where " <> pretty a <> " was expected" From 20b8fdd91db3be7d6cfd4c7a6f3eda2bdc929b89 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 13:06:55 +0100 Subject: [PATCH 190/378] Update tests to new format --- .../product-type-error/stderr.expected | 5 ++--- .../basic/enum-spaces-error/stderr.expected | 3 +-- .../basic/matrices/allDiff-type-error/stderr.expected | 5 ++--- .../basic/matrices/matrix-forAll/stderr.expected | 7 +++---- .../basic/matrices/matrix-index-error/stderr.expected | 3 +-- .../hist-type-error/stderr.expected | 5 ++--- .../set-apart/stderr.expected | 3 +-- .../set-participant/stderr.expected | 3 +-- .../set-parts-together/stderr.expected | 3 +-- .../set-party/stderr.expected | 3 +-- .../basic/record-type-error/stderr.expected | 3 +-- .../set-operators/in-type-error-02/stderr.expected | 5 ++--- .../set-operators/in-type-error-03/stderr.expected | 5 ++--- .../basic/tuples/tuple-addition-error/stderr.expected | 7 +++---- .../basic/tuples/tuple-bounds-error/stderr.expected | 4 +--- .../toInt-error/stderr.expected | 3 +-- .../allDiff-type-error/stderr.expected | 5 ++--- .../allDiffExcept-type-error-01/stderr.expected | 7 +++---- .../allDiffExcept-type-error-02/stderr.expected | 7 +++---- .../and-type-error/stderr.expected | 5 ++--- .../apart-type-error/stderr.expected | 3 +-- .../defined-type-error/stderr.expected | 7 +++---- .../factorial-type-error/stderr.expected | 3 +-- .../flatten-type-error-01/stderr.expected | 5 ++--- .../flatten-type-error-02/stderr.expected | 3 +-- .../freq-type-error/stderr.expected | 3 +-- .../hist-type-error/stderr.expected | 7 +++---- .../in-type-error-01/stderr.expected | 3 +-- .../in-type-error-02/stderr.expected | 5 ++--- .../inverse-type-error/stderr.expected | 3 +-- .../max-type-error-01/stderr.expected | 5 ++--- .../max-type-error-02/stderr.expected | 5 ++--- .../min-type-error-01/stderr.expected | 5 ++--- .../min-type-error-02/stderr.expected | 5 ++--- .../negate-type-error/stderr.expected | 3 +-- .../not-type-error/stderr.expected | 3 +-- .../or-type-error/stderr.expected | 5 ++--- .../participants-type-error/stderr.expected | 3 +-- .../parts-type-error/stderr.expected | 3 +-- .../party-type-error-02/stderr.expected | 3 +-- .../party-type-error-03/stderr.expected | 3 +-- .../powerSet-type-error/stderr.expected | 3 +-- .../pred-type-error/stderr.expected | 5 ++--- .../product-type-error-01/stderr.expected | 5 ++--- .../product-type-error-02/stderr.expected | 5 ++--- .../range-type-error/stderr.expected | 5 ++--- .../restrict-type-error/stderr.expected | 3 +-- .../subsequence-type-error/stderr.expected | 3 +-- .../substring-type-error/stderr.expected | 3 +-- .../succ-type-error/stderr.expected | 5 ++--- .../sum-type-error-01/stderr.expected | 5 ++--- .../sum-type-error-02/stderr.expected | 5 ++--- .../toInt-type-error/stderr.expected | 3 +-- .../toMSet-type-error/stderr.expected | 5 ++--- .../toSet-type-error/stderr.expected | 5 ++--- .../xor-type-error/stderr.expected | 5 ++--- tests/custom/issues/365/stderr.expected | 3 +-- tests/custom/issues/405/stderr.expected | 3 +-- tests/custom/issues/431/stderr.expected | 3 +-- tests/custom/issues/439/stderr.expected | 3 +-- tests/custom/issues/551/stderr.expected | 3 +-- .../1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected | 3 +-- .../282fe3e111717af84f27689693c94ac4/stderr.expected | 3 +-- .../8089eb489848ed165fbe9a1af7e6cd47/stderr.expected | 3 +-- .../820969cf7025c19eb6a8b65584b5c7ec/stderr.expected | 7 +++---- .../8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected | 3 +-- .../961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected | 3 +-- .../9cc3198933cb09006cb5dbb960f49f95/stderr.expected | 3 +-- .../ac72aae66b512a833a3ec00755c2084d/stderr.expected | 3 +-- .../c73ac7607ea8c1229507ce9b34100189/stderr.expected | 3 +-- .../f2d8a670b4c34d59079378000ca2e898/stderr.expected | 3 +-- .../autogen/315~1435148451_38/stderr.expected | 7 +++---- tests/parse_print/autogen/316~final/stderr.expected | 7 +++---- .../autogen/317~1435132020_93/stderr.expected | 7 +++---- tests/parse_print/autogen/318~final/stderr.expected | 7 +++---- .../autogen/319~1435138340_66/stderr.expected | 7 +++---- tests/parse_print/autogen/320~final/stderr.expected | 7 +++---- .../autogen/321~1435140010_44/stderr.expected | 11 +++++------ tests/parse_print/autogen/322~final/stderr.expected | 7 +++---- .../autogen/325~1435147026_26/stderr.expected | 7 +++---- tests/parse_print/autogen/326~final/stderr.expected | 7 +++---- .../autogen/427~1435209539_80/stderr.expected | 7 +++---- .../autogen/441~1435208191_85/stderr.expected | 7 +++---- tests/parse_print/autogen/442~final/stderr.expected | 7 +++---- .../autogen/445~1435212982_68/stderr.expected | 11 +++++------ tests/parse_print/autogen/446~final/stderr.expected | 7 +++---- .../autogen/447~1435213364_36/stderr.expected | 7 +++---- tests/parse_print/autogen/448~final/stderr.expected | 7 +++---- .../autogen/560~1436548014_12/stderr.expected | 7 +++---- tests/parse_print/autogen/561~final/stderr.expected | 7 +++---- .../autogen/562~1436556139_51/stderr.expected | 7 +++---- tests/parse_print/autogen/563~final/stderr.expected | 7 +++---- .../autogen/613~1436580506_52/stderr.expected | 7 +++---- tests/parse_print/autogen/614~final/stderr.expected | 7 +++---- .../autogen/615~1436587408_39/stderr.expected | 7 +++---- tests/parse_print/autogen/616~final/stderr.expected | 7 +++---- .../parse_print/basic/typeErrorInDecl/stderr.expected | 5 ++--- .../heuristic/heuristic_magic/stderr.expected | 3 +-- tests/parse_print/issues/130/stderr.expected | 3 +-- tests/parse_print/issues/133/1/stderr.expected | 3 +-- tests/parse_print/issues/133/2/stderr.expected | 4 +--- tests/parse_print/issues/133/3/stderr.expected | 4 +--- tests/parse_print/issues/207/stderr.expected | 7 +++---- tests/parse_print/issues/361/1/stderr.expected | 3 +-- tests/parse_print/issues/361/2/stderr.expected | 3 +-- tests/parse_print/issues/363/1/stderr.expected | 3 +-- tests/parse_print/issues/363/2/stderr.expected | 3 +-- tests/parse_print/issues/425/1/stderr.expected | 3 +-- tests/parse_print/issues/425/2/stderr.expected | 3 +-- tests/parse_print/parsing01/stderr.expected | 4 +--- tests/parse_print/parsing03_nonassoc/stderr.expected | 3 +-- .../enum_liberated/change-01/stderr.expected | 5 ++--- .../enum_liberated/change-02/stderr.expected | 3 +-- .../enum_liberated/change-03/stderr.expected | 3 +-- .../enum_liberated/change-05/stderr.expected | 3 +-- .../enum_liberated/change-06/stderr.expected | 3 +-- .../enum_liberated/change-07/stderr.expected | 3 +-- .../enum_liberated/change-08/stderr.expected | 3 +-- .../enum_liberated/change-10/stderr.expected | 3 +-- .../enum_liberated/delete-01/stderr.expected | 3 +-- .../enum_liberated/delete-02/stderr.expected | 3 +-- .../enum_liberated/delete-03/stderr.expected | 3 +-- .../enum_liberated/delete-04/stderr.expected | 3 +-- .../enum_liberated/delete-05/stderr.expected | 3 +-- .../enum_liberated/delete-06/stderr.expected | 5 ++--- .../enum_liberated/delete-07/stderr.expected | 3 +-- .../enum_liberated/delete-08/stderr.expected | 3 +-- .../enum_liberated/delete-09/stderr.expected | 3 +-- .../enum_liberated/delete-10/stderr.expected | 3 +-- .../random_perturb/set01/change-02/stderr.expected | 5 ++--- .../random_perturb/set01/change-03/stderr.expected | 3 +-- .../random_perturb/set01/change-04/stderr.expected | 3 +-- .../random_perturb/set01/change-05/stderr.expected | 3 +-- .../random_perturb/set01/change-06/stderr.expected | 3 +-- .../random_perturb/set01/change-07/stderr.expected | 3 +-- .../random_perturb/set01/change-08/stderr.expected | 3 +-- .../random_perturb/set01/change-09/stderr.expected | 3 +-- .../random_perturb/set01/change-10/stderr.expected | 3 +-- .../random_perturb/set01/delete-01/stderr.expected | 3 +-- .../random_perturb/set01/delete-02/stderr.expected | 3 +-- .../random_perturb/set01/delete-03/stderr.expected | 3 +-- .../random_perturb/set01/delete-04/stderr.expected | 3 +-- .../random_perturb/set01/delete-05/stderr.expected | 3 +-- .../random_perturb/set01/delete-06/stderr.expected | 3 +-- .../random_perturb/set01/delete-07/stderr.expected | 3 +-- .../random_perturb/set01/delete-08/stderr.expected | 3 +-- .../random_perturb/set01/delete-09/stderr.expected | 3 +-- .../random_perturb/set01/delete-10/stderr.expected | 3 +-- .../syntax_test/domains/variant/model.expected.json | 4 ++-- .../expressions/operators/typecheck.expected | 0 150 files changed, 248 insertions(+), 400 deletions(-) delete mode 100644 tests/parse_print/syntax_test/expressions/operators/typecheck.expected diff --git a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected index c9ac90919b..3a91a131fa 100644 --- a/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/arithmetic-operators/product-type-error/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: product.essence Error is: -ValidatorError product.essence:2:23: + product.essence:2:23: | 2 | such that x = product(false, true) | ^^^^^ Type error: - Expected:"Matrix or Set" + Expected: "Matrix or Set" Got: bool product.essence:2:30: diff --git a/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected b/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected index def01c9f84..ded4b55955 100644 --- a/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/enum-spaces-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: enum-spaces.essence Error is: -ValidatorError enum-spaces.essence:2:43: + enum-spaces.essence:2:43: | 2 | letting numbers be new type enum {one, tw o, three} | ^ diff --git a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected index 3a0b69d65d..db4615cb37 100644 --- a/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/matrices/allDiff-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: allDiff-type-error.essence Error is: -ValidatorError allDiff-type-error.essence:3:23: + allDiff-type-error.essence:3:23: | 3 | such that a = allDiff(false) | ^^^^^ Type error: - Expected:"Matrix or list" + Expected: "Matrix or list" Got: bool diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected index a4994c5c8b..624fa06ab3 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-forAll/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: matrix-forAll.essence Error is: -ValidatorError matrix-forAll.essence:6:33: + matrix-forAll.essence:6:33: | 6 | such that b = forAll i in a . i=i*i | ^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: matrix indexed by [int] of int matrix-forAll.essence:6:35: @@ -13,6 +12,6 @@ matrix-forAll.essence:6:35: 6 | such that b = forAll i in a . i=i*i | ^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: matrix indexed by [int] of int diff --git a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected index 247afb4ed2..6e6864db54 100644 --- a/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/matrices/matrix-index-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: matrix-index-error.essence Error is: -ValidatorError matrix-index-error.essence:5:18: + matrix-index-error.essence:5:18: | 5 | such that b = (a[1][true] = 1) $ swapped bool and int indices | ^ diff --git a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected index 40a58196c7..4caf2fb834 100644 --- a/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/multiset-operators/hist-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: hist-type-error.essence Error is: -ValidatorError hist-type-error.essence:3:20: + hist-type-error.essence:3:20: | 3 | such that h = hist(s) | ^ Type error: - Expected:"Matrix, List or MSet" + Expected: "Matrix, List or MSet" Got: set of int diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected index 4534d9928f..3e24663ebf 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-apart/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: set-apart.essence Error is: -ValidatorError set-apart.essence:4:38: + set-apart.essence:4:38: | 4 | such that a = apart({2, 4, 6, 8, 9}, s) | ^ diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected index b4741df866..8363887301 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-participant/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: set-participant.essence Error is: -ValidatorError set-participant.essence:4:28: + set-participant.essence:4:28: | 4 | such that a = participants(s) | ^ diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected index 7efd2e8409..9a4368f676 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-parts-together/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: set-parts-together.essence Error is: -ValidatorError set-parts-together.essence:4:42: + set-parts-together.essence:4:42: | 4 | such that b = ({{2,4},{6, 8, 9}} = parts(s)) | ^ diff --git a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected index 602345a884..9f2e0011df 100644 --- a/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected +++ b/tests/custom/STARIS_2022/basic/partitions/partition-operator-errors/set-party/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: set-party.essence Error is: -ValidatorError set-party.essence:4:23: + set-party.essence:4:23: | 4 | such that a = party(2,s) | ^ diff --git a/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected b/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected index 65f5ae4b78..ea9b2a4297 100644 --- a/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/record-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: record.essence Error is: -ValidatorError record.essence:3:18: + record.essence:3:18: | 3 | such that x[a] = true | ^^^^ diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected index 413de2f612..9341f5018a 100644 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-02/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: in.essence Error is: -ValidatorError in.essence:2:21: + in.essence:2:21: | 2 | such that a = (1 in (1, 1, 2, 3)) | ^^^^^^^^^^^^ Type error: - Expected:"Container of int" + Expected: "Container of int" Got: (int, int, int, int) diff --git a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected index 9688fc7398..76d713d416 100644 --- a/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected +++ b/tests/custom/STARIS_2022/basic/set-operators/in-type-error-03/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: in.essence Error is: -ValidatorError in.essence:2:21: + in.essence:2:21: | 2 | such that a = (1 in true) | ^^^^ Type error: - Expected:"Container of int" + Expected: "Container of int" Got: bool diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected index 4588736afc..4a2a7f6960 100644 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-addition-error/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: addition.essence Error is: -ValidatorError addition.essence:4:14: + addition.essence:4:14: | 4 | letting z be x + y | ^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: (int, int) addition.essence:4:18: @@ -13,6 +12,6 @@ addition.essence:4:18: 4 | letting z be x + y | ^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: (int, int) diff --git a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected index 67be433825..ff8addeae8 100644 --- a/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/tuples/tuple-bounds-error/stderr.expected @@ -1,6 +1,4 @@ -Error: - Parser error in file: bound.essence Error is: -ValidatorError bound.essence:4:17: +Error: bound.essence:4:17: | 4 | such that b = a[0] | ^ diff --git a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected index 40f5896e20..17b12725d7 100644 --- a/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected +++ b/tests/custom/STARIS_2022/basic/type-conversion-operators/toInt-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: toInt-error.essence Error is: -ValidatorError toInt-error.essence:3:15: + toInt-error.essence:3:15: | 3 | such that b = toInt(a) | ^^^^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected index f0200ed5b7..6f1c7beba0 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiff-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: allDiff-type-error.essence Error is: -ValidatorError allDiff-type-error.essence:2:23: + allDiff-type-error.essence:2:23: | 2 | such that b = allDiff(5) | ^ Type error: - Expected:"Matrix or list" + Expected: "Matrix or list" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected index d643551619..cc0a2499ad 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-01/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: allDiffExcept-type-error.essence Error is: -ValidatorError allDiffExcept-type-error.essence:2:35: + allDiffExcept-type-error.essence:2:35: | 2 | such that b = alldifferent_except(1, {1, 3, 4, 5}) | ^ Type error: - Expected:"Matrix or list" + Expected: "Matrix or list" Got: int allDiffExcept-type-error.essence:2:38: @@ -13,6 +12,6 @@ allDiffExcept-type-error.essence:2:38: 2 | such that b = alldifferent_except(1, {1, 3, 4, 5}) | ^^^^^^^^^^^^ Type error: - Expected:"int enum or bool" + Expected: "int enum or bool" Got: set of int diff --git a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected index 822748da7f..2af4c764e6 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/allDiffExcept-type-error-02/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: allDiffExcept-type-error.essence Error is: -ValidatorError allDiffExcept-type-error.essence:2:35: + allDiffExcept-type-error.essence:2:35: | 2 | such that b = alldifferent_except(false, [1, 2, 3, 4]) | ^^^^^ Type error: - Expected:"Matrix or list" + Expected: "Matrix or list" Got: bool allDiffExcept-type-error.essence:2:42: @@ -13,6 +12,6 @@ allDiffExcept-type-error.essence:2:42: 2 | such that b = alldifferent_except(false, [1, 2, 3, 4]) | ^^^^^^^^^^^^ Type error: - Expected:"int enum or bool" + Expected: "int enum or bool" Got: matrix indexed by [int] of int diff --git a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected index 10ec16b784..e81e11048c 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/and-type-error/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: and-type-error.essence Error is: -ValidatorError and-type-error.essence:2:19: + and-type-error.essence:2:19: | 2 | such that b = and(1, 3) | ^ Type error: - Expected:"Collection of boolean" + Expected: "Collection of boolean" Got: int and-type-error.essence:2:22: diff --git a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected index 49661cbefd..153535c641 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/apart-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: apart-type-error.essence Error is: -ValidatorError apart-type-error.essence:2:21: + apart-type-error.essence:2:21: | 2 | such that b = apart(1, 3) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected index a8597c73fa..5dc4af199f 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/defined-type-error/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: defined-type-error.essence Error is: -ValidatorError defined-type-error.essence:2:24: + defined-type-error.essence:2:24: | 2 | such that b = (defined(1) = defined(1)) | ^ Type error: - Expected:"Function or Sequence" + Expected: "Function or Sequence" Got: int defined-type-error.essence:2:37: @@ -13,6 +12,6 @@ defined-type-error.essence:2:37: 2 | such that b = (defined(1) = defined(1)) | ^ Type error: - Expected:"Function or Sequence" + Expected: "Function or Sequence" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected index 635a93e19e..ee3db1e05e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/factorial-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: factorial-type-error.essence Error is: -ValidatorError factorial-type-error.essence:2:16: + factorial-type-error.essence:2:16: | 2 | such that b = (false! = false!) | ^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected index 2be8f4687a..56ca414570 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-01/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: flatten-type-error.essence Error is: -ValidatorError flatten-type-error.essence:2:24: + flatten-type-error.essence:2:24: | 2 | such that b = (flatten(false) = [false]) | ^^^^^ Type error: - Expected:"List or Matrix " + Expected: "List or Matrix " Got: bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected index 6ff209c65d..059e1bbc61 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/flatten-type-error-02/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: flatten-type-error.essence Error is: -ValidatorError flatten-type-error.essence:2:27: + flatten-type-error.essence:2:27: | 2 | such that b = (flatten(1, false) = flatten(1, false)) | ^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected index b08588d8dd..686807a88e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/freq-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: freq-type-error.essence Error is: -ValidatorError freq-type-error.essence:2:21: + freq-type-error.essence:2:21: | 2 | such that b = (freq(1, false) = 0) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected index 04d86e8914..883aa4655e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/hist-type-error/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: hist-type-error.essence Error is: -ValidatorError hist-type-error.essence:2:21: + hist-type-error.essence:2:21: | 2 | such that b = (hist(false) = hist(false)) | ^^^^^ Type error: - Expected:"Matrix, List or MSet" + Expected: "Matrix, List or MSet" Got: bool hist-type-error.essence:2:35: @@ -13,6 +12,6 @@ hist-type-error.essence:2:35: 2 | such that b = (hist(false) = hist(false)) | ^^^^^ Type error: - Expected:"Matrix, List or MSet" + Expected: "Matrix, List or MSet" Got: bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected index 4715f145f3..2686292744 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-01/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: in-type-error.essence Error is: -ValidatorError in-type-error.essence:2:16: + in-type-error.essence:2:16: | 2 | such that b = (false in {1, 2, 3}) | ^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected index b2afc3387c..553b7eb21c 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/in-type-error-02/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: in-type-error.essence Error is: -ValidatorError in-type-error.essence:2:25: + in-type-error.essence:2:25: | 2 | such that b = (false in 5) | ^ Type error: - Expected:"Container of bool" + Expected: "Container of bool" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected index 2058c5427e..c1fe5031d7 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/inverse-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: inverse-type-error.essence Error is: -ValidatorError inverse-type-error.essence:2:39: + inverse-type-error.essence:2:39: | 2 | such that a = inverse(function(0-->1),function(false-->true)) | ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected index 5f1468290e..13d85d9ce8 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-01/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: max-type-error.essence Error is: -ValidatorError max-type-error.essence:2:20: + max-type-error.essence:2:20: | 2 | such that b = (max(4) = 4) | ^ Type error: - Expected:"Domain of int-like or matrix of int-like" + Expected: "Domain of int-like or matrix of int-like" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected index d8a521bf59..6061d0085d 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/max-type-error-02/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: max-type-error.essence Error is: -ValidatorError max-type-error.essence:2:20: + max-type-error.essence:2:20: | 2 | such that b = (max([false, true, false, true]) = true) | ^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Domain of int-like or matrix of int-like" + Expected: "Domain of int-like or matrix of int-like" Got: matrix indexed by [int] of bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected index 099e86f9ef..2736363d2b 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-01/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: min-type-error.essence Error is: -ValidatorError min-type-error.essence:2:20: + min-type-error.essence:2:20: | 2 | such that b = (min(4) = 2) | ^ Type error: - Expected:"Domain of int-like or matrix of int-like" + Expected: "Domain of int-like or matrix of int-like" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected index e0748c8b54..a826b9a1de 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/min-type-error-02/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: min-type-error.essence Error is: -ValidatorError min-type-error.essence:2:20: + min-type-error.essence:2:20: | 2 | such that b = (min([false, true, false, true]) = false) | ^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Domain of int-like or matrix of int-like" + Expected: "Domain of int-like or matrix of int-like" Got: matrix indexed by [int] of bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected index ead4ffa996..925271e404 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/negate-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: negate-type-error.essence Error is: -ValidatorError negate-type-error.essence:2:17: + negate-type-error.essence:2:17: | 2 | such that a = (-false) | ^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected index e78865ce10..f27ca24939 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/not-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: not-type-error.essence Error is: -ValidatorError not-type-error.essence:2:17: + not-type-error.essence:2:17: | 2 | such that b = (!5) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected index 5ecf07c3cf..1997eb4cfd 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/or-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: or-type-error.essence Error is: -ValidatorError or-type-error.essence:2:19: + or-type-error.essence:2:19: | 2 | such that b = (or(5)) | ^ Type error: - Expected:"Collection of boolean" + Expected: "Collection of boolean" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected index 3d9ea1f33a..f917dcfe39 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/participants-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: participants-type-error.essence Error is: -ValidatorError participants-type-error.essence:2:28: + participants-type-error.essence:2:28: | 2 | such that b = participants(5) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected index c53393c562..d1a34d43ff 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/parts-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: parts-type-error.essence Error is: -ValidatorError parts-type-error.essence:2:34: + parts-type-error.essence:2:34: | 2 | b = ({{1,2},{3},{4,5,6}} = parts(false)) | ^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected index 00e9d62c0a..d539cb127a 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-02/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: party-type-error.essence Error is: -ValidatorError party-type-error.essence:2:24: + party-type-error.essence:2:24: | 2 | such that b = party(5, 6) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected index 280b78645f..e9c8583377 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/party-type-error-03/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: party-type-error.essence Error is: -ValidatorError party-type-error.essence:3:15: + party-type-error.essence:3:15: | 3 | such that b = party(false, P) | ^^^^^^^^^^^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected index 12c81ca0cf..4ba683042b 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/powerSet-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: powerSet-type-error.essence Error is: -ValidatorError powerSet-type-error.essence:2:15: + powerSet-type-error.essence:2:15: | 2 | such that s = powerSet(2) | ^^^^^^^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected index 807425da83..dd50e62ac7 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/pred-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: pred-type-error.essence Error is: -ValidatorError pred-type-error.essence:2:20: + pred-type-error.essence:2:20: | 2 | such that b = pred([false, true, false]) | ^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"int enum or bool" + Expected: "int enum or bool" Got: matrix indexed by [int] of bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected index 1db321f159..229e04e5e0 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-01/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: product-type-error.essence Error is: -ValidatorError product-type-error.essence:2:23: + product-type-error.essence:2:23: | 2 | such that i = product(5) | ^ Type error: - Expected:"Matrix or Set" + Expected: "Matrix or Set" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected index adc1d33029..dad43ab456 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/product-type-error-02/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: product-type-error.essence Error is: -ValidatorError product-type-error.essence:2:23: + product-type-error.essence:2:23: | 2 | such that i = product([false, true, false]) | ^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Integer elements" + Expected: "Integer elements" Got: bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected index 5aa4bfc5bc..9e0f2d251c 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/range-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: range-type-error.essence Error is: -ValidatorError range-type-error.essence:2:21: + range-type-error.essence:2:21: | 2 | such that s = range(5) | ^ Type error: - Expected:"Function or Sequence" + Expected: "Function or Sequence" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected index c6109d38d4..e6884004f1 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/restrict-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: restrict-type-error.essence Error is: -ValidatorError restrict-type-error.essence:4:24: + restrict-type-error.essence:4:24: | 4 | such that g = restrict(f, d) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected index 1207ea97af..6820be8961 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/subsequence-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: subsequence-type-error.essence Error is: -ValidatorError subsequence-type-error.essence:2:16: + subsequence-type-error.essence:2:16: | 2 | such that b = (4 subsequence false) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected index 8b5af79f81..fdc8580c08 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/substring-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: substring-type-error.essence Error is: -ValidatorError substring-type-error.essence:2:16: + substring-type-error.essence:2:16: | 2 | such that b = (4 substring false) | ^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected index 4fee6772a3..2a320e1749 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/succ-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: succ-type-error.essence Error is: -ValidatorError succ-type-error.essence:2:20: + succ-type-error.essence:2:20: | 2 | such that b = succ([false, true, false]) | ^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"int enum or bool" + Expected: "int enum or bool" Got: matrix indexed by [int] of bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected index f813f88a9d..013eb4f07a 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-01/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: sum-type-error.essence Error is: -ValidatorError sum-type-error.essence:2:19: + sum-type-error.essence:2:19: | 2 | such that i = sum(5) | ^ Type error: - Expected:"Matrix or Set" + Expected: "Matrix or Set" Got: int diff --git a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected index 2b412d9f1d..48efa396ee 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/sum-type-error-02/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: sum-type-error.essence Error is: -ValidatorError sum-type-error.essence:2:19: + sum-type-error.essence:2:19: | 2 | such that i = sum([false, true, false]) | ^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Integer elements" + Expected: "Integer elements" Got: bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected index 71a7202d31..6161df16d6 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/toInt-type-error/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: toInt-type-error.essence Error is: -ValidatorError toInt-type-error.essence:2:21: + toInt-type-error.essence:2:21: | 2 | such that i = toInt([false, true, false]) | ^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected index 41c69bdc93..acae94e39e 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/toMSet-type-error/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: toMSet-type-error.essence Error is: -ValidatorError toMSet-type-error.essence:2:23: + toMSet-type-error.essence:2:23: | 2 | such that b = (toMSet(false) = (2, 3, 2)) | ^^^^^ Type error: - Expected:"Matrix ,list,function,relation,mset,set " + Expected: "Matrix ,list,function,relation,mset,set " Got: bool toMSet-type-error.essence:2:32: diff --git a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected index c69e7b1aac..9104bf9bef 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/toSet-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: toSet-type-error.essence Error is: -ValidatorError toSet-type-error.essence:2:22: + toSet-type-error.essence:2:22: | 2 | such that b = (toSet(false) = {2, 3, 2}) | ^^^^^ Type error: - Expected:"Matrix ,list,function,relation,mset " + Expected: "Matrix ,list,function,relation,mset " Got: bool diff --git a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected index ede1a0d07a..89baff01e2 100644 --- a/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected +++ b/tests/custom/STARIS_2022/operation-type-errors/xor-type-error/stderr.expected @@ -1,10 +1,9 @@ Error: - Parser error in file: xor-type-error.essence Error is: -ValidatorError xor-type-error.essence:2:19: + xor-type-error.essence:2:19: | 2 | such that b = xor(3) | ^ Type error: - Expected:"Collection of boolean" + Expected: "Collection of boolean" Got: int diff --git a/tests/custom/issues/365/stderr.expected b/tests/custom/issues/365/stderr.expected index 9367dd54fa..625b8abb28 100644 --- a/tests/custom/issues/365/stderr.expected +++ b/tests/custom/issues/365/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: 365.essence Error is: -ValidatorError 365.essence:2:56: + 365.essence:2:56: | 2 | find i : int(0..9) such that forAll j : int(0..9) . j <> i | ^ diff --git a/tests/custom/issues/405/stderr.expected b/tests/custom/issues/405/stderr.expected index da912bf863..6ea5261cff 100644 --- a/tests/custom/issues/405/stderr.expected +++ b/tests/custom/issues/405/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: 405.essence Error is: -ValidatorError 405.essence:2:11: + 405.essence:2:11: | 2 | such that for i in s . i % 2 = 0 | ^^^ diff --git a/tests/custom/issues/431/stderr.expected b/tests/custom/issues/431/stderr.expected index 798eaad318..cb187f15d9 100644 --- a/tests/custom/issues/431/stderr.expected +++ b/tests/custom/issues/431/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: 431.essence Error is: -ValidatorError 431.essence:2:13: + 431.essence:2:13: | 2 | find s : set {x,y} | ^ diff --git a/tests/custom/issues/439/stderr.expected b/tests/custom/issues/439/stderr.expected index 2311908f6c..73cdc59bcf 100644 --- a/tests/custom/issues/439/stderr.expected +++ b/tests/custom/issues/439/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: 439.essence Error is: -ValidatorError 439.essence:5:11: + 439.essence:5:11: | 5 | such that atom in used | ^^^^ diff --git a/tests/custom/issues/551/stderr.expected b/tests/custom/issues/551/stderr.expected index 1182c92d9e..8e6ae190c4 100644 --- a/tests/custom/issues/551/stderr.expected +++ b/tests/custom/issues/551/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: 551.essence Error is: -ValidatorError 551.essence:4:28: + 551.essence:4:28: | 4 | such that and([true | b <- blocks]) | ^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected index 27f4e17365..b965ee5933 100644 --- a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected index 9e856c487f..f1d94d77ab 100644 --- a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected index 529c651301..7e99d5fb3e 100644 --- a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected index 24c905a28a..cf788f0e48 100644 --- a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence:175:39: + tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence:175:39: | 175 | (partition() : `partition from int`) - (partition() : `partition from int`)), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf7025c19eb6a8b65584b5c7ec.essence:175:78: @@ -13,5 +12,5 @@ tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/820969cf 175 | (partition() : `partition from int`) - (partition() : `partition from int`)), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected index 4ef6dbcbe2..431b84168b 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected index b301829141..48993f1ab3 100644 --- a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected index 584e0f6460..d4b25f1e85 100644 --- a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected index 6beb3eceac..838fb7b422 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected index 0bc70f6dd4..61a3bee840 100644 --- a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence:109:40: + tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/c73ac7607ea8c1229507ce9b34100189.essence:109:40: | 109 | together(false != false, true <-> true, partition({false, true})) --> var2 | ^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected index 78266a6bf9..e4d33ccf0c 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence Error is: -ValidatorError tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:1:1: + tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:1:1: | 1 | language ESSENCE' 1.0 | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/autogen/315~1435148451_38/stderr.expected b/tests/parse_print/autogen/315~1435148451_38/stderr.expected index 495ffaa6a2..ced2a6e68f 100644 --- a/tests/parse_print/autogen/315~1435148451_38/stderr.expected +++ b/tests/parse_print/autogen/315~1435148451_38/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/315~1435148451_38/spec.essence Error is: -ValidatorError tests/parse_print/autogen/315~1435148451_38/spec.essence:19:44: + tests/parse_print/autogen/315~1435148451_38/spec.essence:19:44: | 19 | tuple (true); int(1..4)] --> partition({false, true, true}, {false, false}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/315~1435148451_38/spec.essence:22:44: @@ -13,5 +12,5 @@ tests/parse_print/autogen/315~1435148451_38/spec.essence:22:44: 22 | partition({false, false, true, true, true}, {false, true, true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/316~final/stderr.expected b/tests/parse_print/autogen/316~final/stderr.expected index 14613db154..68f9119afe 100644 --- a/tests/parse_print/autogen/316~final/stderr.expected +++ b/tests/parse_print/autogen/316~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/316~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/316~final/spec.essence:14:44: + tests/parse_print/autogen/316~final/spec.essence:14:44: | 14 | tuple (true); int(1..4)] --> partition({false, true, true}, {false, false}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/316~final/spec.essence:17:44: @@ -13,5 +12,5 @@ tests/parse_print/autogen/316~final/spec.essence:17:44: 17 | partition({false, false, true, true, true}, {false, true, true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/317~1435132020_93/stderr.expected b/tests/parse_print/autogen/317~1435132020_93/stderr.expected index d3d2471bab..d157d94fbe 100644 --- a/tests/parse_print/autogen/317~1435132020_93/stderr.expected +++ b/tests/parse_print/autogen/317~1435132020_93/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/317~1435132020_93/spec.essence Error is: -ValidatorError tests/parse_print/autogen/317~1435132020_93/spec.essence:8:18: + tests/parse_print/autogen/317~1435132020_93/spec.essence:8:18: | 8 | participants(partition({4, 0, 3}, {0, 0, 2, 4}) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen/317~1435132020_93/spec.essence:9:18: @@ -13,5 +12,5 @@ tests/parse_print/autogen/317~1435132020_93/spec.essence:9:18: 9 | partition({2, 1, 2}, {2, 1, 3, 0, 1}, {1, 5, 0, 5}, {3, 2})) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen/318~final/stderr.expected b/tests/parse_print/autogen/318~final/stderr.expected index ed3efaf227..e81f8899d0 100644 --- a/tests/parse_print/autogen/318~final/stderr.expected +++ b/tests/parse_print/autogen/318~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/318~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/318~final/spec.essence:4:24: + tests/parse_print/autogen/318~final/spec.essence:4:24: | 4 | such that participants(partition({0}) - partition({4})) = {5} | ^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen/318~final/spec.essence:4:41: @@ -13,5 +12,5 @@ tests/parse_print/autogen/318~final/spec.essence:4:41: 4 | such that participants(partition({0}) - partition({4})) = {5} | ^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen/319~1435138340_66/stderr.expected b/tests/parse_print/autogen/319~1435138340_66/stderr.expected index a8403dea6a..6654fceee3 100644 --- a/tests/parse_print/autogen/319~1435138340_66/stderr.expected +++ b/tests/parse_print/autogen/319~1435138340_66/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/319~1435138340_66/spec.essence Error is: -ValidatorError tests/parse_print/autogen/319~1435138340_66/spec.essence:9:5: + tests/parse_print/autogen/319~1435138340_66/spec.essence:9:5: | 9 | (partition() : `partition from bool`) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/319~1435138340_66/spec.essence:10:5: @@ -13,5 +12,5 @@ tests/parse_print/autogen/319~1435138340_66/spec.essence:10:5: 10 | partition({false, false, true}, {false, true, false, true, false}, {false}) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/320~final/stderr.expected b/tests/parse_print/autogen/320~final/stderr.expected index bc8637611f..b91e27e55e 100644 --- a/tests/parse_print/autogen/320~final/stderr.expected +++ b/tests/parse_print/autogen/320~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/320~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/320~final/spec.essence:5:5: + tests/parse_print/autogen/320~final/spec.essence:5:5: | 5 | (partition() : `partition from bool`) - partition({false}) in | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/320~final/spec.essence:5:45: @@ -13,5 +12,5 @@ tests/parse_print/autogen/320~final/spec.essence:5:45: 5 | (partition() : `partition from bool`) - partition({false}) in | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/321~1435140010_44/stderr.expected b/tests/parse_print/autogen/321~1435140010_44/stderr.expected index 1601343572..413715805a 100644 --- a/tests/parse_print/autogen/321~1435140010_44/stderr.expected +++ b/tests/parse_print/autogen/321~1435140010_44/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/321~1435140010_44/spec.essence Error is: -ValidatorError tests/parse_print/autogen/321~1435140010_44/spec.essence:57:14: + tests/parse_print/autogen/321~1435140010_44/spec.essence:57:14: | 57 | partition({true -> true}, {true <= false, false <-> false, false <-> false}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/321~1435140010_44/spec.essence:62:14: @@ -13,7 +12,7 @@ tests/parse_print/autogen/321~1435140010_44/spec.essence:62:14: 62 | (partition({false, false, false, true, false}, {true, true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: ? tests/parse_print/autogen/321~1435140010_44/spec.essence:62:15: @@ -21,7 +20,7 @@ tests/parse_print/autogen/321~1435140010_44/spec.essence:62:15: 62 | (partition({false, false, false, true, false}, {true, true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/321~1435140010_44/spec.essence:65:15: @@ -29,5 +28,5 @@ tests/parse_print/autogen/321~1435140010_44/spec.essence:65:15: 65 | partition({true}, {true, true, true}, {false, true, false}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/322~final/stderr.expected b/tests/parse_print/autogen/322~final/stderr.expected index 289fbcbeb7..cbb99ff1f8 100644 --- a/tests/parse_print/autogen/322~final/stderr.expected +++ b/tests/parse_print/autogen/322~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/322~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/322~final/spec.essence:4:28: + tests/parse_print/autogen/322~final/spec.essence:4:28: | 4 | such that together({true}, partition({true}) - partition({true})) | ^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/322~final/spec.essence:4:48: @@ -13,5 +12,5 @@ tests/parse_print/autogen/322~final/spec.essence:4:48: 4 | such that together({true}, partition({true}) - partition({true})) | ^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/325~1435147026_26/stderr.expected b/tests/parse_print/autogen/325~1435147026_26/stderr.expected index 3f7a8cc279..321e11f574 100644 --- a/tests/parse_print/autogen/325~1435147026_26/stderr.expected +++ b/tests/parse_print/autogen/325~1435147026_26/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/325~1435147026_26/spec.essence Error is: -ValidatorError tests/parse_print/autogen/325~1435147026_26/spec.essence:99:14: + tests/parse_print/autogen/325~1435147026_26/spec.essence:99:14: | 99 | partition({[false; int(0..0)], | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from matrix indexed by [int] of bool tests/parse_print/autogen/325~1435147026_26/spec.essence:107:14: @@ -13,5 +12,5 @@ tests/parse_print/autogen/325~1435147026_26/spec.essence:107:14: 107 | partition({[true, false; int(4, 2..2)], [false, false, true, false; int(5..8)], | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from matrix indexed by [int] of bool diff --git a/tests/parse_print/autogen/326~final/stderr.expected b/tests/parse_print/autogen/326~final/stderr.expected index 4956a71c17..9de6f2b1f0 100644 --- a/tests/parse_print/autogen/326~final/stderr.expected +++ b/tests/parse_print/autogen/326~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/326~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/326~final/spec.essence:6:14: + tests/parse_print/autogen/326~final/spec.essence:6:14: | 6 | partition({[true; int(1..1)]}) - partition({[false; int(1..1)]})) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from matrix indexed by [int] of bool tests/parse_print/autogen/326~final/spec.essence:6:47: @@ -13,5 +12,5 @@ tests/parse_print/autogen/326~final/spec.essence:6:47: 6 | partition({[true; int(1..1)]}) - partition({[false; int(1..1)]})) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from matrix indexed by [int] of bool diff --git a/tests/parse_print/autogen/427~1435209539_80/stderr.expected b/tests/parse_print/autogen/427~1435209539_80/stderr.expected index 16bcd342eb..544d6e2095 100644 --- a/tests/parse_print/autogen/427~1435209539_80/stderr.expected +++ b/tests/parse_print/autogen/427~1435209539_80/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/427~1435209539_80/spec.essence Error is: -ValidatorError tests/parse_print/autogen/427~1435209539_80/spec.essence:18:11: + tests/parse_print/autogen/427~1435209539_80/spec.essence:18:11: | 18 | partition({true, false, true}) - (partition() : `partition from bool`)), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/427~1435209539_80/spec.essence:18:44: @@ -13,5 +12,5 @@ tests/parse_print/autogen/427~1435209539_80/spec.essence:18:44: 18 | partition({true, false, true}) - (partition() : `partition from bool`)), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/441~1435208191_85/stderr.expected b/tests/parse_print/autogen/441~1435208191_85/stderr.expected index 4bcafbf671..ab63bc2858 100644 --- a/tests/parse_print/autogen/441~1435208191_85/stderr.expected +++ b/tests/parse_print/autogen/441~1435208191_85/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/441~1435208191_85/spec.essence Error is: -ValidatorError tests/parse_print/autogen/441~1435208191_85/spec.essence:16:14: + tests/parse_print/autogen/441~1435208191_85/spec.essence:16:14: | 16 | partition({false, true, true, true}) - (partition() : `partition from bool`)), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/441~1435208191_85/spec.essence:16:53: @@ -13,5 +12,5 @@ tests/parse_print/autogen/441~1435208191_85/spec.essence:16:53: 16 | partition({false, true, true, true}) - (partition() : `partition from bool`)), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/442~final/stderr.expected b/tests/parse_print/autogen/442~final/stderr.expected index 30ce546a06..dabf486059 100644 --- a/tests/parse_print/autogen/442~final/stderr.expected +++ b/tests/parse_print/autogen/442~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/442~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/442~final/spec.essence:5:23: + tests/parse_print/autogen/442~final/spec.essence:5:23: | 5 | together({false}, partition({false}) - (partition() : `partition from bool`)) | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/442~final/spec.essence:5:44: @@ -13,5 +12,5 @@ tests/parse_print/autogen/442~final/spec.essence:5:44: 5 | together({false}, partition({false}) - (partition() : `partition from bool`)) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/445~1435212982_68/stderr.expected b/tests/parse_print/autogen/445~1435212982_68/stderr.expected index fdacaf87d2..ab509008dd 100644 --- a/tests/parse_print/autogen/445~1435212982_68/stderr.expected +++ b/tests/parse_print/autogen/445~1435212982_68/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/445~1435212982_68/spec.essence Error is: -ValidatorError tests/parse_print/autogen/445~1435212982_68/spec.essence:15:5: + tests/parse_print/autogen/445~1435212982_68/spec.essence:15:5: | 15 | partition({false}) - (partition() : `partition from bool`) = | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/445~1435212982_68/spec.essence:15:26: @@ -13,7 +12,7 @@ tests/parse_print/autogen/445~1435212982_68/spec.essence:15:26: 15 | partition({false}) - (partition() : `partition from bool`) = | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/445~1435212982_68/spec.essence:16:5: @@ -21,7 +20,7 @@ tests/parse_print/autogen/445~1435212982_68/spec.essence:16:5: 16 | partition({false, true, true}) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/445~1435212982_68/spec.essence:17:5: @@ -29,5 +28,5 @@ tests/parse_print/autogen/445~1435212982_68/spec.essence:17:5: 17 | partition({false, false}, {false, true, false, true}, {true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/446~final/stderr.expected b/tests/parse_print/autogen/446~final/stderr.expected index dfffa8c2cd..fb25593ab6 100644 --- a/tests/parse_print/autogen/446~final/stderr.expected +++ b/tests/parse_print/autogen/446~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/446~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/446~final/spec.essence:5:45: + tests/parse_print/autogen/446~final/spec.essence:5:45: | 5 | (partition() : `partition from bool`) = partition({true}) - partition({false}) | ^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/446~final/spec.essence:5:65: @@ -13,5 +12,5 @@ tests/parse_print/autogen/446~final/spec.essence:5:65: 5 | (partition() : `partition from bool`) = partition({true}) - partition({false}) | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/447~1435213364_36/stderr.expected b/tests/parse_print/autogen/447~1435213364_36/stderr.expected index 8e6e9f67fa..2249287844 100644 --- a/tests/parse_print/autogen/447~1435213364_36/stderr.expected +++ b/tests/parse_print/autogen/447~1435213364_36/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/447~1435213364_36/spec.essence Error is: -ValidatorError tests/parse_print/autogen/447~1435213364_36/spec.essence:8:14: + tests/parse_print/autogen/447~1435213364_36/spec.essence:8:14: | 8 | partition({false, false, false}, {false, true, true, true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/447~1435213364_36/spec.essence:10:16: @@ -13,5 +12,5 @@ tests/parse_print/autogen/447~1435213364_36/spec.essence:10:16: 10 | - partition({false, false, true, false, true}, {true})) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/448~final/stderr.expected b/tests/parse_print/autogen/448~final/stderr.expected index 83fad41211..fe300a6ff7 100644 --- a/tests/parse_print/autogen/448~final/stderr.expected +++ b/tests/parse_print/autogen/448~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/448~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/448~final/spec.essence:4:29: + tests/parse_print/autogen/448~final/spec.essence:4:29: | 4 | such that together({false}, partition({false}) - partition({false})) | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/448~final/spec.essence:4:50: @@ -13,5 +12,5 @@ tests/parse_print/autogen/448~final/spec.essence:4:50: 4 | such that together({false}, partition({false}) - partition({false})) | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/560~1436548014_12/stderr.expected b/tests/parse_print/autogen/560~1436548014_12/stderr.expected index 7915fe1ed0..82d068e250 100644 --- a/tests/parse_print/autogen/560~1436548014_12/stderr.expected +++ b/tests/parse_print/autogen/560~1436548014_12/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/560~1436548014_12/spec.essence Error is: -ValidatorError tests/parse_print/autogen/560~1436548014_12/spec.essence:10:14: + tests/parse_print/autogen/560~1436548014_12/spec.essence:10:14: | 10 | partition({5, 5, 4, 3, 1}, {1}) - partition({0, 1, 4, 1, 4}, {1})), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen/560~1436548014_12/spec.essence:10:48: @@ -13,5 +12,5 @@ tests/parse_print/autogen/560~1436548014_12/spec.essence:10:48: 10 | partition({5, 5, 4, 3, 1}, {1}) - partition({0, 1, 4, 1, 4}, {1})), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen/561~final/stderr.expected b/tests/parse_print/autogen/561~final/stderr.expected index 723c3992d0..6d58ee824d 100644 --- a/tests/parse_print/autogen/561~final/stderr.expected +++ b/tests/parse_print/autogen/561~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/561~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/561~final/spec.essence:4:25: + tests/parse_print/autogen/561~final/spec.essence:4:25: | 4 | such that together({2}, partition({0}) - partition({3})) | ^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen/561~final/spec.essence:4:42: @@ -13,5 +12,5 @@ tests/parse_print/autogen/561~final/spec.essence:4:42: 4 | such that together({2}, partition({0}) - partition({3})) | ^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen/562~1436556139_51/stderr.expected b/tests/parse_print/autogen/562~1436556139_51/stderr.expected index 91c06c7d18..82b15a9691 100644 --- a/tests/parse_print/autogen/562~1436556139_51/stderr.expected +++ b/tests/parse_print/autogen/562~1436556139_51/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/562~1436556139_51/spec.essence Error is: -ValidatorError tests/parse_print/autogen/562~1436556139_51/spec.essence:10:11: + tests/parse_print/autogen/562~1436556139_51/spec.essence:10:11: | 10 | partition({5}, {2, 2, 2, 4}, {2, 3, 2, 5}, {3}) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen/562~1436556139_51/spec.essence:11:11: @@ -13,5 +12,5 @@ tests/parse_print/autogen/562~1436556139_51/spec.essence:11:11: 11 | partition({5, 2, 5, 4}, {1, 2, 0, 1, 3}, {3, 5, 1, 4, 3})), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen/563~final/stderr.expected b/tests/parse_print/autogen/563~final/stderr.expected index 1d9a3ad55c..7a594c2d30 100644 --- a/tests/parse_print/autogen/563~final/stderr.expected +++ b/tests/parse_print/autogen/563~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/563~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/563~final/spec.essence:4:22: + tests/parse_print/autogen/563~final/spec.essence:4:22: | 4 | such that apart({3}, partition({5}) - partition({5})) | ^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int tests/parse_print/autogen/563~final/spec.essence:4:39: @@ -13,5 +12,5 @@ tests/parse_print/autogen/563~final/spec.essence:4:39: 4 | such that apart({3}, partition({5}) - partition({5})) | ^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from int diff --git a/tests/parse_print/autogen/613~1436580506_52/stderr.expected b/tests/parse_print/autogen/613~1436580506_52/stderr.expected index b130a40527..86b2ceab84 100644 --- a/tests/parse_print/autogen/613~1436580506_52/stderr.expected +++ b/tests/parse_print/autogen/613~1436580506_52/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/613~1436580506_52/spec.essence Error is: -ValidatorError tests/parse_print/autogen/613~1436580506_52/spec.essence:14:11: + tests/parse_print/autogen/613~1436580506_52/spec.essence:14:11: | 14 | partition({true, true, true, false, false}, {true}, {false}, {true, false}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/613~1436580506_52/spec.essence:17:11: @@ -13,5 +12,5 @@ tests/parse_print/autogen/613~1436580506_52/spec.essence:17:11: 17 | partition({true, false, false, true, true}, {false, true, true}, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/614~final/stderr.expected b/tests/parse_print/autogen/614~final/stderr.expected index 12ddff2e50..34fbc0e7bd 100644 --- a/tests/parse_print/autogen/614~final/stderr.expected +++ b/tests/parse_print/autogen/614~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/614~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/614~final/spec.essence:4:26: + tests/parse_print/autogen/614~final/spec.essence:4:26: | 4 | such that apart({false}, partition({true}) - partition({false})) | ^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/614~final/spec.essence:4:46: @@ -13,5 +12,5 @@ tests/parse_print/autogen/614~final/spec.essence:4:46: 4 | such that apart({false}, partition({true}) - partition({false})) | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/615~1436587408_39/stderr.expected b/tests/parse_print/autogen/615~1436587408_39/stderr.expected index 3289f6315f..b875732c4c 100644 --- a/tests/parse_print/autogen/615~1436587408_39/stderr.expected +++ b/tests/parse_print/autogen/615~1436587408_39/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/615~1436587408_39/spec.essence Error is: -ValidatorError tests/parse_print/autogen/615~1436587408_39/spec.essence:6:11: + tests/parse_print/autogen/615~1436587408_39/spec.essence:6:11: | 6 | (partition() : `partition from bool`) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/615~1436587408_39/spec.essence:7:11: @@ -13,5 +12,5 @@ tests/parse_print/autogen/615~1436587408_39/spec.essence:7:11: 7 | partition({false, false}, {false}, {true, false}, {true}, {true, false, true})), | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/autogen/616~final/stderr.expected b/tests/parse_print/autogen/616~final/stderr.expected index 519e3bf899..88cf2910e2 100644 --- a/tests/parse_print/autogen/616~final/stderr.expected +++ b/tests/parse_print/autogen/616~final/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/autogen/616~final/spec.essence Error is: -ValidatorError tests/parse_print/autogen/616~final/spec.essence:6:11: + tests/parse_print/autogen/616~final/spec.essence:6:11: | 6 | (partition() : `partition from bool`) - partition({false})) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool tests/parse_print/autogen/616~final/spec.essence:6:51: @@ -13,5 +12,5 @@ tests/parse_print/autogen/616~final/spec.essence:6:51: 6 | (partition() : `partition from bool`) - partition({false})) | ^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number / set/ mset / relation / function" + Expected: "Number / set/ mset / relation / function" Got: partition from bool diff --git a/tests/parse_print/basic/typeErrorInDecl/stderr.expected b/tests/parse_print/basic/typeErrorInDecl/stderr.expected index 693002a7f5..239e0a35ee 100644 --- a/tests/parse_print/basic/typeErrorInDecl/stderr.expected +++ b/tests/parse_print/basic/typeErrorInDecl/stderr.expected @@ -1,9 +1,8 @@ Error: - Parser error in file: tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence Error is: -ValidatorError tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence:3:19: + tests/parse_print/basic/typeErrorInDecl/typeErrorInDecl.essence:3:19: | 3 | find x : int(1..2+false) | ^^^^^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: bool diff --git a/tests/parse_print/heuristic/heuristic_magic/stderr.expected b/tests/parse_print/heuristic/heuristic_magic/stderr.expected index c2e231d318..1c8fb0f917 100644 --- a/tests/parse_print/heuristic/heuristic_magic/stderr.expected +++ b/tests/parse_print/heuristic/heuristic_magic/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence Error is: -ValidatorError tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence:5:11: + tests/parse_print/heuristic/heuristic_magic/heuristic_magic.essence:5:11: | 5 | heuristic magic | ^^^^^ diff --git a/tests/parse_print/issues/130/stderr.expected b/tests/parse_print/issues/130/stderr.expected index 11450d6cb9..5709fa1d67 100644 --- a/tests/parse_print/issues/130/stderr.expected +++ b/tests/parse_print/issues/130/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/130/130.essence Error is: -ValidatorError tests/parse_print/issues/130/130.essence:3:33: + tests/parse_print/issues/130/130.essence:3:33: | 3 | letting Looper be domain (bool, Looper) | ^^^^^^ diff --git a/tests/parse_print/issues/133/1/stderr.expected b/tests/parse_print/issues/133/1/stderr.expected index ae5dc7cdbc..c749bec1b7 100644 --- a/tests/parse_print/issues/133/1/stderr.expected +++ b/tests/parse_print/issues/133/1/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/133/1/133_1.essence Error is: -ValidatorError tests/parse_print/issues/133/1/133_1.essence:3:7: + tests/parse_print/issues/133/1/133_1.essence:3:7: | 3 | find a be int(1..9) | ^ diff --git a/tests/parse_print/issues/133/2/stderr.expected b/tests/parse_print/issues/133/2/stderr.expected index c83e4951e9..cf5ff14904 100644 --- a/tests/parse_print/issues/133/2/stderr.expected +++ b/tests/parse_print/issues/133/2/stderr.expected @@ -1,6 +1,4 @@ -Error: - Parser error in file: tests/parse_print/issues/133/2/133_2.essence Error is: -ValidatorError tests/parse_print/issues/133/2/133_2.essence:6:6: +Error: tests/parse_print/issues/133/2/133_2.essence:6:6: | 6 | int(1,3) | ^ diff --git a/tests/parse_print/issues/133/3/stderr.expected b/tests/parse_print/issues/133/3/stderr.expected index a7b23a42c1..18ad31c29c 100644 --- a/tests/parse_print/issues/133/3/stderr.expected +++ b/tests/parse_print/issues/133/3/stderr.expected @@ -1,6 +1,4 @@ -Error: - Parser error in file: tests/parse_print/issues/133/3/133_3.essence Error is: -ValidatorError tests/parse_print/issues/133/3/133_3.essence:7:10: +Error: tests/parse_print/issues/133/3/133_3.essence:7:10: | 7 | m = [1,2 3] | ^ diff --git a/tests/parse_print/issues/207/stderr.expected b/tests/parse_print/issues/207/stderr.expected index 4c3debcfb2..614022e303 100644 --- a/tests/parse_print/issues/207/stderr.expected +++ b/tests/parse_print/issues/207/stderr.expected @@ -1,11 +1,10 @@ Error: - Parser error in file: tests/parse_print/issues/207/207.essence Error is: -ValidatorError tests/parse_print/issues/207/207.essence:16:53: + tests/parse_print/issues/207/207.essence:16:53: | 16 | . (v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 1]) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: bool tests/parse_print/issues/207/207.essence:16:108: @@ -21,7 +20,7 @@ tests/parse_print/issues/207/207.essence:21:53: 21 | . (v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 2]) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type error: - Expected:"Number or Enum" + Expected: "Number or Enum" Got: bool tests/parse_print/issues/207/207.essence:21:108: diff --git a/tests/parse_print/issues/361/1/stderr.expected b/tests/parse_print/issues/361/1/stderr.expected index 21c988cdb5..3cc09b68a4 100644 --- a/tests/parse_print/issues/361/1/stderr.expected +++ b/tests/parse_print/issues/361/1/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/361/1/361_1.essence Error is: -ValidatorError tests/parse_print/issues/361/1/361_1.essence:3:34: + tests/parse_print/issues/361/1/361_1.essence:3:34: | 3 | find x : V such that forAll j in V . x <= j | ^ diff --git a/tests/parse_print/issues/361/2/stderr.expected b/tests/parse_print/issues/361/2/stderr.expected index 095b77ed11..1f89319c7f 100644 --- a/tests/parse_print/issues/361/2/stderr.expected +++ b/tests/parse_print/issues/361/2/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/361/2/361_2.essence Error is: -ValidatorError tests/parse_print/issues/361/2/361_2.essence:2:41: + tests/parse_print/issues/361/2/361_2.essence:2:41: | 2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j | ^ diff --git a/tests/parse_print/issues/363/1/stderr.expected b/tests/parse_print/issues/363/1/stderr.expected index ab767ac372..e729084cd8 100644 --- a/tests/parse_print/issues/363/1/stderr.expected +++ b/tests/parse_print/issues/363/1/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/363/1/363_1.essence Error is: -ValidatorError tests/parse_print/issues/363/1/363_1.essence:2:40: + tests/parse_print/issues/363/1/363_1.essence:2:40: | 2 | letting S be domain set of int(-10..0) union int(0..10) | ^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/issues/363/2/stderr.expected b/tests/parse_print/issues/363/2/stderr.expected index dd9cee11a9..d4810b9a33 100644 --- a/tests/parse_print/issues/363/2/stderr.expected +++ b/tests/parse_print/issues/363/2/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/363/2/363_2.essence Error is: -ValidatorError tests/parse_print/issues/363/2/363_2.essence:2:29: + tests/parse_print/issues/363/2/363_2.essence:2:29: | 2 | find S : set of int(-10..0) union int(0..10) | ^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/issues/425/1/stderr.expected b/tests/parse_print/issues/425/1/stderr.expected index 73c620a079..8c657fa80d 100644 --- a/tests/parse_print/issues/425/1/stderr.expected +++ b/tests/parse_print/issues/425/1/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/425/1/425.essence Error is: -ValidatorError tests/parse_print/issues/425/1/425.essence:1:15: + tests/parse_print/issues/425/1/425.essence:1:15: | 1 | letting s be {:} | ^^ diff --git a/tests/parse_print/issues/425/2/stderr.expected b/tests/parse_print/issues/425/2/stderr.expected index 2f0fbf231a..e4c9854327 100644 --- a/tests/parse_print/issues/425/2/stderr.expected +++ b/tests/parse_print/issues/425/2/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/issues/425/2/425.essence Error is: -ValidatorError tests/parse_print/issues/425/2/425.essence:2:15: + tests/parse_print/issues/425/2/425.essence:2:15: | 2 | letting s be {:} | ^^ diff --git a/tests/parse_print/parsing01/stderr.expected b/tests/parse_print/parsing01/stderr.expected index bd3f75e6cd..a9512e586e 100644 --- a/tests/parse_print/parsing01/stderr.expected +++ b/tests/parse_print/parsing01/stderr.expected @@ -1,6 +1,4 @@ -Error: - Parser error in file: tests/parse_print/parsing01/parsing01.essence Error is: -ValidatorError tests/parse_print/parsing01/parsing01.essence:4:1: +Error: tests/parse_print/parsing01/parsing01.essence:4:1: | 4 | | ^ diff --git a/tests/parse_print/parsing03_nonassoc/stderr.expected b/tests/parse_print/parsing03_nonassoc/stderr.expected index 6a039afb36..95b6c0393d 100644 --- a/tests/parse_print/parsing03_nonassoc/stderr.expected +++ b/tests/parse_print/parsing03_nonassoc/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/parsing03_nonassoc/nonassoc.essence Error is: -ValidatorError tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:16: + tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:16: | 2 | such that x = y = z | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected index 0c2c5c83c4..70c44746f7 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-01/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence:13:10: + tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence:13:10: | 13 | find k : E) | ^ @@ -10,4 +9,4 @@ tests/parse_print/random_perturb/enum_liberated/change-01/change-01.essence:13:1 | 13 | find k : E) | ^ -Unexpected L_CloseParen +Unexpected ) diff --git a/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected index 09d2e5afa7..ac311198a5 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-02/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence:1:10: + tests/parse_print/random_perturb/enum_liberated/change-02/change-02.essence:1:10: | 1 | language EssBnce 1.3 | ^^^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected index 68015234ea..5501475926 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:6:29: + tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:6:29: | 6 | letting E2 be new type enum ma, b, c, d, "hoh hoh hooo"} | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected index 1187761ebf..894aab49e9 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-05/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence:14:20: + tests/parse_print/random_perturb/enum_liberated/change-05/change-05.essence:14:20: | 14 | such that k = max(`g2`) | ^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected index 09573c47c2..ab75efdd62 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: + tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: | 3 | given E1 new type Knum | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected index ea9f5a01da..679fa46ed0 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-07/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence:8:16: + tests/parse_print/random_perturb/enum_liberated/change-07/change-07.essence:8:16: | 8 | find z : E2(a..z) | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected index d70011212c..314c4b779d 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-08/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence:1:10: + tests/parse_print/random_perturb/enum_liberated/change-08/change-08.essence:1:10: | 1 | language Essen`e 1.3 | ^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected index a18a046585..1bbccc381b 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:1: + tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:1: | 6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected index fa162f4d16..bd31874208 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-01/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence:1:1: + tests/parse_print/random_perturb/enum_liberated/delete-01/delete-01.essence:1:1: | 1 | lanuage Essence 1.3 | ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected index 1810ae10d7..92c3775b6f 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-02/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence:3:1: + tests/parse_print/random_perturb/enum_liberated/delete-02/delete-02.essence:3:1: | 3 | givn E1 new type enum | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected index 0b755f928c..778f84ba4b 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence:6:42: + tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence:6:42: | 6 | letting E2 be new type enum {a, b, c, d, "hoh hoh hooo} | ^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected index ad12f2282b..a449a65381 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-04/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence:4:10: + tests/parse_print/random_perturb/enum_liberated/delete-04/delete-04.essence:4:10: | 4 | find x : E | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected index 61966f00d2..513fddd085 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-05/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:7:10: + tests/parse_print/random_perturb/enum_liberated/delete-05/delete-05.essence:7:10: | 7 | find y : E2 | ^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected index 6b6869cf00..4461109a8d 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:9: + tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:9: | 13 | find k : 2 | ^ @@ -10,4 +9,4 @@ tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:1 | 13 | find k : 2 | ^ -Unexpected LIntLiteral 2 +Unexpected 2 diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected index c831610318..c7f9662455 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: + tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: | 3 | given E1 new tpe enum | ^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected index 99f01245b1..6bb43f8886 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-08/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence:1:1: + tests/parse_print/random_perturb/enum_liberated/delete-08/delete-08.essence:1:1: | 1 | languae Essence 1.3 | ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected index cb48ad81fa..bc1044ea9f 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-09/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence:1:1: + tests/parse_print/random_perturb/enum_liberated/delete-09/delete-09.essence:1:1: | 1 | lnguage Essence 1.3 | ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected index e252f3af33..f30582fc28 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence Error is: -ValidatorError tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:7:9: + tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:7:9: | 7 | find y E2 | ^ diff --git a/tests/parse_print/random_perturb/set01/change-02/stderr.expected b/tests/parse_print/random_perturb/set01/change-02/stderr.expected index 652cd925bc..4349a287b6 100644 --- a/tests/parse_print/random_perturb/set01/change-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-02/stderr.expected @@ -1,7 +1,6 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-02/change-02.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-02/change-02.essence:1:19: + tests/parse_print/random_perturb/set01/change-02/change-02.essence:1:19: | 1 | language Essence 1X3 | ^^ -Unexpected LIdentifier "X3" +Unexpected X3 diff --git a/tests/parse_print/random_perturb/set01/change-03/stderr.expected b/tests/parse_print/random_perturb/set01/change-03/stderr.expected index de2da12c0a..8c20cb073e 100644 --- a/tests/parse_print/random_perturb/set01/change-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-03/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-03/change-03.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-03/change-03.essence:1:10: + tests/parse_print/random_perturb/set01/change-03/change-03.essence:1:10: | 1 | language EsZence 1.3 | ^^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/change-04/stderr.expected b/tests/parse_print/random_perturb/set01/change-04/stderr.expected index 549ad67ebc..a1df64cff6 100644 --- a/tests/parse_print/random_perturb/set01/change-04/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-04/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-04/change-04.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-04/change-04.essence:1:10: + tests/parse_print/random_perturb/set01/change-04/change-04.essence:1:10: | 1 | language Essenle 1.3 | ^^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/change-05/stderr.expected b/tests/parse_print/random_perturb/set01/change-05/stderr.expected index 244067d8cd..f2d4b1dd30 100644 --- a/tests/parse_print/random_perturb/set01/change-05/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-05/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-05/change-05.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-05/change-05.essence:3:1: + tests/parse_print/random_perturb/set01/change-05/change-05.essence:3:1: | 3 | finO x : set (size 2) of int(1..3) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/change-06/stderr.expected b/tests/parse_print/random_perturb/set01/change-06/stderr.expected index acea8f2843..cf551f91dc 100644 --- a/tests/parse_print/random_perturb/set01/change-06/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-06/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-06/change-06.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-06/change-06.essence:1:10: + tests/parse_print/random_perturb/set01/change-06/change-06.essence:1:10: | 1 | language Essencx 1.3 | ^^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/change-07/stderr.expected b/tests/parse_print/random_perturb/set01/change-07/stderr.expected index 7b0d1f9e4b..f7ceb8d1d1 100644 --- a/tests/parse_print/random_perturb/set01/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-07/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-07/change-07.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:14: + tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:14: | 3 | find x : set (sizo 2) of int(1..3) | ^ diff --git a/tests/parse_print/random_perturb/set01/change-08/stderr.expected b/tests/parse_print/random_perturb/set01/change-08/stderr.expected index 4ad731c0c7..ef9252452c 100644 --- a/tests/parse_print/random_perturb/set01/change-08/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-08/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-08/change-08.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-08/change-08.essence:3:26: + tests/parse_print/random_perturb/set01/change-08/change-08.essence:3:26: | 3 | find x : set (size 2) of inN(1..3) | ^^^ diff --git a/tests/parse_print/random_perturb/set01/change-09/stderr.expected b/tests/parse_print/random_perturb/set01/change-09/stderr.expected index d03e71b192..78b3c29635 100644 --- a/tests/parse_print/random_perturb/set01/change-09/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-09/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-09/change-09.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-09/change-09.essence:1:10: + tests/parse_print/random_perturb/set01/change-09/change-09.essence:1:10: | 1 | language xssence 1.3 | ^^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/change-10/stderr.expected b/tests/parse_print/random_perturb/set01/change-10/stderr.expected index dfe86ec9e0..4ea9337fed 100644 --- a/tests/parse_print/random_perturb/set01/change-10/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-10/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/change-10/change-10.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/change-10/change-10.essence:1:10: + tests/parse_print/random_perturb/set01/change-10/change-10.essence:1:10: | 1 | language E@sence 1.3 | ^ diff --git a/tests/parse_print/random_perturb/set01/delete-01/stderr.expected b/tests/parse_print/random_perturb/set01/delete-01/stderr.expected index d562720190..524e66c058 100644 --- a/tests/parse_print/random_perturb/set01/delete-01/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-01/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-01/delete-01.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-01/delete-01.essence:1:1: + tests/parse_print/random_perturb/set01/delete-01/delete-01.essence:1:1: | 1 | laguage Essence 1.3 | ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected index ebbc06e716..0edbf0596f 100644 --- a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-02/delete-02.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:14: + tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:14: | 3 | find x : set (siz 2) of int(1..3) | ^ diff --git a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected index 22dbea5800..a160a90f28 100644 --- a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-03/delete-03.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:14: + tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:14: | 3 | find x : set (sze 2) of int(1..3) | ^ diff --git a/tests/parse_print/random_perturb/set01/delete-04/stderr.expected b/tests/parse_print/random_perturb/set01/delete-04/stderr.expected index 0aced0c4b7..ff05358ee6 100644 --- a/tests/parse_print/random_perturb/set01/delete-04/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-04/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-04/delete-04.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-04/delete-04.essence:3:7: + tests/parse_print/random_perturb/set01/delete-04/delete-04.essence:3:7: | 3 | find : set (size 2) of int(1..3) | ^ diff --git a/tests/parse_print/random_perturb/set01/delete-05/stderr.expected b/tests/parse_print/random_perturb/set01/delete-05/stderr.expected index 697d06a0c0..2e3e044b4c 100644 --- a/tests/parse_print/random_perturb/set01/delete-05/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-05/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-05/delete-05.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-05/delete-05.essence:1:10: + tests/parse_print/random_perturb/set01/delete-05/delete-05.essence:1:10: | 1 | language Essene 1.3 | ^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/delete-06/stderr.expected b/tests/parse_print/random_perturb/set01/delete-06/stderr.expected index b3e4d4bbf6..bca8d786a8 100644 --- a/tests/parse_print/random_perturb/set01/delete-06/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-06/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-06/delete-06.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-06/delete-06.essence:1:10: + tests/parse_print/random_perturb/set01/delete-06/delete-06.essence:1:10: | 1 | language Essece 1.3 | ^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/delete-07/stderr.expected b/tests/parse_print/random_perturb/set01/delete-07/stderr.expected index 07f1ed3aa6..c69e7283b0 100644 --- a/tests/parse_print/random_perturb/set01/delete-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-07/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-07/delete-07.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-07/delete-07.essence:3:10: + tests/parse_print/random_perturb/set01/delete-07/delete-07.essence:3:10: | 3 | find x : et (size 2) of int(1..3) | ^^ diff --git a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected index 646b86c896..4b307bb3fc 100644 --- a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-08/delete-08.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: + tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: | 3 | find x : set (size 2) o int(1..3) | ^ diff --git a/tests/parse_print/random_perturb/set01/delete-09/stderr.expected b/tests/parse_print/random_perturb/set01/delete-09/stderr.expected index 86446cbebf..43dfe07eba 100644 --- a/tests/parse_print/random_perturb/set01/delete-09/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-09/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-09/delete-09.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-09/delete-09.essence:1:10: + tests/parse_print/random_perturb/set01/delete-09/delete-09.essence:1:10: | 1 | language Essnce 1.3 | ^^^^^^ diff --git a/tests/parse_print/random_perturb/set01/delete-10/stderr.expected b/tests/parse_print/random_perturb/set01/delete-10/stderr.expected index 36fe7a6c5e..90c3d7ac4d 100644 --- a/tests/parse_print/random_perturb/set01/delete-10/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-10/stderr.expected @@ -1,6 +1,5 @@ Error: - Parser error in file: tests/parse_print/random_perturb/set01/delete-10/delete-10.essence Error is: -ValidatorError tests/parse_print/random_perturb/set01/delete-10/delete-10.essence:1:1: + tests/parse_print/random_perturb/set01/delete-10/delete-10.essence:1:1: | 1 | lnguage Essence 1.3 | ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/parse_print/syntax_test/domains/variant/model.expected.json b/tests/parse_print/syntax_test/domains/variant/model.expected.json index 604e52d4d4..10b45c3c79 100644 --- a/tests/parse_print/syntax_test/domains/variant/model.expected.json +++ b/tests/parse_print/syntax_test/domains/variant/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/expressions/operators/typecheck.expected b/tests/parse_print/syntax_test/expressions/operators/typecheck.expected deleted file mode 100644 index e69de29bb2..0000000000 From 06e6361b7350c39d52243cd0beb12962fbad2816 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 13:08:05 +0100 Subject: [PATCH 191/378] More test cleanup --- tests/custom/ide/basic/stdout.expected | 13 +++++-------- tests/custom/issues/383/stdout.expected | 3 +-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/tests/custom/ide/basic/stdout.expected b/tests/custom/ide/basic/stdout.expected index 0af6191258..d290ff424f 100644 --- a/tests/custom/ide/basic/stdout.expected +++ b/tests/custom/ide/basic/stdout.expected @@ -1,7 +1,6 @@ == lexer.essence == Error: - Parser error in file: lexer.essence Error is: -ValidatorError lexer.essence:7:29: + lexer.essence:7:29: | 7 | such that x + y = z, x = 1, # y = 2 | ^^^^^^^ @@ -11,8 +10,7 @@ Skipped tokens == parser.essence == Error: - Parser error in file: parser.essence Error is: -ValidatorError parser.essence:7:27: + parser.essence:7:27: | 7 | such that x + y = z, x = 1 = y = 2 | ^ @@ -40,13 +38,12 @@ Missing , == type.essence == Error: - Parser error in file: type.essence Error is: -ValidatorError type.essence:7:22: + type.essence:7:22: | 7 | such that x + y = z, x union y = 2 | ^ Type error: - Expected:"Set MSet funcition or relation" + Expected: "Set MSet funcition or relation" Got: int type.essence:7:30: @@ -54,7 +51,7 @@ type.essence:7:30: 7 | such that x + y = z, x union y = 2 | ^ Type error: - Expected:"Set MSet funcition or relation" + Expected: "Set MSet funcition or relation" Got: int diff --git a/tests/custom/issues/383/stdout.expected b/tests/custom/issues/383/stdout.expected index 2f4835bd9e..70e36bd72b 100644 --- a/tests/custom/issues/383/stdout.expected +++ b/tests/custom/issues/383/stdout.expected @@ -54,8 +54,7 @@ such that ========== 3 ========== Error: - Parser error in file: 383-3.essence Error is: -ValidatorError 383-3.essence:10:32: + 383-3.essence:10:32: | 10 | find c : colours such that c = |toSet([ f(u) | u : vertices ])| | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 3d250ad8087880254bf7a642f6d8cab5bf41c2cf Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 14:59:15 +0100 Subject: [PATCH 192/378] More documentation --- src/Conjure/Language/Validator.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index b67944df10..1efe414377 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -2,14 +2,15 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE UndecidableInstances #-} --- This module is where the syntax tree is mapped to the model. --- This has three main roles +-- This module is where the syntax tree is mapped to the model. This is also the +-- stage at which all errrors are reported. +-- This has three main parts -- Syntax checking: -- When it comes to missing tokens these should usually be handled by the -- low level token validation functions, however in some special cases -- where the tokens are manipulated manually the checks need to be added -- Type checking: --- +-- Type check operators and build up the symbol table. -- Metadata additions: -- this includeds things like marking tokens for documentation, as well as -- setting up structural regions such as quantigied expressions From 6785e68303c7a142beed98432f0505a748d993e4 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 17 Apr 2023 17:18:14 +0100 Subject: [PATCH 193/378] =?UTF-8?q?Fixes=20emoji=20representation=20?= =?UTF-8?q?=F0=9F=91=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Conjure/Language/Lexemes.hs | 4 +++- src/Conjure/Language/Validator.hs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 1a081e7eb1..bb5cd8d705 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -8,6 +8,7 @@ import Conjure.Prelude import qualified Data.HashMap.Strict as M import qualified Data.Text as T import qualified Data.Text.Lazy as L +import Data.Char (chr, ord) data Lexeme = LIntLiteral Integer @@ -518,7 +519,7 @@ lexemeFace L_Carriage = "\\r" lexemeFace L_Space = "space character" lexemeFace L_Tab = "tab character" lexemeFace (LIntLiteral i) = show i -lexemeFace (LIdentifier i) = (T.unpack i) +lexemeFace (LIdentifier i) = T.unpack i -- lexemeFace (LComment i) = Pr.text (T.unpack i) lexemeFace l = case M.lookup l mapLexemeToText of @@ -529,6 +530,7 @@ lexemeFaceDoc :: Lexeme -> Doc lexemeFaceDoc = stringToDoc . lexemeFace lexemeText :: Lexeme -> T.Text +lexemeText (LIdentifier t) = t lexemeText l = fromMaybe (T.pack $ show l) (M.lookup l mapLexemeToText) --Categories diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 1efe414377..e5fb927a9b 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -1883,7 +1883,7 @@ resolveReference :: RegionTagged Name -> ValidatorS Kind resolveReference (r,Name n) | n /= "" = do c <- getSymbol n case c of - Nothing -> raiseTypeError (r (CustomError . pack $ "Symbol not found "++ show n)) >> return (simple TypeAny) + Nothing -> raiseTypeError (r (CustomError (T.concat ["Symbol not found \"" , n , "\""]))) >> return (simple TypeAny) Just (reg,_,t) -> do putReference r n t reg -- addRegion (RegionInfo {rRegion=r,rText=n, rType=Just t, rDeclaration=Ref reg}) From af6f895ea461f53d71d0b80c21ae7a0f0b511ac8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Apr 2023 10:54:48 +0100 Subject: [PATCH 194/378] Moves loading into fuzz tests for quicker start --- src/test/Conjure/ParserFuzz.hs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 77bed83c69..0bb675cc44 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -31,14 +31,15 @@ tests = do let baseDir = "tests" allFiles <- shelly $ silently $ run "git" ["ls-tree", "--full-tree", "--name-only", "-r", "HEAD"] let allFileList = lines $ T.unpack allFiles - contents <- mapM readFileIfExists allFileList - let testCases = [testFile fp fd | (fp,Just fd) <-zip allFileList contents,False] + -- contents <- mapM readFileIfExists allFileList + let testCases = testFile <$> allFileList return (testGroup "parse_fuzz" testCases) -testFile :: FilePath -> String -> TestTree -testFile fp fd = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \step -> do +testFile :: FilePath -> TestTree +testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \step -> do + fd <- readFileIfExists fp step "Lexing" - let usableFileData = concat (take 1000 . lines $ fd) + let usableFileData = concat (take 1000 . lines $ fromMaybe [] fd) let fText = T.pack usableFileData case runLexer $ fText of Left le -> assertFailure $ "Lexer failed in:" ++ fp From b55301379af36cbe094de98f552767738101194d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Apr 2023 10:56:08 +0100 Subject: [PATCH 195/378] Handle parenthesised domains --- src/Conjure/Language/AST/ASTParser.hs | 4 ++-- src/Conjure/Language/AST/Reformer.hs | 1 + src/Conjure/Language/AST/Syntax.hs | 7 ++++--- src/Conjure/Language/Validator.hs | 1 + src/Conjure/UI/ErrorDisplay.hs | 4 +++- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 80d885032e..88c2a8d698 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -651,7 +651,7 @@ parseShortTuple = do lst <- commaList parseDomain closeB <- want L_CloseParen return $ case lst of - Seq [SeqElem d Nothing] -> d + Seq [SeqElem d Nothing] -> ParenDomainNode openB d closeB Seq _ -> ShortTupleDomainNode $ ListNode (RealToken openB) lst closeB @@ -732,7 +732,7 @@ parseRelation = do parsePartition :: Parser DomainNode parsePartition = do lPartition <- need L_partition - attributes <- optional parseAttributes + attributes <- optional $ try parseAttributes lFrom <- want L_from domain <- parseDomain return $ PartitionDomainNode lPartition attributes lFrom domain diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index ab8b68b6f9..d9d2cbb8fe 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -204,6 +204,7 @@ instance Flattenable PostfixOpNode where instance Flattenable DomainNode where flatten x = case x of + ParenDomainNode a b c -> mconcat [flatten a, flatten b, flatten c] BoolDomainNode lt -> flatten lt RangedIntDomainNode lt ln -> flatten lt >< flatten ln MetaVarDomain a -> flatten a diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index c9a80e6d25..27356a99a9 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -201,11 +201,11 @@ instance Pretty BranchingStatementNode where type MAttributes = Maybe (ListNode AttributeNode) data DomainNode - = BoolDomainNode SToken + = ParenDomainNode SToken DomainNode LToken + | BoolDomainNode SToken | RangedIntDomainNode SToken (Maybe (ListNode RangeNode)) | RangedEnumNode NameNodeS (Maybe (ListNode RangeNode)) - | -- | EnumDomainNode NameNode - MetaVarDomain SToken + | MetaVarDomain SToken | ShortTupleDomainNode (ListNode DomainNode) | TupleDomainNode SToken (ListNode DomainNode) | RecordDomainNode SToken (ListNode NamedDomainNode) @@ -222,6 +222,7 @@ data DomainNode instance Pretty DomainNode where pretty x = case x of + ParenDomainNode op dom cl -> pretty op <> pretty dom <> pretty cl BoolDomainNode lt -> pretty lt RangedIntDomainNode lt m_ln -> pretty lt <> pretty m_ln RangedEnumNode nn m_ln -> pretty nn <> pretty m_ln diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index e5fb927a9b..adc08a630d 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -663,6 +663,7 @@ validateDomainWithRepr dom = do validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of + ParenDomainNode st dom rt -> do checkSymbols [rt] ; validateDomain dom MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv BoolDomainNode lt -> (lt `isA` TtType >> (return . Typed TypeBool) DomainBool) RangedIntDomainNode l1 rs -> do diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 3aaf320ead..2ee137bb41 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -12,7 +12,7 @@ import qualified Data.Text import qualified Data.Text as T import Data.Map.Strict (mapWithKey, assocs) import Conjure.Language.Pretty - +import Conjure.Language.AST.Reformer type Parser t = Parsec DiagnosticForPrint Text t @@ -133,6 +133,8 @@ val s = do printSymbolTable $ symbolTable st putStrLn $ show $ (regionInfo st) putStrLn $ showDiagnosticsForConsole vds Nothing txt + putStrLn $ show . reformList $ flatten p + putStrLn $ show p -- putStrLn $ show qpr From 3a4d0fd5b1eb615838db9f4288286f8b2b61c770 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Apr 2023 12:02:44 +0100 Subject: [PATCH 196/378] Updates tests broken by paren domain change --- .../random_perturb/set01/change-07/stderr.expected | 6 ++++++ .../random_perturb/set01/delete-02/stderr.expected | 6 ++++++ .../random_perturb/set01/delete-03/stderr.expected | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/tests/parse_print/random_perturb/set01/change-07/stderr.expected b/tests/parse_print/random_perturb/set01/change-07/stderr.expected index f7ceb8d1d1..3c46bb5530 100644 --- a/tests/parse_print/random_perturb/set01/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-07/stderr.expected @@ -16,3 +16,9 @@ tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: 3 | find x : set (sizo 2) of int(1..3) | ^^^^^^^^^^^^^^^ Skipped tokens + +tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: + | +3 | find x : set (sizo 2) of int(1..3) + | ^ +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected index 0edbf0596f..5f8e4ffbdc 100644 --- a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected @@ -16,3 +16,9 @@ tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: 3 | find x : set (siz 2) of int(1..3) | ^^^^^^^^^^^^^^^ Skipped tokens + +tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: + | +3 | find x : set (siz 2) of int(1..3) + | ^ +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected index a160a90f28..32ed8efb12 100644 --- a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected @@ -16,3 +16,9 @@ tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: 3 | find x : set (sze 2) of int(1..3) | ^^^^^^^^^^^^^^^ Skipped tokens + +tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: + | +3 | find x : set (sze 2) of int(1..3) + | ^ +Missing ) From ce10201ec2f318ad3e6abe301393af973ae44d27 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Apr 2023 12:10:48 +0100 Subject: [PATCH 197/378] Fixes all ghc warnings --- src/Conjure/Bug.hs | 8 +- src/Conjure/Compute/DomainOf.hs | 1 - src/Conjure/Language/AST/ASTParser.hs | 3 +- src/Conjure/Language/AbstractLiteral.hs | 1 - src/Conjure/Language/AdHoc.hs | 5 +- src/Conjure/Language/CategoryOf.hs | 18 +-- src/Conjure/Language/Constant.hs | 2 +- src/Conjure/Language/Definition.hs | 3 +- src/Conjure/Language/Domain.hs | 4 +- src/Conjure/Language/Expression.hs | 2 +- src/Conjure/Language/Expression/Op/Active.hs | 2 +- src/Conjure/Language/Expression/Op/AllDiff.hs | 2 +- .../Language/Expression/Op/AllDiffExcept.hs | 2 +- src/Conjure/Language/Expression/Op/And.hs | 2 +- src/Conjure/Language/Expression/Op/Apart.hs | 2 +- src/Conjure/Language/Expression/Op/AtLeast.hs | 2 +- src/Conjure/Language/Expression/Op/AtMost.hs | 2 +- .../Expression/Op/AttributeAsConstraint.hs | 2 +- .../Language/Expression/Op/CatchUndef.hs | 2 +- src/Conjure/Language/Expression/Op/Defined.hs | 4 +- src/Conjure/Language/Expression/Op/Div.hs | 4 +- .../Language/Expression/Op/DontCare.hs | 4 +- src/Conjure/Language/Expression/Op/DotLeq.hs | 4 +- src/Conjure/Language/Expression/Op/DotLt.hs | 4 +- src/Conjure/Language/Expression/Op/Eq.hs | 4 +- .../Language/Expression/Op/Factorial.hs | 4 +- src/Conjure/Language/Expression/Op/Flatten.hs | 4 +- src/Conjure/Language/Expression/Op/Freq.hs | 4 +- src/Conjure/Language/Expression/Op/GCC.hs | 4 +- src/Conjure/Language/Expression/Op/Geq.hs | 4 +- src/Conjure/Language/Expression/Op/Gt.hs | 4 +- src/Conjure/Language/Expression/Op/Hist.hs | 4 +- src/Conjure/Language/Expression/Op/Iff.hs | 4 +- src/Conjure/Language/Expression/Op/Image.hs | 4 +- .../Language/Expression/Op/ImageSet.hs | 4 +- src/Conjure/Language/Expression/Op/Imply.hs | 4 +- src/Conjure/Language/Expression/Op/In.hs | 4 +- .../Language/Expression/Op/Indexing.hs | 4 +- .../Language/Expression/Op/Intersect.hs | 4 +- src/Conjure/Language/Expression/Op/Inverse.hs | 4 +- src/Conjure/Language/Expression/Op/Leq.hs | 4 +- src/Conjure/Language/Expression/Op/LexLeq.hs | 4 +- src/Conjure/Language/Expression/Op/LexLt.hs | 4 +- src/Conjure/Language/Expression/Op/Lt.hs | 4 +- .../Language/Expression/Op/MakeTable.hs | 4 +- src/Conjure/Language/Expression/Op/Max.hs | 6 +- src/Conjure/Language/Expression/Op/Min.hs | 6 +- src/Conjure/Language/Expression/Op/Minus.hs | 4 +- src/Conjure/Language/Expression/Op/Mod.hs | 4 +- src/Conjure/Language/Expression/Op/Negate.hs | 4 +- src/Conjure/Language/Expression/Op/Neq.hs | 4 +- src/Conjure/Language/Expression/Op/Not.hs | 4 +- src/Conjure/Language/Expression/Op/Or.hs | 6 +- .../Language/Expression/Op/Participants.hs | 4 +- src/Conjure/Language/Expression/Op/Parts.hs | 4 +- src/Conjure/Language/Expression/Op/Party.hs | 4 +- src/Conjure/Language/Expression/Op/Pow.hs | 4 +- .../Language/Expression/Op/PowerSet.hs | 4 +- .../Language/Expression/Op/PreImage.hs | 4 +- src/Conjure/Language/Expression/Op/Pred.hs | 4 +- src/Conjure/Language/Expression/Op/Product.hs | 6 +- src/Conjure/Language/Expression/Op/Range.hs | 4 +- .../Language/Expression/Op/RelationProj.hs | 4 +- .../Language/Expression/Op/Restrict.hs | 4 +- src/Conjure/Language/Expression/Op/Slicing.hs | 4 +- .../Language/Expression/Op/Subsequence.hs | 4 +- src/Conjure/Language/Expression/Op/Subset.hs | 4 +- .../Language/Expression/Op/SubsetEq.hs | 4 +- .../Language/Expression/Op/Substring.hs | 4 +- src/Conjure/Language/Expression/Op/Succ.hs | 4 +- src/Conjure/Language/Expression/Op/Sum.hs | 6 +- src/Conjure/Language/Expression/Op/Supset.hs | 4 +- .../Language/Expression/Op/SupsetEq.hs | 4 +- src/Conjure/Language/Expression/Op/Table.hs | 4 +- .../Language/Expression/Op/TildeLeq.hs | 4 +- src/Conjure/Language/Expression/Op/TildeLt.hs | 4 +- src/Conjure/Language/Expression/Op/ToInt.hs | 4 +- src/Conjure/Language/Expression/Op/ToMSet.hs | 4 +- .../Language/Expression/Op/ToRelation.hs | 4 +- src/Conjure/Language/Expression/Op/ToSet.hs | 4 +- .../Language/Expression/Op/Together.hs | 4 +- .../Language/Expression/Op/Transform.hs | 4 +- src/Conjure/Language/Expression/Op/True.hs | 4 +- src/Conjure/Language/Expression/Op/TwoBars.hs | 4 +- src/Conjure/Language/Expression/Op/Union.hs | 2 +- src/Conjure/Language/Expression/Op/Xor.hs | 2 +- src/Conjure/Language/Expression/OpTypes.hs | 3 +- src/Conjure/Language/Lenses.hs | 149 +++++++++--------- src/Conjure/Language/Lexemes.hs | 4 +- src/Conjure/Language/Lexer.hs | 33 +--- src/Conjure/Language/Name.hs | 9 +- src/Conjure/Language/Parser.hs | 2 +- src/Conjure/Language/Pretty.hs | 4 +- src/Conjure/Language/TH.hs | 2 +- src/Conjure/Language/Validator.hs | 14 +- src/Conjure/Prelude.hs | 17 +- src/Conjure/Process/Boost.hs | 2 +- src/Conjure/Process/Enumerate.hs | 7 +- src/Conjure/Representations/Internal.hs | 16 +- src/Conjure/Rules/Import.hs | 2 +- src/Conjure/UI/ErrorDisplay.hs | 6 +- src/Conjure/UI/IO.hs | 3 +- src/Conjure/UI/MainHelper.hs | 6 +- src/Conjure/UI/VarSymBreaking.hs | 2 +- src/Conjure/UserError.hs | 4 +- 105 files changed, 293 insertions(+), 331 deletions(-) diff --git a/src/Conjure/Bug.hs b/src/Conjure/Bug.hs index ea3b71c9d7..7d9a66894c 100644 --- a/src/Conjure/Bug.hs +++ b/src/Conjure/Bug.hs @@ -10,14 +10,10 @@ import Conjure.Prelude import Conjure.RepositoryVersion ( repositoryVersion ) import Conjure.Language.Pretty -#if __GLASGOW_HASKELL__ >= 800 --- base -import GHC.Stack ( HasCallStack ) + + -- call this function instead of "error" bug :: HasCallStack => Doc -> a -#else -bug :: Doc -> a -#endif bug message = error $ unlines [ "This should never happen, sorry!" , "" diff --git a/src/Conjure/Compute/DomainOf.hs b/src/Conjure/Compute/DomainOf.hs index 0d5ce62531..92b0c025e3 100644 --- a/src/Conjure/Compute/DomainOf.hs +++ b/src/Conjure/Compute/DomainOf.hs @@ -8,7 +8,6 @@ import Conjure.Prelude import Conjure.Bug import Conjure.Language -import Conjure.Language.Domain ( HasRepresentation(..) ) import Conjure.Language.RepresentationOf ( RepresentationOf(..) ) import Conjure.Compute.DomainUnion diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 88c2a8d698..4db8e25881 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -19,8 +19,7 @@ import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax import Conjure.Language.Lexer --- import Conjure.Language.AST.Expression -import Conjure.Language.Lexemes + import Text.Megaparsec import Conjure.Language.AST.Reformer (Flattenable(..)) diff --git a/src/Conjure/Language/AbstractLiteral.hs b/src/Conjure/Language/AbstractLiteral.hs index e43cbaf069..31c626e438 100644 --- a/src/Conjure/Language/AbstractLiteral.hs +++ b/src/Conjure/Language/AbstractLiteral.hs @@ -17,7 +17,6 @@ import Conjure.Language.Pretty -- aeson import qualified Data.Aeson as JSON import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/AdHoc.hs b/src/Conjure/Language/AdHoc.hs index 632a0d70ac..3cf7ebcf0a 100644 --- a/src/Conjure/Language/AdHoc.hs +++ b/src/Conjure/Language/AdHoc.hs @@ -8,14 +8,13 @@ import Conjure.Language.Pretty -- aeson import qualified Data.Aeson as JSON -import qualified Data.Aeson.Types as JSON ( Value ) -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector -- scientific import Data.Scientific ( floatingOrInteger ) import qualified Data.Aeson.KeyMap as KM -import Data.Aeson.Types + class ExpressionLike a where diff --git a/src/Conjure/Language/CategoryOf.hs b/src/Conjure/Language/CategoryOf.hs index 92a4acf51e..cc848ce2cd 100644 --- a/src/Conjure/Language/CategoryOf.hs +++ b/src/Conjure/Language/CategoryOf.hs @@ -62,13 +62,13 @@ categoryChecking :: (MonadFailDoc m, MonadUserError m) => Model -> m Model categoryChecking m = do errors1 <- fmap concat $ forM (mStatements m) $ \ st -> case st of Declaration (FindOrGiven _forg name domain) -> do - let cat = categoryOf domain - return [(domain, (name, cat)) | cat > CatParameter] + let category = categoryOf domain + return [(domain, (name, category)) | category > CatParameter] _ -> return [] errors2 <- fmap concat $ forM (universeBi (mStatements m) :: [Domain () Expression]) $ \ domain -> do - let cat = categoryOf domain - return [ (domain, cat) - | cat > CatQuantified + let category = categoryOf domain + return [ (domain, category) + | category > CatQuantified , domain `notElem` map fst errors1 -- only if this is a new error ] @@ -77,17 +77,17 @@ categoryChecking m = do else userErr1 $ vcat $ [ "Category checking failed." ] ++ concat ( [ [ "The domain :" <+> pretty domain - , "Its category :" <+> pretty cat + , "Its category :" <+> pretty category , "In the definition of:" <+> pretty name , "" ] - | (domain, (name, cat)) <- nub errors1 + | (domain, (name, category)) <- nub errors1 ] ) ++ concat ( [ [ "The domain :" <+> pretty domain - , "Its category :" <+> pretty cat + , "Its category :" <+> pretty category , "" ] - | (domain, cat) <- nub errors2 + | (domain, category) <- nub errors2 ] ) initInfo_Lettings :: Model -> Model diff --git a/src/Conjure/Language/Constant.hs b/src/Conjure/Language/Constant.hs index e05428d812..5b7cecbcdb 100644 --- a/src/Conjure/Language/Constant.hs +++ b/src/Conjure/Language/Constant.hs @@ -44,7 +44,7 @@ import Test.QuickCheck ( Arbitrary(..), oneof ) import qualified Data.Aeson as JSON import Data.Aeson.Key (toText) import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index fe122e2278..a5752e47b2 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -60,9 +60,8 @@ import Conjure.Language.Expression -- aeson import Data.Aeson ( (.=), (.:) ) import qualified Data.Aeson as JSON -import qualified Data.Aeson.Key as K import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector -- uniplate diff --git a/src/Conjure/Language/Domain.hs b/src/Conjure/Language/Domain.hs index b633b1cb58..f42875b219 100644 --- a/src/Conjure/Language/Domain.hs +++ b/src/Conjure/Language/Domain.hs @@ -610,10 +610,10 @@ instance Default BinaryRelationAttrs where def = BinaryRelationAttrs S.empty instance Pretty BinaryRelationAttrs where pretty (BinaryRelationAttrs attrs) = prettyList id "," (S.toList attrs) instance Semigroup BinaryRelationAttrs where - (<>) = mappend + (<>) (BinaryRelationAttrs a) (BinaryRelationAttrs b) = BinaryRelationAttrs (S.union a b) instance Monoid BinaryRelationAttrs where mempty = BinaryRelationAttrs def - mappend (BinaryRelationAttrs a) (BinaryRelationAttrs b) = BinaryRelationAttrs (S.union a b) + data BinaryRelationAttr diff --git a/src/Conjure/Language/Expression.hs b/src/Conjure/Language/Expression.hs index 23339128de..7d04952fd5 100644 --- a/src/Conjure/Language/Expression.hs +++ b/src/Conjure/Language/Expression.hs @@ -38,7 +38,7 @@ import Conjure.Language.RepresentationOf -- aeson import qualified Data.Aeson as JSON import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector -- pretty diff --git a/src/Conjure/Language/Expression/Op/Active.hs b/src/Conjure/Language/Expression/Op/Active.hs index a2a3a48461..2e787714ad 100644 --- a/src/Conjure/Language/Expression/Op/Active.hs +++ b/src/Conjure/Language/Expression/Op/Active.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/AllDiff.hs b/src/Conjure/Language/Expression/Op/AllDiff.hs index d3bf98f7b4..ee9caeb913 100644 --- a/src/Conjure/Language/Expression/Op/AllDiff.hs +++ b/src/Conjure/Language/Expression/Op/AllDiff.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/AllDiffExcept.hs b/src/Conjure/Language/Expression/Op/AllDiffExcept.hs index 1eef848ed5..7ee1c9c963 100644 --- a/src/Conjure/Language/Expression/Op/AllDiffExcept.hs +++ b/src/Conjure/Language/Expression/Op/AllDiffExcept.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/And.hs b/src/Conjure/Language/Expression/Op/And.hs index 7a111caa8a..4527935fa3 100644 --- a/src/Conjure/Language/Expression/Op/And.hs +++ b/src/Conjure/Language/Expression/Op/And.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/Apart.hs b/src/Conjure/Language/Expression/Op/Apart.hs index eae284b9ee..9aba627aee 100644 --- a/src/Conjure/Language/Expression/Op/Apart.hs +++ b/src/Conjure/Language/Expression/Op/Apart.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/AtLeast.hs b/src/Conjure/Language/Expression/Op/AtLeast.hs index 595a8bf856..6e597f92a3 100644 --- a/src/Conjure/Language/Expression/Op/AtLeast.hs +++ b/src/Conjure/Language/Expression/Op/AtLeast.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/AtMost.hs b/src/Conjure/Language/Expression/Op/AtMost.hs index 55eade610a..b2a4ed49cd 100644 --- a/src/Conjure/Language/Expression/Op/AtMost.hs +++ b/src/Conjure/Language/Expression/Op/AtMost.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs b/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs index 050e22f8a9..46c6e74e27 100644 --- a/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs +++ b/src/Conjure/Language/Expression/Op/AttributeAsConstraint.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/CatchUndef.hs b/src/Conjure/Language/Expression/Op/CatchUndef.hs index 3456432859..8330572e42 100644 --- a/src/Conjure/Language/Expression/Op/CatchUndef.hs +++ b/src/Conjure/Language/Expression/Op/CatchUndef.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/Defined.hs b/src/Conjure/Language/Expression/Op/Defined.hs index 826e237c92..3d100ed2ff 100644 --- a/src/Conjure/Language/Expression/Op/Defined.hs +++ b/src/Conjure/Language/Expression/Op/Defined.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpDefined x) where prettyPrec _ (OpDefined a) = "defined" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDefined x) where - varSymBreakingDescription (OpDefined a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpDefined a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpDefined") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Div.hs b/src/Conjure/Language/Expression/Op/Div.hs index 0d7930dd8a..130a31ab55 100644 --- a/src/Conjure/Language/Expression/Op/Div.hs +++ b/src/Conjure/Language/Expression/Op/Div.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpDiv x) where prettyPrec prec op@(OpDiv a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDiv x) where - varSymBreakingDescription (OpDiv a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpDiv a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpDiv") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/DontCare.hs b/src/Conjure/Language/Expression/Op/DontCare.hs index 1b61cd62fb..4e0facc02e 100644 --- a/src/Conjure/Language/Expression/Op/DontCare.hs +++ b/src/Conjure/Language/Expression/Op/DontCare.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -29,7 +29,7 @@ instance Pretty x => Pretty (OpDontCare x) where prettyPrec _ (OpDontCare a) = "dontCare" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDontCare x) where - varSymBreakingDescription (OpDontCare a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpDontCare a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpDontCare") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/DotLeq.hs b/src/Conjure/Language/Expression/Op/DotLeq.hs index 7740f10574..ed6a28f9a5 100644 --- a/src/Conjure/Language/Expression/Op/DotLeq.hs +++ b/src/Conjure/Language/Expression/Op/DotLeq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpDotLeq x) where prettyPrec prec op@(OpDotLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDotLeq x) where - varSymBreakingDescription (OpDotLeq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpDotLeq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpDotLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/DotLt.hs b/src/Conjure/Language/Expression/Op/DotLt.hs index 2e25dfd8f5..7d0977b1d2 100644 --- a/src/Conjure/Language/Expression/Op/DotLt.hs +++ b/src/Conjure/Language/Expression/Op/DotLt.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpDotLt x) where prettyPrec prec op@(OpDotLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpDotLt x) where - varSymBreakingDescription (OpDotLt a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpDotLt a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpDotLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Eq.hs b/src/Conjure/Language/Expression/Op/Eq.hs index 05f0c78b67..6b5232d56a 100644 --- a/src/Conjure/Language/Expression/Op/Eq.hs +++ b/src/Conjure/Language/Expression/Op/Eq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -35,7 +35,7 @@ instance Pretty x => Pretty (OpEq x) where prettyPrec prec op@(OpEq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpEq x) where - varSymBreakingDescription (OpEq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpEq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpEq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Factorial.hs b/src/Conjure/Language/Expression/Op/Factorial.hs index a35fb440d5..c037bb4acb 100644 --- a/src/Conjure/Language/Expression/Op/Factorial.hs +++ b/src/Conjure/Language/Expression/Op/Factorial.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpFactorial x) where prettyPrec _ (OpFactorial a) = "factorial" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpFactorial x) where - varSymBreakingDescription (OpFactorial a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpFactorial a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpFactorial") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Flatten.hs b/src/Conjure/Language/Expression/Op/Flatten.hs index e4b005f9c9..214fd6a4d0 100644 --- a/src/Conjure/Language/Expression/Op/Flatten.hs +++ b/src/Conjure/Language/Expression/Op/Flatten.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -47,7 +47,7 @@ instance Pretty x => Pretty (OpFlatten x) where prettyPrec _ (OpFlatten (Just n) m) = "flatten" <> prettyList prParens "," [pretty n, pretty m] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpFlatten x) where - varSymBreakingDescription (OpFlatten n m) = JSON.Object $KM.fromList + varSymBreakingDescription (OpFlatten n m) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpFlatten") , ("children", JSON.Array $ V.fromList [ toJSON n diff --git a/src/Conjure/Language/Expression/Op/Freq.hs b/src/Conjure/Language/Expression/Op/Freq.hs index 490527bc1f..8c32699f0f 100644 --- a/src/Conjure/Language/Expression/Op/Freq.hs +++ b/src/Conjure/Language/Expression/Op/Freq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -51,7 +51,7 @@ instance Pretty x => Pretty (OpFreq x) where prettyPrec _ (OpFreq a b) = "freq" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpFreq x) where - varSymBreakingDescription (OpFreq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpFreq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpFreq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/GCC.hs b/src/Conjure/Language/Expression/Op/GCC.hs index 1b88caf356..96f069625b 100644 --- a/src/Conjure/Language/Expression/Op/GCC.hs +++ b/src/Conjure/Language/Expression/Op/GCC.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -48,7 +48,7 @@ instance Pretty x => Pretty (OpGCC x) where prettyPrec _ (OpGCC a b c) = "gcc" <> prettyList prParens "," [a, b, c] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpGCC x) where - varSymBreakingDescription (OpGCC a b c) = JSON.Object $KM.fromList + varSymBreakingDescription (OpGCC a b c) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpGCC") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a , varSymBreakingDescription b diff --git a/src/Conjure/Language/Expression/Op/Geq.hs b/src/Conjure/Language/Expression/Op/Geq.hs index 46354d3e23..178ab30e4b 100644 --- a/src/Conjure/Language/Expression/Op/Geq.hs +++ b/src/Conjure/Language/Expression/Op/Geq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpGeq x) where prettyPrec prec op@(OpGeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpGeq x) where - varSymBreakingDescription (OpGeq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpGeq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpGeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Gt.hs b/src/Conjure/Language/Expression/Op/Gt.hs index aedb6197ee..50d35920fd 100644 --- a/src/Conjure/Language/Expression/Op/Gt.hs +++ b/src/Conjure/Language/Expression/Op/Gt.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpGt x) where prettyPrec prec op@(OpGt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpGt x) where - varSymBreakingDescription (OpGt a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpGt a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpGt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Hist.hs b/src/Conjure/Language/Expression/Op/Hist.hs index 5f628884ec..4098cbfe70 100644 --- a/src/Conjure/Language/Expression/Op/Hist.hs +++ b/src/Conjure/Language/Expression/Op/Hist.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -35,7 +35,7 @@ instance Pretty x => Pretty (OpHist x) where prettyPrec _ (OpHist a) = "hist" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpHist x) where - varSymBreakingDescription (OpHist a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpHist a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpHist") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Iff.hs b/src/Conjure/Language/Expression/Op/Iff.hs index 4a6979a33c..ac769874d2 100644 --- a/src/Conjure/Language/Expression/Op/Iff.hs +++ b/src/Conjure/Language/Expression/Op/Iff.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -35,7 +35,7 @@ instance Pretty x => Pretty (OpIff x) where prettyPrec prec op@(OpIff a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIff x) where - varSymBreakingDescription (OpIff a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpIff a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpIff") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Image.hs b/src/Conjure/Language/Expression/Op/Image.hs index 84530f7688..21e59153d4 100644 --- a/src/Conjure/Language/Expression/Op/Image.hs +++ b/src/Conjure/Language/Expression/Op/Image.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -44,7 +44,7 @@ instance Pretty x => Pretty (OpImage x) where prettyPrec _ (OpImage a b) = "image" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImage x) where - varSymBreakingDescription (OpImage a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpImage a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpImage") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ImageSet.hs b/src/Conjure/Language/Expression/Op/ImageSet.hs index e3575abed1..cd12abf856 100644 --- a/src/Conjure/Language/Expression/Op/ImageSet.hs +++ b/src/Conjure/Language/Expression/Op/ImageSet.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -44,7 +44,7 @@ instance Pretty x => Pretty (OpImageSet x) where prettyPrec _ (OpImageSet a b) = "imageSet" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImageSet x) where - varSymBreakingDescription (OpImageSet a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpImageSet a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpImageSet") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Imply.hs b/src/Conjure/Language/Expression/Op/Imply.hs index 25ac7c23ca..eef4daaef1 100644 --- a/src/Conjure/Language/Expression/Op/Imply.hs +++ b/src/Conjure/Language/Expression/Op/Imply.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -36,7 +36,7 @@ instance Pretty x => Pretty (OpImply x) where prettyPrec prec op@(OpImply a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpImply x) where - varSymBreakingDescription (OpImply a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpImply a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpImply") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/In.hs b/src/Conjure/Language/Expression/Op/In.hs index 50c85f2d33..f38c92debe 100644 --- a/src/Conjure/Language/Expression/Op/In.hs +++ b/src/Conjure/Language/Expression/Op/In.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -42,7 +42,7 @@ instance Pretty x => Pretty (OpIn x) where prettyPrec prec op@(OpIn a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIn x) where - varSymBreakingDescription (OpIn a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpIn a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpIn") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Indexing.hs b/src/Conjure/Language/Expression/Op/Indexing.hs index 71bcdf102c..a620e00480 100644 --- a/src/Conjure/Language/Expression/Op/Indexing.hs +++ b/src/Conjure/Language/Expression/Op/Indexing.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector -- pretty @@ -84,7 +84,7 @@ instance Pretty x => Pretty (OpIndexing x) where prettyPrec _ (OpIndexing a b) = Pr.cat [pretty a, nest 4 (prBrackets (pretty b))] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIndexing x) where - varSymBreakingDescription (OpIndexing a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpIndexing a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpIndexing") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Intersect.hs b/src/Conjure/Language/Expression/Op/Intersect.hs index c397d8b57e..7f922174b4 100644 --- a/src/Conjure/Language/Expression/Op/Intersect.hs +++ b/src/Conjure/Language/Expression/Op/Intersect.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -38,7 +38,7 @@ instance Pretty x => Pretty (OpIntersect x) where prettyPrec prec op@(OpIntersect a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpIntersect x) where - varSymBreakingDescription (OpIntersect a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpIntersect a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpIntersect") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Inverse.hs b/src/Conjure/Language/Expression/Op/Inverse.hs index 88d7061827..94b7c7688f 100644 --- a/src/Conjure/Language/Expression/Op/Inverse.hs +++ b/src/Conjure/Language/Expression/Op/Inverse.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpInverse x) where prettyPrec _ (OpInverse a b) = "inverse" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpInverse x) where - varSymBreakingDescription (OpInverse a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpInverse a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpInverse") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Leq.hs b/src/Conjure/Language/Expression/Op/Leq.hs index 616d974083..87ddc9adee 100644 --- a/src/Conjure/Language/Expression/Op/Leq.hs +++ b/src/Conjure/Language/Expression/Op/Leq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpLeq x) where prettyPrec prec op@(OpLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLeq x) where - varSymBreakingDescription (OpLeq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpLeq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/LexLeq.hs b/src/Conjure/Language/Expression/Op/LexLeq.hs index 4f6ff2c119..9626a54784 100644 --- a/src/Conjure/Language/Expression/Op/LexLeq.hs +++ b/src/Conjure/Language/Expression/Op/LexLeq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -40,7 +40,7 @@ instance Pretty x => Pretty (OpLexLeq x) where prettyPrec prec op@(OpLexLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLexLeq x) where - varSymBreakingDescription (OpLexLeq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpLexLeq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpLexLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/LexLt.hs b/src/Conjure/Language/Expression/Op/LexLt.hs index d0cac4b106..ad7960d317 100644 --- a/src/Conjure/Language/Expression/Op/LexLt.hs +++ b/src/Conjure/Language/Expression/Op/LexLt.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -40,7 +40,7 @@ instance Pretty x => Pretty (OpLexLt x) where prettyPrec prec op@(OpLexLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLexLt x) where - varSymBreakingDescription (OpLexLt a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpLexLt a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpLexLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Lt.hs b/src/Conjure/Language/Expression/Op/Lt.hs index f7c711b05f..80c0921ef2 100644 --- a/src/Conjure/Language/Expression/Op/Lt.hs +++ b/src/Conjure/Language/Expression/Op/Lt.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpLt x) where prettyPrec prec op@(OpLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpLt x) where - varSymBreakingDescription (OpLt a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpLt a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/MakeTable.hs b/src/Conjure/Language/Expression/Op/MakeTable.hs index fc0c893cf4..f91963d206 100644 --- a/src/Conjure/Language/Expression/Op/MakeTable.hs +++ b/src/Conjure/Language/Expression/Op/MakeTable.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpMakeTable x) where prettyPrec _ (OpMakeTable a) = "makeTable" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpMakeTable x) where - varSymBreakingDescription (OpMakeTable a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpMakeTable a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMakeTable") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Max.hs b/src/Conjure/Language/Expression/Op/Max.hs index 748dee54bb..0bddfe1e46 100644 --- a/src/Conjure/Language/Expression/Op/Max.hs +++ b/src/Conjure/Language/Expression/Op/Max.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -57,12 +57,12 @@ instance Pretty x => Pretty (OpMax x) where prettyPrec _ (OpMax x) = "max" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpMax x) where - varSymBreakingDescription (OpMax x) | Just xs <- listOut x = JSON.Object $KM.fromList + varSymBreakingDescription (OpMax x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMax") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpMax x) = JSON.Object $KM.fromList + varSymBreakingDescription (OpMax x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMax") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Min.hs b/src/Conjure/Language/Expression/Op/Min.hs index c4aa290469..6d6abf1b87 100644 --- a/src/Conjure/Language/Expression/Op/Min.hs +++ b/src/Conjure/Language/Expression/Op/Min.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -57,12 +57,12 @@ instance Pretty x => Pretty (OpMin x) where prettyPrec _ (OpMin x) = "min" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpMin x) where - varSymBreakingDescription (OpMin x) | Just xs <- listOut x = JSON.Object $KM.fromList + varSymBreakingDescription (OpMin x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMin") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpMin x) = JSON.Object $KM.fromList + varSymBreakingDescription (OpMin x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMin") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Minus.hs b/src/Conjure/Language/Expression/Op/Minus.hs index f09278f32e..fa0dec3047 100644 --- a/src/Conjure/Language/Expression/Op/Minus.hs +++ b/src/Conjure/Language/Expression/Op/Minus.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -42,7 +42,7 @@ instance Pretty x => Pretty (OpMinus x) where prettyPrec prec op@(OpMinus a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpMinus x) where - varSymBreakingDescription (OpMinus a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpMinus a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMinus") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Mod.hs b/src/Conjure/Language/Expression/Op/Mod.hs index aa5d804b37..9843505ac3 100644 --- a/src/Conjure/Language/Expression/Op/Mod.hs +++ b/src/Conjure/Language/Expression/Op/Mod.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpMod x) where prettyPrec prec op@(OpMod a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpMod x) where - varSymBreakingDescription (OpMod a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpMod a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpMod") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Negate.hs b/src/Conjure/Language/Expression/Op/Negate.hs index d4ec20c204..8b05f2e2ba 100644 --- a/src/Conjure/Language/Expression/Op/Negate.hs +++ b/src/Conjure/Language/Expression/Op/Negate.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpNegate x) where prettyPrec prec (OpNegate a) = parensIf (prec > 2000) ("-" <> prettyPrec 2000 a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpNegate x) where - varSymBreakingDescription (OpNegate a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpNegate a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpNegate") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Neq.hs b/src/Conjure/Language/Expression/Op/Neq.hs index dd2c124327..0be7d9fe61 100644 --- a/src/Conjure/Language/Expression/Op/Neq.hs +++ b/src/Conjure/Language/Expression/Op/Neq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpNeq x) where prettyPrec prec op@(OpNeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpNeq x) where - varSymBreakingDescription (OpNeq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpNeq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpNeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Not.hs b/src/Conjure/Language/Expression/Op/Not.hs index 8c4aaa7b2c..007f1d014e 100644 --- a/src/Conjure/Language/Expression/Op/Not.hs +++ b/src/Conjure/Language/Expression/Op/Not.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpNot x) where prettyPrec prec (OpNot a) = parensIf (prec > 2000) ("!" <> prettyPrec 2000 a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpNot x) where - varSymBreakingDescription (OpNot a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpNot a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpNot") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Or.hs b/src/Conjure/Language/Expression/Op/Or.hs index b7cae82d79..e7dddcc25e 100644 --- a/src/Conjure/Language/Expression/Op/Or.hs +++ b/src/Conjure/Language/Expression/Op/Or.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -55,12 +55,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpOr x) where prettyPrec _ (OpOr x) = "or" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpOr x) where - varSymBreakingDescription (OpOr x) | Just xs <- listOut x = JSON.Object $KM.fromList + varSymBreakingDescription (OpOr x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpOr") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpOr x) = JSON.Object $KM.fromList + varSymBreakingDescription (OpOr x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpOr") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Participants.hs b/src/Conjure/Language/Expression/Op/Participants.hs index b977f7a2e1..cc7dd493e1 100644 --- a/src/Conjure/Language/Expression/Op/Participants.hs +++ b/src/Conjure/Language/Expression/Op/Participants.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -33,7 +33,7 @@ instance Pretty x => Pretty (OpParticipants x) where prettyPrec _ (OpParticipants a) = "participants" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpParticipants x) where - varSymBreakingDescription (OpParticipants a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpParticipants a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpParticipants") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Parts.hs b/src/Conjure/Language/Expression/Op/Parts.hs index 55710b5680..d5202ecacb 100644 --- a/src/Conjure/Language/Expression/Op/Parts.hs +++ b/src/Conjure/Language/Expression/Op/Parts.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -35,7 +35,7 @@ instance Pretty x => Pretty (OpParts x) where prettyPrec _ (OpParts a) = "parts" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpParts x) where - varSymBreakingDescription (OpParts a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpParts a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpParts") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Party.hs b/src/Conjure/Language/Expression/Op/Party.hs index 8dcf85575b..bf8621d23e 100644 --- a/src/Conjure/Language/Expression/Op/Party.hs +++ b/src/Conjure/Language/Expression/Op/Party.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpParty x) where prettyPrec _ (OpParty a b) = "party" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpParty x) where - varSymBreakingDescription (OpParty a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpParty a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpParty") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Pow.hs b/src/Conjure/Language/Expression/Op/Pow.hs index 5b4f7595ef..d181649f27 100644 --- a/src/Conjure/Language/Expression/Op/Pow.hs +++ b/src/Conjure/Language/Expression/Op/Pow.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpPow x) where prettyPrec prec op@(OpPow a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPow x) where - varSymBreakingDescription (OpPow a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpPow a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpPow") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/PowerSet.hs b/src/Conjure/Language/Expression/Op/PowerSet.hs index 26eeb0d3a4..7adc63d2bf 100644 --- a/src/Conjure/Language/Expression/Op/PowerSet.hs +++ b/src/Conjure/Language/Expression/Op/PowerSet.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpPowerSet x) where prettyPrec _ (OpPowerSet a) = "powerSet" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPowerSet x) where - varSymBreakingDescription (OpPowerSet a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpPowerSet a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpPowerSet") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/PreImage.hs b/src/Conjure/Language/Expression/Op/PreImage.hs index 4c68941c8d..e2b81e559e 100644 --- a/src/Conjure/Language/Expression/Op/PreImage.hs +++ b/src/Conjure/Language/Expression/Op/PreImage.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -41,7 +41,7 @@ instance Pretty x => Pretty (OpPreImage x) where prettyPrec _ (OpPreImage a b) = "preImage" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPreImage x) where - varSymBreakingDescription (OpPreImage a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpPreImage a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpPreImage") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Pred.hs b/src/Conjure/Language/Expression/Op/Pred.hs index 5e7c5a1479..189731af21 100644 --- a/src/Conjure/Language/Expression/Op/Pred.hs +++ b/src/Conjure/Language/Expression/Op/Pred.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -36,7 +36,7 @@ instance Pretty x => Pretty (OpPred x) where prettyPrec _ (OpPred x) = "pred" <> prParens (pretty x) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpPred x) where - varSymBreakingDescription (OpPred a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpPred a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpPred") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Product.hs b/src/Conjure/Language/Expression/Op/Product.hs index 71a30bc02f..08d46776db 100644 --- a/src/Conjure/Language/Expression/Op/Product.hs +++ b/src/Conjure/Language/Expression/Op/Product.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -63,12 +63,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpProduct x) where prettyPrec _ (OpProduct x) = "product" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpProduct x) where - varSymBreakingDescription (OpProduct x) | Just xs <- listOut x = JSON.Object $KM.fromList + varSymBreakingDescription (OpProduct x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpProduct") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpProduct x) = JSON.Object $KM.fromList + varSymBreakingDescription (OpProduct x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpProduct") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Range.hs b/src/Conjure/Language/Expression/Op/Range.hs index b4efddcefc..5be6b83d68 100644 --- a/src/Conjure/Language/Expression/Op/Range.hs +++ b/src/Conjure/Language/Expression/Op/Range.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpRange x) where prettyPrec _ (OpRange a) = "range" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpRange x) where - varSymBreakingDescription (OpRange a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpRange a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpRange") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/RelationProj.hs b/src/Conjure/Language/Expression/Op/RelationProj.hs index 0c6db8e870..9ed0ad1250 100644 --- a/src/Conjure/Language/Expression/Op/RelationProj.hs +++ b/src/Conjure/Language/Expression/Op/RelationProj.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -56,7 +56,7 @@ instance Pretty x => Pretty (OpRelationProj x) where pr (Just b) = pretty b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpRelationProj x) where - varSymBreakingDescription (OpRelationProj a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpRelationProj a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpRelationProj") , ("children", JSON.Array $ V.fromList $ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Restrict.hs b/src/Conjure/Language/Expression/Op/Restrict.hs index 4d53c170a9..f56346decd 100644 --- a/src/Conjure/Language/Expression/Op/Restrict.hs +++ b/src/Conjure/Language/Expression/Op/Restrict.hs @@ -10,7 +10,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -39,7 +39,7 @@ instance Pretty x => Pretty (OpRestrict x) where prettyPrec _ (OpRestrict a b) = "restrict" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpRestrict x) where - varSymBreakingDescription (OpRestrict a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpRestrict a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpRestrict") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Slicing.hs b/src/Conjure/Language/Expression/Op/Slicing.hs index ab2777038c..b1b3f6061c 100644 --- a/src/Conjure/Language/Expression/Op/Slicing.hs +++ b/src/Conjure/Language/Expression/Op/Slicing.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -35,7 +35,7 @@ instance Pretty x => Pretty (OpSlicing x) where prettyPrec _ (OpSlicing m a b) = pretty m <> prBrackets (pretty a <> ".." <> pretty b) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSlicing x) where - varSymBreakingDescription (OpSlicing a b c) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSlicing a b c) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSlicing") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Subsequence.hs b/src/Conjure/Language/Expression/Op/Subsequence.hs index 4e99fb8f7b..666693a961 100644 --- a/src/Conjure/Language/Expression/Op/Subsequence.hs +++ b/src/Conjure/Language/Expression/Op/Subsequence.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -41,7 +41,7 @@ instance Pretty x => Pretty (OpSubsequence x) where prettyPrec prec op@(OpSubsequence a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubsequence x) where - varSymBreakingDescription (OpSubsequence a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSubsequence a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSubsequence") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Subset.hs b/src/Conjure/Language/Expression/Op/Subset.hs index 0f3d234554..abdc62b098 100644 --- a/src/Conjure/Language/Expression/Op/Subset.hs +++ b/src/Conjure/Language/Expression/Op/Subset.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -38,7 +38,7 @@ instance Pretty x => Pretty (OpSubset x) where prettyPrec prec op@(OpSubset a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubset x) where - varSymBreakingDescription (OpSubset a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSubset a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSubset") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/SubsetEq.hs b/src/Conjure/Language/Expression/Op/SubsetEq.hs index deea0f5c8c..c36cc4198a 100644 --- a/src/Conjure/Language/Expression/Op/SubsetEq.hs +++ b/src/Conjure/Language/Expression/Op/SubsetEq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -38,7 +38,7 @@ instance Pretty x => Pretty (OpSubsetEq x) where prettyPrec prec op@(OpSubsetEq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubsetEq x) where - varSymBreakingDescription (OpSubsetEq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSubsetEq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSubsetEq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Substring.hs b/src/Conjure/Language/Expression/Op/Substring.hs index e618db13cc..fa4b7467ef 100644 --- a/src/Conjure/Language/Expression/Op/Substring.hs +++ b/src/Conjure/Language/Expression/Op/Substring.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -41,7 +41,7 @@ instance Pretty x => Pretty (OpSubstring x) where prettyPrec prec op@(OpSubstring a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSubstring x) where - varSymBreakingDescription (OpSubstring a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSubstring a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSubstring") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Succ.hs b/src/Conjure/Language/Expression/Op/Succ.hs index da946d0eb8..34184210e7 100644 --- a/src/Conjure/Language/Expression/Op/Succ.hs +++ b/src/Conjure/Language/Expression/Op/Succ.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -36,7 +36,7 @@ instance Pretty x => Pretty (OpSucc x) where prettyPrec _ (OpSucc x) = "succ" <> prParens (pretty x) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSucc x) where - varSymBreakingDescription (OpSucc a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSucc a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSucc") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Sum.hs b/src/Conjure/Language/Expression/Op/Sum.hs index 6a316f8ae6..74ffad012c 100644 --- a/src/Conjure/Language/Expression/Op/Sum.hs +++ b/src/Conjure/Language/Expression/Op/Sum.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -58,12 +58,12 @@ instance (Pretty x, ExpressionLike x) => Pretty (OpSum x) where prettyPrec _ (OpSum x) = "sum" <> prParens (pretty x) instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpSum x) where - varSymBreakingDescription (OpSum x) | Just xs <- listOut x = JSON.Object $KM.fromList + varSymBreakingDescription (OpSum x) | Just xs <- listOut x = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSum") , ("children", JSON.Array $ V.fromList $ map varSymBreakingDescription xs) , ("symmetricChildren", JSON.Bool True) ] - varSymBreakingDescription (OpSum x) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSum x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSum") , ("children", varSymBreakingDescription x) ] diff --git a/src/Conjure/Language/Expression/Op/Supset.hs b/src/Conjure/Language/Expression/Op/Supset.hs index ce67446a43..18856bcb82 100644 --- a/src/Conjure/Language/Expression/Op/Supset.hs +++ b/src/Conjure/Language/Expression/Op/Supset.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -38,7 +38,7 @@ instance Pretty x => Pretty (OpSupset x) where prettyPrec prec op@(OpSupset a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSupset x) where - varSymBreakingDescription (OpSupset a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSupset a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSupset") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/SupsetEq.hs b/src/Conjure/Language/Expression/Op/SupsetEq.hs index 9637cc4645..ce5091fe3e 100644 --- a/src/Conjure/Language/Expression/Op/SupsetEq.hs +++ b/src/Conjure/Language/Expression/Op/SupsetEq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -38,7 +38,7 @@ instance Pretty x => Pretty (OpSupsetEq x) where prettyPrec prec op@(OpSupsetEq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpSupsetEq x) where - varSymBreakingDescription (OpSupsetEq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpSupsetEq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpSupsetEq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Table.hs b/src/Conjure/Language/Expression/Op/Table.hs index c2a943b862..84fbec3ebb 100644 --- a/src/Conjure/Language/Expression/Op/Table.hs +++ b/src/Conjure/Language/Expression/Op/Table.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -45,7 +45,7 @@ instance Pretty x => Pretty (OpTable x) where prettyPrec _ (OpTable a b) = "table" <> prettyList prParens "," [a, b] instance (VarSymBreakingDescription x, ExpressionLike x) => VarSymBreakingDescription (OpTable x) where - varSymBreakingDescription (OpTable a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTable a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTable") , ("children", JSON.Array $ V.fromList [varSymBreakingDescription a, varSymBreakingDescription b]) , ("symmetricChildren", JSON.Bool True) diff --git a/src/Conjure/Language/Expression/Op/TildeLeq.hs b/src/Conjure/Language/Expression/Op/TildeLeq.hs index fb2bf8ffd6..286a173edf 100644 --- a/src/Conjure/Language/Expression/Op/TildeLeq.hs +++ b/src/Conjure/Language/Expression/Op/TildeLeq.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpTildeLeq x) where prettyPrec prec op@(OpTildeLeq a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTildeLeq x) where - varSymBreakingDescription (OpTildeLeq a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTildeLeq a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTildeLeq") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/TildeLt.hs b/src/Conjure/Language/Expression/Op/TildeLt.hs index 6c9c03ed91..eeef85dbf9 100644 --- a/src/Conjure/Language/Expression/Op/TildeLt.hs +++ b/src/Conjure/Language/Expression/Op/TildeLt.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -32,7 +32,7 @@ instance Pretty x => Pretty (OpTildeLt x) where prettyPrec prec op@(OpTildeLt a b) = prettyPrecBinOp prec [op] a b instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTildeLt x) where - varSymBreakingDescription (OpTildeLt a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTildeLt a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTildeLt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToInt.hs b/src/Conjure/Language/Expression/Op/ToInt.hs index e353c7b63b..4d2746bb66 100644 --- a/src/Conjure/Language/Expression/Op/ToInt.hs +++ b/src/Conjure/Language/Expression/Op/ToInt.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -37,7 +37,7 @@ instance Pretty x => Pretty (OpToInt x) where prettyPrec _ (OpToInt a) = "toInt" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToInt x) where - varSymBreakingDescription (OpToInt a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpToInt a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpToInt") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToMSet.hs b/src/Conjure/Language/Expression/Op/ToMSet.hs index c4ea41dcd4..edaea52c0e 100644 --- a/src/Conjure/Language/Expression/Op/ToMSet.hs +++ b/src/Conjure/Language/Expression/Op/ToMSet.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -38,7 +38,7 @@ instance Pretty x => Pretty (OpToMSet x) where prettyPrec _ (OpToMSet a) = "toMSet" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToMSet x) where - varSymBreakingDescription (OpToMSet a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpToMSet a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpToMSet") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToRelation.hs b/src/Conjure/Language/Expression/Op/ToRelation.hs index c4b7e8194e..315b8e5e77 100644 --- a/src/Conjure/Language/Expression/Op/ToRelation.hs +++ b/src/Conjure/Language/Expression/Op/ToRelation.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -33,7 +33,7 @@ instance Pretty x => Pretty (OpToRelation x) where prettyPrec _ (OpToRelation a) = "toRelation" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToRelation x) where - varSymBreakingDescription (OpToRelation a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpToRelation a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpToRelation") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/ToSet.hs b/src/Conjure/Language/Expression/Op/ToSet.hs index 565ec196a7..76d194b14c 100644 --- a/src/Conjure/Language/Expression/Op/ToSet.hs +++ b/src/Conjure/Language/Expression/Op/ToSet.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -41,7 +41,7 @@ instance Pretty x => Pretty (OpToSet x) where prettyPrec _ (OpToSet _ a) = "toSet" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpToSet x) where - varSymBreakingDescription (OpToSet b x) = JSON.Object $KM.fromList + varSymBreakingDescription (OpToSet b x) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpToSet") , ("children", JSON.Array $ V.fromList [ toJSON b diff --git a/src/Conjure/Language/Expression/Op/Together.hs b/src/Conjure/Language/Expression/Op/Together.hs index 9618219022..1953982528 100644 --- a/src/Conjure/Language/Expression/Op/Together.hs +++ b/src/Conjure/Language/Expression/Op/Together.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -34,7 +34,7 @@ instance Pretty x => Pretty (OpTogether x) where prettyPrec _ (OpTogether a b) = "together" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTogether x) where - varSymBreakingDescription (OpTogether a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTogether a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTogether") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Transform.hs b/src/Conjure/Language/Expression/Op/Transform.hs index 5783eed226..4effe1b629 100644 --- a/src/Conjure/Language/Expression/Op/Transform.hs +++ b/src/Conjure/Language/Expression/Op/Transform.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -43,7 +43,7 @@ instance Pretty x => Pretty (OpTransform x) where prettyPrec _ (OpTransform a b) = "transform" <> prettyList prParens "," [a,b] instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTransform x) where - varSymBreakingDescription (OpTransform a b) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTransform a b) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTransform") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/True.hs b/src/Conjure/Language/Expression/Op/True.hs index be33182ebb..88fb09b48f 100644 --- a/src/Conjure/Language/Expression/Op/True.hs +++ b/src/Conjure/Language/Expression/Op/True.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -29,7 +29,7 @@ instance Pretty x => Pretty (OpTrue x) where prettyPrec _ (OpTrue a) = "true" <> prParens (pretty a) instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTrue x) where - varSymBreakingDescription (OpTrue a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTrue a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTrue") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/TwoBars.hs b/src/Conjure/Language/Expression/Op/TwoBars.hs index d2cc686fa4..2ecf672e5e 100644 --- a/src/Conjure/Language/Expression/Op/TwoBars.hs +++ b/src/Conjure/Language/Expression/Op/TwoBars.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector @@ -48,7 +48,7 @@ instance Pretty x => Pretty (OpTwoBars x) where prettyPrec _ (OpTwoBars a) = "|" <> pretty a <> "|" instance VarSymBreakingDescription x => VarSymBreakingDescription (OpTwoBars x) where - varSymBreakingDescription (OpTwoBars a) = JSON.Object $KM.fromList + varSymBreakingDescription (OpTwoBars a) = JSON.Object $ KM.fromList [ ("type", JSON.String "OpTwoBars") , ("children", JSON.Array $ V.fromList [ varSymBreakingDescription a diff --git a/src/Conjure/Language/Expression/Op/Union.hs b/src/Conjure/Language/Expression/Op/Union.hs index 5f28079b43..b372cb14bd 100644 --- a/src/Conjure/Language/Expression/Op/Union.hs +++ b/src/Conjure/Language/Expression/Op/Union.hs @@ -7,7 +7,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/Op/Xor.hs b/src/Conjure/Language/Expression/Op/Xor.hs index cb8fb9ee56..8e4d56ac37 100644 --- a/src/Conjure/Language/Expression/Op/Xor.hs +++ b/src/Conjure/Language/Expression/Op/Xor.hs @@ -8,7 +8,7 @@ import Conjure.Language.Expression.Op.Internal.Common import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/Language/Expression/OpTypes.hs b/src/Conjure/Language/Expression/OpTypes.hs index 3633abaa35..7cf2e02340 100644 --- a/src/Conjure/Language/Expression/OpTypes.hs +++ b/src/Conjure/Language/Expression/OpTypes.hs @@ -1,8 +1,7 @@ module Conjure.Language.Expression.OpTypes where -import Conjure.Language.Lexemes (Lexeme) import Conjure.Language.Expression.Op.Internal.Common (Type (..)) import Conjure.Prelude -import Conjure.Language.Expression.Op.Internal.Common (Lexeme(..), IntTag (TagInt), mostDefined) +import Conjure.Language.Expression.Op.Internal.Common (IntTag (TagInt)) type TypeMapping2 = Type -> Type -> Type diff --git a/src/Conjure/Language/Lenses.hs b/src/Conjure/Language/Lenses.hs index 3be7ecc7ef..58f9154457 100644 --- a/src/Conjure/Language/Lenses.hs +++ b/src/Conjure/Language/Lenses.hs @@ -11,6 +11,7 @@ import Conjure.Language.TypeOf import Conjure.Language.Expression.Op import Conjure.Language.Pretty import Conjure.Language.AdHoc +import qualified Data.Kind as T (Type) -- | To use a lens for constructing stuf. @@ -18,7 +19,7 @@ make :: (Proxy Identity -> (a, b)) -> a make f = fst (f (Proxy :: Proxy Identity)) -- | To use a lens for deconstructing stuf. -match :: (Proxy (m :: * -> *) -> (a, b -> m c)) -> b -> m c +match :: (Proxy (m :: T.Type -> T.Type) -> (a, b -> m c)) -> b -> m c match f = snd (f Proxy) followAliases :: CanBeAnAlias b => (b -> c) -> b -> c @@ -51,7 +52,7 @@ opMinus , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -70,7 +71,7 @@ opDiv , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -89,7 +90,7 @@ opMod , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -108,7 +109,7 @@ opPow , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -127,7 +128,7 @@ opNegate , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -146,7 +147,7 @@ opDontCare , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -162,7 +163,7 @@ opDontCare _ = opDefined :: MonadFailDoc m - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Expression -> Expression , Expression -> m Expression ) @@ -177,7 +178,7 @@ opDefined _ = opRange :: MonadFailDoc m - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Expression -> Expression , Expression -> m Expression ) @@ -195,7 +196,7 @@ opDefinedOrRange , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( (x -> x, x) -> x , x -> m (x -> x, x) ) @@ -210,7 +211,7 @@ opDefinedOrRange _ = opRestrict :: MonadFailDoc m - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Expression -> Domain () Expression -> Expression , Expression -> m (Expression, Domain () Expression) ) @@ -228,7 +229,7 @@ opToInt , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -247,7 +248,7 @@ opPowerSet , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -266,7 +267,7 @@ opToSet , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -285,7 +286,7 @@ opToSetWithFlag , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Bool -> x -> x , x -> m (Bool, x) ) @@ -304,7 +305,7 @@ opToMSet , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -323,7 +324,7 @@ opToRelation , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -342,7 +343,7 @@ opParts , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -361,7 +362,7 @@ opParty , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x, x) ) @@ -380,7 +381,7 @@ opParticipants , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -399,7 +400,7 @@ opImage , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x, x) ) @@ -418,7 +419,7 @@ opImageSet , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x, x) ) @@ -436,7 +437,7 @@ opTransform , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x, x) ) @@ -455,7 +456,7 @@ opRelationProj , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> [Maybe x] -> x , x -> m (x, [Maybe x]) ) @@ -474,7 +475,7 @@ opRelationImage , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> [x] -> x , x -> m (x, [x]) ) @@ -496,7 +497,7 @@ opIndexing , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -517,7 +518,7 @@ opMatrixIndexing , MonadFailDoc m , ?typeCheckerMode :: TypeCheckerMode ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> [x] -> x , x -> m (x,[x]) ) @@ -549,7 +550,7 @@ opMatrixIndexingSlicing , TypeOf x , ?typeCheckerMode :: TypeCheckerMode ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> [Either x (Maybe x, Maybe x)] -> x , x -> m (x, [Either x (Maybe x, Maybe x)]) -- either an index or a slice ) @@ -591,7 +592,7 @@ opSlicing , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> Maybe x -> Maybe x -> x , x -> m (x, Maybe x, Maybe x) ) @@ -610,7 +611,7 @@ opFlatten , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -650,7 +651,7 @@ opConcatenate , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -669,7 +670,7 @@ opIn , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -688,7 +689,7 @@ opFreq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -707,7 +708,7 @@ opHist , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -726,7 +727,7 @@ opIntersect , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -745,7 +746,7 @@ opUnion , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -764,7 +765,7 @@ opSubsetEq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -783,7 +784,7 @@ opEq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -802,7 +803,7 @@ opNeq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -821,7 +822,7 @@ opLt , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -840,7 +841,7 @@ opLeq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -859,7 +860,7 @@ opGt , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -878,7 +879,7 @@ opGeq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -897,7 +898,7 @@ opDotLt , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -916,7 +917,7 @@ opDotLeq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -935,7 +936,7 @@ opTildeLt , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -954,7 +955,7 @@ opTildeLeq , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -973,7 +974,7 @@ opOr , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -992,7 +993,7 @@ opAnd , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1011,7 +1012,7 @@ opMax , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1030,7 +1031,7 @@ opMin , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1049,7 +1050,7 @@ opImply , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -1068,7 +1069,7 @@ opNot , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1087,7 +1088,7 @@ opProduct , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1106,7 +1107,7 @@ opSum , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1128,7 +1129,7 @@ opReducer , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( (x -> x, x) -> x , x -> m ( ReducerType , Bool -- defined on [] @@ -1158,7 +1159,7 @@ opModifier :: ( Op x :< x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( (x -> x, x) -> x , x -> m (x -> x, x) ) @@ -1177,7 +1178,7 @@ opModifierNoP :: ( Op x :< x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( (x -> x, x) -> x , x -> m (x -> x, x) ) @@ -1196,7 +1197,7 @@ opAllDiff , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1215,7 +1216,7 @@ opAllDiffExcept , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x, x) ) @@ -1231,7 +1232,7 @@ opAllDiffExcept _ = constantInt :: MonadFailDoc m - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Integer -> Expression , Expression -> m Integer ) @@ -1245,7 +1246,7 @@ constantInt _ = matrixLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> Domain () Expression -> [Expression] -> Expression , Expression -> m (Type, Domain () Expression, [Expression]) ) @@ -1299,7 +1300,7 @@ onMatrixLiteral mlvl f = case mlvl of setLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> [Expression] -> Expression , Expression -> m (Type, [Expression]) ) @@ -1323,7 +1324,7 @@ setLiteral _ = msetLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> [Expression] -> Expression , Expression -> m (Type, [Expression]) ) @@ -1347,7 +1348,7 @@ msetLiteral _ = functionLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> [(Expression,Expression)] -> Expression , Expression -> m (Type, [(Expression,Expression)]) ) @@ -1371,7 +1372,7 @@ functionLiteral _ = sequenceLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> [Expression] -> Expression , Expression -> m (Type, [Expression]) ) @@ -1395,7 +1396,7 @@ sequenceLiteral _ = relationLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> [[Expression]] -> Expression , Expression -> m (Type, [[Expression]]) ) @@ -1419,7 +1420,7 @@ relationLiteral _ = partitionLiteral :: (MonadFailDoc m, ?typeCheckerMode :: TypeCheckerMode) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( Type -> [[Expression]] -> Expression , Expression -> m (Type, [[Expression]]) ) @@ -1446,7 +1447,7 @@ opTwoBars , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1465,7 +1466,7 @@ opPreImage , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x -> x , x -> m (x,x) ) @@ -1484,7 +1485,7 @@ opActive , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> Name -> x , x -> m (x,Name) ) @@ -1503,7 +1504,7 @@ opFactorial , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( x -> x , x -> m x ) @@ -1522,7 +1523,7 @@ opLex , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( (x -> x -> x, (x,x)) -> x , x -> m (x -> x -> x, (x,x)) ) @@ -1540,7 +1541,7 @@ opOrdering , Pretty x , MonadFailDoc m ) - => Proxy (m :: * -> *) + => Proxy (m :: T.Type -> T.Type) -> ( (x -> x -> x, (x,x)) -> x , x -> m (x -> x -> x, (x,x)) ) diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index bb5cd8d705..a29425c5aa 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -7,8 +7,8 @@ module Conjure.Language.Lexemes where import Conjure.Prelude import qualified Data.HashMap.Strict as M import qualified Data.Text as T -import qualified Data.Text.Lazy as L -import Data.Char (chr, ord) + + data Lexeme = LIntLiteral Integer diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 156f662733..4ac447c5ed 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -36,7 +36,6 @@ import Data.Void import qualified Data.Text as T import qualified Data.Text.Lazy as L -import Data.Text (Text) import Text.Megaparsec hiding (State) import Text.Megaparsec.Char @@ -47,13 +46,7 @@ import Prelude (read) import qualified Prettyprinter as Pr import Conjure.Prelude hiding (some,many) -import qualified Data.HashMap.Strict as M -import qualified Data.Text as T - -import Conjure.Language.Pretty - -import Text.Megaparsec --( SourcePos, initialPos, incSourceLine, incSourceColumn, setSourceColumn ) import Text.Megaparsec.Stream () @@ -132,8 +125,8 @@ tokenStart (ETok{offsets = (Offsets _ s _ _)}) = s tokenSourcePos :: ETok -> SourcePos tokenSourcePos = oSourcePos . offsets -sourcePosAfter :: ETok -> SourcePos -sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) +-- sourcePosAfter :: ETok -> SourcePos +-- sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok @@ -157,22 +150,22 @@ eLex = aToken :: Lexer ETok aToken = do start <- getOffset - whiteSpace <- pTrivia + whitespace <- pTrivia wse <- getOffset spos <- getSourcePos (tok,cap) <- aLexeme tokenEnd <- getOffset - return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace tok cap + return $ makeToken (Offsets start wse (tokenEnd - start) spos) whitespace tok cap pEOF :: Lexer ETok pEOF = do start <- getOffset - whiteSpace <- pTrivia + whitespace <- pTrivia wse <- getOffset spos <- getSourcePos eof tokenEnd <- getOffset - return $ makeToken (Offsets start wse (tokenEnd - start) spos) whiteSpace L_EOF "" + return $ makeToken (Offsets start wse (tokenEnd - start) spos) whitespace L_EOF "" aLexeme :: Lexer (Lexeme,Text) @@ -282,7 +275,7 @@ instance Stream ETokenStream where takeN_ :: Int -> ETokenStream -> Maybe (Tokens ETokenStream, ETokenStream) takeN_ n xs | n <= 0 = Just ([], xs) takeN_ _ (ETokenStream _ []) = Nothing - takeN_ n (ETokenStream s xs) = Just (take n xs, buildStream $ drop n xs) + takeN_ n (ETokenStream _ xs) = Just (take n xs, buildStream $ drop n xs) takeWhile_ :: (Token ETokenStream -> Bool) -> ETokenStream -> (Tokens ETokenStream, ETokenStream) takeWhile_ p (ETokenStream _ xs) = (a, buildStream b) @@ -331,18 +324,6 @@ pxy :: Proxy ETokenStream pxy = Proxy --- lexemeFace :: Lexeme -> Doc --- lexemeFace L_Newline = "new line" --- lexemeFace L_Carriage = "\\r" --- lexemeFace L_Space = "space character" --- lexemeFace L_Tab = "tab character" --- lexemeFace (LIntLiteral i) = pretty i --- lexemeFace (LIdentifier i) = pretty (T.unpack i) --- lexemeFace l = --- case M.lookup l mapLexemeToText of --- Nothing -> pretty (show l) --- Just t -> pretty . T.unpack $ t - instance Show ETok where show (ETok _ _ _ q) = show q diff --git a/src/Conjure/Language/Name.hs b/src/Conjure/Language/Name.hs index 2691d1d98f..17781cd551 100644 --- a/src/Conjure/Language/Name.hs +++ b/src/Conjure/Language/Name.hs @@ -49,11 +49,10 @@ instance Pretty Name where pretty (NameMetaVar n) = "&" <> pretty n instance Semigroup Name where - (<>) = mappend + (<>) (Name a) (Name b) = Name (mappend a b) + (<>) (MachineName base n rest) (Name new) = MachineName base n (rest++[new]) + (<>) (Name a) (MachineName base n rest) = MachineName (mappend a base) n rest + (<>) a b = bug $ "mappend{Name}" <+> vcat [pretty (show a), pretty (show b)] instance Monoid Name where mempty = "" - mappend (Name a) (Name b) = Name (mappend a b) - mappend (MachineName base n rest) (Name new) = MachineName base n (rest++[new]) - mappend (Name a) (MachineName base n rest) = MachineName (mappend a base) n rest - mappend a b = bug $ "mappend{Name}" <+> vcat [pretty (show a), pretty (show b)] diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index f9342cdcf6..4dd99e75d6 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -29,7 +29,7 @@ import Text.Megaparsec (Parsec) -- text import qualified Data.Text as T import Conjure.Language.Lexer (ETokenStream, LexerError) -import Conjure.Language.Validator (Validator(..), (?=>)) +import Conjure.Language.Validator ((?=>)) import qualified Conjure.Language.Validator as V import qualified Conjure.Language.AST.ASTParser as P import qualified Conjure.Language.AST.Syntax as S diff --git a/src/Conjure/Language/Pretty.hs b/src/Conjure/Language/Pretty.hs index 524b5441e6..9f28b76fff 100644 --- a/src/Conjure/Language/Pretty.hs +++ b/src/Conjure/Language/Pretty.hs @@ -3,8 +3,7 @@ module Conjure.Language.Pretty ( module X , Pretty(..) - , (<++>), (<+>), (<>) - , (<+->) + , (<+->),(<++>) , prettyList, prettyListDoc , parensIf , render, renderNormal, renderWide @@ -44,7 +43,6 @@ import qualified Data.Vector as V -- vector -- import qualified Prettyprinter as Pr import qualified Text.PrettyPrint.Annotated.HughesPJ as Pr -import Text.PrettyPrint.HughesPJ (Style(..)) import Text.PrettyPrint.Annotated.HughesPJ hiding (Doc,render) diff --git a/src/Conjure/Language/TH.hs b/src/Conjure/Language/TH.hs index c0a925a842..517ea54225 100644 --- a/src/Conjure/Language/TH.hs +++ b/src/Conjure/Language/TH.hs @@ -16,7 +16,7 @@ import Conjure.Language.Lenses as X ( fixTHParsing ) -- reexporting because it i -- import qualified Text.Megaparsec as MP -- -- template-haskell -import Language.Haskell.TH ( Q, Loc(..), location, mkName, ExpQ, varE, appE, PatQ, varP, wildP ) +import Language.Haskell.TH (mkName, ExpQ, varE, appE, PatQ, varP, wildP ) import Language.Haskell.TH.Quote ( QuasiQuoter(..), dataToExpQ, dataToPatQ ) -- syb diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index adc08a630d..9a32886477 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -481,7 +481,7 @@ validateWhereStatement w@(WhereStatementNode l1 exprs) = wrapRegion w w SWhere $ return [ws] validateObjectiveStatement :: ObjectiveStatementNode -> ValidatorS [Statement] -validateObjectiveStatement o@(ObjectiveMin lt en) = wrapRegion o o (SGoal "Minimising") $do +validateObjectiveStatement o@(ObjectiveMin lt en) = wrapRegion o o (SGoal "Minimising") $ do lt `isA` TtKeyword exp <- validateExpression en return [Objective Minimising $ untype exp] @@ -663,7 +663,7 @@ validateDomainWithRepr dom = do validateDomain :: DomainNode -> ValidatorS TypedDomain validateDomain dm = case dm of - ParenDomainNode st dom rt -> do checkSymbols [rt] ; validateDomain dom + ParenDomainNode _ dom rt -> do checkSymbols [rt] ; validateDomain dom MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv BoolDomainNode lt -> (lt `isA` TtType >> (return . Typed TypeBool) DomainBool) RangedIntDomainNode l1 rs -> do @@ -997,7 +997,7 @@ validateAttributeNode vs (NamedAttributeNode t (Just e)) = do case M.lookup name vs of Nothing -> invalid $ t CustomError "Not a valid attribute in this context" Just False -> invalid $ t SemanticError "attribute %name% does not take an argument" - Just True -> return . pure $(\x -> (name,Just x)) expr + Just True -> return . pure $ (\x -> (name,Just x)) expr validateNamedDomainInVariant :: NamedDomainNode -> ValidatorS (Name, TypedDomain) @@ -1242,7 +1242,7 @@ validateOperatorExpression (PrefixOpNode lt expr) = do L_Minus -> tInt L_ExclamationMark -> TypeBool _ -> bug . pretty $ "Unknown prefix op " ++ show op - putDocs OperatorD (T.pack $"pre_"++show op) lt + putDocs OperatorD (T.pack $ "pre_"++show op) lt expr' <- validateExpression expr ?=> exactly refT return . Typed refT $ mkOp (PrefixOp op) [expr'] --lookup symbol @@ -1626,7 +1626,7 @@ projectionType r t = case t of TypeRelation ts -> return $ TypeTuple ts TypePartition ty -> return $ TypeSet ty TypeFunction fr to -> return $ TypeTuple [fr,to] - _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny + _ -> (raiseTypeError $ r SemanticError (pack $ "Expression of type " ++ (show $ pretty t) ++ " cannot be projected in a comprehension")) >> return TypeAny projectionTypeDomain :: DiagnosticRegion -> Type -> ValidatorS Type projectionTypeDomain _ t = case t of --TODO check and do properly TypeAny -> return TypeAny @@ -2460,8 +2460,8 @@ functionOps l = case l of imageArgs (r1,typeOf_->t1) r2 = do from <- case t1 of TypeAny -> return $ Just TypeAny - TypeFunction a _ -> return $Just a - TypeSequence _ -> return $Just tInt + TypeFunction a _ -> return $ Just a + TypeSequence _ -> return $ Just tInt _ -> Nothing <$ (raiseTypeError $ (r1 ComplexTypeError "Function or Sequence" t1)) case from of Just f -> unifyTypes f r2 >> return (pure ()) diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index c23139168b..bd2d693752 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -98,7 +98,7 @@ import Control.Monad.Trans.Maybe as X ( MaybeT(..), runMaybeT ) import Control.Monad.Writer.Strict as X ( MonadWriter(listen, tell), WriterT(runWriterT), execWriterT, runWriter ) import Control.Monad.Reader as X ( MonadReader(ask), ReaderT(..), runReaderT, asks ) -import Control.Monad.Fail + import Control.Arrow as X ( first, second, (***), (&&&) ) import Control.Category as X ( (<<<), (>>>) ) @@ -139,7 +139,7 @@ import Data.Foldable as X ( Foldable, mapM_, forM_, sequence_, fold, foldMap import Data.Traversable as X ( Traversable, mapM, forM, sequence ) import System.IO as X ( FilePath, IO, putStr, putStrLn, print, writeFile, appendFile, getLine ) -import System.IO.Error ( isDoesNotExistError, isUserError, ioeGetErrorType ) +import System.IO.Error ( isDoesNotExistError, ioeGetErrorType ) import Control.Exception as X ( catch, throwIO, SomeException ) import Data.Proxy as X ( Proxy(..) ) @@ -164,12 +164,6 @@ import qualified Data.Aeson.Types as JSON -- QuickCheck import Test.QuickCheck ( Gen ) --- megaparsec --- megaparsec -import Text.Megaparsec ( ParsecT, Parsec ) - --- pretty - -- uniplate import Data.Generics.Uniplate.Data as X @@ -222,7 +216,6 @@ import Data.Time.Clock ( getCurrentTime ) import System.TimeIt as X ( timeIt, timeItNamed ) import Debug.Trace as X ( trace, traceM ) -import Data.Void (Void) import GHC.IO.Exception (IOErrorType(InvalidArgument)) import Text.PrettyPrint.Annotated.HughesPJ ((<+>)) -- import Prettyprinter (PageWidth(AvailablePerLine)) @@ -230,7 +223,7 @@ import Text.PrettyPrint.Annotated.HughesPJ ((<+>)) -data EssenceDocAnnotation = EssenceDocAnnotation +type EssenceDocAnnotation = () type Doc = Pr.Doc EssenceDocAnnotation @@ -461,11 +454,11 @@ instance (Functor m) => Functor (ExceptT m) where fmap f = ExceptT . fmap (fmap f) . runExceptT instance (Functor m, Monad m) => Applicative (ExceptT m) where - pure = return + pure = ExceptT . return . Right (<*>) = ap instance (Monad m) => Monad (ExceptT m) where - return a = ExceptT $ return (Right a) + return = pure m >>= k = ExceptT $ do a <- runExceptT m case a of diff --git a/src/Conjure/Process/Boost.hs b/src/Conjure/Process/Boost.hs index 3e04090ade..c722e50ca7 100644 --- a/src/Conjure/Process/Boost.hs +++ b/src/Conjure/Process/Boost.hs @@ -38,7 +38,7 @@ import System.Directory ( removeFile ) import qualified Data.Text.Encoding as T ( encodeUtf8 ) -- uniplate zipper import Data.Generics.Uniplate.Zipper ( Zipper, zipper, down, fromZipper, hole, replaceHole, right, up ) -import Conjure.Prelude (MonadFailDoc) + type ExpressionZ = Zipper Expression Expression type FindVar = (Name, Domain () Expression) diff --git a/src/Conjure/Process/Enumerate.hs b/src/Conjure/Process/Enumerate.hs index 5fbf3411a6..dccff1042d 100644 --- a/src/Conjure/Process/Enumerate.hs +++ b/src/Conjure/Process/Enumerate.hs @@ -48,8 +48,8 @@ data EnumerateDomainNoIO a = Done a | TriedIO | Failed Doc instance Eq a => Eq (EnumerateDomainNoIO a) where (Done a) == (Done b) = a ==b - (TriedIO) == (TriedIO) = True - (Failed d) == (Failed e) = True + TriedIO == TriedIO = True + (Failed _) == (Failed _) = True _ == _ = False @@ -59,11 +59,10 @@ instance Functor EnumerateDomainNoIO where fmap f (Done x) = Done (f x) instance Applicative EnumerateDomainNoIO where - pure = return + pure = Done (<*>) = ap instance Monad EnumerateDomainNoIO where - return = Done Failed msg >>= _ = Failed msg TriedIO >>= _ = TriedIO Done x >>= f = f x diff --git a/src/Conjure/Representations/Internal.hs b/src/Conjure/Representations/Internal.hs index 6e6d2a24c4..a74b46d6b4 100644 --- a/src/Conjure/Representations/Internal.hs +++ b/src/Conjure/Representations/Internal.hs @@ -17,7 +17,7 @@ import Conjure.Prelude import Conjure.Language.Definition import Conjure.Language.Domain import Conjure.Language.Pretty - +import qualified Data.Kind as T (Type) type DomainX x = Domain HasRepresentation x type DomainC = Domain HasRepresentation Constant @@ -32,7 +32,7 @@ type DomainC = Domain HasRepresentation Constant -- It takes in a instance level domain for the high level object. -- * rCheck is for calculating all representation options. -- It take a function to be used as a "checker" for inner domains, if any. -data Representation (m :: * -> *) = Representation +data Representation (m :: T.Type -> T.Type) = Representation { rCheck :: TypeOf_ReprCheck m , rDownD :: TypeOf_DownD m , rStructural :: TypeOf_Structural m @@ -41,24 +41,24 @@ data Representation (m :: * -> *) = Representation , rSymmetryOrdering :: TypeOf_SymmetryOrdering m } -type TypeOf_ReprCheck (m :: * -> *) = +type TypeOf_ReprCheck (m :: T.Type -> T.Type) = forall x . (Data x, Pretty x, ExpressionLike x) => (Domain () x -> m [DomainX x]) -- other checkers for inner domains -> Domain () x -- this domain -> m [DomainX x] -- with all repr options -type TypeOf_DownD (m :: * -> *) = +type TypeOf_DownD (m :: T.Type -> T.Type) = (Name, DomainX Expression) -> m (Maybe [(Name, DomainX Expression)]) -type TypeOf_SymmetryOrdering (m :: * -> *) = +type TypeOf_SymmetryOrdering (m :: T.Type -> T.Type) = ((Expression -> m [Expression]) -> Expression -> DomainX Expression -> m Expression) -- inner S.O. -> (Expression -> m [Expression]) -- general downX1 -> Expression -- this as an expression -> DomainX Expression -- name and domain -> m Expression -- output, of type [int] -type TypeOf_Structural (m :: * -> *) = +type TypeOf_Structural (m :: T.Type -> T.Type) = (DomainX Expression -> m (Expression -> m [Expression])) -- other structural constraints for inner domains -> (Expression -> m [Expression]) -- general downX1 @@ -67,11 +67,11 @@ type TypeOf_Structural (m :: * -> *) = -> m [Expression] -- structural constraints ) -type TypeOf_DownC (m :: * -> *) = +type TypeOf_DownC (m :: T.Type -> T.Type) = (Name, DomainC, Constant) -- the input name, domain and constant -> m (Maybe [(Name, DomainC, Constant)]) -- the outputs names, domains, and constants -type TypeOf_Up (m :: * -> *) = +type TypeOf_Up (m :: T.Type -> T.Type) = [(Name, Constant)] -> -- all known constants, representing a solution at the low level (Name, DomainC) -> -- the name and domain we are working on m (Name, Constant) -- the output constant, at the high level diff --git a/src/Conjure/Rules/Import.hs b/src/Conjure/Rules/Import.hs index 636083a3ab..8898bbe045 100644 --- a/src/Conjure/Rules/Import.hs +++ b/src/Conjure/Rules/Import.hs @@ -11,7 +11,7 @@ import Conjure.Language as X import Conjure.Language.CategoryOf as X ( categoryOf, Category(..) ) import Conjure.Language.RepresentationOf as X ( representationOf, hasRepresentation, sameRepresentation ) -import Conjure.Language.TypeOf as X ( typeOf ) + import Conjure.Compute.DomainOf as X ( domainOf, indexDomainsOf ) import Conjure.Compute.DomainUnion as X ( domainUnion, domainUnions ) import Conjure.Language.DomainSizeOf as X ( domainSizeOf ) diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 2ee137bb41..2694824ccf 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -2,7 +2,7 @@ module Conjure.UI.ErrorDisplay where import Conjure.Prelude import Conjure.Language.Validator import Text.Megaparsec -import Data.Void (Void) + import qualified Data.Set as Set import Conjure.Language.AST.Syntax import Conjure.Language.AST.ASTParser @@ -10,7 +10,7 @@ import Conjure.Language.Lexer import Conjure.Language.Lexemes import qualified Data.Text import qualified Data.Text as T -import Data.Map.Strict (mapWithKey, assocs) +import Data.Map.Strict (assocs) import Conjure.Language.Pretty import Conjure.Language.AST.Reformer @@ -70,7 +70,7 @@ printSymbolTable :: SymbolTable -> IO () printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs tab) where printEntry :: (Text ,SymbolTableValue) -> IO () - printEntry (a,(r,c,t)) = putStrLn $ show a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" + printEntry (a,(_,c,t)) = putStrLn $ show a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" captureErrors :: [ValidatorDiagnostic] -> Parser () captureErrors = (mapM_ captureError) . collapseSkipped . removeAmbiguousTypeWarning diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 0f3f07e71d..6d5f9f9eee 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -4,6 +4,7 @@ module Conjure.UI.IO , readModelPreambleFromFile , readModelInfoFromFile , readParamJSON + , readASTFromFile , readParamOrSolutionFromFile , writeModel, writeModels , readModel @@ -36,7 +37,7 @@ import qualified Data.ByteString.Char8 as BS ( putStrLn ) import Conjure.Language.AST.Syntax (ProgramTree) import Conjure.Language.AST.ASTParser (parseProgram) import Conjure.Language.Validator (runValidator, validateModel, ValidatorState (typeChecking), initialState, isError) -import Text.Megaparsec (errorBundlePretty) + import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) readASTFromFile :: diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 221f84dd4e..6226db3d13 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -63,8 +63,8 @@ import Shelly ( runHandle, lastStderr, lastExitCode, errExit, Sh ) import qualified Data.Text as T ( unlines, isInfixOf ) -- parallel-io -import Control.Concurrent.ParallelIO.Global ( parallel, parallel_, stopGlobalPool ) -import Conjure.Language.Parser (prettyPrintWithChecks) +import Control.Concurrent.ParallelIO.Global ( parallel, stopGlobalPool ) + mainWithArgs :: forall m . @@ -236,7 +236,7 @@ mainWithArgs AutoIG{..} | removeAux = do | st <- mStatements model ] writeModel lineWidth outputFormat (Just outputFilepath) model {mStatements = catMaybes stmts'} -mainWithArgs AutoIG{..} = userErr1 "You must pass one of --generator-to-irace or --remove-aux to this command." +mainWithArgs AutoIG{} = userErr1 "You must pass one of --generator-to-irace or --remove-aux to this command." mainWithArgs Boost{..} = do model <- readModelFromFile essence runNameGen model $ do diff --git a/src/Conjure/UI/VarSymBreaking.hs b/src/Conjure/UI/VarSymBreaking.hs index 45628ee4b6..ef50dcb555 100644 --- a/src/Conjure/UI/VarSymBreaking.hs +++ b/src/Conjure/UI/VarSymBreaking.hs @@ -7,7 +7,7 @@ import Conjure.Language.Pretty import qualified Data.Aeson as JSON -- aeson import qualified Data.Aeson.KeyMap as KM -import qualified Data.HashMap.Strict as M -- unordered-containers + import qualified Data.Vector as V -- vector diff --git a/src/Conjure/UserError.hs b/src/Conjure/UserError.hs index 75039f1ad3..ec29d2d70b 100644 --- a/src/Conjure/UserError.hs +++ b/src/Conjure/UserError.hs @@ -78,11 +78,11 @@ instance (Functor m) => Functor (UserErrorT m) where fmap f = UserErrorT . fmap (fmap f) . runUserErrorT instance (MonadFailDoc m) => Applicative (UserErrorT m) where - pure = return + pure = UserErrorT . return .Right (<*>) = ap instance (MonadFailDoc m) => Monad (UserErrorT m) where - return a = UserErrorT $ return (Right a) + return = pure m >>= k = UserErrorT $ do a <- runUserErrorT m case a of From b1c132a5376f541ec5dcba47cfa381cd14586f2d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 1 Nov 2022 11:13:59 +0000 Subject: [PATCH 198/378] Adding lsp-library --- conjure-cp.cabal | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index c7cb82585f..1e56b1829f 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -253,6 +253,8 @@ Library , Conjure.UI.NormaliseQuantified , Conjure.UI.ErrorDisplay + , Conjure.LSP.LanguageServer + build-depends : base >= 4.12.0 -- the export list have changed , aeson >= 1.2.2.0 @@ -307,8 +309,26 @@ Library , primes >= 0.2.1.0 , parser-combinators , lsp - , lens - , template-haskell + + if impl(ghc == 7.8.*) + build-depends: template-haskell == 2.9.* + if impl(ghc == 7.10.*) + build-depends: template-haskell == 2.10.* + if impl(ghc == 8.0.*) + build-depends: template-haskell == 2.11.* + ghc-options: -Wno-redundant-constraints + if impl(ghc == 8.2.*) + build-depends: template-haskell == 2.12.* + if impl(ghc == 8.4.*) + build-depends: template-haskell == 2.13.* + if impl(ghc == 8.6.*) + build-depends: template-haskell == 2.14.* + if impl(ghc == 8.8.*) + build-depends: template-haskell == 2.15.* + if impl(ghc == 8.10.*) + build-depends: template-haskell == 2.16.* + if impl(ghc == 9.0.*) + build-depends: template-haskell == 2.17.* default-extensions: FlexibleContexts From 464137d862f30146cf1aed520afb8412bb30dd77 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 1 Nov 2022 12:47:23 +0000 Subject: [PATCH 199/378] Entry point added --- src/Conjure/LSP/LanguageServer.hs | 13 +++++++++++++ src/Conjure/UI/MainHelper.hs | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/Conjure/LSP/LanguageServer.hs diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs new file mode 100644 index 0000000000..bbc35cc6ad --- /dev/null +++ b/src/Conjure/LSP/LanguageServer.hs @@ -0,0 +1,13 @@ +module Conjure.LSP.LanguageServer where +import Language.LSP.Server +import Language.LSP.Types + +import Conjure.Prelude + +data LSPConfig = LSPConfig {} + + +startServer :: LSPConfig -> IO () +startServer cfg = do + putStrLn "LSP" + return () \ No newline at end of file diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 6226db3d13..bc68726d18 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -64,7 +64,8 @@ import qualified Data.Text as T ( unlines, isInfixOf ) -- parallel-io import Control.Concurrent.ParallelIO.Global ( parallel, stopGlobalPool ) - +import Conjure.LSP.LanguageServer (startServer, LSPConfig (LSPConfig)) +import Conjure.Language.Parser (prettyPrintWithChecks) mainWithArgs :: forall m . @@ -75,6 +76,7 @@ mainWithArgs :: forall m . NameGen m => (?typeCheckerMode :: TypeCheckerMode) => UI -> m () +mainWithArgs LSP{} = liftIO $ startServer LSPConfig mainWithArgs mode@Modelling{..} = do essenceM <- readModelFromFile essence doIfNotCached -- start the show! From 8e55b52ceb52480ff0aa15d3dd35e9ba2f9d9b88 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 4 Nov 2022 15:51:47 +0000 Subject: [PATCH 200/378] Somewhat working inital work, error highlighting --- conjure-cp.cabal | 52 ++++++++++++++++ src/Conjure/LSP/Capabilites.hs | 1 + src/Conjure/LSP/Handlers/File.hs | 54 ++++++++++++++++ src/Conjure/LSP/Handlers/Hover.hs | 14 +++++ src/Conjure/LSP/Handlers/Initialize.hs | 19 ++++++ src/Conjure/LSP/LanguageServer.hs | 54 ++++++++++++++-- src/Conjure/LSP/Util.hs | 68 +++++++++++++++++++++ src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs | 13 ++++ src/test-lsp/Conjure/LSP/Util.hs | 30 +++++++++ src/test-lsp/LSPTestsMain.hs | 1 + 10 files changed, 300 insertions(+), 6 deletions(-) create mode 100644 src/Conjure/LSP/Capabilites.hs create mode 100644 src/Conjure/LSP/Handlers/File.hs create mode 100644 src/Conjure/LSP/Handlers/Hover.hs create mode 100644 src/Conjure/LSP/Handlers/Initialize.hs create mode 100644 src/Conjure/LSP/Util.hs create mode 100644 src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs create mode 100644 src/test-lsp/Conjure/LSP/Util.hs create mode 100644 src/test-lsp/LSPTestsMain.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 1e56b1829f..1efad1a421 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -254,6 +254,10 @@ Library , Conjure.UI.ErrorDisplay , Conjure.LSP.LanguageServer + , Conjure.LSP.Handlers.File + , Conjure.LSP.Handlers.Initialize + , Conjure.LSP.Handlers.Hover + , Conjure.LSP.Util build-depends : base >= 4.12.0 -- the export list have changed @@ -309,6 +313,7 @@ Library , primes >= 0.2.1.0 , parser-combinators , lsp + , lens if impl(ghc == 7.8.*) build-depends: template-haskell == 2.9.* @@ -460,3 +465,50 @@ Test-Suite conjure-testing ghc-prof-options: -fprof-auto-top -fprof-auto-exported + +Test-Suite conjure-lsp-test + type : exitcode-stdio-1.0 + default-language : Haskell2010 + hs-source-dirs : src/test-lsp + main-is : LSPTestsMain.hs + other-modules : Conjure.LSP.Util + + build-depends : conjure-cp + , base + , unliftio + , hspec + , lsp + , lsp-test + default-extensions: + FlexibleContexts + FlexibleInstances + ImplicitParams + LambdaCase + MultiParamTypeClasses + MultiWayIf + DataKinds + NoImplicitPrelude + OverloadedStrings + ScopedTypeVariables + TypeOperators + ViewPatterns + ghc-options: + -fwarn-incomplete-patterns + -fwarn-incomplete-uni-patterns + -fwarn-missing-signatures + -fwarn-name-shadowing + -fwarn-orphans + -fwarn-overlapping-patterns + -fwarn-tabs + -fwarn-unused-do-bind + -fwarn-unused-matches + -Wall + -threaded + -rtsopts + -with-rtsopts=-N1 + -with-rtsopts=-K200M + -with-rtsopts=-M4G + ghc-prof-options: + -fprof-auto-top + -fprof-auto-exported + build-tool-depends: hspec-discover:hspec-discover == 2.* \ No newline at end of file diff --git a/src/Conjure/LSP/Capabilites.hs b/src/Conjure/LSP/Capabilites.hs new file mode 100644 index 0000000000..be14be42df --- /dev/null +++ b/src/Conjure/LSP/Capabilites.hs @@ -0,0 +1 @@ +module Conjure.LSP.Capabilites where diff --git a/src/Conjure/LSP/Handlers/File.hs b/src/Conjure/LSP/Handlers/File.hs new file mode 100644 index 0000000000..0376fa0d11 --- /dev/null +++ b/src/Conjure/LSP/Handlers/File.hs @@ -0,0 +1,54 @@ +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE PolyKinds #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE OverloadedStrings #-} +module Conjure.LSP.Handlers.File where +import Conjure.Prelude +import Language.LSP.Server (notificationHandler, Handlers, LspM, sendNotification, publishDiagnostics, getVirtualFile) +import Language.LSP.Types (SMethod (STextDocumentDidOpen, SWindowShowMessage, STextDocumentDidChange, STextDocumentDidClose), NotificationMessage (NotificationMessage), ShowMessageParams (ShowMessageParams), MessageType (MtInfo, MtError), DidOpenTextDocumentParams (DidOpenTextDocumentParams), DidChangeTextDocumentParams (DidChangeTextDocumentParams), DidCloseTextDocumentParams (DidCloseTextDocumentParams), toNormalizedUri, Uri) +import Data.Text (pack) +import Control.Lens +import Language.LSP.VFS +import Language.LSP.Types.Lens (HasTextDocument(textDocument), HasParams (..), HasUri (uri)) +import Conjure.LSP.Util (getErrorsForURI, getErrorsFromText, sendInfoMessage, sendErrorMessage) +import Language.LSP.Diagnostics (partitionBySource) + +fileHandlers :: Handlers (LspM ()) +fileHandlers = mconcat [fileOpenedHandler,fileChangedHandler,fileClosedHandler] + +fileOpenedHandler :: Handlers (LspM ()) +fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do + let NotificationMessage _ _ (DidOpenTextDocumentParams doc) = req + sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ pack ("Opened file "++ show doc++ "\n")) + pure () + + + +fileChangedHandler :: Handlers (LspM ()) +fileChangedHandler = notificationHandler STextDocumentDidChange $ \ req -> do + let NotificationMessage _ _ (DidChangeTextDocumentParams id chg) = req + sendInfoMessage $ pack ("Changed file "++ show chg ++ "\n") + let td = req^.params.textDocument + doDiagForDocument td + pure () + +fileClosedHandler :: Handlers (LspM ()) +fileClosedHandler = notificationHandler STextDocumentDidClose $ \ req -> do + let NotificationMessage _ _ (DidCloseTextDocumentParams id) = req + sendInfoMessage $ pack ("Closed file "++ show id ++ "\n") + pure () + + + +doDiagForDocument ::( HasUri a Uri,Show a) => a -> LspM () () +doDiagForDocument d = do + let td = d^.uri + let doc = toNormalizedUri td + mdoc <- getVirtualFile doc + case mdoc of + Just vf@(VirtualFile _ version _rope) -> do + errs <- getErrorsFromText $ virtualFileText vf + case errs of + Left msg -> sendErrorMessage msg + Right diags -> publishDiagnostics 10000 doc (Just $ fromIntegral version) $ partitionBySource $ diags + _ -> sendErrorMessage $ pack. show $ "No virtual file found for: " <> stringToDoc (show d) \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs new file mode 100644 index 0000000000..56e4c407b0 --- /dev/null +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -0,0 +1,14 @@ +module Conjure.LSP.Handlers.Hover where +import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification) +import Language.LSP.Types +import Control.Lens +import Conjure.Prelude +import Data.Text (pack) +hoverHandler :: Handlers (LspM ()) +hoverHandler = requestHandler STextDocumentHover $ \ req res -> do + let RequestMessage _ _ _ (HoverParams _doc pos _workDone) = req + Position _l _c' = pos + rsp = Hover ms (Just range) + ms = HoverContents $ markedUpContent "lsp-demo-simple-server" "Hello world" + range = Range pos pos + res (Right $ Just rsp) \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/Initialize.hs b/src/Conjure/LSP/Handlers/Initialize.hs new file mode 100644 index 0000000000..cf8df5d2e3 --- /dev/null +++ b/src/Conjure/LSP/Handlers/Initialize.hs @@ -0,0 +1,19 @@ +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE PolyKinds #-} +{-# LANGUAGE DataKinds #-} +module Conjure.LSP.Handlers.Initialize where +import Language.LSP.Types (SMethod(SInitialized, SWindowShowMessage, SInitialize), NotificationMessage (NotificationMessage), ShowMessageParams (ShowMessageParams), MessageType (MtInfo), InitializedParams (InitializedParams), RequestMessage (..), InitializeParams (InitializeParams), Method (Initialize)) +import Language.LSP.Server +import Conjure.Prelude + + +-- handleInitialize :: Handlers (LspM ()) +-- handleInitialize = requestHandler SInitialize $ \ req res -> do + + +handleInitialized :: Handlers (LspM ()) +handleInitialized = notificationHandler SInitialized $ \req -> do + let NotificationMessage _ _ (a) = req + sendNotification SWindowShowMessage (ShowMessageParams MtInfo "LSP Started 0.0.1\n") + + diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index bbc35cc6ad..d25567209d 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -1,13 +1,55 @@ +{-# LANGUAGE DataKinds #-} + module Conjure.LSP.LanguageServer where + import Language.LSP.Server -import Language.LSP.Types +import qualified Language.LSP.Types as J +import Conjure.LSP.Handlers.File (fileHandlers, fileOpenedHandler) +import Conjure.LSP.Handlers.Initialize (handleInitialized) import Conjure.Prelude +import Conjure.LSP.Handlers.Hover (hoverHandler) -data LSPConfig = LSPConfig {} - +data LSPConfig = LSPConfig {} startServer :: LSPConfig -> IO () -startServer cfg = do - putStrLn "LSP" - return () \ No newline at end of file +startServer cfg = do + _ <- runServer $ conjureLanguageServer + return () + + + +conjureLanguageServer :: ServerDefinition () +conjureLanguageServer = + ServerDefinition + { onConfigurationChange = const $ pure $ Right () + , doInitialize = \env _req -> pure $ Right env + , staticHandlers = handlers + , interpretHandler = \env -> Iso (runLspT env) liftIO + , options = lspOptions + , defaultConfig = def + } + +handlers :: Handlers (LspM ()) +handlers = + mconcat + [ fileHandlers + , handleInitialized + , hoverHandler + ] + + +syncOptions :: J.TextDocumentSyncOptions +syncOptions = J.TextDocumentSyncOptions + (Just True) + (Just J.TdSyncIncremental) + (Just False) + (Just False) + (Just $ J.InR $ J.SaveOptions $ Just False) + + +lspOptions :: Options +lspOptions = defaultOptions + { textDocumentSync = Just syncOptions + , executeCommandCommands = Just ["lsp-hello-command"] + } \ No newline at end of file diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs new file mode 100644 index 0000000000..87b2e4b24f --- /dev/null +++ b/src/Conjure/LSP/Util.hs @@ -0,0 +1,68 @@ +{-# LANGUAGE OverloadedStrings #-} +module Conjure.LSP.Util where + + +import Conjure.Language.Validator (ValidatorError (..)) +import Conjure.Language +import Conjure.Prelude +import Language.LSP.Server +import Language.LSP.Types +import Conjure.Language.Parser (PipelineError(..),runPipeline,parseModel) +import Language.LSP.VFS (virtualFileText) +import Conjure.Language.AST.Syntax (LToken (MissingToken, SkippedToken)) +import Conjure.Language.NewLexer (ETok (..)) +import Text.Megaparsec (SourcePos(..), unPos) +import Data.Text +import Conjure.Language.Expression.Op.Internal.Common (lexemeFace) +import Conjure.Language.Lexemes (lexemeText) + +getErrorsForURI :: NormalizedUri -> LspM () (Either Text [Diagnostic]) +getErrorsForURI uri = do + r <- getVirtualFile uri + let f = maybe "" virtualFileText r + getErrorsFromText f + +getErrorsFromText :: Text -> LspM () (Either Text [Diagnostic]) +getErrorsFromText t = do + let nots = case runPipeline parseModel t of + Left pe -> case pe of + ValidatorError ves -> Right $ mapMaybe valErrToDiagnostic ves + a -> Left . pack $ show a + Right mo -> Right [] + return nots + +valErrToDiagnostic :: ValidatorError -> Maybe Diagnostic +valErrToDiagnostic x = case x of + TypeError s -> Nothing + StateError s -> Nothing + SyntaxError s -> Nothing + RegionError s -> Nothing + TaggedTokenError s lt -> Nothing + TokenError lt -> tokenErrorToD lt + IllegalToken lt -> tokenErrorToD lt + NotImplemented s -> Nothing + + +tokenErrorToD :: LToken -> Maybe Diagnostic +tokenErrorToD (MissingToken t) =Just $ makeDiagnostic t $ append "Missing: " $ lexemeText $ lexeme t +tokenErrorToD (SkippedToken t) =Just $ makeDiagnostic t $ append "Unexpected" $ lexemeText $ lexeme t +tokenErrorToD _ = Nothing +makeDiagnostic :: ETok ->Text -> Diagnostic +makeDiagnostic (ETok {offsets=(_,_,l,SourcePos f (unPos -> r) (unPos -> c))}) msg = Diagnostic + (Range + (Position (fromIntegral r-1) (fromIntegral c-1)) + (Position (fromIntegral r-1) (fromIntegral ((c-1)+(max l 1)))) + ) + (Just DsError) + Nothing + Nothing + msg + Nothing + Nothing + +sendInfoMessage :: Text -> LspM () () +sendInfoMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ t) + +sendErrorMessage :: Text -> LspM () () +sendErrorMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtError $ t) + diff --git a/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs b/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs new file mode 100644 index 0000000000..80ded84b77 --- /dev/null +++ b/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs @@ -0,0 +1,13 @@ +module Conjure.LSP.Basic.BasicSpec where +import Conjure.Prelude +import Test.Hspec +import Conjure.LSP.Util (withDummyServer, doWithSession) +spec :: Spec +spec = around withDummyServer $ do + describe "Basic connection" $ do + it "connects" $ doWithSession $ do + return () + + + + diff --git a/src/test-lsp/Conjure/LSP/Util.hs b/src/test-lsp/Conjure/LSP/Util.hs new file mode 100644 index 0000000000..6cce50efd8 --- /dev/null +++ b/src/test-lsp/Conjure/LSP/Util.hs @@ -0,0 +1,30 @@ +module Conjure.LSP.Util where +import System.IO (Handle) + +import Language.LSP.Test +import Language.LSP.Server +import UnliftIO.Async +import Language.LSP.Types +import Conjure.Prelude +import Conjure.LSP.LanguageServer +import GHC.Conc (forkIO) +import Control.Concurrent (killThread) +import Control.Exception (bracket) +import UnliftIO.Process (createPipe) + +-- Adapted rom https://github.com/haskell/lsp/blob/master/lsp-test/test/DummyServer.hs +withDummyServer :: ((Handle, Handle) -> IO ()) -> IO () +withDummyServer f = do + (hinRead, hinWrite) <- createPipe + (houtRead, houtWrite) <- createPipe + bracket + (forkIO $ void $ runServerWithHandles mempty mempty hinRead houtWrite conjureLanguageServer) + killThread + (const $ f (hinWrite, houtRead)) + + + + + +doWithSession :: Session () -> (Handle,Handle) -> IO () +doWithSession session (hin,hout) = runSessionWithHandles hin hout def fullCaps "." session \ No newline at end of file diff --git a/src/test-lsp/LSPTestsMain.hs b/src/test-lsp/LSPTestsMain.hs new file mode 100644 index 0000000000..52ef578fca --- /dev/null +++ b/src/test-lsp/LSPTestsMain.hs @@ -0,0 +1 @@ +{-# OPTIONS_GHC -F -pgmF hspec-discover #-} \ No newline at end of file From f8af25c806edd83f0cfab0d3761b4a971ede5845 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 8 Nov 2022 16:15:21 +0000 Subject: [PATCH 201/378] Update to work with new error types --- src/Conjure/LSP/Util.hs | 61 ++++++++++++++++------------------ src/Conjure/UI/ErrorDisplay.hs | 1 + 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 87b2e4b24f..8ae3d2683b 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -2,19 +2,18 @@ module Conjure.LSP.Util where -import Conjure.Language.Validator (ValidatorError (..)) +import qualified Conjure.Language.Validator as V (ValidatorDiagnostic (..), DiagnosticRegion (..), Diagnostic (..)) import Conjure.Language import Conjure.Prelude import Language.LSP.Server -import Language.LSP.Types + import Conjure.Language.Parser (PipelineError(..),runPipeline,parseModel) import Language.LSP.VFS (virtualFileText) -import Conjure.Language.AST.Syntax (LToken (MissingToken, SkippedToken)) -import Conjure.Language.NewLexer (ETok (..)) import Text.Megaparsec (SourcePos(..), unPos) import Data.Text -import Conjure.Language.Expression.Op.Internal.Common (lexemeFace) -import Conjure.Language.Lexemes (lexemeText) +import Language.LSP.Types as L +import Conjure.Language.Validator (DiagnosticRegion(..)) +import Conjure.UI.ErrorDisplay (displayError) getErrorsForURI :: NormalizedUri -> LspM () (Either Text [Diagnostic]) getErrorsForURI uri = do @@ -31,34 +30,29 @@ getErrorsFromText t = do Right mo -> Right [] return nots -valErrToDiagnostic :: ValidatorError -> Maybe Diagnostic -valErrToDiagnostic x = case x of - TypeError s -> Nothing - StateError s -> Nothing - SyntaxError s -> Nothing - RegionError s -> Nothing - TaggedTokenError s lt -> Nothing - TokenError lt -> tokenErrorToD lt - IllegalToken lt -> tokenErrorToD lt - NotImplemented s -> Nothing +valErrToDiagnostic :: V.ValidatorDiagnostic -> Maybe Diagnostic +valErrToDiagnostic (V.ValidatorDiagnostic region message) = do + let range = getRangeFromRegion region + let (severity,msg) = getDiagnosticDetails message + Just $ Diagnostic range (Just severity) Nothing Nothing (append msg $ pack . show $ region) Nothing Nothing + + + +getRangeFromRegion :: DiagnosticRegion -> L.Range +getRangeFromRegion GlobalRegion = Range (Position 0 0) (Position 0 0) +getRangeFromRegion (DiagnosticRegion {drSourcePos=(SourcePos _ r c),drLength=l}) = + let row = unPos r + col = unPos c + in + Range (fixPosition row col) (fixPosition row (col+(max 1 l))) + +getDiagnosticDetails :: V.Diagnostic -> (DiagnosticSeverity,Text) +getDiagnosticDetails x = case x of + V.Error et -> (DsError,pack $displayError et) + V.Warning wt -> (DsWarning , pack $ show wt) + V.Info it -> (DsHint,pack $ show it) -tokenErrorToD :: LToken -> Maybe Diagnostic -tokenErrorToD (MissingToken t) =Just $ makeDiagnostic t $ append "Missing: " $ lexemeText $ lexeme t -tokenErrorToD (SkippedToken t) =Just $ makeDiagnostic t $ append "Unexpected" $ lexemeText $ lexeme t -tokenErrorToD _ = Nothing -makeDiagnostic :: ETok ->Text -> Diagnostic -makeDiagnostic (ETok {offsets=(_,_,l,SourcePos f (unPos -> r) (unPos -> c))}) msg = Diagnostic - (Range - (Position (fromIntegral r-1) (fromIntegral c-1)) - (Position (fromIntegral r-1) (fromIntegral ((c-1)+(max l 1)))) - ) - (Just DsError) - Nothing - Nothing - msg - Nothing - Nothing sendInfoMessage :: Text -> LspM () () sendInfoMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ t) @@ -66,3 +60,6 @@ sendInfoMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtInf sendErrorMessage :: Text -> LspM () () sendErrorMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtError $ t) +-- 0 index rows and cols as well as type coercion +fixPosition :: (Integral a) => a -> a -> Position +fixPosition r c = Position (fromIntegral r-1) (fromIntegral c-1) \ No newline at end of file diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 2694824ccf..c08c0dd232 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -24,6 +24,7 @@ data DiagnosticForPrint = DiagnosticForPrint { } deriving (Show,Eq,Ord) instance ShowErrorComponent DiagnosticForPrint where + errorComponentLen (DiagnosticForPrint {dLength=l}) = l showErrorComponent DiagnosticForPrint {dMessage=message}= case message of From 5fce579cb0e3e80fd70fe640237b87f9d6a93c3b Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 20 Nov 2022 18:21:27 +0000 Subject: [PATCH 202/378] Work implementing symbol info --- conjure-cp.cabal | 1 + src/Conjure/LSP/Handlers/DocumentSymbol.hs | 44 +++++++++++ src/Conjure/LSP/Handlers/File.hs | 6 +- src/Conjure/LSP/Handlers/Hover.hs | 15 ++-- src/Conjure/LSP/LanguageServer.hs | 2 + src/Conjure/LSP/Util.hs | 87 ++++++++++++++++++---- 6 files changed, 132 insertions(+), 23 deletions(-) create mode 100644 src/Conjure/LSP/Handlers/DocumentSymbol.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 1efad1a421..bc7470ff6f 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -257,6 +257,7 @@ Library , Conjure.LSP.Handlers.File , Conjure.LSP.Handlers.Initialize , Conjure.LSP.Handlers.Hover + , Conjure.LSP.Handlers.DocumentSymbol , Conjure.LSP.Util build-depends : base >= 4.12.0 diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs new file mode 100644 index 0000000000..d9d80ee991 --- /dev/null +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -0,0 +1,44 @@ +module Conjure.LSP.Handlers.DocumentSymbol where +import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification) +import Language.LSP.Types as T +import Control.Lens +import Conjure.Prelude +import Data.Text (pack) +import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), regionToRange) +import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo), DeclarationType (..)) +import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) +import Conjure.Language (Type(..)) +import Conjure.Language.Type (IntTag(..)) + +docSymbolHandler :: Handlers (LspM ()) +docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \ req res -> do + let ps = req^.params . textDocument + let u = (case ps of { (TextDocumentIdentifier uri) -> uri }) :: Uri + withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo->ri)) -> do + res $ Right $ InR . T.List $ map (regionInfoToDocumentSymbols u) ri + + + + + +regionInfoToDocumentSymbols ::Uri -> RegionInfo -> SymbolInformation +regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg, rType=t, rDeclaration=dec}) = SymbolInformation + (pack $ "Symbol ::" ++ show t) --Name + sk--Kind + (Just (T.List [])) + (Nothing) + (Location uri (regionToRange reg)) + (Nothing) + where + sk = case dec of + Definition -> SkVariable + LiteralDecl -> case t of + TypeBool -> SkBoolean + TypeInt it -> case it of + TagInt -> SkNumber + TagEnum txt -> SkEnumMember + TagUnnamed txt -> SkNumber + TypeEnum na -> SkEnum + TypeUnnamed na -> SkEnum + _ -> SkConstant + Ref dr -> SkVariable diff --git a/src/Conjure/LSP/Handlers/File.hs b/src/Conjure/LSP/Handlers/File.hs index 0376fa0d11..4d0c8d5c68 100644 --- a/src/Conjure/LSP/Handlers/File.hs +++ b/src/Conjure/LSP/Handlers/File.hs @@ -10,7 +10,7 @@ import Data.Text (pack) import Control.Lens import Language.LSP.VFS import Language.LSP.Types.Lens (HasTextDocument(textDocument), HasParams (..), HasUri (uri)) -import Conjure.LSP.Util (getErrorsForURI, getErrorsFromText, sendInfoMessage, sendErrorMessage) +import Conjure.LSP.Util (getErrorsForURI, getErrorsFromText, sendInfoMessage, sendErrorMessage, getDiagnostics) import Language.LSP.Diagnostics (partitionBySource) fileHandlers :: Handlers (LspM ()) @@ -20,6 +20,8 @@ fileOpenedHandler :: Handlers (LspM ()) fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do let NotificationMessage _ _ (DidOpenTextDocumentParams doc) = req sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ pack ("Opened file "++ show doc++ "\n")) + let td = req^.params.textDocument + doDiagForDocument td pure () @@ -50,5 +52,5 @@ doDiagForDocument d = do errs <- getErrorsFromText $ virtualFileText vf case errs of Left msg -> sendErrorMessage msg - Right diags -> publishDiagnostics 10000 doc (Just $ fromIntegral version) $ partitionBySource $ diags + Right file -> publishDiagnostics 10000 doc (Just $ fromIntegral version) $ partitionBySource $ getDiagnostics file _ -> sendErrorMessage $ pack. show $ "No virtual file found for: " <> stringToDoc (show d) \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 56e4c407b0..4b67505a59 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -4,11 +4,16 @@ import Language.LSP.Types import Control.Lens import Conjure.Prelude import Data.Text (pack) +import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile)) + hoverHandler :: Handlers (LspM ()) hoverHandler = requestHandler STextDocumentHover $ \ req res -> do + let RequestMessage _ _ _ (HoverParams _doc pos _workDone) = req - Position _l _c' = pos - rsp = Hover ms (Just range) - ms = HoverContents $ markedUpContent "lsp-demo-simple-server" "Hello world" - range = Range pos pos - res (Right $ Just rsp) \ No newline at end of file + let Position _l _c' = pos + withProcessedDoc _doc $ \(ProcessedFile _ _ st) -> do + let ranges = getRelevantRegions st pos + let ms = HoverContents $ MarkupContent MkPlainText $ pack $ (show (Conjure.Prelude.length ranges)) ++": " ++ (show ranges) + let range = Range pos pos + let rsp = Hover ms (Just range) + res (Right $ Just rsp) \ No newline at end of file diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index d25567209d..af70c6a47e 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -9,6 +9,7 @@ import Conjure.LSP.Handlers.File (fileHandlers, fileOpenedHandler) import Conjure.LSP.Handlers.Initialize (handleInitialized) import Conjure.Prelude import Conjure.LSP.Handlers.Hover (hoverHandler) +import Conjure.LSP.Handlers.DocumentSymbol (docSymbolHandler) data LSPConfig = LSPConfig {} @@ -36,6 +37,7 @@ handlers = [ fileHandlers , handleInitialized , hoverHandler + , docSymbolHandler ] diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 8ae3d2683b..1a6f5d6b82 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -2,33 +2,48 @@ module Conjure.LSP.Util where -import qualified Conjure.Language.Validator as V (ValidatorDiagnostic (..), DiagnosticRegion (..), Diagnostic (..)) +import qualified Conjure.Language.Validator as V (ValidatorDiagnostic (..), DiagnosticRegion (..), Diagnostic (..)) import Conjure.Language import Conjure.Prelude import Language.LSP.Server -import Conjure.Language.Parser (PipelineError(..),runPipeline,parseModel) -import Language.LSP.VFS (virtualFileText) +import Conjure.Language.Parser (PipelineError(..),runPipeline,parseModel, lexAndParse) +import Language.LSP.VFS (virtualFileText, VirtualFile (VirtualFile)) import Text.Megaparsec (SourcePos(..), unPos) -import Data.Text +import Data.Text hiding (filter) import Language.LSP.Types as L -import Conjure.Language.Validator (DiagnosticRegion(..)) +import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, validateProgramTree, validateModel, validateModelS, ValidatorDiagnostic, RegionInfo (..)) import Conjure.UI.ErrorDisplay (displayError) +import Conjure.Language.AST.ASTParser (parseProgram) +import Language.LSP.Types.Lens (HasUri (uri)) +import Language.LSP.Diagnostics (partitionBySource) +import Control.Lens ((^.)) -getErrorsForURI :: NormalizedUri -> LspM () (Either Text [Diagnostic]) +data ProcessedFile = ProcessedFile { + model::Maybe Model, + diagnostics::[ValidatorDiagnostic], + state:: ValidatorState +} + +processFile :: Text -> Either PipelineError ProcessedFile +processFile t = do + parsed <- lexAndParse parseProgram t + let (m,d,s) = runValidator (validateModelS parsed) def + return $ ProcessedFile m d s + + +getErrorsForURI :: NormalizedUri -> LspM () (Either Text ProcessedFile) getErrorsForURI uri = do r <- getVirtualFile uri let f = maybe "" virtualFileText r getErrorsFromText f -getErrorsFromText :: Text -> LspM () (Either Text [Diagnostic]) +getErrorsFromText :: Text -> LspM () (Either Text ProcessedFile) getErrorsFromText t = do - let nots = case runPipeline parseModel t of - Left pe -> case pe of - ValidatorError ves -> Right $ mapMaybe valErrToDiagnostic ves - a -> Left . pack $ show a - Right mo -> Right [] - return nots + return $ either (Left . pack.show) Right $ processFile t + +getDiagnostics :: ProcessedFile -> [Diagnostic] +getDiagnostics (ProcessedFile _ ds _) = mapMaybe valErrToDiagnostic ds valErrToDiagnostic :: V.ValidatorDiagnostic -> Maybe Diagnostic valErrToDiagnostic (V.ValidatorDiagnostic region message) = do @@ -40,10 +55,10 @@ valErrToDiagnostic (V.ValidatorDiagnostic region message) = do getRangeFromRegion :: DiagnosticRegion -> L.Range getRangeFromRegion GlobalRegion = Range (Position 0 0) (Position 0 0) -getRangeFromRegion (DiagnosticRegion {drSourcePos=(SourcePos _ r c),drLength=l}) = +getRangeFromRegion (DiagnosticRegion {drSourcePos=(SourcePos _ r c),drLength=l}) = let row = unPos r col = unPos c - in + in Range (fixPosition row col) (fixPosition row (col+(max 1 l))) getDiagnosticDetails :: V.Diagnostic -> (DiagnosticSeverity,Text) @@ -62,4 +77,44 @@ sendErrorMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtEr -- 0 index rows and cols as well as type coercion fixPosition :: (Integral a) => a -> a -> Position -fixPosition r c = Position (fromIntegral r-1) (fromIntegral c-1) \ No newline at end of file +fixPosition r c = Position (fromIntegral r-1) (fromIntegral c-1) + +getProcessedDoc ::( HasUri a Uri,Show a) => a -> LspM () (Maybe ProcessedFile) +getProcessedDoc d = do + let td = d^.uri + let doc = toNormalizedUri td + mdoc <- getVirtualFile doc + case mdoc of + Just vf@(VirtualFile _ version _rope) -> do + case processFile $ virtualFileText vf of + Left msg -> sendErrorMessage (pack $ show msg) >> return Nothing + Right file -> return . pure $ file + _ -> return Nothing <* (sendErrorMessage $ pack. show $ "No virtual file found for: " <> stringToDoc (show d)) + +withProcessedDoc :: ( HasUri a Uri,Show a) => a -> (ProcessedFile -> LspM () n) -> LspM () () +withProcessedDoc d f = do + a <- getProcessedDoc d + case a of + Nothing -> return () + Just pf -> void $ f pf + + +getRelevantRegions :: ValidatorState -> Position -> [RegionInfo] +getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (drLength . rRegion) $ filter p info + where + p::RegionInfo -> Bool + p (RegionInfo {rRegion=reg}) = case reg of + DiagnosticRegion sp sp' _ _ -> (sourcePosToPosition sp) <= pos + && + (sourcePosToPosition sp') >= pos + GlobalRegion -> True + + +sourcePosToPosition :: SourcePos -> Position +sourcePosToPosition (SourcePos _ r c) = Position + (fromInteger $ -1 + (toInteger $ unPos r)) + (fromInteger $ -1 + (toInteger $ unPos c)) + +regionToRange :: DiagnosticRegion -> L.Range +regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (sourcePosToPosition ep) +regionToRange GlobalRegion = error "Global region in symbol info" \ No newline at end of file From 9be923d7c14c3ef3685d2102c9023050bb8e97bd Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 29 Nov 2022 14:56:53 +0000 Subject: [PATCH 203/378] Better hovers and symbols --- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 13 ++++++------ src/Conjure/LSP/Handlers/Hover.hs | 23 ++++++++++++++++------ src/Conjure/LSP/Util.hs | 15 +++++++++++--- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index d9d80ee991..a65dff6d12 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -3,12 +3,13 @@ import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification) import Language.LSP.Types as T import Control.Lens import Conjure.Prelude -import Data.Text (pack) +import Data.Text (pack,unpack) import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), regionToRange) import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo), DeclarationType (..)) import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) import Conjure.Language (Type(..)) import Conjure.Language.Type (IntTag(..)) +import Conjure.Language.Pretty (Pretty(..)) docSymbolHandler :: Handlers (LspM ()) docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \ req res -> do @@ -22,13 +23,13 @@ docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \ req res -> do regionInfoToDocumentSymbols ::Uri -> RegionInfo -> SymbolInformation -regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg, rType=t, rDeclaration=dec}) = SymbolInformation - (pack $ "Symbol ::" ++ show t) --Name +regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg,rText=n, rType=t, rDeclaration=dec}) = SymbolInformation + (pack $ (unpack n) ++":" ++ show (pretty t)) --Name sk--Kind (Just (T.List [])) - (Nothing) + Nothing (Location uri (regionToRange reg)) - (Nothing) + Nothing where sk = case dec of Definition -> SkVariable @@ -41,4 +42,4 @@ regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg, rType=t, rDeclaration= TypeEnum na -> SkEnum TypeUnnamed na -> SkEnum _ -> SkConstant - Ref dr -> SkVariable + Ref _ -> SkVariable diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 4b67505a59..6e944cf02f 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -1,19 +1,30 @@ module Conjure.LSP.Handlers.Hover where import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification) -import Language.LSP.Types +import Language.LSP.Types import Control.Lens import Conjure.Prelude -import Data.Text (pack) -import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile)) +import Data.Text as T (pack, concat, unpack) +import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), sourcePosToPosition, snippet) +import Conjure.Language.Validator (RegionInfo (..), DeclarationType (..), DiagnosticRegion (DiagnosticRegion, drSourcePos)) +import Conjure.Language (Pretty(pretty)) +import Text.PrettyPrint (text) hoverHandler :: Handlers (LspM ()) hoverHandler = requestHandler STextDocumentHover $ \ req res -> do - let RequestMessage _ _ _ (HoverParams _doc pos _workDone) = req let Position _l _c' = pos withProcessedDoc _doc $ \(ProcessedFile _ _ st) -> do let ranges = getRelevantRegions st pos - let ms = HoverContents $ MarkupContent MkPlainText $ pack $ (show (Conjure.Prelude.length ranges)) ++": " ++ (show ranges) + let texts = map prettySymbol ranges + let ms = HoverContents $ MarkupContent MkMarkdown $ T.concat (catMaybes texts) let range = Range pos pos let rsp = Hover ms (Just range) - res (Right $ Just rsp) \ No newline at end of file + res (Right $ Just rsp) + + +prettySymbol :: RegionInfo -> Maybe Text +prettySymbol (RegionInfo dr ty nm dt) = case dt of + Definition -> Just . snippet . pack.show $ hcat [text.unpack $ nm ," : ",pretty ty] + LiteralDecl -> Nothing + Ref DiagnosticRegion{drSourcePos=sp} -> Just .snippet . pack.show $ hcat [text.unpack $ nm," : ",pretty ty] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] + Ref _ -> Nothing diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 1a6f5d6b82..543335108d 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -18,6 +18,8 @@ import Conjure.Language.AST.ASTParser (parseProgram) import Language.LSP.Types.Lens (HasUri (uri)) import Language.LSP.Diagnostics (partitionBySource) import Control.Lens ((^.)) +import Text.PrettyPrint (text) +import qualified Data.Text as T data ProcessedFile = ProcessedFile { model::Maybe Model, @@ -112,9 +114,16 @@ getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (drLength . r sourcePosToPosition :: SourcePos -> Position sourcePosToPosition (SourcePos _ r c) = Position - (fromInteger $ -1 + (toInteger $ unPos r)) - (fromInteger $ -1 + (toInteger $ unPos c)) + (fromInteger $ -1 + toInteger (unPos r)) + (fromInteger $ -1 + toInteger (unPos c)) regionToRange :: DiagnosticRegion -> L.Range regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (sourcePosToPosition ep) -regionToRange GlobalRegion = error "Global region in symbol info" \ No newline at end of file +regionToRange GlobalRegion = error "Global region in symbol info" + +snippet :: Text -> Text +snippet t = T.concat ["```essence\n",t,"\n```"] + +instance Pretty Position where + pretty (Position (text.show->r) (text.show->c)) = r <> ":" <> c + From 256244f7c62a7561966da3e7789cfa5a7d00e067 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 30 Nov 2022 16:12:07 +0000 Subject: [PATCH 204/378] Semantic tokens support --- conjure-cp.cabal | 1 + src/Conjure/LSP/Handlers/SemanticTokens.hs | 68 ++++++++++++++++++++++ src/Conjure/LSP/LanguageServer.hs | 2 + 3 files changed, 71 insertions(+) create mode 100644 src/Conjure/LSP/Handlers/SemanticTokens.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index bc7470ff6f..139be6830e 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -258,6 +258,7 @@ Library , Conjure.LSP.Handlers.Initialize , Conjure.LSP.Handlers.Hover , Conjure.LSP.Handlers.DocumentSymbol + , Conjure.LSP.Handlers.SemanticTokens , Conjure.LSP.Util build-depends : base >= 4.12.0 diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs new file mode 100644 index 0000000000..bc02f1c7cb --- /dev/null +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -0,0 +1,68 @@ +module Conjure.LSP.Handlers.SemanticTokens where +import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification, MonadLsp (getLspEnv)) +import qualified Language.LSP.Types as T +import Control.Lens +import Conjure.Prelude +import Data.Text (pack,unpack,append) +import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), regionToRange, sourcePosToPosition, sendInfoMessage, sendErrorMessage) +import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo, symbolCategories), DeclarationType (..), TaggedToken (TaggedToken), TagType (..)) +import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) +import Conjure.Language (Type(..)) +import Conjure.Language.Type (IntTag(..)) +import Conjure.Language.Pretty (Pretty(..)) +import Conjure.Language.NewLexer (ETok(..), Offsets (..), trueLength) +import Language.LSP.Types (SemanticTokenTypes(..)) +import qualified Data.Map as M + +semanticTokensHandler :: Handlers (LspM ()) +semanticTokensHandler = semanticTokensHandlerFull + + +semanticTokensHandlerFull :: Handlers (LspM ()) +semanticTokensHandlerFull = requestHandler T.STextDocumentSemanticTokensFull $ \ req res -> do + let ps = req^.params . textDocument + let u = (case ps of { (T.TextDocumentIdentifier uri) -> uri }) :: T.Uri + withProcessedDoc ps $ \(ProcessedFile _ _ (symbolCategories->ts)) -> do + let toks = mapMaybe createSemanticToken (sortOn (\(TaggedToken _ (oTrueStart . offsets->e)) -> e) $ M.elems ts) + sendInfoMessage . pack $ "Got semantic tokens req : " ++ show (toks) + let sToks = T.makeSemanticTokens def toks + r <-case sToks of + Left txt -> sendErrorMessage txt >> return (Right Nothing) + Right st -> return . Right . pure $ st + res r + + +createSemanticToken :: TaggedToken -> Maybe T.SemanticTokenAbsolute +createSemanticToken (TaggedToken tt tok) = T.SemanticTokenAbsolute + (ln) + (col) + len + <$> + symbolType tt + <*> + pure [] + where + T.Position ln col = sourcePosToPosition (oSourcePos . offsets $ tok) + len = fromInteger . toInteger . trueLength $ tok + symbolType :: TagType -> Maybe T.SemanticTokenTypes + symbolType s = case s of + TtType -> Just SttType + TtClass -> Just SttClass + TtEnum -> Just SttEnum + TtStruct -> Just SttStruct + TtParameter -> Just SttParameter + TtVariable -> Just SttVariable + TtProperty -> Just SttProperty + TtEnumMember -> Just SttEnumMember + TtEvent -> Just SttEvent + TtFunction -> Just SttFunction + TtMethod -> Just SttMethod + TtMacro -> Just SttMacro + TtKeyword -> Just SttKeyword + TtModifier -> Just SttModifier + TtComment -> Just SttComment + TtString -> Just SttString + TtNumber -> Just SttNumber + TtRegexp -> Just SttRegexp + TtOperator -> Just SttOperator + TtOther _ -> Nothing diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index af70c6a47e..28687cc6a2 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -10,6 +10,7 @@ import Conjure.LSP.Handlers.Initialize (handleInitialized) import Conjure.Prelude import Conjure.LSP.Handlers.Hover (hoverHandler) import Conjure.LSP.Handlers.DocumentSymbol (docSymbolHandler) +import Conjure.LSP.Handlers.SemanticTokens (semanticTokensHandler) data LSPConfig = LSPConfig {} @@ -38,6 +39,7 @@ handlers = , handleInitialized , hoverHandler , docSymbolHandler + , semanticTokensHandler ] From b0313676426cffe08cc64213f2ffcac9fee91351 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 30 Nov 2022 17:40:12 +0000 Subject: [PATCH 205/378] Update --- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 44 ++++++++++++++-------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index a65dff6d12..63d9907214 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -5,7 +5,7 @@ import Control.Lens import Conjure.Prelude import Data.Text (pack,unpack) import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), regionToRange) -import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo), DeclarationType (..)) +import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo), DeclarationType (..), Kind (..), Class (..)) import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) import Conjure.Language (Type(..)) import Conjure.Language.Type (IntTag(..)) @@ -16,30 +16,44 @@ docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \ req res -> do let ps = req^.params . textDocument let u = (case ps of { (TextDocumentIdentifier uri) -> uri }) :: Uri withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo->ri)) -> do - res $ Right $ InR . T.List $ map (regionInfoToDocumentSymbols u) ri + res $ Right $ InR . T.List $ mapMaybe (regionInfoToDocumentSymbols u) ri -regionInfoToDocumentSymbols ::Uri -> RegionInfo -> SymbolInformation +regionInfoToDocumentSymbols ::Uri -> RegionInfo -> Maybe SymbolInformation regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg,rText=n, rType=t, rDeclaration=dec}) = SymbolInformation (pack $ (unpack n) ++":" ++ show (pretty t)) --Name + <$> sk--Kind + <*> pure (Just (T.List [])) + <*> pure Nothing - (Location uri (regionToRange reg)) + <*> pure + (Location uri (regionToRange reg)) + <*> pure Nothing where sk = case dec of - Definition -> SkVariable - LiteralDecl -> case t of - TypeBool -> SkBoolean - TypeInt it -> case it of - TagInt -> SkNumber - TagEnum txt -> SkEnumMember - TagUnnamed txt -> SkNumber - TypeEnum na -> SkEnum - TypeUnnamed na -> SkEnum - _ -> SkConstant - Ref _ -> SkVariable + Definition -> Just $ case t of + Kind ValueType _ -> SkVariable + Kind DomainType _ -> SkClass + Kind MemberType _ -> SkEnumMember --DO better + LiteralDecl -> do + case t of + Kind _ ty -> return $ case ty of + TypeBool -> SkBoolean + TypeInt it -> case it of + TagInt -> SkNumber + TagEnum txt -> SkEnumMember + TagUnnamed txt -> SkNumber + TypeEnum na -> SkEnum + TypeUnnamed na -> SkEnum + _ -> SkConstant + + Ref _ -> Just $ case t of + Kind ValueType _ -> SkVariable + Kind DomainType _ -> SkClass + Kind MemberType _ -> SkEnumMember --DO better From 74dd263568452a730632fd318df77c0ab5dd76b4 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 3 Dec 2022 13:13:36 +0000 Subject: [PATCH 206/378] Fixes and removing unimplemented tests --- conjure-cp.cabal | 92 ++++++++++----------- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 2 - src/Conjure/LSP/Handlers/SemanticTokens.hs | 26 +++--- src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs | 10 +-- src/test-lsp/Conjure/LSP/Util.hs | 22 ++--- src/test-lsp/LSPTestsMain.hs | 2 +- 6 files changed, 76 insertions(+), 78 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 139be6830e..f233af53b6 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -468,49 +468,49 @@ Test-Suite conjure-testing -fprof-auto-top -fprof-auto-exported -Test-Suite conjure-lsp-test - type : exitcode-stdio-1.0 - default-language : Haskell2010 - hs-source-dirs : src/test-lsp - main-is : LSPTestsMain.hs - other-modules : Conjure.LSP.Util - - build-depends : conjure-cp - , base - , unliftio - , hspec - , lsp - , lsp-test - default-extensions: - FlexibleContexts - FlexibleInstances - ImplicitParams - LambdaCase - MultiParamTypeClasses - MultiWayIf - DataKinds - NoImplicitPrelude - OverloadedStrings - ScopedTypeVariables - TypeOperators - ViewPatterns - ghc-options: - -fwarn-incomplete-patterns - -fwarn-incomplete-uni-patterns - -fwarn-missing-signatures - -fwarn-name-shadowing - -fwarn-orphans - -fwarn-overlapping-patterns - -fwarn-tabs - -fwarn-unused-do-bind - -fwarn-unused-matches - -Wall - -threaded - -rtsopts - -with-rtsopts=-N1 - -with-rtsopts=-K200M - -with-rtsopts=-M4G - ghc-prof-options: - -fprof-auto-top - -fprof-auto-exported - build-tool-depends: hspec-discover:hspec-discover == 2.* \ No newline at end of file +-- Test-Suite conjure-lsp-test +-- type : exitcode-stdio-1.0 +-- default-language : Haskell2010 +-- hs-source-dirs : src/test-lsp +-- main-is : LSPTestsMain.hs +-- other-modules : Conjure.LSP.Util + +-- build-depends : conjure-cp +-- , base +-- , unliftio +-- , hspec +-- , lsp +-- , lsp-test +-- default-extensions: +-- FlexibleContexts +-- FlexibleInstances +-- ImplicitParams +-- LambdaCase +-- MultiParamTypeClasses +-- MultiWayIf +-- DataKinds +-- NoImplicitPrelude +-- OverloadedStrings +-- ScopedTypeVariables +-- TypeOperators +-- ViewPatterns +-- ghc-options: +-- -fwarn-incomplete-patterns +-- -fwarn-incomplete-uni-patterns +-- -fwarn-missing-signatures +-- -fwarn-name-shadowing +-- -fwarn-orphans +-- -fwarn-overlapping-patterns +-- -fwarn-tabs +-- -fwarn-unused-do-bind +-- -fwarn-unused-matches +-- -Wall +-- -threaded +-- -rtsopts +-- -with-rtsopts=-N1 +-- -with-rtsopts=-K200M +-- -with-rtsopts=-M4G +-- ghc-prof-options: +-- -fprof-auto-top +-- -fprof-auto-exported +-- build-tool-depends: hspec-discover:hspec-discover == 2.* \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index 63d9907214..8c06a61431 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -40,7 +40,6 @@ regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg,rText=n, rType=t, rDecl Definition -> Just $ case t of Kind ValueType _ -> SkVariable Kind DomainType _ -> SkClass - Kind MemberType _ -> SkEnumMember --DO better LiteralDecl -> do case t of Kind _ ty -> return $ case ty of @@ -56,4 +55,3 @@ regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg,rText=n, rType=t, rDecl Ref _ -> Just $ case t of Kind ValueType _ -> SkVariable Kind DomainType _ -> SkClass - Kind MemberType _ -> SkEnumMember --DO better diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs index bc02f1c7cb..c436af837b 100644 --- a/src/Conjure/LSP/Handlers/SemanticTokens.hs +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -47,22 +47,22 @@ createSemanticToken (TaggedToken tt tok) = T.SemanticTokenAbsolute symbolType :: TagType -> Maybe T.SemanticTokenTypes symbolType s = case s of TtType -> Just SttType - TtClass -> Just SttClass + TtNumber -> Just SttNumber + TtBool -> Just SttRegexp + TtDomain -> Just SttClass TtEnum -> Just SttEnum - TtStruct -> Just SttStruct - TtParameter -> Just SttParameter - TtVariable -> Just SttVariable - TtProperty -> Just SttProperty TtEnumMember -> Just SttEnumMember - TtEvent -> Just SttEvent + TtRecord -> Just SttStruct + TtRecordMember -> Just SttProperty + TtUserFunction -> Just SttMethod TtFunction -> Just SttFunction - TtMethod -> Just SttMethod - TtMacro -> Just SttMacro + TtAttribute -> Just SttEvent + TtAAC -> Just SttInterface + TtVariable -> Just SttVariable TtKeyword -> Just SttKeyword - TtModifier -> Just SttModifier - TtComment -> Just SttComment - TtString -> Just SttString - TtNumber -> Just SttNumber - TtRegexp -> Just SttRegexp + TtQuantifier -> Just SttMacro + TtSubKeyword -> Just SttModifier TtOperator -> Just SttOperator + TtLocal -> Just SttParameter TtOther _ -> Nothing + diff --git a/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs b/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs index 80ded84b77..8cec42a813 100644 --- a/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs +++ b/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs @@ -2,11 +2,11 @@ module Conjure.LSP.Basic.BasicSpec where import Conjure.Prelude import Test.Hspec import Conjure.LSP.Util (withDummyServer, doWithSession) -spec :: Spec -spec = around withDummyServer $ do - describe "Basic connection" $ do - it "connects" $ doWithSession $ do - return () +-- spec :: Spec +-- spec = around withDummyServer $ do +-- describe "Basic connection" $ do +-- it "connects" $ doWithSession $ do +-- return () diff --git a/src/test-lsp/Conjure/LSP/Util.hs b/src/test-lsp/Conjure/LSP/Util.hs index 6cce50efd8..3f0c4c758d 100644 --- a/src/test-lsp/Conjure/LSP/Util.hs +++ b/src/test-lsp/Conjure/LSP/Util.hs @@ -12,19 +12,19 @@ import Control.Concurrent (killThread) import Control.Exception (bracket) import UnliftIO.Process (createPipe) --- Adapted rom https://github.com/haskell/lsp/blob/master/lsp-test/test/DummyServer.hs -withDummyServer :: ((Handle, Handle) -> IO ()) -> IO () -withDummyServer f = do - (hinRead, hinWrite) <- createPipe - (houtRead, houtWrite) <- createPipe - bracket - (forkIO $ void $ runServerWithHandles mempty mempty hinRead houtWrite conjureLanguageServer) - killThread - (const $ f (hinWrite, houtRead)) +-- -- Adapted rom https://github.com/haskell/lsp/blob/master/lsp-test/test/DummyServer.hs +-- withDummyServer :: ((Handle, Handle) -> IO ()) -> IO () +-- withDummyServer f = do +-- (hinRead, hinWrite) <- createPipe +-- (houtRead, houtWrite) <- createPipe +-- bracket +-- (forkIO $ void $ runServerWithHandles mempty mempty hinRead houtWrite conjureLanguageServer) +-- killThread +-- (const $ f (hinWrite, houtRead)) -doWithSession :: Session () -> (Handle,Handle) -> IO () -doWithSession session (hin,hout) = runSessionWithHandles hin hout def fullCaps "." session \ No newline at end of file +-- doWithSession :: Session () -> (Handle,Handle) -> IO () +-- doWithSession session (hin,hout) = runSessionWithHandles hin hout def fullCaps "." session \ No newline at end of file diff --git a/src/test-lsp/LSPTestsMain.hs b/src/test-lsp/LSPTestsMain.hs index 52ef578fca..91fb208e86 100644 --- a/src/test-lsp/LSPTestsMain.hs +++ b/src/test-lsp/LSPTestsMain.hs @@ -1 +1 @@ -{-# OPTIONS_GHC -F -pgmF hspec-discover #-} \ No newline at end of file +-- {-# OPTIONS_GHC -F -pgmF hspec-discover #-} \ No newline at end of file From 95bf198857a3080e0a0d2cb39f8bf2b3cdeba868 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 3 Dec 2022 17:31:09 +0000 Subject: [PATCH 207/378] Better hovers and docs support --- conjure-cp.cabal | 4 +- data/docs/op/L_in.md | 5 ++ src/Conjure/LSP/Documentation.hs | 41 ++++++++++ src/Conjure/LSP/Handlers/DocumentSymbol.hs | 95 ++++++++++------------ src/Conjure/LSP/Handlers/Hover.hs | 19 +++-- src/Conjure/LSP/Util.hs | 5 +- 6 files changed, 107 insertions(+), 62 deletions(-) create mode 100644 data/docs/op/L_in.md create mode 100644 src/Conjure/LSP/Documentation.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index f233af53b6..09a88bc435 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -10,11 +10,10 @@ Author: Özgür Akgün Maintainer: ozgurakgun@gmail.com Category: Constraint Programming Build-type: Simple - +Data-files: data/docs/**/*.md Library default-language : Haskell2010 hs-source-dirs : src - exposed-modules : Paths_conjure_cp , Conjure.Prelude @@ -254,6 +253,7 @@ Library , Conjure.UI.ErrorDisplay , Conjure.LSP.LanguageServer + , Conjure.LSP.Documentation , Conjure.LSP.Handlers.File , Conjure.LSP.Handlers.Initialize , Conjure.LSP.Handlers.Hover diff --git a/data/docs/op/L_in.md b/data/docs/op/L_in.md new file mode 100644 index 0000000000..4538d35f41 --- /dev/null +++ b/data/docs/op/L_in.md @@ -0,0 +1,5 @@ +## Operator in +```essence +in +``` +The in operator \ No newline at end of file diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs new file mode 100644 index 0000000000..640408ebc6 --- /dev/null +++ b/src/Conjure/LSP/Documentation.hs @@ -0,0 +1,41 @@ +module Conjure.LSP.Documentation where +import Paths_conjure_cp (getDataDir, getDataFileName) +import Language.LSP.Server (LspM) +import Language.LSP.Types (MarkedString, MarkupKind (MkMarkdown), MarkupContent (MarkupContent), markedUpContent, unmarkedUpContent) +import Conjure.Prelude +import Language.LSP.Types.Lens (HasRootPath(rootPath)) +import qualified Data.Text as T +import Conjure.Language.Validator (DeclarationType (BuiltIn), DocType (..)) + +tryGetDocsByName :: String -> IO(Maybe MarkupContent) +tryGetDocsByName name = do + fileName <- getDataFileName ("data/docs/"++name ++ ".md") + fileData <- readFileIfExists fileName + return $ MarkupContent MkMarkdown . T.pack <$> fileData + + +getDocsForBuiltin :: DeclarationType -> IO (Maybe MarkupContent) +getDocsForBuiltin (BuiltIn prefix (T.unpack->name)) = do + let category = case prefix of + OperatorD -> "op/" + FunctionD -> "function/" + KeywordD -> "keyword/" + res <- tryGetDocsByName $ category ++ name + return . Just $ case res of + Nothing -> fallbackMsg category name + Just mc -> mc +getDocsForBuiltin _ = pure Nothing + + +fallbackMsg :: String -> String -> MarkupContent +fallbackMsg c n = MarkupContent MkMarkdown $ T.concat ["[Create This Doc](",getEditUrl c n,")"] + +getEditUrl :: String -> String -> Text +getEditUrl category name = T.pack $ concat [ + "https://github.com/conjure-cp/conjure/new/master/data/docs/" + ,category + ,name + ,"?filename=" + , name + ,".md" + ] \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index 8c06a61431..969f8edc0b 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -1,57 +1,52 @@ module Conjure.LSP.Handlers.DocumentSymbol where -import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification) -import Language.LSP.Types as T -import Control.Lens + +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getProcessedDoc, getRelevantRegions, regionToRange, withProcessedDoc) +import Conjure.Language (Type (..)) +import Conjure.Language.Pretty (Pretty (..)) +import Conjure.Language.Type (IntTag (..)) +import Conjure.Language.Validator (Class (..), DeclarationType (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo)) import Conjure.Prelude -import Data.Text (pack,unpack) -import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), regionToRange) -import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo), DeclarationType (..), Kind (..), Class (..)) -import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) -import Conjure.Language (Type(..)) -import Conjure.Language.Type (IntTag(..)) -import Conjure.Language.Pretty (Pretty(..)) +import Control.Lens +import Data.Text (pack, unpack) +import Language.LSP.Server (Handlers, LspM, requestHandler, sendNotification) +import Language.LSP.Types as T +import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument)) docSymbolHandler :: Handlers (LspM ()) -docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \ req res -> do - let ps = req^.params . textDocument - let u = (case ps of { (TextDocumentIdentifier uri) -> uri }) :: Uri - withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo->ri)) -> do +docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \req res -> do + let ps = req ^. params . textDocument + let u = (case ps of (TextDocumentIdentifier uri) -> uri) :: Uri + withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo -> ri)) -> do res $ Right $ InR . T.List $ mapMaybe (regionInfoToDocumentSymbols u) ri +regionInfoToDocumentSymbols :: Uri -> RegionInfo -> Maybe SymbolInformation +regionInfoToDocumentSymbols uri (RegionInfo{rRegion = reg, rText = n, rType = t, rDeclaration = dec}) = + SymbolInformation + (pack $ (unpack n) ++ ":" ++ show (pretty t)) -- Name + <$> sk -- Kind + <*> pure + (Just (T.List [])) + <*> pure + Nothing + <*> pure + (Location uri (regionToRange reg)) + <*> pure + Nothing + where + sk = symbolKindFromDeclaration dec t - - - -regionInfoToDocumentSymbols ::Uri -> RegionInfo -> Maybe SymbolInformation -regionInfoToDocumentSymbols uri (RegionInfo {rRegion=reg,rText=n, rType=t, rDeclaration=dec}) = SymbolInformation - (pack $ (unpack n) ++":" ++ show (pretty t)) --Name - <$> - sk--Kind - <*> pure - (Just (T.List [])) - <*> pure - Nothing - <*> pure - (Location uri (regionToRange reg)) - <*> pure - Nothing - where - sk = case dec of - Definition -> Just $ case t of - Kind ValueType _ -> SkVariable - Kind DomainType _ -> SkClass - LiteralDecl -> do - case t of - Kind _ ty -> return $ case ty of - TypeBool -> SkBoolean - TypeInt it -> case it of - TagInt -> SkNumber - TagEnum txt -> SkEnumMember - TagUnnamed txt -> SkNumber - TypeEnum na -> SkEnum - TypeUnnamed na -> SkEnum - _ -> SkConstant - - Ref _ -> Just $ case t of - Kind ValueType _ -> SkVariable - Kind DomainType _ -> SkClass +symbolKindFromDeclaration :: DeclarationType -> Maybe Kind -> Maybe SymbolKind +symbolKindFromDeclaration Definition (Just t) = Just $ case t of + Kind ValueType _ -> SkVariable + Kind DomainType _ -> SkClass +symbolKindFromDeclaration LiteralDecl (Just t) = Just $ case t of + Kind _ ty -> case ty of + TypeBool -> SkBoolean + TypeInt it -> case it of + TagInt -> SkNumber + TagEnum _ -> SkEnumMember + TagUnnamed _ -> SkNumber + TypeEnum _ -> SkEnum + TypeUnnamed _ -> SkEnum + _ -> SkConstant +symbolKindFromDeclaration _ _ = Nothing \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 6e944cf02f..2dafa9aa1c 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -4,10 +4,11 @@ import Language.LSP.Types import Control.Lens import Conjure.Prelude import Data.Text as T (pack, concat, unpack) -import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), sourcePosToPosition, snippet) +import Conjure.LSP.Util (getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), snippet) import Conjure.Language.Validator (RegionInfo (..), DeclarationType (..), DiagnosticRegion (DiagnosticRegion, drSourcePos)) import Conjure.Language (Pretty(pretty)) import Text.PrettyPrint (text) +import Conjure.LSP.Documentation (tryGetDocsByName, getDocsForBuiltin) hoverHandler :: Handlers (LspM ()) hoverHandler = requestHandler STextDocumentHover $ \ req res -> do @@ -15,16 +16,18 @@ hoverHandler = requestHandler STextDocumentHover $ \ req res -> do let Position _l _c' = pos withProcessedDoc _doc $ \(ProcessedFile _ _ st) -> do let ranges = getRelevantRegions st pos - let texts = map prettySymbol ranges - let ms = HoverContents $ MarkupContent MkMarkdown $ T.concat (catMaybes texts) + texts <- mapM prettySymbol ranges + let ms = HoverContents $ mconcat (catMaybes texts) let range = Range pos pos let rsp = Hover ms (Just range) res (Right $ Just rsp) -prettySymbol :: RegionInfo -> Maybe Text +prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent) prettySymbol (RegionInfo dr ty nm dt) = case dt of - Definition -> Just . snippet . pack.show $ hcat [text.unpack $ nm ," : ",pretty ty] - LiteralDecl -> Nothing - Ref DiagnosticRegion{drSourcePos=sp} -> Just .snippet . pack.show $ hcat [text.unpack $ nm," : ",pretty ty] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] - Ref _ -> Nothing + Definition |Just k <- ty -> return $ Just . snippet . pack.show $ hcat [text.unpack $ nm ," : ",pretty k] + LiteralDecl -> return Nothing + Ref DiagnosticRegion{drSourcePos=sp}|Just k <- ty -> return . Just .snippet . pack.show $ hcat [text.unpack $ nm," : ",pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] + BuiltIn {} -> liftIO $ getDocsForBuiltin dt + _ -> return Nothing + diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 543335108d..bad0dd0119 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -121,8 +121,9 @@ regionToRange :: DiagnosticRegion -> L.Range regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (sourcePosToPosition ep) regionToRange GlobalRegion = error "Global region in symbol info" -snippet :: Text -> Text -snippet t = T.concat ["```essence\n",t,"\n```"] + +snippet :: Text -> MarkupContent +snippet = markedUpContent "essence" instance Pretty Position where pretty (Position (text.show->r) (text.show->c)) = r <> ":" <> c From 8710e85ca9e264ffbc567e8ea47bc70059b8f132 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 3 Dec 2022 18:15:30 +0000 Subject: [PATCH 208/378] Support more doc types --- src/Conjure/LSP/Documentation.hs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs index 640408ebc6..343295c533 100644 --- a/src/Conjure/LSP/Documentation.hs +++ b/src/Conjure/LSP/Documentation.hs @@ -20,6 +20,8 @@ getDocsForBuiltin (BuiltIn prefix (T.unpack->name)) = do OperatorD -> "op/" FunctionD -> "function/" KeywordD -> "keyword/" + TypeD -> "types/" + AttributeD -> "attributes/" res <- tryGetDocsByName $ category ++ name return . Just $ case res of Nothing -> fallbackMsg category name From 192ad6fdd7f07816c2f79f482eb4189eb60bc170 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 8 Dec 2022 16:07:56 +0000 Subject: [PATCH 209/378] Improvinng nested tokens and adding docs --- data/docs/function/allDiff.md | 10 ++ src/Conjure/LSP/Documentation.hs | 10 +- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 111 ++++++++++++++++----- src/Conjure/LSP/Handlers/File.hs | 10 +- src/Conjure/LSP/Handlers/Hover.hs | 12 +-- src/Conjure/LSP/Handlers/SemanticTokens.hs | 64 +++++------- src/Conjure/LSP/Util.hs | 41 ++++---- 7 files changed, 157 insertions(+), 101 deletions(-) create mode 100644 data/docs/function/allDiff.md diff --git a/data/docs/function/allDiff.md b/data/docs/function/allDiff.md new file mode 100644 index 0000000000..69c8b7462c --- /dev/null +++ b/data/docs/function/allDiff.md @@ -0,0 +1,10 @@ +# AllDifferent +```essence +allDiff(_) +``` + +Argument : `[any]` +Output : `bool` + +Enforces that the members of the given collection are all distinct. +For the version that allows a specific value to be repeated, see `allDiffExcept`. \ No newline at end of file diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs index 343295c533..a30be9ca85 100644 --- a/src/Conjure/LSP/Documentation.hs +++ b/src/Conjure/LSP/Documentation.hs @@ -1,11 +1,9 @@ module Conjure.LSP.Documentation where import Paths_conjure_cp (getDataDir, getDataFileName) -import Language.LSP.Server (LspM) -import Language.LSP.Types (MarkedString, MarkupKind (MkMarkdown), MarkupContent (MarkupContent), markedUpContent, unmarkedUpContent) +import Language.LSP.Types (MarkupKind (MkMarkdown), MarkupContent (MarkupContent)) import Conjure.Prelude -import Language.LSP.Types.Lens (HasRootPath(rootPath)) import qualified Data.Text as T -import Conjure.Language.Validator (DeclarationType (BuiltIn), DocType (..)) +import Conjure.Language.Validator (DocType (..), RegionType (Documentation)) tryGetDocsByName :: String -> IO(Maybe MarkupContent) tryGetDocsByName name = do @@ -14,8 +12,8 @@ tryGetDocsByName name = do return $ MarkupContent MkMarkdown . T.pack <$> fileData -getDocsForBuiltin :: DeclarationType -> IO (Maybe MarkupContent) -getDocsForBuiltin (BuiltIn prefix (T.unpack->name)) = do +getDocsForBuiltin :: RegionType -> IO (Maybe MarkupContent) +getDocsForBuiltin (Documentation prefix (T.unpack->name)) = do let category = case prefix of OperatorD -> "op/" FunctionD -> "function/" diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index 969f8edc0b..0c0a8b5364 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -4,42 +4,88 @@ import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getProcessedDoc, getRele import Conjure.Language (Type (..)) import Conjure.Language.Pretty (Pretty (..)) import Conjure.Language.Type (IntTag (..)) -import Conjure.Language.Validator (Class (..), DeclarationType (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo)) +import Conjure.Language.Validator (Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..)) import Conjure.Prelude import Control.Lens -import Data.Text (pack, unpack) +import Data.Text (pack, unpack, intercalate) import Language.LSP.Server (Handlers, LspM, requestHandler, sendNotification) -import Language.LSP.Types as T +import Language.LSP.Types (SymbolKind(..),SMethod(STextDocumentDocumentSymbol),type (|?) (..), DocumentSymbol (..)) +import qualified Language.LSP.Types as T import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument)) +import Conjure.Language.Pretty (prettyT) docSymbolHandler :: Handlers (LspM ()) docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \req res -> do let ps = req ^. params . textDocument - let u = (case ps of (TextDocumentIdentifier uri) -> uri) :: Uri withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo -> ri)) -> do - res $ Right $ InR . T.List $ mapMaybe (regionInfoToDocumentSymbols u) ri + res $ Right $ InL . T.List $ mapMaybe translate ri -regionInfoToDocumentSymbols :: Uri -> RegionInfo -> Maybe SymbolInformation -regionInfoToDocumentSymbols uri (RegionInfo{rRegion = reg, rText = n, rType = t, rDeclaration = dec}) = - SymbolInformation - (pack $ (unpack n) ++ ":" ++ show (pretty t)) -- Name - <$> sk -- Kind - <*> pure - (Just (T.List [])) - <*> pure - Nothing - <*> pure - (Location uri (regionToRange reg)) - <*> pure - Nothing - where - sk = symbolKindFromDeclaration dec t -symbolKindFromDeclaration :: DeclarationType -> Maybe Kind -> Maybe SymbolKind -symbolKindFromDeclaration Definition (Just t) = Just $ case t of +translate :: RegionInfo -> Maybe T.DocumentSymbol +translate reg@(RegionInfo r rSel ty cs) = + (\x -> DocumentSymbol + (getRegionName reg) + (getRegionDetail reg) + x + Nothing + Nothing + (regionToRange r) + (regionToRange (fromMaybe r rSel)) + (Just . T.List $ mapMaybe translate cs) + + ) <$> sk + where + sk = symbolKindFromDeclaration ty + +getRegionName :: RegionInfo -> Text +getRegionName (rRegionType->rType) = case rType of + Definition txt ki -> txt + LiteralDecl ki -> "Literal" + Ref txt ki dr -> txt + Structural st -> case st of + SSuchThat -> "Constraints" + SGiven -> "Parameters" + SFind -> "Decision Variables" + SLetting -> "Definitions" + SEnum txt -> txt + SBranching -> "Branch" + SQuantification n _ -> "Quantification: " `mappend` n + SComprehension _ -> "Comprehension" + SBody -> "Body" + SGuard -> "Guard" + SGen -> "Generator" + SWhere -> "Parameter validation" + SGoal dir -> dir + _ -> pack $ show st + Documentation dt txt -> "" + +getRegionDetail :: RegionInfo -> Maybe Text +getRegionDetail (RegionInfo{rRegionType=rType,rChildren=children}) = + case rType of + Definition txt ki -> Just $ prettyT ki + LiteralDecl ki -> Just $ prettyT ki + Ref txt ki dr -> Just $ prettyT ki + Structural st -> case st of + SSuchThat -> Nothing + SGiven -> Just $ getDefs children + SFind -> Just $ getDefs children + SLetting -> Just $ getDefs children + SEnum nm -> Just "new type enum" + SQuantification _ ki -> Just $ prettyT ki + SComprehension ki -> Just $ prettyT ki + _ -> Nothing + Documentation dt txt -> Nothing + where + getDefs :: [RegionInfo] -> Text + getDefs rs = Data.Text.intercalate ", " [nm | Definition nm _ <- rRegionType <$> rs] +symbolKindFromDeclaration :: RegionType -> Maybe T.SymbolKind +symbolKindFromDeclaration (Definition _ t) = Just $ case t of + Kind ValueType (TypeInt TagEnum{}) -> SkEnumMember + Kind ValueType (TypeRecordMember{}) -> SkField + Kind ValueType (TypeVariantMember{}) -> SkField Kind ValueType _ -> SkVariable - Kind DomainType _ -> SkClass -symbolKindFromDeclaration LiteralDecl (Just t) = Just $ case t of + Kind DomainType _ -> SkTypeParameter +symbolKindFromDeclaration (LiteralDecl t) = Just $ case t of Kind _ ty -> case ty of TypeBool -> SkBoolean TypeInt it -> case it of @@ -49,4 +95,19 @@ symbolKindFromDeclaration LiteralDecl (Just t) = Just $ case t of TypeEnum _ -> SkEnum TypeUnnamed _ -> SkEnum _ -> SkConstant -symbolKindFromDeclaration _ _ = Nothing \ No newline at end of file +symbolKindFromDeclaration (Structural st) = Just $ (case st of + SSuchThat -> SkInterface + SGiven -> SkProperty + SFind -> SkField + SLetting -> SkField + SBranching -> SkClass + SEnum nm -> SkEnum + SQuantification _ _-> SkOperator + SComprehension _ -> SkArray + SGuard -> SkBoolean + SGen -> SkEvent + SBody -> SkNamespace + SGoal _ -> SkVariable + SWhere -> SkObject + ) +symbolKindFromDeclaration _ = Nothing \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/File.hs b/src/Conjure/LSP/Handlers/File.hs index 4d0c8d5c68..53c2ab83fb 100644 --- a/src/Conjure/LSP/Handlers/File.hs +++ b/src/Conjure/LSP/Handlers/File.hs @@ -5,7 +5,7 @@ module Conjure.LSP.Handlers.File where import Conjure.Prelude import Language.LSP.Server (notificationHandler, Handlers, LspM, sendNotification, publishDiagnostics, getVirtualFile) -import Language.LSP.Types (SMethod (STextDocumentDidOpen, SWindowShowMessage, STextDocumentDidChange, STextDocumentDidClose), NotificationMessage (NotificationMessage), ShowMessageParams (ShowMessageParams), MessageType (MtInfo, MtError), DidOpenTextDocumentParams (DidOpenTextDocumentParams), DidChangeTextDocumentParams (DidChangeTextDocumentParams), DidCloseTextDocumentParams (DidCloseTextDocumentParams), toNormalizedUri, Uri) +import Language.LSP.Types (SMethod (STextDocumentDidOpen, STextDocumentDidChange, STextDocumentDidClose), NotificationMessage (NotificationMessage), DidOpenTextDocumentParams (DidOpenTextDocumentParams), DidChangeTextDocumentParams (DidChangeTextDocumentParams), DidCloseTextDocumentParams (DidCloseTextDocumentParams), toNormalizedUri, Uri) import Data.Text (pack) import Control.Lens import Language.LSP.VFS @@ -19,7 +19,7 @@ fileHandlers = mconcat [fileOpenedHandler,fileChangedHandler,fileClosedHandler] fileOpenedHandler :: Handlers (LspM ()) fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do let NotificationMessage _ _ (DidOpenTextDocumentParams doc) = req - sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ pack ("Opened file "++ show doc++ "\n")) + -- sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ pack ("Opened file "++ show doc++ "\n")) let td = req^.params.textDocument doDiagForDocument td pure () @@ -29,7 +29,7 @@ fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do fileChangedHandler :: Handlers (LspM ()) fileChangedHandler = notificationHandler STextDocumentDidChange $ \ req -> do let NotificationMessage _ _ (DidChangeTextDocumentParams id chg) = req - sendInfoMessage $ pack ("Changed file "++ show chg ++ "\n") + -- sendInfoMessage $ pack ("Changed file "++ show chg ++ "\n") let td = req^.params.textDocument doDiagForDocument td pure () @@ -37,7 +37,7 @@ fileChangedHandler = notificationHandler STextDocumentDidChange $ \ req -> do fileClosedHandler :: Handlers (LspM ()) fileClosedHandler = notificationHandler STextDocumentDidClose $ \ req -> do let NotificationMessage _ _ (DidCloseTextDocumentParams id) = req - sendInfoMessage $ pack ("Closed file "++ show id ++ "\n") + -- sendInfoMessage $ pack ("Closed file "++ show id ++ "\n") pure () @@ -51,6 +51,6 @@ doDiagForDocument d = do Just vf@(VirtualFile _ version _rope) -> do errs <- getErrorsFromText $ virtualFileText vf case errs of - Left msg -> sendErrorMessage msg + Left msg -> sendErrorMessage "An error occured:details incoming" >>sendErrorMessage msg Right file -> publishDiagnostics 10000 doc (Just $ fromIntegral version) $ partitionBySource $ getDiagnostics file _ -> sendErrorMessage $ pack. show $ "No virtual file found for: " <> stringToDoc (show d) \ No newline at end of file diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 2dafa9aa1c..b78661c34a 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -5,7 +5,7 @@ import Control.Lens import Conjure.Prelude import Data.Text as T (pack, concat, unpack) import Conjure.LSP.Util (getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), snippet) -import Conjure.Language.Validator (RegionInfo (..), DeclarationType (..), DiagnosticRegion (DiagnosticRegion, drSourcePos)) +import Conjure.Language.Validator (RegionInfo (..), DiagnosticRegion (DiagnosticRegion, drSourcePos), RegionType (..)) import Conjure.Language (Pretty(pretty)) import Text.PrettyPrint (text) import Conjure.LSP.Documentation (tryGetDocsByName, getDocsForBuiltin) @@ -24,10 +24,10 @@ hoverHandler = requestHandler STextDocumentHover $ \ req res -> do prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent) -prettySymbol (RegionInfo dr ty nm dt) = case dt of - Definition |Just k <- ty -> return $ Just . snippet . pack.show $ hcat [text.unpack $ nm ," : ",pretty k] - LiteralDecl -> return Nothing - Ref DiagnosticRegion{drSourcePos=sp}|Just k <- ty -> return . Just .snippet . pack.show $ hcat [text.unpack $ nm," : ",pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] - BuiltIn {} -> liftIO $ getDocsForBuiltin dt +prettySymbol (RegionInfo dr _ dt _) = case dt of + Definition nm ty -> return $ Just . snippet . pack.show $ hcat [text.unpack $ nm ," : ",pretty ty] + LiteralDecl{} -> return Nothing + Ref nm k DiagnosticRegion{drSourcePos=sp} -> return . Just .snippet . pack.show $ hcat [text.unpack $ nm," : ",pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] + Documentation {} -> liftIO $ getDocsForBuiltin dt _ -> return Nothing diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs index c436af837b..7bdf66d839 100644 --- a/src/Conjure/LSP/Handlers/SemanticTokens.hs +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -1,17 +1,14 @@ module Conjure.LSP.Handlers.SemanticTokens where -import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification, MonadLsp (getLspEnv)) +import Language.LSP.Server (requestHandler, LspM, Handlers) import qualified Language.LSP.Types as T import Control.Lens import Conjure.Prelude -import Data.Text (pack,unpack,append) -import Conjure.LSP.Util (getProcessedDoc, getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), regionToRange, sourcePosToPosition, sendInfoMessage, sendErrorMessage) -import Conjure.Language.Validator (RegionInfo (..), ValidatorState (regionInfo, symbolCategories), DeclarationType (..), TaggedToken (TaggedToken), TagType (..)) +import Data.Text (pack) +import Conjure.LSP.Util (withProcessedDoc, ProcessedFile (ProcessedFile), sourcePosToPosition, sendInfoMessage, sendErrorMessage) +import Conjure.Language.Validator (ValidatorState (symbolCategories), TaggedToken (TaggedToken), TagType (..)) import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) -import Conjure.Language (Type(..)) -import Conjure.Language.Type (IntTag(..)) -import Conjure.Language.Pretty (Pretty(..)) import Conjure.Language.NewLexer (ETok(..), Offsets (..), trueLength) -import Language.LSP.Types (SemanticTokenTypes(..)) +import Language.LSP.Types (SemanticTokenTypes(..), SemanticTokenModifiers (..)) import qualified Data.Map as M semanticTokensHandler :: Handlers (LspM ()) @@ -21,10 +18,9 @@ semanticTokensHandler = semanticTokensHandlerFull semanticTokensHandlerFull :: Handlers (LspM ()) semanticTokensHandlerFull = requestHandler T.STextDocumentSemanticTokensFull $ \ req res -> do let ps = req^.params . textDocument - let u = (case ps of { (T.TextDocumentIdentifier uri) -> uri }) :: T.Uri withProcessedDoc ps $ \(ProcessedFile _ _ (symbolCategories->ts)) -> do let toks = mapMaybe createSemanticToken (sortOn (\(TaggedToken _ (oTrueStart . offsets->e)) -> e) $ M.elems ts) - sendInfoMessage . pack $ "Got semantic tokens req : " ++ show (toks) + -- sendInfoMessage . pack $ "Got semantic tokens req : " ++ show toks let sToks = T.makeSemanticTokens def toks r <-case sToks of Left txt -> sendErrorMessage txt >> return (Right Nothing) @@ -33,36 +29,30 @@ semanticTokensHandlerFull = requestHandler T.STextDocumentSemanticTokensFull $ \ createSemanticToken :: TaggedToken -> Maybe T.SemanticTokenAbsolute -createSemanticToken (TaggedToken tt tok) = T.SemanticTokenAbsolute - (ln) - (col) - len - <$> - symbolType tt - <*> - pure [] +createSemanticToken (TaggedToken tt tok) = + (uncurry (T.SemanticTokenAbsolute ln col len)) <$> symbolType tt where T.Position ln col = sourcePosToPosition (oSourcePos . offsets $ tok) len = fromInteger . toInteger . trueLength $ tok - symbolType :: TagType -> Maybe T.SemanticTokenTypes + symbolType :: TagType -> Maybe (T.SemanticTokenTypes,[T.SemanticTokenModifiers]) symbolType s = case s of - TtType -> Just SttType - TtNumber -> Just SttNumber - TtBool -> Just SttRegexp - TtDomain -> Just SttClass - TtEnum -> Just SttEnum - TtEnumMember -> Just SttEnumMember - TtRecord -> Just SttStruct - TtRecordMember -> Just SttProperty - TtUserFunction -> Just SttMethod - TtFunction -> Just SttFunction - TtAttribute -> Just SttEvent - TtAAC -> Just SttInterface - TtVariable -> Just SttVariable - TtKeyword -> Just SttKeyword - TtQuantifier -> Just SttMacro - TtSubKeyword -> Just SttModifier - TtOperator -> Just SttOperator - TtLocal -> Just SttParameter + TtType -> Just (SttType,[StmDefaultLibrary]) + TtNumber -> Just (SttNumber,[]) + TtBool -> Just (SttRegexp,[]) + TtDomain -> Just (SttClass,[StmAbstract]) + TtEnum -> Just (SttEnum,[StmAbstract]) + TtEnumMember -> Just (SttEnumMember,[]) + TtRecord -> Just (SttStruct,[]) + TtRecordMember -> Just (SttProperty,[]) + TtUserFunction -> Just (SttMethod,[]) + TtFunction -> Just (SttFunction,[StmDefaultLibrary]) + TtAttribute -> Just (SttVariable,[StmReadonly]) + TtAAC -> Just (SttInterface,[]) + TtVariable -> Just (SttVariable,[]) + TtKeyword -> Just (SttKeyword,[]) + TtQuantifier -> Just (SttMacro,[]) + TtSubKeyword -> Just (SttModifier,[]) + TtOperator -> Just (SttOperator,[]) + TtLocal -> Just (SttParameter,[]) TtOther _ -> Nothing diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index bad0dd0119..5f65937241 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -2,24 +2,22 @@ module Conjure.LSP.Util where -import qualified Conjure.Language.Validator as V (ValidatorDiagnostic (..), DiagnosticRegion (..), Diagnostic (..)) +import qualified Conjure.Language.Validator as V (ValidatorDiagnostic (..), Diagnostic (..)) import Conjure.Language import Conjure.Prelude import Language.LSP.Server -import Conjure.Language.Parser (PipelineError(..),runPipeline,parseModel, lexAndParse) -import Language.LSP.VFS (virtualFileText, VirtualFile (VirtualFile)) +import Conjure.Language.Parser (PipelineError(..), lexAndParse) +import Language.LSP.VFS (virtualFileText) import Text.Megaparsec (SourcePos(..), unPos) -import Data.Text hiding (filter) +import Data.Text (pack) import Language.LSP.Types as L -import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, validateProgramTree, validateModel, validateModelS, ValidatorDiagnostic, RegionInfo (..)) +import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, validateModelS, ValidatorDiagnostic, RegionInfo (..), initialState) import Conjure.UI.ErrorDisplay (displayError) import Conjure.Language.AST.ASTParser (parseProgram) import Language.LSP.Types.Lens (HasUri (uri)) -import Language.LSP.Diagnostics (partitionBySource) import Control.Lens ((^.)) import Text.PrettyPrint (text) -import qualified Data.Text as T data ProcessedFile = ProcessedFile { model::Maybe Model, @@ -30,7 +28,7 @@ data ProcessedFile = ProcessedFile { processFile :: Text -> Either PipelineError ProcessedFile processFile t = do parsed <- lexAndParse parseProgram t - let (m,d,s) = runValidator (validateModelS parsed) def + let (m,d,s) = runValidator (validateModelS parsed) (initialState parsed) return $ ProcessedFile m d s @@ -41,8 +39,7 @@ getErrorsForURI uri = do getErrorsFromText f getErrorsFromText :: Text -> LspM () (Either Text ProcessedFile) -getErrorsFromText t = do - return $ either (Left . pack.show) Right $ processFile t +getErrorsFromText t = return $ either (Left . pack.show) Right $ processFile t getDiagnostics :: ProcessedFile -> [Diagnostic] getDiagnostics (ProcessedFile _ ds _) = mapMaybe valErrToDiagnostic ds @@ -51,17 +48,16 @@ valErrToDiagnostic :: V.ValidatorDiagnostic -> Maybe Diagnostic valErrToDiagnostic (V.ValidatorDiagnostic region message) = do let range = getRangeFromRegion region let (severity,msg) = getDiagnosticDetails message - Just $ Diagnostic range (Just severity) Nothing Nothing (append msg $ pack . show $ region) Nothing Nothing + Just $ Diagnostic range (Just severity) Nothing Nothing msg Nothing Nothing getRangeFromRegion :: DiagnosticRegion -> L.Range -getRangeFromRegion GlobalRegion = Range (Position 0 0) (Position 0 0) getRangeFromRegion (DiagnosticRegion {drSourcePos=(SourcePos _ r c),drLength=l}) = let row = unPos r col = unPos c in - Range (fixPosition row col) (fixPosition row (col+(max 1 l))) + Range (fixPosition row col) (fixPosition row (col+max 1 l)) getDiagnosticDetails :: V.Diagnostic -> (DiagnosticSeverity,Text) getDiagnosticDetails x = case x of @@ -72,10 +68,10 @@ getDiagnosticDetails x = case x of sendInfoMessage :: Text -> LspM () () -sendInfoMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ t) +sendInfoMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtInfo t) sendErrorMessage :: Text -> LspM () () -sendErrorMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtError $ t) +sendErrorMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtError t) -- 0 index rows and cols as well as type coercion fixPosition :: (Integral a) => a -> a -> Position @@ -87,11 +83,11 @@ getProcessedDoc d = do let doc = toNormalizedUri td mdoc <- getVirtualFile doc case mdoc of - Just vf@(VirtualFile _ version _rope) -> do + Just vf -> do case processFile $ virtualFileText vf of Left msg -> sendErrorMessage (pack $ show msg) >> return Nothing Right file -> return . pure $ file - _ -> return Nothing <* (sendErrorMessage $ pack. show $ "No virtual file found for: " <> stringToDoc (show d)) + _ -> Nothing <$ sendErrorMessage (pack. show $ "No virtual file found for: " <> stringToDoc (show d)) withProcessedDoc :: ( HasUri a Uri,Show a) => a -> (ProcessedFile -> LspM () n) -> LspM () () withProcessedDoc d f = do @@ -102,14 +98,16 @@ withProcessedDoc d f = do getRelevantRegions :: ValidatorState -> Position -> [RegionInfo] -getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (drLength . rRegion) $ filter p info +getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (drLength . rRegion) $ concatMap filteredFlatten info where p::RegionInfo -> Bool p (RegionInfo {rRegion=reg}) = case reg of - DiagnosticRegion sp sp' _ _ -> (sourcePosToPosition sp) <= pos + DiagnosticRegion sp sp' _ _ -> sourcePosToPosition sp <= pos && - (sourcePosToPosition sp') >= pos - GlobalRegion -> True + sourcePosToPosition sp' >= pos + filteredFlatten :: RegionInfo -> [RegionInfo] + filteredFlatten r@RegionInfo{rChildren=c} | p r = r : concatMap filteredFlatten c + filteredFlatten _ = [] sourcePosToPosition :: SourcePos -> Position @@ -119,7 +117,6 @@ sourcePosToPosition (SourcePos _ r c) = Position regionToRange :: DiagnosticRegion -> L.Range regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (sourcePosToPosition ep) -regionToRange GlobalRegion = error "Global region in symbol info" snippet :: Text -> MarkupContent From ff2c2e5d319b119b86b8513996678238a3822967 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 13 Dec 2022 11:20:59 +0000 Subject: [PATCH 210/378] A few example docs --- data/docs/attributes/L_regular.md | 3 +++ data/docs/function/max.md | 7 +++++++ data/docs/function/min.md | 7 +++++++ data/docs/keyword/expr_projection.md | 13 +++++++++++++ data/docs/keyword/find.md | 3 +++ data/docs/keyword/new_type_enum.md | 16 ++++++++++++++++ data/docs/op/L_in.md | 2 +- src/Conjure/LSP/Util.hs | 4 ++-- 8 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 data/docs/attributes/L_regular.md create mode 100644 data/docs/function/max.md create mode 100644 data/docs/function/min.md create mode 100644 data/docs/keyword/expr_projection.md create mode 100644 data/docs/keyword/find.md create mode 100644 data/docs/keyword/new_type_enum.md diff --git a/data/docs/attributes/L_regular.md b/data/docs/attributes/L_regular.md new file mode 100644 index 0000000000..9787a27c15 --- /dev/null +++ b/data/docs/attributes/L_regular.md @@ -0,0 +1,3 @@ +## `regular` : partition attribute +Regular is an attribute for partitions that takes no arguments. +It enforces that the sizes of the parts are equal. diff --git a/data/docs/function/max.md b/data/docs/function/max.md new file mode 100644 index 0000000000..a540247866 --- /dev/null +++ b/data/docs/function/max.md @@ -0,0 +1,7 @@ +# Max +```essence +max(expr) $or +max(`domain`) +``` + +The max function takes either a domain or a collection as its argument and returns the largest value contained within it. \ No newline at end of file diff --git a/data/docs/function/min.md b/data/docs/function/min.md new file mode 100644 index 0000000000..5639d2e359 --- /dev/null +++ b/data/docs/function/min.md @@ -0,0 +1,7 @@ +# Min +```essence +min(expr) $or +min(`domain`) +``` + +The min function takes either a domain or a collection as its argument and returns the smallest value contained within it. \ No newline at end of file diff --git a/data/docs/keyword/expr_projection.md b/data/docs/keyword/expr_projection.md new file mode 100644 index 0000000000..966738faaa --- /dev/null +++ b/data/docs/keyword/expr_projection.md @@ -0,0 +1,13 @@ +## Expression Projection `<-` +The expression projection syntax is used in comprehensions to create a generator from a container data type. +The left side can either be a single variable which +will have the type of a memeber of the expression or an abstract pattern used to destructure the member type. + +Examples: +```essence +[x|x <- [(1,2),(1,3),[1,4]]] $ x : tuple(int,int) +[x+y|(x,y) <- [(1,2),(1,3),[1,4]]] $ x : int , y: int + +``` + +N.B. `:` is used when creating a generator from a domain. \ No newline at end of file diff --git a/data/docs/keyword/find.md b/data/docs/keyword/find.md new file mode 100644 index 0000000000..de873262b9 --- /dev/null +++ b/data/docs/keyword/find.md @@ -0,0 +1,3 @@ +## Find + +The `find` keyword is used to declare decision variables. diff --git a/data/docs/keyword/new_type_enum.md b/data/docs/keyword/new_type_enum.md new file mode 100644 index 0000000000..0d0d513a81 --- /dev/null +++ b/data/docs/keyword/new_type_enum.md @@ -0,0 +1,16 @@ +## Enum Domains +Enumerated types can be declared in two ways: using a given-enum syntax or using a letting-enum syntax. + +The given-enum syntax defers the specification of actual values of the enumerated type until instantiation. With this syntax, an enumerated type can be declared by only giving its name in the problem specification file. In a parameter file, values for the actual members of this type can be given. This allows Conjure to produce a model independent of the values of the enumerated type and only substitute the actual values during parameter instantiation. + +The letting-enum syntax can be used to declare an enumerated type directly in a problem specification as well. + +Values of an enumerated type cannot contain spaces. +```essence +letting direction be new type enum {North, East, South, West} +find x,y : direction +such that x != y +``` +In the example fragment above direction is declared as an enumerated type with 4 members. Two decision variables are declared using direction as their domain and a constraint is posted on the values they can take. Enumerated types support equality, ordering, and successor/predecessor operators; they do not support arithmetic operators. + +When an enumerated type is declared, the elements of the type are listed in increasing order. \ No newline at end of file diff --git a/data/docs/op/L_in.md b/data/docs/op/L_in.md index 4538d35f41..836aab6e2b 100644 --- a/data/docs/op/L_in.md +++ b/data/docs/op/L_in.md @@ -2,4 +2,4 @@ ```essence in ``` -The in operator \ No newline at end of file +The in operator is checks if the left operand is contained within the right operand. diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 5f65937241..f7cf76b173 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -13,7 +13,7 @@ import Text.Megaparsec (SourcePos(..), unPos) import Data.Text (pack) import Language.LSP.Types as L import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, validateModelS, ValidatorDiagnostic, RegionInfo (..), initialState) -import Conjure.UI.ErrorDisplay (displayError) +import Conjure.UI.ErrorDisplay (displayError, displayWarning) import Conjure.Language.AST.ASTParser (parseProgram) import Language.LSP.Types.Lens (HasUri (uri)) import Control.Lens ((^.)) @@ -62,7 +62,7 @@ getRangeFromRegion (DiagnosticRegion {drSourcePos=(SourcePos _ r c),drLength=l}) getDiagnosticDetails :: V.Diagnostic -> (DiagnosticSeverity,Text) getDiagnosticDetails x = case x of V.Error et -> (DsError,pack $displayError et) - V.Warning wt -> (DsWarning , pack $ show wt) + V.Warning wt -> (DsWarning , pack $ displayWarning wt) V.Info it -> (DsHint,pack $ show it) From 60b839d84c0cc8763ee4ac70d3ed114b060f063d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 13 Dec 2022 19:41:29 +0000 Subject: [PATCH 211/378] Format support --- conjure-cp.cabal | 1 + src/Conjure/LSP/Handlers/Format.hs | 37 ++++++++++++++++++++++++++ src/Conjure/LSP/Handlers/Hover.hs | 6 ++--- src/Conjure/LSP/Handlers/Initialize.hs | 2 +- src/Conjure/LSP/LanguageServer.hs | 2 ++ src/Conjure/LSP/Util.hs | 15 ++++++++--- 6 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 src/Conjure/LSP/Handlers/Format.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 09a88bc435..91d480a0af 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -259,6 +259,7 @@ Library , Conjure.LSP.Handlers.Hover , Conjure.LSP.Handlers.DocumentSymbol , Conjure.LSP.Handlers.SemanticTokens + , Conjure.LSP.Handlers.Format , Conjure.LSP.Util build-depends : base >= 4.12.0 diff --git a/src/Conjure/LSP/Handlers/Format.hs b/src/Conjure/LSP/Handlers/Format.hs new file mode 100644 index 0000000000..623afb6963 --- /dev/null +++ b/src/Conjure/LSP/Handlers/Format.hs @@ -0,0 +1,37 @@ +module Conjure.LSP.Handlers.Format (formatHandler) where +import Language.LSP.Server (requestHandler, LspM, Handlers) +import Language.LSP.Types hiding (length) +import Control.Lens +import Conjure.Prelude +import Conjure.LSP.Util (withFile, sendInfoMessage, sendErrorMessage) +import Conjure.Language.Parser (prettyPrintWithChecks) +import qualified Language.LSP.Types as Ty hiding (length) +import qualified Prettyprinter as Pr +import Prettyprinter.Render.Text (renderStrict) +import Language.LSP.Types.Lens (params, textDocument) +import Language.LSP.VFS (virtualFileText) +import qualified Data.Text as T + + +formatHandler :: Handlers (LspM ()) +formatHandler = requestHandler STextDocumentFormatting $ \ req res -> do + let ps = req^.params.textDocument + withFile ps $ \vf -> do + let txt = virtualFileText vf + case prettyPrintWithChecks txt of + Left err -> do + sendErrorMessage $ T.pack $ show err + pure () + Right d-> do + let rendered = renderStrict $ Pr.layoutSmart (Pr.LayoutOptions $ Pr.AvailablePerLine 80 0.8) d + res $ Right $ fullEdit (fromInteger $ toInteger $ Conjure.Prelude.length $ T.lines txt) rendered + + + +fullEdit :: UInt -> Text -> List TextEdit +fullEdit t d = Ty.List [ + TextEdit (Range (Position 0 0) (Position t 0)) (d) + ] + + + diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index b78661c34a..4fcf90b1b6 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -7,7 +7,7 @@ import Data.Text as T (pack, concat, unpack) import Conjure.LSP.Util (getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), snippet) import Conjure.Language.Validator (RegionInfo (..), DiagnosticRegion (DiagnosticRegion, drSourcePos), RegionType (..)) import Conjure.Language (Pretty(pretty)) -import Text.PrettyPrint (text) + import Conjure.LSP.Documentation (tryGetDocsByName, getDocsForBuiltin) hoverHandler :: Handlers (LspM ()) @@ -25,9 +25,9 @@ hoverHandler = requestHandler STextDocumentHover $ \ req res -> do prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent) prettySymbol (RegionInfo dr _ dt _) = case dt of - Definition nm ty -> return $ Just . snippet . pack.show $ hcat [text.unpack $ nm ," : ",pretty ty] + Definition nm ty -> return $ Just . snippet . pack.show $ hcat [pretty $ nm ," : ",pretty ty] LiteralDecl{} -> return Nothing - Ref nm k DiagnosticRegion{drSourcePos=sp} -> return . Just .snippet . pack.show $ hcat [text.unpack $ nm," : ",pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] + Ref nm k DiagnosticRegion{drSourcePos=sp} -> return . Just .snippet . pack.show $ hcat [pretty $ nm," : ",pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] Documentation {} -> liftIO $ getDocsForBuiltin dt _ -> return Nothing diff --git a/src/Conjure/LSP/Handlers/Initialize.hs b/src/Conjure/LSP/Handlers/Initialize.hs index cf8df5d2e3..4acd26780d 100644 --- a/src/Conjure/LSP/Handlers/Initialize.hs +++ b/src/Conjure/LSP/Handlers/Initialize.hs @@ -14,6 +14,6 @@ import Conjure.Prelude handleInitialized :: Handlers (LspM ()) handleInitialized = notificationHandler SInitialized $ \req -> do let NotificationMessage _ _ (a) = req - sendNotification SWindowShowMessage (ShowMessageParams MtInfo "LSP Started 0.0.1\n") + sendNotification SWindowShowMessage (ShowMessageParams MtInfo "LSP Started 0.0.2\n") diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index 28687cc6a2..1126fe13c2 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -11,6 +11,7 @@ import Conjure.Prelude import Conjure.LSP.Handlers.Hover (hoverHandler) import Conjure.LSP.Handlers.DocumentSymbol (docSymbolHandler) import Conjure.LSP.Handlers.SemanticTokens (semanticTokensHandler) +import Conjure.LSP.Handlers.Format (formatHandler) data LSPConfig = LSPConfig {} @@ -40,6 +41,7 @@ handlers = , hoverHandler , docSymbolHandler , semanticTokensHandler + , formatHandler ] diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index f7cf76b173..c7748c8a4a 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -8,7 +8,7 @@ import Conjure.Prelude import Language.LSP.Server import Conjure.Language.Parser (PipelineError(..), lexAndParse) -import Language.LSP.VFS (virtualFileText) +import Language.LSP.VFS (virtualFileText, VirtualFile) import Text.Megaparsec (SourcePos(..), unPos) import Data.Text (pack) import Language.LSP.Types as L @@ -17,7 +17,7 @@ import Conjure.UI.ErrorDisplay (displayError, displayWarning) import Conjure.Language.AST.ASTParser (parseProgram) import Language.LSP.Types.Lens (HasUri (uri)) import Control.Lens ((^.)) -import Text.PrettyPrint (text) + data ProcessedFile = ProcessedFile { model::Maybe Model, @@ -77,6 +77,15 @@ sendErrorMessage t = sendNotification SWindowShowMessage (ShowMessageParams MtEr fixPosition :: (Integral a) => a -> a -> Position fixPosition r c = Position (fromIntegral r-1) (fromIntegral c-1) +withFile :: (HasUri a Uri,Show a) => a -> (VirtualFile -> LspM () n) -> LspM () () +withFile fp f = do + let td = fp^.uri + let doc = toNormalizedUri td + mdoc <- getVirtualFile doc + case mdoc of + Just vf ->void $ f vf + _ -> sendErrorMessage (pack. show $ "No virtual file found for: " <> pretty (show fp)) + getProcessedDoc ::( HasUri a Uri,Show a) => a -> LspM () (Maybe ProcessedFile) getProcessedDoc d = do let td = d^.uri @@ -123,5 +132,5 @@ snippet :: Text -> MarkupContent snippet = markedUpContent "essence" instance Pretty Position where - pretty (Position (text.show->r) (text.show->c)) = r <> ":" <> c + pretty (Position (pretty . show->r) (pretty . show->c)) = r <> ":" <> c From d6fc02a76caf2a213e9306871e7db48fe34cf81b Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 14 Dec 2022 17:35:36 +0000 Subject: [PATCH 212/378] Style changes --- src/Conjure/LSP/Handlers/SemanticTokens.hs | 4 ++-- src/Conjure/LSP/Util.hs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs index 7bdf66d839..8fdc2fca5a 100644 --- a/src/Conjure/LSP/Handlers/SemanticTokens.hs +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -43,8 +43,8 @@ createSemanticToken (TaggedToken tt tok) = TtEnum -> Just (SttEnum,[StmAbstract]) TtEnumMember -> Just (SttEnumMember,[]) TtRecord -> Just (SttStruct,[]) - TtRecordMember -> Just (SttProperty,[]) - TtUserFunction -> Just (SttMethod,[]) + TtRecordMember -> Just (SttProperty,[StmReadonly]) + TtUserFunction -> Just (SttFunction,[]) TtFunction -> Just (SttFunction,[StmDefaultLibrary]) TtAttribute -> Just (SttVariable,[StmReadonly]) TtAAC -> Just (SttInterface,[]) diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index c7748c8a4a..b6dd2da27a 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -107,7 +107,7 @@ withProcessedDoc d f = do getRelevantRegions :: ValidatorState -> Position -> [RegionInfo] -getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (drLength . rRegion) $ concatMap filteredFlatten info +getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (rRegion) $ concatMap filteredFlatten info where p::RegionInfo -> Bool p (RegionInfo {rRegion=reg}) = case reg of From 3993b71cafd6e1d67d0345003dac8a159148de47 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 17 Dec 2022 14:58:13 +0000 Subject: [PATCH 213/378] Pretty print compat changes --- src/Conjure/LSP/Handlers/File.hs | 2 +- src/Conjure/LSP/Handlers/Hover.hs | 7 ++++--- src/Conjure/LSP/Util.hs | 6 +++--- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Conjure/LSP/Handlers/File.hs b/src/Conjure/LSP/Handlers/File.hs index 53c2ab83fb..de379ce754 100644 --- a/src/Conjure/LSP/Handlers/File.hs +++ b/src/Conjure/LSP/Handlers/File.hs @@ -12,7 +12,7 @@ import Language.LSP.VFS import Language.LSP.Types.Lens (HasTextDocument(textDocument), HasParams (..), HasUri (uri)) import Conjure.LSP.Util (getErrorsForURI, getErrorsFromText, sendInfoMessage, sendErrorMessage, getDiagnostics) import Language.LSP.Diagnostics (partitionBySource) - +import Prettyprinter fileHandlers :: Handlers (LspM ()) fileHandlers = mconcat [fileOpenedHandler,fileChangedHandler,fileClosedHandler] diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 4fcf90b1b6..045bd441a1 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -6,9 +6,10 @@ import Conjure.Prelude import Data.Text as T (pack, concat, unpack) import Conjure.LSP.Util (getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), snippet) import Conjure.Language.Validator (RegionInfo (..), DiagnosticRegion (DiagnosticRegion, drSourcePos), RegionType (..)) -import Conjure.Language (Pretty(pretty)) +import Prettyprinter import Conjure.LSP.Documentation (tryGetDocsByName, getDocsForBuiltin) +import qualified Conjure.Language.Pretty as CPr hoverHandler :: Handlers (LspM ()) hoverHandler = requestHandler STextDocumentHover $ \ req res -> do @@ -25,9 +26,9 @@ hoverHandler = requestHandler STextDocumentHover $ \ req res -> do prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent) prettySymbol (RegionInfo dr _ dt _) = case dt of - Definition nm ty -> return $ Just . snippet . pack.show $ hcat [pretty $ nm ," : ",pretty ty] + Definition nm ty -> return $ Just . snippet . pack.show $ hcat [pretty $ nm ," : ",pretty.show $ CPr.pretty ty] LiteralDecl{} -> return Nothing - Ref nm k DiagnosticRegion{drSourcePos=sp} -> return . Just .snippet . pack.show $ hcat [pretty $ nm," : ",pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] + Ref nm k DiagnosticRegion{drSourcePos=sp} -> return . Just .snippet . pack.show $ hcat [pretty $ nm," : ",pretty.show $ CPr.pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] Documentation {} -> liftIO $ getDocsForBuiltin dt _ -> return Nothing diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index b6dd2da27a..ca8052f248 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -12,7 +12,7 @@ import Language.LSP.VFS (virtualFileText, VirtualFile) import Text.Megaparsec (SourcePos(..), unPos) import Data.Text (pack) import Language.LSP.Types as L -import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, validateModelS, ValidatorDiagnostic, RegionInfo (..), initialState) +import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, ValidatorDiagnostic, RegionInfo (..), initialState, validateModel) import Conjure.UI.ErrorDisplay (displayError, displayWarning) import Conjure.Language.AST.ASTParser (parseProgram) import Language.LSP.Types.Lens (HasUri (uri)) @@ -20,7 +20,7 @@ import Control.Lens ((^.)) data ProcessedFile = ProcessedFile { - model::Maybe Model, + model:: Model, diagnostics::[ValidatorDiagnostic], state:: ValidatorState } @@ -28,7 +28,7 @@ data ProcessedFile = ProcessedFile { processFile :: Text -> Either PipelineError ProcessedFile processFile t = do parsed <- lexAndParse parseProgram t - let (m,d,s) = runValidator (validateModelS parsed) (initialState parsed) + let (m,d,s) = runValidator (validateModel parsed) (initialState parsed) return $ ProcessedFile m d s From 22062e7756d3e1a31cd890b7519cc52a14030fb4 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 17 Dec 2022 15:05:22 +0000 Subject: [PATCH 214/378] cleaning up --- data/docs/keyword/expr_projection.md | 2 +- src/Conjure/LSP/Handlers/Initialize.hs | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/data/docs/keyword/expr_projection.md b/data/docs/keyword/expr_projection.md index 966738faaa..989b511aee 100644 --- a/data/docs/keyword/expr_projection.md +++ b/data/docs/keyword/expr_projection.md @@ -1,7 +1,7 @@ ## Expression Projection `<-` The expression projection syntax is used in comprehensions to create a generator from a container data type. The left side can either be a single variable which -will have the type of a memeber of the expression or an abstract pattern used to destructure the member type. +will have the type of a member of the expression or an abstract pattern used to destructure the member type. Examples: ```essence diff --git a/src/Conjure/LSP/Handlers/Initialize.hs b/src/Conjure/LSP/Handlers/Initialize.hs index 4acd26780d..67414b5869 100644 --- a/src/Conjure/LSP/Handlers/Initialize.hs +++ b/src/Conjure/LSP/Handlers/Initialize.hs @@ -2,7 +2,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE DataKinds #-} module Conjure.LSP.Handlers.Initialize where -import Language.LSP.Types (SMethod(SInitialized, SWindowShowMessage, SInitialize), NotificationMessage (NotificationMessage), ShowMessageParams (ShowMessageParams), MessageType (MtInfo), InitializedParams (InitializedParams), RequestMessage (..), InitializeParams (InitializeParams), Method (Initialize)) +import Language.LSP.Types (SMethod(SInitialized, SWindowShowMessage), ShowMessageParams (ShowMessageParams), MessageType (MtInfo)) import Language.LSP.Server import Conjure.Prelude @@ -12,8 +12,7 @@ import Conjure.Prelude handleInitialized :: Handlers (LspM ()) -handleInitialized = notificationHandler SInitialized $ \req -> do - let NotificationMessage _ _ (a) = req +handleInitialized = notificationHandler SInitialized $ \_ -> do sendNotification SWindowShowMessage (ShowMessageParams MtInfo "LSP Started 0.0.2\n") From 296e4a38a07419efa6b44f2d2e3ebc06812b1295 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sat, 17 Dec 2022 15:43:57 +0000 Subject: [PATCH 215/378] LSP version related fix --- src/Conjure/LSP/Handlers/Format.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Format.hs b/src/Conjure/LSP/Handlers/Format.hs index 623afb6963..e84bb6572c 100644 --- a/src/Conjure/LSP/Handlers/Format.hs +++ b/src/Conjure/LSP/Handlers/Format.hs @@ -1,11 +1,11 @@ module Conjure.LSP.Handlers.Format (formatHandler) where import Language.LSP.Server (requestHandler, LspM, Handlers) -import Language.LSP.Types hiding (length) +import Language.LSP.Types import Control.Lens import Conjure.Prelude import Conjure.LSP.Util (withFile, sendInfoMessage, sendErrorMessage) import Conjure.Language.Parser (prettyPrintWithChecks) -import qualified Language.LSP.Types as Ty hiding (length) +import qualified Language.LSP.Types as Ty import qualified Prettyprinter as Pr import Prettyprinter.Render.Text (renderStrict) import Language.LSP.Types.Lens (params, textDocument) From c1dfc84c36f5a9438403969c71fd8c99c5278bb2 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Sun, 12 Mar 2023 12:37:35 +0000 Subject: [PATCH 216/378] Removes outdated TH if statement --- conjure-cp.cabal | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 91d480a0af..92eca375bc 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -317,26 +317,27 @@ Library , parser-combinators , lsp , lens + , template-haskell - if impl(ghc == 7.8.*) - build-depends: template-haskell == 2.9.* - if impl(ghc == 7.10.*) - build-depends: template-haskell == 2.10.* - if impl(ghc == 8.0.*) - build-depends: template-haskell == 2.11.* - ghc-options: -Wno-redundant-constraints - if impl(ghc == 8.2.*) - build-depends: template-haskell == 2.12.* - if impl(ghc == 8.4.*) - build-depends: template-haskell == 2.13.* - if impl(ghc == 8.6.*) - build-depends: template-haskell == 2.14.* - if impl(ghc == 8.8.*) - build-depends: template-haskell == 2.15.* - if impl(ghc == 8.10.*) - build-depends: template-haskell == 2.16.* - if impl(ghc == 9.0.*) - build-depends: template-haskell == 2.17.* + -- if impl(ghc == 7.8.*) + -- build-depends: template-haskell == 2.9.* + -- if impl(ghc == 7.10.*) + -- build-depends: template-haskell == 2.10.* + -- if impl(ghc == 8.0.*) + -- build-depends: template-haskell == 2.11.* + -- ghc-options: -Wno-redundant-constraints + -- if impl(ghc == 8.2.*) + -- build-depends: template-haskell == 2.12.* + -- if impl(ghc == 8.4.*) + -- build-depends: template-haskell == 2.13.* + -- if impl(ghc == 8.6.*) + -- build-depends: template-haskell == 2.14.* + -- if impl(ghc == 8.8.*) + -- build-depends: template-haskell == 2.15.* + -- if impl(ghc == 8.10.*) + -- build-depends: template-haskell == 2.16.* + -- if impl(ghc == 9.0.*) + -- build-depends: template-haskell == 2.17.* default-extensions: FlexibleContexts From 7bd26de980834165d2339207edbbb007c33376b8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 14 Mar 2023 10:49:19 +0000 Subject: [PATCH 217/378] Adds LSP to help --- docs/conjure-help.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/conjure-help.html b/docs/conjure-help.html index 053c8cf247..ebfebad5f7 100644 --- a/docs/conjure-help.html +++ b/docs/conjure-help.html @@ -238,6 +238,11 @@  --line-width=INTLine width to use during pretty printing.
Default: 120 General:  --limit-time=INTTime limit in seconds (real time). +  +conjure lsp [OPTIONS] +  + --loglevel=LOGLEVEL  + --limittime=INT 
From af2e355b01730e08836e74429ef57f86b1f996b5 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 15:21:39 +0100 Subject: [PATCH 218/378] Rebasing tidy-up --- src/Conjure/LSP/Handlers/SemanticTokens.hs | 2 +- src/Conjure/UI.hs | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs index 8fdc2fca5a..f8224388f5 100644 --- a/src/Conjure/LSP/Handlers/SemanticTokens.hs +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -7,7 +7,7 @@ import Data.Text (pack) import Conjure.LSP.Util (withProcessedDoc, ProcessedFile (ProcessedFile), sourcePosToPosition, sendInfoMessage, sendErrorMessage) import Conjure.Language.Validator (ValidatorState (symbolCategories), TaggedToken (TaggedToken), TagType (..)) import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) -import Conjure.Language.NewLexer (ETok(..), Offsets (..), trueLength) +import Conjure.Language.Lexer (ETok(..), Offsets (..), trueLength) import Language.LSP.Types (SemanticTokenTypes(..), SemanticTokenModifiers (..)) import qualified Data.Map as M diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index 3cabdd3eda..7531ad25a3 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -207,6 +207,10 @@ data UI , outputFormat :: OutputFormat -- Essence by default , lineWidth :: Int -- 120 by default } + | LSP + { logLevel :: LogLevel + , limitTime :: Maybe Int + } deriving (Eq, Ord, Show, Data, Typeable, Generic) instance Serialize UI From a269a9296f8e0d3aed9dbe25bc06655ce57dbdb8 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 12 Apr 2023 16:28:21 +0100 Subject: [PATCH 219/378] Undoes accidently removing the entry point --- docs/conjure-help.txt | 5 +++++ src/Conjure/UI.hs | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/docs/conjure-help.txt b/docs/conjure-help.txt index a55f8baf72..35aa27329a 100644 --- a/docs/conjure-help.txt +++ b/docs/conjure-help.txt @@ -459,4 +459,9 @@ Default: 120 General: --limit-time=INT Time limit in seconds (real time). + + conjure lsp [OPTIONS] + + --loglevel=LOGLEVEL + --limittime=INT diff --git a/src/Conjure/UI.hs b/src/Conjure/UI.hs index 7531ad25a3..a26e790e43 100644 --- a/src/Conjure/UI.hs +++ b/src/Conjure/UI.hs @@ -1389,6 +1389,10 @@ ui = modes &= help "Strengthen an Essence model as described in \"Reformulating \ \Essence Specifications for Robustness\",\n\ \which aims to make search faster." + ,LSP { + logLevel = def, + limitTime = Nothing + } &= name "lsp" ] &= program "conjure" &= helpArg [explicit, name "help"] &= versionArg [explicit, name "version"] From 509db6517913d5be239a5482de28f6b06f360fed Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Apr 2023 12:40:46 +0100 Subject: [PATCH 220/378] Warning fixes --- src/Conjure/LSP/Documentation.hs | 2 +- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 34 ++++++++++------------ src/Conjure/LSP/Handlers/File.hs | 20 +++++-------- src/Conjure/LSP/Handlers/Format.hs | 2 +- src/Conjure/LSP/Handlers/Hover.hs | 14 ++++----- src/Conjure/LSP/Handlers/SemanticTokens.hs | 3 +- src/Conjure/LSP/LanguageServer.hs | 4 +-- src/Conjure/LSP/Util.hs | 10 +++---- src/Conjure/UI/MainHelper.hs | 1 - 9 files changed, 41 insertions(+), 49 deletions(-) diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs index a30be9ca85..c3568d652f 100644 --- a/src/Conjure/LSP/Documentation.hs +++ b/src/Conjure/LSP/Documentation.hs @@ -1,5 +1,5 @@ module Conjure.LSP.Documentation where -import Paths_conjure_cp (getDataDir, getDataFileName) +import Paths_conjure_cp (getDataFileName) import Language.LSP.Types (MarkupKind (MkMarkdown), MarkupContent (MarkupContent)) import Conjure.Prelude import qualified Data.Text as T diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index 0c0a8b5364..8da33744a2 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -1,14 +1,13 @@ module Conjure.LSP.Handlers.DocumentSymbol where -import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getProcessedDoc, getRelevantRegions, regionToRange, withProcessedDoc) +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), regionToRange, withProcessedDoc) import Conjure.Language (Type (..)) -import Conjure.Language.Pretty (Pretty (..)) import Conjure.Language.Type (IntTag (..)) import Conjure.Language.Validator (Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..)) import Conjure.Prelude import Control.Lens -import Data.Text (pack, unpack, intercalate) -import Language.LSP.Server (Handlers, LspM, requestHandler, sendNotification) +import Data.Text (intercalate) +import Language.LSP.Server (Handlers, LspM, requestHandler) import Language.LSP.Types (SymbolKind(..),SMethod(STextDocumentDocumentSymbol),type (|?) (..), DocumentSymbol (..)) import qualified Language.LSP.Types as T import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument)) @@ -39,9 +38,9 @@ translate reg@(RegionInfo r rSel ty cs) = getRegionName :: RegionInfo -> Text getRegionName (rRegionType->rType) = case rType of - Definition txt ki -> txt - LiteralDecl ki -> "Literal" - Ref txt ki dr -> txt + Definition txt _ -> txt + LiteralDecl _ -> "Literal" + Ref txt _ _ -> txt Structural st -> case st of SSuchThat -> "Constraints" SGiven -> "Parameters" @@ -56,25 +55,24 @@ getRegionName (rRegionType->rType) = case rType of SGen -> "Generator" SWhere -> "Parameter validation" SGoal dir -> dir - _ -> pack $ show st - Documentation dt txt -> "" + Documentation _ _ -> "" getRegionDetail :: RegionInfo -> Maybe Text -getRegionDetail (RegionInfo{rRegionType=rType,rChildren=children}) = +getRegionDetail (RegionInfo{rRegionType=rType,rChildren=childDefs}) = case rType of - Definition txt ki -> Just $ prettyT ki + Definition _ ki -> Just $ prettyT ki LiteralDecl ki -> Just $ prettyT ki - Ref txt ki dr -> Just $ prettyT ki + Ref _ ki _ -> Just $ prettyT ki Structural st -> case st of SSuchThat -> Nothing - SGiven -> Just $ getDefs children - SFind -> Just $ getDefs children - SLetting -> Just $ getDefs children - SEnum nm -> Just "new type enum" + SGiven -> Just $ getDefs childDefs + SFind -> Just $ getDefs childDefs + SLetting -> Just $ getDefs childDefs + SEnum _ -> Just "new type enum" SQuantification _ ki -> Just $ prettyT ki SComprehension ki -> Just $ prettyT ki _ -> Nothing - Documentation dt txt -> Nothing + Documentation{} -> Nothing where getDefs :: [RegionInfo] -> Text getDefs rs = Data.Text.intercalate ", " [nm | Definition nm _ <- rRegionType <$> rs] @@ -101,7 +99,7 @@ symbolKindFromDeclaration (Structural st) = Just $ (case st of SFind -> SkField SLetting -> SkField SBranching -> SkClass - SEnum nm -> SkEnum + SEnum _ -> SkEnum SQuantification _ _-> SkOperator SComprehension _ -> SkArray SGuard -> SkBoolean diff --git a/src/Conjure/LSP/Handlers/File.hs b/src/Conjure/LSP/Handlers/File.hs index de379ce754..c9e9c37c5e 100644 --- a/src/Conjure/LSP/Handlers/File.hs +++ b/src/Conjure/LSP/Handlers/File.hs @@ -4,13 +4,16 @@ {-# LANGUAGE OverloadedStrings #-} module Conjure.LSP.Handlers.File where import Conjure.Prelude -import Language.LSP.Server (notificationHandler, Handlers, LspM, sendNotification, publishDiagnostics, getVirtualFile) -import Language.LSP.Types (SMethod (STextDocumentDidOpen, STextDocumentDidChange, STextDocumentDidClose), NotificationMessage (NotificationMessage), DidOpenTextDocumentParams (DidOpenTextDocumentParams), DidChangeTextDocumentParams (DidChangeTextDocumentParams), DidCloseTextDocumentParams (DidCloseTextDocumentParams), toNormalizedUri, Uri) +import Language.LSP.Server (notificationHandler, Handlers, LspM, publishDiagnostics, getVirtualFile) +import Language.LSP.Types ( + SMethod (STextDocumentDidOpen, STextDocumentDidChange, STextDocumentDidClose) + , toNormalizedUri + ,Uri) import Data.Text (pack) import Control.Lens import Language.LSP.VFS import Language.LSP.Types.Lens (HasTextDocument(textDocument), HasParams (..), HasUri (uri)) -import Conjure.LSP.Util (getErrorsForURI, getErrorsFromText, sendInfoMessage, sendErrorMessage, getDiagnostics) +import Conjure.LSP.Util (getErrorsFromText,sendErrorMessage, getDiagnostics) import Language.LSP.Diagnostics (partitionBySource) import Prettyprinter fileHandlers :: Handlers (LspM ()) @@ -18,8 +21,6 @@ fileHandlers = mconcat [fileOpenedHandler,fileChangedHandler,fileClosedHandler] fileOpenedHandler :: Handlers (LspM ()) fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do - let NotificationMessage _ _ (DidOpenTextDocumentParams doc) = req - -- sendNotification SWindowShowMessage (ShowMessageParams MtInfo $ pack ("Opened file "++ show doc++ "\n")) let td = req^.params.textDocument doDiagForDocument td pure () @@ -28,17 +29,12 @@ fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do fileChangedHandler :: Handlers (LspM ()) fileChangedHandler = notificationHandler STextDocumentDidChange $ \ req -> do - let NotificationMessage _ _ (DidChangeTextDocumentParams id chg) = req - -- sendInfoMessage $ pack ("Changed file "++ show chg ++ "\n") let td = req^.params.textDocument doDiagForDocument td pure () - + --handle this only to suppress not implemented message fileClosedHandler :: Handlers (LspM ()) -fileClosedHandler = notificationHandler STextDocumentDidClose $ \ req -> do - let NotificationMessage _ _ (DidCloseTextDocumentParams id) = req - -- sendInfoMessage $ pack ("Closed file "++ show id ++ "\n") - pure () +fileClosedHandler = notificationHandler STextDocumentDidClose $ \ _ -> pure () diff --git a/src/Conjure/LSP/Handlers/Format.hs b/src/Conjure/LSP/Handlers/Format.hs index e84bb6572c..d3fb80bc62 100644 --- a/src/Conjure/LSP/Handlers/Format.hs +++ b/src/Conjure/LSP/Handlers/Format.hs @@ -3,7 +3,7 @@ import Language.LSP.Server (requestHandler, LspM, Handlers) import Language.LSP.Types import Control.Lens import Conjure.Prelude -import Conjure.LSP.Util (withFile, sendInfoMessage, sendErrorMessage) +import Conjure.LSP.Util (withFile, sendErrorMessage) import Conjure.Language.Parser (prettyPrintWithChecks) import qualified Language.LSP.Types as Ty import qualified Prettyprinter as Pr diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 045bd441a1..9038f58bb4 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -1,14 +1,14 @@ module Conjure.LSP.Handlers.Hover where -import Language.LSP.Server (requestHandler, LspM, Handlers, sendNotification) +import Language.LSP.Server (requestHandler, LspM, Handlers) import Language.LSP.Types -import Control.Lens + import Conjure.Prelude -import Data.Text as T (pack, concat, unpack) +import Data.Text as T (pack) import Conjure.LSP.Util (getRelevantRegions, withProcessedDoc, ProcessedFile (ProcessedFile), snippet) -import Conjure.Language.Validator (RegionInfo (..), DiagnosticRegion (DiagnosticRegion, drSourcePos), RegionType (..)) +import Conjure.Language.Validator (RegionInfo (..), RegionType (..)) import Prettyprinter -import Conjure.LSP.Documentation (tryGetDocsByName, getDocsForBuiltin) +import Conjure.LSP.Documentation ( getDocsForBuiltin) import qualified Conjure.Language.Pretty as CPr hoverHandler :: Handlers (LspM ()) @@ -25,10 +25,10 @@ hoverHandler = requestHandler STextDocumentHover $ \ req res -> do prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent) -prettySymbol (RegionInfo dr _ dt _) = case dt of +prettySymbol (RegionInfo _ _ dt _) = case dt of Definition nm ty -> return $ Just . snippet . pack.show $ hcat [pretty $ nm ," : ",pretty.show $ CPr.pretty ty] LiteralDecl{} -> return Nothing - Ref nm k DiagnosticRegion{drSourcePos=sp} -> return . Just .snippet . pack.show $ hcat [pretty $ nm," : ",pretty.show $ CPr.pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] + Ref nm k _ -> return . Just .snippet . pack.show $ hcat [pretty $ nm," : ",pretty.show $ CPr.pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] Documentation {} -> liftIO $ getDocsForBuiltin dt _ -> return Nothing diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs index f8224388f5..57a73d9330 100644 --- a/src/Conjure/LSP/Handlers/SemanticTokens.hs +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -3,8 +3,7 @@ import Language.LSP.Server (requestHandler, LspM, Handlers) import qualified Language.LSP.Types as T import Control.Lens import Conjure.Prelude -import Data.Text (pack) -import Conjure.LSP.Util (withProcessedDoc, ProcessedFile (ProcessedFile), sourcePosToPosition, sendInfoMessage, sendErrorMessage) +import Conjure.LSP.Util (withProcessedDoc, ProcessedFile (ProcessedFile), sourcePosToPosition, sendErrorMessage) import Conjure.Language.Validator (ValidatorState (symbolCategories), TaggedToken (TaggedToken), TagType (..)) import Language.LSP.Types.Lens (HasParams(..), HasTextDocument (textDocument)) import Conjure.Language.Lexer (ETok(..), Offsets (..), trueLength) diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index 1126fe13c2..92321c9ace 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -5,7 +5,7 @@ module Conjure.LSP.LanguageServer where import Language.LSP.Server import qualified Language.LSP.Types as J -import Conjure.LSP.Handlers.File (fileHandlers, fileOpenedHandler) +import Conjure.LSP.Handlers.File (fileHandlers) import Conjure.LSP.Handlers.Initialize (handleInitialized) import Conjure.Prelude import Conjure.LSP.Handlers.Hover (hoverHandler) @@ -16,7 +16,7 @@ import Conjure.LSP.Handlers.Format (formatHandler) data LSPConfig = LSPConfig {} startServer :: LSPConfig -> IO () -startServer cfg = do +startServer _ = do _ <- runServer $ conjureLanguageServer return () diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index ca8052f248..319daadbe8 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -33,8 +33,8 @@ processFile t = do getErrorsForURI :: NormalizedUri -> LspM () (Either Text ProcessedFile) -getErrorsForURI uri = do - r <- getVirtualFile uri +getErrorsForURI furi = do + r <- getVirtualFile furi let f = maybe "" virtualFileText r getErrorsFromText f @@ -61,7 +61,7 @@ getRangeFromRegion (DiagnosticRegion {drSourcePos=(SourcePos _ r c),drLength=l}) getDiagnosticDetails :: V.Diagnostic -> (DiagnosticSeverity,Text) getDiagnosticDetails x = case x of - V.Error et -> (DsError,pack $displayError et) + V.Error et -> (DsError,pack $ displayError et) V.Warning wt -> (DsWarning , pack $ displayWarning wt) V.Info it -> (DsHint,pack $ show it) @@ -131,6 +131,6 @@ regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (s snippet :: Text -> MarkupContent snippet = markedUpContent "essence" -instance Pretty Position where - pretty (Position (pretty . show->r) (pretty . show->c)) = r <> ":" <> c +prettyPos :: Position -> Doc +prettyPos (Position (pretty . show->r) (pretty . show->c)) = r <> ":" <> c diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index bc68726d18..21533addc8 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -65,7 +65,6 @@ import qualified Data.Text as T ( unlines, isInfixOf ) -- parallel-io import Control.Concurrent.ParallelIO.Global ( parallel, stopGlobalPool ) import Conjure.LSP.LanguageServer (startServer, LSPConfig (LSPConfig)) -import Conjure.Language.Parser (prettyPrintWithChecks) mainWithArgs :: forall m . From e093cc52ca87129e5e75c51d372967529ab15c44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 24 Apr 2023 11:50:48 +0100 Subject: [PATCH 221/378] version 2.4.1 --- CITATION.cff | 4 ++-- conjure-cp.cabal | 2 +- docs/conf.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 694855bd67..a802003563 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -5,5 +5,5 @@ authors: given-names: Özgür orcid: https://orcid.org/0000-0001-9519-938X title: Conjure: The Automated Constraint Modelling Tool -version: v2.4.0 -date-released: 2022-11-15 +version: v2.4.1 +date-released: 2023-04-24 diff --git a/conjure-cp.cabal b/conjure-cp.cabal index ffe0d5e181..5478960c02 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -1,6 +1,6 @@ Name: conjure-cp -Version: 2.4.0 +Version: 2.4.1 Synopsis: Conjure: The Automated Constraint Modelling Tool Description: . Homepage: http://github.com/conjure-cp/conjure diff --git a/docs/conf.py b/docs/conf.py index 225ebae233..9b7a2fd341 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -71,7 +71,7 @@ # built documents. # # The short X.Y version. -version = u'2.4.0' +version = u'2.4.1' # The full version, including alpha/beta/rc tags. release = version From e8c10fcd82cace1533214df70761d3cc2b765a7e Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:38:10 +0100 Subject: [PATCH 222/378] Futoshiki notebook tutorial --- docs/tutorials/notebooks/Futoshiki.ipynb | 838 +++++++++++++++++++++++ 1 file changed, 838 insertions(+) create mode 100644 docs/tutorials/notebooks/Futoshiki.ipynb diff --git a/docs/tutorials/notebooks/Futoshiki.ipynb b/docs/tutorials/notebooks/Futoshiki.ipynb new file mode 100644 index 0000000000..b44da9083f --- /dev/null +++ b/docs/tutorials/notebooks/Futoshiki.ipynb @@ -0,0 +1,838 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true, + "authorship_tag": "ABX9TyPiKmAzSUQjsG0RgdhqpcSI", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "
\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Futoshiki\n", + "Original [Futoshiki](https://conjure.readthedocs.io/en/latest/tutorials.html#futoshiki) by Ruth Hoffmann and Gökberk Koçak. Adapted by Alex Gallagher." + ], + "metadata": { + "id": "Hb26fiIv_enr" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Problem" + ], + "metadata": { + "id": "U59hSFC__0c1" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "dTKv5TR6_mTg", + "outputId": "e33d73d0-1816-4b27-be6e-70b1c2cadef4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "`n x n` board where each column and row is filled with the unique numbers from 1 to `n`, similar to a sudoku. In contrast to sudoku, there are less than and greater than symbols between cells indicating that one cell has to be filled with a number greater than (or less than) than the cell on the other side of the operator.\n", + "\n", + "\n", + "![example.webp](data:image/webp;base64,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)" + ], + "metadata": { + "id": "2DOlv_Cl_7K3" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Instance" + ], + "metadata": { + "id": "7mIcMmujEkSQ" + } + }, + { + "cell_type": "markdown", + "source": [ + "The definition of the instance below contains the information about our starting board of a specific instance that we want to solve. See the picture at the beginning to see what it looks like." + ], + "metadata": { + "id": "Dz0uFOj3FI7r" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "letting n be 4" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vUmoBT79QyAp", + "outputId": "9cdb0b5b-3acf-4c15-cae5-f656fe57ea04" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We are dealing with a 4 by 4 board." + ], + "metadata": { + "id": "yhJqZq7YFUyQ" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "letting hints be function(\n", + " (1,1) --> 2,\n", + " (2,2) --> 2\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hA8zsbcwQ2_6", + "outputId": "314fcb78-a928-4482-86fc-32b9e03d9486" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "There will be two `2` s on the board given as a hint. One in the top left corner `(1,1)` and the second number 2 in cell `(2,2)`." + ], + "metadata": { + "id": "FK76ksfWFdde" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "letting less_than be relation(\n", + " ((1,1) , (2,1)),\n", + " ((4,2) , (3,2)),\n", + " ((3,3) , (3,4)),\n", + " ((3,4) , (4,4))\n", + ")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tkpqtndrQ8bk", + "outputId": "f17b9031-da6c-4114-fb20-2d1fa0e642e3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "There are 4 relation symbols on the board, between cells." + ], + "metadata": { + "id": "292rBj6cF4dy" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Solving the problem step by step" + ], + "metadata": { + "id": "ePFid8u6AS2U" + } + }, + { + "cell_type": "markdown", + "source": [ + "The line by line explanation of the model starts here." + ], + "metadata": { + "id": "UjSa9brNBPo0" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "letting DOMAIN be domain int(1..n)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fCMtDamfSOSI", + "outputId": "c30ef3df-0ae8-4b6a-e5bd-e3eef66b597c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We start at 1 and go up to `n` (for both the elements of the cells and the cell locations)." + ], + "metadata": { + "id": "Vk22ri4YCBHQ" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "poiZlqPmSzYC", + "outputId": "7ac19e77-b0d0-469e-9c30-bdd4d3b2b0ca" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'board': {'1': {'1': 1, '2': 1, '3': 1, '4': 1},\n", + " '2': {'1': 1, '2': 1, '3': 1, '4': 1},\n", + " '3': {'1': 1, '2': 1, '3': 1, '4': 1},\n", + " '4': {'1': 1, '2': 1, '3': 1, '4': 1}}}" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We are now telling the solver that we are trying to find a `n x n` board with elements from 1 to `n` in each cell." + ], + "metadata": { + "id": "Awdg2ZmICVzt" + } + }, + { + "cell_type": "markdown", + "source": [ + "`such that` indicates the beginning of the constraints block." + ], + "metadata": { + "id": "TO4WlU3ICc5e" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll (hint,num) in hints .\n", + " board[hint[1], hint[2]] = num," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "h0CC7hO9V0ER", + "outputId": "a79a13b7-bbd3-4174-9812-8e2c93f4ea94" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'board': {'1': {'1': 2, '2': 1, '3': 1, '4': 1},\n", + " '2': {'1': 1, '2': 2, '3': 1, '4': 1},\n", + " '3': {'1': 1, '2': 1, '3': 1, '4': 1},\n", + " '4': {'1': 1, '2': 1, '3': 1, '4': 1}}}" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This constraint defines the hints, so the cells that are filled in when we get the puzzle." + ], + "metadata": { + "id": "fjaEYcrwCkcp" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll i: DOMAIN .\n", + " allDiff(board[i,..])," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3teSEg_oV_P3", + "outputId": "2261633e-c9ca-4bb1-ee10-2175311d5241" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'board': {'1': {'1': 2, '2': 1, '3': 3, '4': 4},\n", + " '2': {'1': 1, '2': 2, '3': 3, '4': 4},\n", + " '3': {'1': 1, '2': 2, '3': 3, '4': 4},\n", + " '4': {'1': 1, '2': 2, '3': 3, '4': 4}}}" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This constraint defines that every cell in a row has to be a unique number between 1 and n." + ], + "metadata": { + "id": "235I1jCgEWrl" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll j: DOMAIN .\n", + " allDiff(board[..,j])," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "yW83rA4tWI1D", + "outputId": "a5aea27a-eea5-4fdc-8e47-dd83232bbf74" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'board': {'1': {'1': 2, '2': 1, '3': 3, '4': 4},\n", + " '2': {'1': 1, '2': 2, '3': 4, '4': 3},\n", + " '3': {'1': 3, '2': 4, '3': 1, '4': 2},\n", + " '4': {'1': 4, '2': 3, '3': 2, '4': 1}}}" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This constraint defines that every cell in a column has to be a unique number between 1 and n." + ], + "metadata": { + "id": "vC0XcQshEboo" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll (l,g) in less_than .\n", + " board[l[1],l[2]] < board[g[1],g[2]]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uuOgwJkoWRmi", + "outputId": "d1bb4aef-de01-4739-d241-a6f306e29e88" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'board': {'1': {'1': 2, '2': 1, '3': 4, '4': 3},\n", + " '2': {'1': 4, '2': 2, '3': 3, '4': 1},\n", + " '3': {'1': 3, '2': 4, '3': 1, '4': 2},\n", + " '4': {'1': 1, '2': 3, '3': 2, '4': 4}}}" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Finally this constraint enforces the less than relation. `l` is the number that is the cell that contains the number that is less than then the cell `g`." + ], + "metadata": { + "id": "hVtaESWqEhHp" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Visualising the results" + ], + "metadata": { + "id": "fr_wb1LrF7cl" + } + }, + { + "cell_type": "markdown", + "source": [ + "Printing the result gives us:" + ], + "metadata": { + "id": "aYpytpZZGU39" + } + }, + { + "cell_type": "code", + "source": [ + "for row in board:\n", + " for square in board[row]:\n", + " print(board[row][square], end=\" \")\n", + " print(\"\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "B4eEEhuMGcCt", + "outputId": "906f9c8e-87e2-4553-fd61-9de0417eff46" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "2 1 4 3 \n", + "4 2 3 1 \n", + "3 4 1 2 \n", + "1 3 2 4 \n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This is represented in the following graph:" + ], + "metadata": { + "id": "LgUm0W-yzsxk" + } + }, + { + "cell_type": "code", + "source": [ + "import graphviz\n", + "\n", + "p = graphviz.Digraph('parent')\n", + "p.attr(compound='true')\n", + "p.attr(rankdir=\"TB\")\n", + "\n", + "\n", + "id = 0\n", + "rowNum = 0\n", + "\n", + "for row in board:\n", + " with p.subgraph(name='cluster'+str(rowNum)) as c:\n", + " p.attr(style='invis')\n", + "\n", + " for square in range(4,0,-1):\n", + " c.node(str(id), str(board[row][str(square)]), shape='box')\n", + " id = id +1\n", + " rowNum = rowNum + 1;\n", + "\n", + "p.edge('0', '4', None, {'style':'invis', 'rank':'same'})\n", + "p.edge('4', '8', None, {'style':'invis', 'rank':'same'})\n", + "p.edge('8', '12', None, {'style':'invis', 'rank':'same'})\n", + "\n", + "p.edge('7','3', None, {'constraint':'False'})\n", + "p.edge('8','9', None, {'constraint':'False'})\n", + "p.edge('12','8', None, {'constraint':'False'})\n", + "p.edge('10','14', None, {'constraint':'False'})\n", + "\n", + "p\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 411 + }, + "id": "PLN54F5nxj9o", + "outputId": "1873f3e6-8352-494f-e702-72aba9fa69f2" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ], + "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster0\n\n\ncluster1\n\n\ncluster2\n\n\ncluster3\n\n\n\n0\n\n3\n\n\n\n4\n\n1\n\n\n\n\n1\n\n4\n\n\n\n2\n\n1\n\n\n\n3\n\n2\n\n\n\n8\n\n2\n\n\n\n\n5\n\n3\n\n\n\n6\n\n2\n\n\n\n7\n\n4\n\n\n\n7->3\n\n\n\n\n\n9\n\n1\n\n\n\n8->9\n\n\n\n\n\n12\n\n4\n\n\n\n\n10\n\n4\n\n\n\n14\n\n3\n\n\n\n10->14\n\n\n\n\n\n11\n\n3\n\n\n\n12->8\n\n\n\n\n\n13\n\n2\n\n\n\n15\n\n1\n\n\n\n" + }, + "metadata": {}, + "execution_count": 132 + } + ] + } + ] +} \ No newline at end of file From 35bca1cd268a89356e4b3232b7287eac88ddccc7 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:41:09 +0100 Subject: [PATCH 223/378] BIBD notebook tutorial --- BIBD.ipynb | 912 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 912 insertions(+) create mode 100644 BIBD.ipynb diff --git a/BIBD.ipynb b/BIBD.ipynb new file mode 100644 index 0000000000..abd4b329a4 --- /dev/null +++ b/BIBD.ipynb @@ -0,0 +1,912 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyOumeCdHmVdbVoT20D823nd", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# BIBD\n", + "Original [BIBD](https://conjure.readthedocs.io/en/latest/tutorials.html#bibd) by authors Chris Jefferson and Alice Lynch. Adapted by Alex Gallagher." + ], + "metadata": { + "id": "w5WaD9ayI0x4" + } + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial discusses a classic constraint problem and introduces the use of quantifiers in Essence." + ], + "metadata": { + "id": "h3T-cY-EJAUj" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "id": "mbhQ1aHNJsYf", + "outputId": "0746aaae-6254-4b04-c3a2-b7b9006b8652" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " % Total % Received % Xferd Average Speed Time Time Time Current\n", + " Dload Upload Total Spent Left Speed\n", + "100 697 100 697 0 0 4148 0 --:--:-- --:--:-- --:--:-- 4148\n", + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## The Problem" + ], + "metadata": { + "id": "_EJEBH45JDbz" + } + }, + { + "cell_type": "markdown", + "source": [ + "Balanced Incomplete Block Design (BIBD) is a problem from the field of experimental design. It is best explained with an example." + ], + "metadata": { + "id": "IPGZRYG2JYPO" + } + }, + { + "cell_type": "markdown", + "source": [ + "Emily wants to establish which crops (🥔,🌽,🥦,🥕,🥒, 🍅) grow best in Scotland. She has recruited 4 farmers who are happy to help by growing some of the crops. Unfortunately none of the farmers have enough space to grow every crop, they can each grow 3 different crops. Emily is concerned that the different environment of each farm may impact the crops growth. Therefore she wants to make sure that each farmer grows a different combination of crops and that every crop has been grown in the same number of different farms. This approach is called Balanced Incomplete Block Design (BIBD)." + ], + "metadata": { + "id": "R3rC6uYAJaLg" + } + }, + { + "cell_type": "markdown", + "source": [ + "We can build a model to tell us the crops that each farm should grow." + ], + "metadata": { + "id": "o7ZbDpiNJcae" + } + }, + { + "cell_type": "markdown", + "source": [ + "## The Model" + ], + "metadata": { + "id": "IkoVyWxUJd-7" + } + }, + { + "cell_type": "markdown", + "source": [ + "We need to specify the crops, the number of farms, the number of crops that can be grown per farm, the number of different farms that will grow each crop and the number of crops each pair of farmers has in common." + ], + "metadata": { + "id": "4skHvCtOJgR4" + } + }, + { + "cell_type": "markdown", + "source": [ + "Emily has decided that she wants each crop to be grown in 2 different farms, and that each pair of farmers will have 1 crop in common." + ], + "metadata": { + "id": "pkh1DD0fJh6w" + } + }, + { + "cell_type": "markdown", + "source": [ + "Below we define the intial parameters:" + ], + "metadata": { + "id": "2al5-kz9JjdA" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_X4PB87CIyz4", + "outputId": "80c19416-ac53-4898-93a7-a61e68c02aea" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ], + "source": [ + "%%conjure\n", + "letting crops be new type enum {🥔,🌽,🥦,🥕,🥒, 🍅}\n", + "letting farms be 4\n", + "letting crops_per_farm be 3\n", + "letting farms_per_crop be 2\n", + "letting overlap be 1" + ] + }, + { + "cell_type": "markdown", + "source": [ + "The model will be defined in a new cell. It should start by accessing the provided parameters, this uses the given keyword, followed by the names of the parameters and their type." + ], + "metadata": { + "id": "DXAdjZdyJ1BA" + } + }, + { + "cell_type": "markdown", + "source": [ + "`given farms, crops_per_farm, farms_per_crop, overlap: int`\n", + "\n", + "`given crops new type enum`" + ], + "metadata": { + "id": "tifxXJkAJ7sH" + } + }, + { + "cell_type": "markdown", + "source": [ + "Next, we need to define what we are looking for. The ‘find’ keyword indicates that the solver should find a value to for that variable. We want to find a set containing sets of crops. Each set of crops is a crop assignment for a farm." + ], + "metadata": { + "id": "F6pOOUzpKEHU" + } + }, + { + "cell_type": "markdown", + "source": [ + "`given farms, crops_per_farm, farms_per_crop, overlap: int`\n", + "\n", + "`given crops new type enum`\n", + "\n", + "`find crop_assignment: set of set of crops`" + ], + "metadata": { + "id": "54TpE37nKF5A" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find crop_assignment: set of set of crops" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kG-nX4l8KzPt", + "outputId": "f5f874d0-88f6-401e-8ccb-6c2e0eaaf0ad" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': []}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "With no constraints it produces an empty set for crop assignment." + ], + "metadata": { + "id": "So-pKa8_K61d" + } + }, + { + "cell_type": "markdown", + "source": [ + "The first, basic, constraints is the number of farms. The number of sets in the crop_assignment set should equal the numbers of farms. `|crop_assignment|` indicates the size of the crop_assignment set. By setting the size equal to the number of farms (after the such that keyword) the solver will only produce solutions where the size of the set is the same as the number of farms. A comma on the end of line indicates that there are more constraints to follow." + ], + "metadata": { + "id": "q3w-ODcTMBbx" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find crop_assignment: set of set of crops\n", + "\n", + "such that |crop_assignment| = farms," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pC0XyFeNMKH-", + "outputId": "9f612734-60d2-481d-973e-d014cdc18259" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", + " ['🥔', '🥕', '🥒'],\n", + " ['🌽', '🥦', '🥒'],\n", + " ['🌽', '🥕', '🍅']]}" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The model now produces four ‘farms’ but the number of crops assigned to each are not suitable." + ], + "metadata": { + "id": "kAvJEQs7MOaL" + } + }, + { + "cell_type": "markdown", + "source": [ + "Next we want to apply the number of crops per farm constraint to every set in the crop assignment set. The `forAll` keyword will apply the constraint (`|farm| = crops_per_farm`) across every element in the crop_assignment set (represented by `farm`). The `.` separates the constraint from the quantifier setup." + ], + "metadata": { + "id": "AerJszraMQlL" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll farm in crop_assignment . |farm| = crops_per_farm," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vfCF_EMYMYfK", + "outputId": "21d67b3d-3b66-4802-9a65-e51e5ef1b13e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", + " ['🥔', '🥕', '🥒'],\n", + " ['🌽', '🥦', '🥒'],\n", + " ['🌽', '🥕', '🍅']]}" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The model now has the correct number of farms and assigns the correct number of crops per farms, but doesn’t assign all types of crops." + ], + "metadata": { + "id": "IbYBEnrCMez8" + } + }, + { + "cell_type": "markdown", + "source": [ + "The next constraint is number of farms with a given crop. This is more complex than the previous constraints. Let’s go over it step by step. For every crop we need to find the number of farms assigned that crop and set it to equal the parameter Emily chose for farms per crop. In order to find this we first use a `forAll` to apply the constraint to every crop. `forAll crop : crops . [OurCalculation] = farms_per_crop`" + ], + "metadata": { + "id": "AYS9AwajMgbc" + } + }, + { + "cell_type": "markdown", + "source": [ + "Then we need to count every farm that is planting that crop. For this we should use the `sum` quantifier rather than the `forAl`l (`sum farm in crop_assignment . [Action]`). `sum` will add together all the results of the chosen action. In order to use sum to count the number of farms that contain a crop we need to return 1 if the farm is planting the crop and 0 otherwise. The `in` keyword can be used to check if a crop is present in a farm, the resulting boolean can be converted to 1 or 0 using `toInt`." + ], + "metadata": { + "id": "XBX3e1ypMq2w" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll crop : crops . (sum farm in crop_assignment . toInt(crop in farm)) = farms_per_crop," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WXmz_3MRM6qS", + "outputId": "59f9f14b-6650-4b3f-b366-e9904383fddb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", + " ['🥔', '🥕', '🥒'],\n", + " ['🌽', '🥦', '🥒'],\n", + " ['🌽', '🥕', '🍅']]}" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Our model now produces a crop assignment that assigns the correct number of crops to each farmer and the correct number of crops in total but there is lot of overlap between the first and second farmer and between the third and fourth farmer but very little overlap between the two pairs. This is why Emily specified the overlap constraint (sometimes called lambda in BIBD models). In order to make sure that every pair of farmers have at least 1 crop in common we need to define another constraint." + ], + "metadata": { + "id": "xvjwJXjjM_du" + } + }, + { + "cell_type": "markdown", + "source": [ + "We need to check every pair of farms, we can do this by using two `forAll` keywords (`forAll farm1 in crop_assignment. forAll farm2 in crop_assignment . [OurConstraint]`). We can then use the `intersect` keyword to get all crops that the two farms have in common. The `||` notation can be used to get the size of the intersect which we can then set equal to the overlap parameter (`|farm1 intersect farm2| = overlap`)." + ], + "metadata": { + "id": "yuXIi5gWNBxD" + } + }, + { + "cell_type": "markdown", + "source": [ + "However, running the model at this point produces no solutions, as iterating over the crop_assignment in this way means that sometimes farm1 and farm2 will be the same farm, so the intersection will be the number of crops assigned to the farm (3) and never be 1 (the overlap parameter), resulting in no valid solutions." + ], + "metadata": { + "id": "YcZmi9RtNPhx" + } + }, + { + "cell_type": "markdown", + "source": [ + "In order to avoid this we need to add an further condition to the constraint which checks they are not the same farm before applying the constraint. `->` is used, where the left hand side has a condition and the right hand side has a constraint which is only used if the left hand side is true. `farm1 != farm2 -> |farm1 intersect farm2| = overlap`" + ], + "metadata": { + "id": "sdQY8XVINREW" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll farm1 in crop_assignment. forAll farm2 in crop_assignment . farm1 != farm2 -> |farm1 intersect farm2| = overlap" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pLhCp7ybNXXw", + "outputId": "c13cbcac-e7eb-4e9b-8927-6a8d66025b13" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", + " ['🥔', '🥕', '🥒'],\n", + " ['🌽', '🥦', '🥒'],\n", + " ['🌽', '🥕', '🍅']]}" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This model produces a valid solution!" + ], + "metadata": { + "id": "CgJZX1gfNdbx" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Improvements" + ], + "metadata": { + "id": "IJaJ-5B2NfIo" + } + }, + { + "cell_type": "markdown", + "source": [ + "Our model now works and produces a correct solution but the code could be improved in places." + ], + "metadata": { + "id": "DZVJ8oIzNheR" + } + }, + { + "cell_type": "markdown", + "source": [ + "First, we remove the last model." + ], + "metadata": { + "id": "WKzpAH2t0Pvg" + } + }, + { + "cell_type": "code", + "source": [ + "%conjure_rollback" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_VcoVlLR0T9f", + "outputId": "113fe4cf-06de-4ec6-ec08-b6c932b8657c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Last added model is removed\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "There is a nicer way to do the final constraint, instead of using a second `forAll` we can use `{farm1, farm2}` and `subsetEq` to generate all pairs that can be made up from a given set." + ], + "metadata": { + "id": "srygkO7LNkEI" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll {farm1, farm2} subsetEq crop_assignment . |farm1 intersect farm2| = overlap" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "roYiXvK5NpoH", + "outputId": "f3fa780f-3731-4f43-d08d-d788dd2980ee" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", + " ['🥔', '🥕', '🥒'],\n", + " ['🌽', '🥦', '🥒'],\n", + " ['🌽', '🥕', '🍅']]}" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Next, we clear the model." + ], + "metadata": { + "id": "oLtJwm1Q0lPv" + } + }, + { + "cell_type": "code", + "source": [ + "%conjure_clear" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "16M5KTOt02GL", + "outputId": "f8c2c8c0-0e88-418e-e45e-449bdae7f5c1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure model cleared\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Providing information in the find statements rather than as constraints often leads to better perform. Essence provides attributes which can be attached to find statements . One of them is size k, which tells Essence that a set is of size k. In our model the number of farms and the number of crops per farm are in effect the size of the crop_assignment set and the size of the sets within the crop_assignment set. Therefore we can move these definitions out of the list of constraints and into the find statement." + ], + "metadata": { + "id": "R9h3z9wFNvHf" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting crops be new type enum {🥔,🌽,🥦,🥕,🥒, 🍅}\n", + "letting farms be 4\n", + "letting crops_per_farm be 3\n", + "letting farms_per_crop be 2\n", + "letting overlap be 1" + ], + "metadata": { + "id": "WySmDV4c06uq", + "outputId": "6233f913-e7db-42f6-f1c3-c80d6bb66b3a", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 19 + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find crop_assignment: set (size farms) of set (size crops_per_farm) of crops\n", + "\n", + "such that\n", + "forAll crop : crops . (sum farm in crop_assignment . toInt(crop in farm)) = farms_per_crop,\n", + "forAll {farm1, farm2} subsetEq crop_assignment . |farm1 intersect farm2| = overlap" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "1KPdRVh9N0l8", + "outputId": "1c23ad2b-66a8-4dd4-a50f-585a988a3086" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'crop_assignment': [['🥔', '🌽', '🥦'],\n", + " ['🥔', '🥕', '🥒'],\n", + " ['🌽', '🥕', '🍅'],\n", + " ['🥦', '🥒', '🍅']]}" + ] + }, + "metadata": {}, + "execution_count": 20 + } + ] + } + ] +} \ No newline at end of file From 5d0f07cb010eecd42910d96b33d6efddf6a93a03 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:41:42 +0100 Subject: [PATCH 224/378] Rename BIBD.ipynb to docs/tutorials/notebooks/BIBD.ipynb --- BIBD.ipynb => docs/tutorials/notebooks/BIBD.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename BIBD.ipynb => docs/tutorials/notebooks/BIBD.ipynb (99%) diff --git a/BIBD.ipynb b/docs/tutorials/notebooks/BIBD.ipynb similarity index 99% rename from BIBD.ipynb rename to docs/tutorials/notebooks/BIBD.ipynb index abd4b329a4..a20c934b3c 100644 --- a/BIBD.ipynb +++ b/docs/tutorials/notebooks/BIBD.ipynb @@ -909,4 +909,4 @@ ] } ] -} \ No newline at end of file +} From fbe175e13b8b25a4e8cfa707924b3631679e7f5f Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:44:33 +0100 Subject: [PATCH 225/378] Simple Permutations notebook tutorial. --- .../notebooks/SimplePermutations.ipynb | 826 ++++++++++++++++++ 1 file changed, 826 insertions(+) create mode 100644 docs/tutorials/notebooks/SimplePermutations.ipynb diff --git a/docs/tutorials/notebooks/SimplePermutations.ipynb b/docs/tutorials/notebooks/SimplePermutations.ipynb new file mode 100644 index 0000000000..51e4e878fc --- /dev/null +++ b/docs/tutorials/notebooks/SimplePermutations.ipynb @@ -0,0 +1,826 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyPeoxDmDrpY9z9gXZGQBH/P", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Simple Permutations" + ], + "metadata": { + "id": "ui5YqwoFv7LV" + } + }, + { + "cell_type": "markdown", + "source": [ + "Original [Simple Permutations](https://conjure.readthedocs.io/en/latest/tutorials.html#simple-permutations) by Ruth Hoffmann and Gökberk Koçak, edited by András Salamon. Adapted by Alex Gallagher." + ], + "metadata": { + "id": "U-HzMB6vs1Zw" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Problem" + ], + "metadata": { + "id": "2mcDxfXktRkP" + } + }, + { + "cell_type": "markdown", + "source": [ + "Let a permutation be a sequence of length ***n*** consisting of numbers between 1 and ***n***, in any order with each number occurring exactly once." + ], + "metadata": { + "id": "vD4QRyo5tVXd" + } + }, + { + "cell_type": "markdown", + "source": [ + "An interval in a permutation **σ** is a factor of contiguous values of **σ** such that their indices are consecutive. For example, in the permutation **π=346978215**,\n", + "**π(4)π(5)π(6)=978** is an interval, whereas **π(1)π(2)π(3)π(4)=3469** is not. It is easy to see that every permutation of length ***n*** has intervals of length 0, 1 and ***n***, at least. The permutations of length ***n*** that only contain intervals of length 0, 1 and ***n*** are said to be simple. So for example the permutation **π=346978215** is not simple as we have seen in the example above that it contains an interval, on the other hand \n", + "**σ=526184937** is simple as there are no intervals of length strictly greater than 1, except the whole of **σ**. See [Hof15](https://conjure.readthedocs.io/en/latest/zreferences.html#id6) for more information on permutation patterns and simple permutations." + ], + "metadata": { + "id": "0lb1eDuYtlM8" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Parameter" + ], + "metadata": { + "id": "Xaie69Fh1n_M" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "Ez_RQBSQw0DV", + "outputId": "a1408b64-36d6-44b0-fec2-962b8929e2a3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting n be 5" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KwusJPeEwu1s", + "outputId": "ec3d4168-2451-4a08-adc3-096d38d12fef" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Enumeration/Generation Model" + ], + "metadata": { + "id": "Ita9c8GMvqB-" + } + }, + { + "cell_type": "markdown", + "source": [ + "We define the size of the permutation to be `n` and we are trying to find all the permutations `perm` to contain the integers 1 to `n`, by specifying that it is `bijective`." + ], + "metadata": { + "id": "uekUqin9xitZ" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find perm : sequence (bijective, size n) of int(1..n)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fS_FucWHxcQL", + "outputId": "f71c97fb-e119-463b-c883-e0f1db1387f2" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'perm': [1, 2, 3, 4, 5]}" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The idea of our approach is the property of an interval, where when sorted it creates a complete range. This can be translated to checking that the difference between the maximal and the minimal elements of the interval is not equal to the cardinality of the interval.\n", + "\n", + "\n", + "We have one constraint to say that there are only intervals of length 0,1 and `n`. This constraint is defined as a matrix comprehension, which will build a matrix consisting of only boolean entries. We then check the matrix with an `and` constraint, to spot if there are any `false` entries, which would mean that we have an interval." + ], + "metadata": { + "id": "X4xBuOqPyGfP" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting example be [ num | num : int(1..5), num != 3 ]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "R68A-dhzysUM", + "outputId": "b7f25d30-e6b8-4ec3-f33e-bc6cafd14161" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'perm': [1, 2, 3, 4, 5]}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This is an example which creates a 1-dimensional matrix of `num`s where none of the entries are `3`. We allow also for `letting` statements inside the matrix comprehensions, which allow us to define intermediary statements." + ], + "metadata": { + "id": "LKPdMqnQ7PCY" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "such that\n", + " and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zu4FYxB7yUoW", + "outputId": "878d5a91-9df7-481b-a4d0-18cd65b3bb49" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'perm': [2, 4, 1, 5, 3]}" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We extract `i` and `j` to be the beginning and the end of the interval, and we need to make sure that `i` is less than `j` to have the right order. As we do not want to include the whole permutation as an interval, we restrict that `i` and `j` cannot be simultaneously at the respective ends of the permutation. The final line of the comprehension sets up the continuous subsequences. On the left hand side of the matrix comprehension we use the interval property that when it is turned into a sorted set it is a complete range." + ], + "metadata": { + "id": "Cf1BEeDg1glo" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Solving" + ], + "metadata": { + "id": "tvH81f_y2I_X" + } + }, + { + "cell_type": "markdown", + "source": [ + "Using **n = 5**, the sample solution is `'perm': [2, 4, 1, 5, 3]`." + ], + "metadata": { + "id": "EL2YTOB52OPk" + } + }, + { + "cell_type": "markdown", + "source": [ + "To find all solutions, type:" + ], + "metadata": { + "id": "S-m9cSca2kpn" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "such that\n", + " and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eWYFmqAD2qBk", + "outputId": "4ca16f13-36fe-40af-e5f8-f149096b4f8d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[{'perm': [2, 4, 1, 5, 3]},\n", + " {'perm': [2, 5, 3, 1, 4]},\n", + " {'perm': [3, 1, 5, 2, 4]},\n", + " {'perm': [3, 5, 1, 4, 2]},\n", + " {'perm': [4, 1, 3, 5, 2]},\n", + " {'perm': [4, 2, 5, 1, 3]}]" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "For `n be 5` you should get 6 solutions." + ], + "metadata": { + "id": "LQwpDusy21y5" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Checking Model with Instances" + ], + "metadata": { + "id": "i1bwy9HI29f6" + } + }, + { + "cell_type": "markdown", + "source": [ + "What the model will tell us is that the permutation is simple (true) or not." + ], + "metadata": { + "id": "GN0CK3Ch3dRW" + } + }, + { + "cell_type": "code", + "source": [ + "%conjure_clear" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZM-TXupi4Crb", + "outputId": "7db6ea45-864d-45e6-b2ff-cc0a9f37a6f9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure model cleared\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting n be 5\n", + "letting perm be sequence( 1, 4, 2, 5, 3)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "m--asAoP34hS", + "outputId": "22e285f5-c529-4089-90ef-64de80414981" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find result : bool\n", + "such that\n", + " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sA6J8xfk3HE3", + "outputId": "39c5de0c-d436-416f-bc11-67d2bed424ed" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'result': False}" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This is a non-simple permutation." + ], + "metadata": { + "id": "sFsXCCIl4Lbt" + } + }, + { + "cell_type": "code", + "source": [ + "%conjure_clear" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8IOTBuUw4ctW", + "outputId": "3fa5a06b-1c09-4868-dac2-081fd3f55e69" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure model cleared\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting n be 5\n", + "letting perm be sequence(2, 4, 1, 5, 3)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "m392EGci4QrA", + "outputId": "2add3fd7-b24d-4622-d4f7-df543d8b5ce9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find result : bool\n", + "such that\n", + " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iIJvB6FM4Zkj", + "outputId": "f85d46dc-90c9-4bf4-ca96-da964a3792e3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'result': True}" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "It is important to clear the model between instances when redefining variables. If we attempt to run the test again without using `%conjure_clear`, the solutions will not reflect the instance provided in the cell." + ], + "metadata": { + "id": "woAjLCyW4iUP" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting n be 5\n", + "letting perm be sequence( 1, 4, 2, 5, 3)\n", + "find result : bool\n", + "such that\n", + " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ggmtQf6q5FKE", + "outputId": "9cbe2ec0-9be3-47de-ec3d-8da0b4800bcb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "'No solution'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } + }, + "metadata": {}, + "execution_count": 13 + } + ] + } + ] +} \ No newline at end of file From 7e872e0c7ec0c93c0494cb18f8afb8bcf33b43e5 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:47:00 +0100 Subject: [PATCH 226/378] Handcrafting Instance Generators notebook tutorial. --- ...fting_Instance_Generators_in_Essence.ipynb | 966 ++++++++++++++++++ 1 file changed, 966 insertions(+) create mode 100644 docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb diff --git a/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb b/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb new file mode 100644 index 0000000000..caec2a30f6 --- /dev/null +++ b/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb @@ -0,0 +1,966 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyOyOIxXu5LVVSWqJoksN5gj", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Handcrafting Instance Generators in Essence" + ], + "metadata": { + "id": "b_9MbyOpkR9A" + } + }, + { + "cell_type": "markdown", + "source": [ + "Original [Handcrafting Instance Generators in Essence](https://conjure.readthedocs.io/en/latest/tutorials.html#semigroups-monoids-and-groups) by Joan Espasa Arxer and Christopher Stone. Adapted by Alex Gallagher." + ], + "metadata": { + "id": "ws4OTYvkkU4Z" + } + }, + { + "cell_type": "markdown", + "source": [ + "In modelling it is common to create an abstract model that expects some input parameters (Also known as “instances”) which are required to run and test the model. In this tutorial we demonstrate how to use ESSENCE to handcraft a generator of instances that can be used to produce input parameters for a specific model." + ], + "metadata": { + "id": "Hyk7zGoUkiV8" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "id": "h8yaBmeymi1R", + "outputId": "3da82d46-c6b8-4df8-b11a-e9faeba2b74a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " % Total % Received % Xferd Average Speed Time Time Time Current\n", + " Dload Upload Total Spent Left Speed\n", + "100 697 100 697 0 0 2640 0 --:--:-- --:--:-- --:--:-- 2640\n", + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Instances for the Knapsack problem" + ], + "metadata": { + "id": "7DlRahOslGIO" + } + }, + { + "cell_type": "markdown", + "source": [ + "This model from the [Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials.html#the-knapsack-problem) has 4 different “given” statements :\n", + "\n", + "* number_items: an integer for number of items\n", + "\n", + "* weight: a functions that associates an integer(weight) to each item\n", + "\n", + "* gain: a function that associates an integer(gain) to each item\n", + "\n", + "* capacity: an integer that defines the capacity of the knapsack\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "id": "yByksQbYmFwO" + } + }, + { + "cell_type": "markdown", + "source": [ + "The first parameter is fairly simple and we can even write this parameter with some value by hand as seen below." + ], + "metadata": { + "id": "xXdYIQKvmXOv" + } + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "x1a53hL-j9Ja", + "outputId": "c193d101-acdb-4ed6-ea56-a9af31553e91" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "source": [ + "%%conjure\n", + "letting number_items be 20" + ] + }, + { + "cell_type": "markdown", + "source": [ + "The remaining 3 parameters are more complex and labourious to be defined (too much work to be done by hand!) so we are going to write an ESSENCE specification that will create them for us. The fundamental starting step is writing find statements for each variable we wish to generate and ensure that the names of the variable (identifiers) are left unchanged. We can do so by writing:" + ], + "metadata": { + "id": "_EiqQ1uAnht9" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting items be domain int(1..number_items)\n", + "find weight: function (total) items --> int(1..1000)\n", + "find gain: function (total) items --> int(1..1000)\n", + "find capacity: int(1..5000)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cDYM3WlAn0Lb", + "outputId": "15308a29-c827-4f47-d71a-02bf82d93c64" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'capacity': 1,\n", + " 'gain': {'1': 1,\n", + " '10': 1,\n", + " '11': 1,\n", + " '12': 1,\n", + " '13': 1,\n", + " '14': 1,\n", + " '15': 1,\n", + " '16': 1,\n", + " '17': 1,\n", + " '18': 1,\n", + " '19': 1,\n", + " '2': 1,\n", + " '20': 1,\n", + " '3': 1,\n", + " '4': 1,\n", + " '5': 1,\n", + " '6': 1,\n", + " '7': 1,\n", + " '8': 1,\n", + " '9': 1},\n", + " 'weight': {'1': 1,\n", + " '10': 1,\n", + " '11': 1,\n", + " '12': 1,\n", + " '13': 1,\n", + " '14': 1,\n", + " '15': 1,\n", + " '16': 1,\n", + " '17': 1,\n", + " '18': 1,\n", + " '19': 1,\n", + " '2': 1,\n", + " '20': 1,\n", + " '3': 1,\n", + " '4': 1,\n", + " '5': 1,\n", + " '6': 1,\n", + " '7': 1,\n", + " '8': 1,\n", + " '9': 1}}" + ] + }, + "metadata": {}, + "execution_count": 3 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Solving the above model (by running the cell above) will create a set of parameters for our knapsack model. However, these instances are not interesting enough yet." + ], + "metadata": { + "id": "L3_5bdbxn-_6" + } + }, + { + "cell_type": "markdown", + "source": [ + "We can make our instances more interesting by adding constraints into our generator’s model. The first thing we notice is that all values assigned are identical, a bit TOO symmetrical for our taste. One simple solution to this issue is ensuring that all weights and gains assignments are associated with distinct values. This can be done by imposing [injectivity](https://en.wikipedia.org/wiki/Injective_function) as a property of the function." + ], + "metadata": { + "id": "WqMwmD0OoGs4" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "find weight: function (total, injective) items --> int(1..1000)\n", + "find gain: function (total, injective) items --> int(1..1000)\n", + "find capacity: int(1..5000)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "LGHHUkfXoZOg", + "outputId": "bb95af51-7709-42f9-b4f8-82a0e0c0ca93" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'capacity': 1,\n", + " 'gain': {'1': 1,\n", + " '10': 10,\n", + " '11': 11,\n", + " '12': 12,\n", + " '13': 13,\n", + " '14': 14,\n", + " '15': 15,\n", + " '16': 16,\n", + " '17': 17,\n", + " '18': 18,\n", + " '19': 19,\n", + " '2': 2,\n", + " '20': 20,\n", + " '3': 3,\n", + " '4': 4,\n", + " '5': 5,\n", + " '6': 6,\n", + " '7': 7,\n", + " '8': 8,\n", + " '9': 9},\n", + " 'weight': {'1': 1,\n", + " '10': 1,\n", + " '11': 1,\n", + " '12': 1,\n", + " '13': 1,\n", + " '14': 1,\n", + " '15': 1,\n", + " '16': 1,\n", + " '17': 1,\n", + " '18': 1,\n", + " '19': 1,\n", + " '2': 1,\n", + " '20': 1,\n", + " '3': 1,\n", + " '4': 1,\n", + " '5': 1,\n", + " '6': 1,\n", + " '7': 1,\n", + " '8': 1,\n", + " '9': 1}}" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Running this gives us a slighly more interesting parameters set but it is not there yet The specific order that appears in the results is solver dependent. The default solver used by conjure is Minion and we can use an optional flag to have the variables assigned in a random order. This can be done with this command:" + ], + "metadata": { + "id": "RqTcTMtuoitZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "`--solver-options=-randomiseorder`" + ], + "metadata": { + "id": "Zzg57cEHonBQ" + } + }, + { + "cell_type": "markdown", + "source": [ + "Alternatively one can use another solver that uses randomness by default" + ], + "metadata": { + "id": "qTeTX8s-oqjp" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --solver=minion --solver-options='-randomiseorder'\n", + "\n", + "find weight: function (total, injective) items --> int(1..1000)\n", + "find gain: function (total, injective) items --> int(1..1000)\n", + "find capacity: int(1..5000)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "v1vnAK0kouNI", + "outputId": "c81ad75f-51f0-4bb8-877c-75bd50d690a5" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'capacity': 4354,\n", + " 'gain': {'1': 976,\n", + " '10': 741,\n", + " '11': 371,\n", + " '12': 323,\n", + " '13': 474,\n", + " '14': 730,\n", + " '15': 579,\n", + " '16': 502,\n", + " '17': 174,\n", + " '18': 522,\n", + " '19': 813,\n", + " '2': 503,\n", + " '20': 391,\n", + " '3': 406,\n", + " '4': 728,\n", + " '5': 335,\n", + " '6': 680,\n", + " '7': 487,\n", + " '8': 385,\n", + " '9': 421},\n", + " 'weight': {'1': 153,\n", + " '10': 365,\n", + " '11': 299,\n", + " '12': 986,\n", + " '13': 655,\n", + " '14': 954,\n", + " '15': 984,\n", + " '16': 318,\n", + " '17': 944,\n", + " '18': 693,\n", + " '19': 791,\n", + " '2': 759,\n", + " '20': 266,\n", + " '3': 562,\n", + " '4': 271,\n", + " '5': 23,\n", + " '6': 946,\n", + " '7': 979,\n", + " '8': 854,\n", + " '9': 194}}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Now it is starting to look more like a proper instance. At this point we can add some knowledge about the problem to formulate some constraints that will ensure that the instances are not trivial. ie when the sum of all the weights is smaller than the capacity so we can’t put all the objects in the knapsack or when all the objects are heavier than the capacity so that no object can be picked. Thefore we add constraints such as:" + ], + "metadata": { + "id": "Y3zFC4dTtn-s" + } + }, + { + "cell_type": "code", + "source": [ + "%conjure_clear" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xtRJ0LK5ueb3", + "outputId": "d277f389-ce6f-4070-e556-42d64da10989" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure model cleared\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting number_items be 20\n", + "letting items be domain int(1..number_items)\n", + "find weight: function (total, injective) items --> int(1..1000)\n", + "find gain: function (total, injective) items --> int(1..1000)\n", + "find capacity: int(1..5000)\n", + "\n", + "such that (sum ([w | (_,w) <- weight]) > capacity*2)," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "st_At4HvuFtD", + "outputId": "b809637a-5f87-4848-df0f-29c41cf34227" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'capacity': 43,\n", + " 'gain': {'1': 1,\n", + " '10': 10,\n", + " '11': 11,\n", + " '12': 12,\n", + " '13': 13,\n", + " '14': 14,\n", + " '15': 15,\n", + " '16': 16,\n", + " '17': 17,\n", + " '18': 18,\n", + " '19': 19,\n", + " '2': 2,\n", + " '20': 20,\n", + " '3': 3,\n", + " '4': 4,\n", + " '5': 5,\n", + " '6': 6,\n", + " '7': 7,\n", + " '8': 8,\n", + " '9': 9},\n", + " 'weight': {'1': 1,\n", + " '10': 10,\n", + " '11': 11,\n", + " '12': 12,\n", + " '13': 13,\n", + " '14': 14,\n", + " '15': 15,\n", + " '16': 16,\n", + " '17': 17,\n", + " '18': 18,\n", + " '19': 19,\n", + " '2': 2,\n", + " '20': 20,\n", + " '3': 3,\n", + " '4': 4,\n", + " '5': 5,\n", + " '6': 6,\n", + " '7': 7,\n", + " '8': 8,\n", + " '9': 9}}" + ] + }, + "metadata": {}, + "execution_count": 26 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This means that the sum of all the weights should be greater than twice the capacity of the knapsack. From this we can expect that on average no more than half of the objects will fit in the knapsack. The expression `[w | (_,w) <- weight]` is a list [comprehension](https://en.wikipedia.org/wiki/List_comprehension) that extracts all right hand values of the `weight` function. The underscore character means we do not care about the left hand side values. To ensure that the solver does not take it too far we impose an upper bound using a similar constraint. We impose that the sum of the objects weights 5 times the capacity of the knapsack, so we can expect that only between 20% and 50% of the items will fit in the knapsack in each instance." + ], + "metadata": { + "id": "XH7Q2h2Qux0G" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that (sum ([w | (_,w) <- weight]) < capacity*5)," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RGBsge0yu-LK", + "outputId": "c7baf91c-74b5-4701-89a7-17a123492b5b" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'capacity': 43,\n", + " 'gain': {'1': 1,\n", + " '10': 10,\n", + " '11': 11,\n", + " '12': 12,\n", + " '13': 13,\n", + " '14': 14,\n", + " '15': 15,\n", + " '16': 16,\n", + " '17': 17,\n", + " '18': 18,\n", + " '19': 19,\n", + " '2': 2,\n", + " '20': 20,\n", + " '3': 3,\n", + " '4': 4,\n", + " '5': 5,\n", + " '6': 6,\n", + " '7': 7,\n", + " '8': 8,\n", + " '9': 9},\n", + " 'weight': {'1': 1,\n", + " '10': 10,\n", + " '11': 11,\n", + " '12': 12,\n", + " '13': 13,\n", + " '14': 14,\n", + " '15': 15,\n", + " '16': 16,\n", + " '17': 17,\n", + " '18': 18,\n", + " '19': 19,\n", + " '2': 2,\n", + " '20': 20,\n", + " '3': 3,\n", + " '4': 4,\n", + " '5': 5,\n", + " '6': 6,\n", + " '7': 7,\n", + " '8': 8,\n", + " '9': 9}}" + ] + }, + "metadata": {}, + "execution_count": 27 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "At this point it will be harder to see specific properties of the instances just by eyeballing the parameters but we can be confident that the properties we have imposed are there. We can add some more constraints to refine the values of the instances for practice/exercise by enforcing that no object is heavier than a third of the knapsack capacity" + ], + "metadata": { + "id": "UAohhHG1vXFZ" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "such that forAll (_,w) in weight . w < capacity / 3," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UPeiW9bOvZcJ", + "outputId": "70de71bf-c701-4222-9547-fea521c33e47" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Exception: Error:\n", + " Savile Row stdout: Created output file for domain filtering conjure-output/model000001.eprime-minion\n", + "Created output file conjure-output/model000001.eprime.fzn\n", + "Sub-process exited with error code:139 and error message:\n", + "[]\n", + "Solver exited with error code:139 and message:\n", + "[]\n", + "Created information file conjure-output/model000001.eprime-info\n", + "\n", + " Savile Row stderr: \n", + " Savile Row exit-code: 0\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "On top of that we can enfore a constraint on the density of the values in each object by limiting the ratio between the weight and gain of each specific object with:" + ], + "metadata": { + "id": "cEy6PLNavc_T" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "such that forAll element : items .\n", + " gain(element) <= 3*weight(element)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "46OeSVrBvhOX", + "outputId": "7ef012a2-d030-4dec-e3a8-2d5055042351" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'capacity': 16,\n", + " 'gain': {'1': 1,\n", + " '10': 10,\n", + " '11': 11,\n", + " '12': 12,\n", + " '13': 13,\n", + " '14': 14,\n", + " '15': 15,\n", + " '16': 16,\n", + " '17': 17,\n", + " '18': 18,\n", + " '19': 19,\n", + " '2': 2,\n", + " '20': 20,\n", + " '3': 3,\n", + " '4': 4,\n", + " '5': 5,\n", + " '6': 6,\n", + " '7': 7,\n", + " '8': 8,\n", + " '9': 9},\n", + " 'weight': {'1': 1,\n", + " '10': 4,\n", + " '11': 4,\n", + " '12': 4,\n", + " '13': 5,\n", + " '14': 5,\n", + " '15': 5,\n", + " '16': 6,\n", + " '17': 6,\n", + " '18': 6,\n", + " '19': 7,\n", + " '2': 1,\n", + " '20': 7,\n", + " '3': 1,\n", + " '4': 2,\n", + " '5': 2,\n", + " '6': 2,\n", + " '7': 3,\n", + " '8': 3,\n", + " '9': 3}}" + ] + }, + "metadata": {}, + "execution_count": 29 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "After running all cells, we can take the output solution and run the Knapsack Problem solution on it.\n", + "\n", + "Tada! your model is being tested on some instance!\n", + "\n", + "If your computer is powerful enough you can try larger values in “letting number_items be 20” (40-50 items will already produce substantially harder instances) Like for other forms of modelling writing instance generators is in large part an art. If this is not your kind of thing and you would like a fully automated system that can produce instances you may check out this [method](https://link.springer.com/chapter/10.1007/978-3-030-30048-7_1)\n", + "\n", + "(code available [here](https://github.com/stacs-cp/CP2019-InstanceGen))" + ], + "metadata": { + "id": "kr7LfH5Svrxx" + } + } + ] +} \ No newline at end of file From e68472a5099b6e598f4222e1712543180c76616f Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:50:18 +0100 Subject: [PATCH 227/378] Semigroups. Monoids and Groups notebook tutorial. --- .../Semigroups,_Monoids_and_Groups.ipynb | 742 ++++++++++++++++++ 1 file changed, 742 insertions(+) create mode 100644 docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb diff --git a/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb b/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb new file mode 100644 index 0000000000..6b383c8bf2 --- /dev/null +++ b/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb @@ -0,0 +1,742 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyNmwuGfH/vOYeP0Tj5vUcu/", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Semigroups, Monoids and Groups" + ], + "metadata": { + "id": "tlwA1gWxaq7u" + } + }, + { + "cell_type": "markdown", + "source": [ + "Original [Semigroups, Monoids and Groups](https://conjure.readthedocs.io/en/latest/tutorials.html#semigroups-monoids-and-groups) by Chris Jefferson and Alice Lynch. Adapted by Alex Gallagher." + ], + "metadata": { + "id": "3kKmC_37a2uo" + } + }, + { + "cell_type": "markdown", + "source": [ + "This tutorial discusses how to model semigroups, monoids and groups in Essence." + ], + "metadata": { + "id": "Tly_igpYbNYM" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 173 + }, + "id": "0RYHwN9UcZ0A", + "outputId": "a740cb25-36a7-4a06-95bd-9a546aa001ea" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " % Total % Received % Xferd Average Speed Time Time Time Current\n", + " Dload Upload Total Spent Left Speed\n", + "\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 697 100 697 0 0 4329 0 --:--:-- --:--:-- --:--:-- 4329\n", + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## The Problem" + ], + "metadata": { + "id": "IIXm6aerbQEv" + } + }, + { + "cell_type": "markdown", + "source": [ + "Semigroups, monoids and groups are all examples of binary operations, with added conditions.\n", + "\n", + "\n", + "We will begin by building a binary operation. A binary relation `R` on a domain `S` is a two-argument function which maps two elements of `S` to a third element of `S`. We will make `S` be the integers from `1` to `n`, for some given `n`." + ], + "metadata": { + "id": "8_84KDprbpLq" + } + }, + { + "cell_type": "markdown", + "source": [ + "We make a new type of size `n` to represent the set the operation is defined on. We then define a function from `(S,S)` to `S`. Technically, this function doesn’t take two arguments - it takes a single argument which is a pair of values from `S`. This is mathematically the same, but will change how we use `R`.\n", + "\n", + "\n", + "We will begin by creating a solution to this, for `n = 4`." + ], + "metadata": { + "id": "aP09RDjCc03v" + } + }, + { + "cell_type": "code", + "source": [ + "n = 4" + ], + "metadata": { + "id": "WutDydBpcrlm" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "given n : int\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function(total) (S,S) --> S" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ruoE-Rc-b-eP", + "outputId": "2404a163-69b6-466e-86a0-ef24f370ba85" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'R': [[[1, 1], 1],\n", + " [[1, 2], 1],\n", + " [[1, 3], 1],\n", + " [[1, 4], 1],\n", + " [[2, 1], 1],\n", + " [[2, 2], 1],\n", + " [[2, 3], 1],\n", + " [[2, 4], 1],\n", + " [[3, 1], 1],\n", + " [[3, 2], 1],\n", + " [[3, 3], 1],\n", + " [[3, 4], 1],\n", + " [[4, 1], 1],\n", + " [[4, 2], 1],\n", + " [[4, 3], 1],\n", + " [[4, 4], 1]]}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "At the moment this is quite boring, as the function can take any value at all! Asking Conjure how many solutions this problem has is unreasonable, but we can figure it out with maths:\n", + "\n", + "416 = 4,294,967,296\n", + "\n", + "Let’s try adding some constraints." + ], + "metadata": { + "id": "d6aN2lyydSpa" + } + }, + { + "cell_type": "markdown", + "source": [ + "##Semigroups" + ], + "metadata": { + "id": "7fJvxGbLd3Rp" + } + }, + { + "cell_type": "markdown", + "source": [ + "The simplest object we will consider is a **semigroup**. A semigroup adds one constraint to our binary operation, **associativity**. A binary operation is associative if for all i,j and k in S, R(i,R(j,k)) = R((R(i,j),k). This might look very abstract, but it is true of many binary operations, for example given integers i,j and k, (i+j)+k = i+(j+k), and (i * j) * k = i * (j * k)." + ], + "metadata": { + "id": "s7QuRhtUd52X" + } + }, + { + "cell_type": "markdown", + "source": [ + "We begin by saying we want to check `forAll i,j,k: S`. The strangest bit is all of the brackets seem doubled. Your vision isn’t failing, this is because `M` is a one argument function (and we use `M(x)` to apply `M` to `x`), but `M` takes a tuple as its argument (which we write as `(i,j)`), so to apply `M` to `i` and `j` we write `M((i,j))`." + ], + "metadata": { + "id": "0gWAIm26eGVv" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function(total) (S,S) --> S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "E5hy8Xe7ebsM", + "outputId": "e878e0f2-d253-46eb-c723-7eed146e726d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'R': [[[1, 1], 1],\n", + " [[1, 2], 1],\n", + " [[1, 3], 1],\n", + " [[1, 4], 1],\n", + " [[2, 1], 1],\n", + " [[2, 2], 1],\n", + " [[2, 3], 1],\n", + " [[2, 4], 1],\n", + " [[3, 1], 1],\n", + " [[3, 2], 1],\n", + " [[3, 3], 1],\n", + " [[3, 4], 1],\n", + " [[4, 1], 1],\n", + " [[4, 2], 1],\n", + " [[4, 3], 1],\n", + " [[4, 4], 1]]}" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The first result is still the same, but there are fewer solutions to be found now - only 3,492. Is this correct? It’s always good to check. This number was first published in 1955, by George E. Forsythe, in his paper “SWAC Computes 126 Distinct Semigroups of Order 4”. Where does the number 126 come from? This small number comes from ignoring cases where the semigroup is the same except for rearranging the numbers 1,2,3,4. The number we found, 3,492, is found in the paper." + ], + "metadata": { + "id": "uQBnwZarenjL" + } + }, + { + "cell_type": "markdown", + "source": [ + "##Monoids" + ], + "metadata": { + "id": "Kxr07DIuex8m" + } + }, + { + "cell_type": "markdown", + "source": [ + "Let’s move further to monoids. A monoid is a semigroup with an extra condition, there has to exist some element of the semigroup, which we will call *e*, which acts as an **identity**. An **identity** is an element such that for all `i` in `S`, `R(e,i) = R(i,e) = e`.\n", + "\n", + "Firstly we will add a variable to store the value of this `e`, and then add the extra constraint which makes it an identity:" + ], + "metadata": { + "id": "kHVypWgQe6Fr" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function (total) (S,S) --> S\n", + "\n", + "find e : S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", + "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i," + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6d9Bng1hfpEm", + "outputId": "e95c22bf-cd3f-4d3e-f37a-70ea909351b6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'R': [[[1, 1], 1],\n", + " [[1, 2], 2],\n", + " [[1, 3], 3],\n", + " [[1, 4], 4],\n", + " [[2, 1], 2],\n", + " [[2, 2], 1],\n", + " [[2, 3], 4],\n", + " [[2, 4], 3],\n", + " [[3, 1], 3],\n", + " [[3, 2], 4],\n", + " [[3, 3], 1],\n", + " [[3, 4], 2],\n", + " [[4, 1], 4],\n", + " [[4, 2], 3],\n", + " [[4, 3], 2],\n", + " [[4, 4], 1]],\n", + " 'e': 1,\n", + " 'inv': {'1': 1, '2': 2, '3': 3, '4': 4}}" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We now have only 624 solutions! We can check this by looking at the amazing online encyclopedia of integer sequences https://oeis.org/A058153 , which tells us there are indeed 624 “labelled monoids” of order n." + ], + "metadata": { + "id": "8UUknSEagk34" + } + }, + { + "cell_type": "markdown", + "source": [ + "##Groups" + ], + "metadata": { + "id": "2gudg9KYgp6R" + } + }, + { + "cell_type": "markdown", + "source": [ + "Finally, let us move to groups. Groups add one important requirement, the concept of an inverse. Given some `i` in `S`, `j` is an inverse of `i` if `R((i,j)) = R((j,i)) = e`, where `e` is our already existing identity.\n", + "\n", + "We will store the inverses as an extra array, and then add this final constraint:" + ], + "metadata": { + "id": "eWHVoUvPgrbh" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function (total) (S,S) --> S\n", + "\n", + "find e : S\n", + "\n", + "find inv: function S --> S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", + "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i,\n", + "\n", + "forAll i : S. R((i,inv(i))) = e /\\ R((inv(i),i)) = e" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "kjnJufr6g7RP", + "outputId": "d612e8b4-54a2-4c5a-8651-1dd386771596" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'R': [[[1, 1], 1],\n", + " [[1, 2], 2],\n", + " [[1, 3], 3],\n", + " [[1, 4], 4],\n", + " [[2, 1], 2],\n", + " [[2, 2], 1],\n", + " [[2, 3], 4],\n", + " [[2, 4], 3],\n", + " [[3, 1], 3],\n", + " [[3, 2], 4],\n", + " [[3, 3], 1],\n", + " [[3, 4], 2],\n", + " [[4, 1], 4],\n", + " [[4, 2], 3],\n", + " [[4, 3], 2],\n", + " [[4, 4], 1]],\n", + " 'e': 1,\n", + " 'inv': {'1': 1, '2': 2, '3': 3, '4': 4}}" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This solution has much more going on than our previous ones! For example, each row and column contains the numbers from `1` to `4`, in some order. This (and many, many other results) are true for all groups (but we won’t prove this here!). This problem only has 16 solutions, and once we removed the groups which are made by just swapping around 1,2,3 and 4, we would find there was only 2 groups! The extra structure means there are only a small number of groups for each size, compared to the number of semigroups and monoids.\n", + "\n", + "There are many special types of groups; we will consider just one here, abelian groups. A group is abelian if for all `i` and `j` in `S`, `R((i,j)) = R((j,i))`. Let’s add this condition!" + ], + "metadata": { + "id": "HAdxspUohyta" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function (total) (S,S) --> S\n", + "\n", + "find e : S\n", + "\n", + "find inv: function S --> S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", + "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i,\n", + "forAll i : S. R((i,inv(i))) = e /\\ R((inv(i),i)) = e,\n", + "forAll i,j : S. R((i,j)) = R((j,i))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Kunrbz0-iXhY", + "outputId": "2a1b5af6-f56e-4ba4-fc1e-c6f55b8be553" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'R': [[[1, 1], 1],\n", + " [[1, 2], 2],\n", + " [[1, 3], 3],\n", + " [[1, 4], 4],\n", + " [[2, 1], 2],\n", + " [[2, 2], 1],\n", + " [[2, 3], 4],\n", + " [[2, 4], 3],\n", + " [[3, 1], 3],\n", + " [[3, 2], 4],\n", + " [[3, 3], 1],\n", + " [[3, 4], 2],\n", + " [[4, 1], 4],\n", + " [[4, 2], 3],\n", + " [[4, 3], 2],\n", + " [[4, 4], 1]],\n", + " 'e': 1,\n", + " 'inv': {'1': 1, '2': 2, '3': 3, '4': 4}}" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This gives us the same first solution. In fact, there is the same number of solutions (16) to this problem as the previous one, proving that all groups of size 4 are abelian! In fact, the smallest non-abelian group is size 60, and that is beyond the size of problems we can find all solutions to with our current, simple model." + ], + "metadata": { + "id": "yZDLJ0G6ifkn" + } + } + ] +} \ No newline at end of file From c29d3e420205fc3d4f7c748602b745ded33bf4c5 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 22:53:24 +0100 Subject: [PATCH 228/378] Notebook tutorial for Knapsack Problem. --- .../tutorials/notebooks/KnapsackProblem.ipynb | 553 ++++++++++++++++++ 1 file changed, 553 insertions(+) create mode 100644 docs/tutorials/notebooks/KnapsackProblem.ipynb diff --git a/docs/tutorials/notebooks/KnapsackProblem.ipynb b/docs/tutorials/notebooks/KnapsackProblem.ipynb new file mode 100644 index 0000000000..ac87912e7f --- /dev/null +++ b/docs/tutorials/notebooks/KnapsackProblem.ipynb @@ -0,0 +1,553 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true, + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "#The Knapsack problem" + ], + "metadata": { + "id": "Q-O7ivbPHtqI" + } + }, + { + "cell_type": "markdown", + "source": [ + "Original [The Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials.html#the-knapsack-problem) by Saad Attieh and Christopher Stone. Adapted by Alex Gallagher." + ], + "metadata": { + "id": "5I6cwwqhH19R" + } + }, + { + "cell_type": "markdown", + "source": [ + "The Knapsack problem is a classical combinatorial optimisation problem, often used in areas of resource allocation. A basic variant of the Knapsack problem is defined as follows:\n", + "\n", + "**Given:**\n", + "1. A set of items, each with a weight and a value,\n", + "2. A maximum weight which we call capacity,\n", + "\n", + "**find a set of the items such that**\n", + "1. The sum of the weights of the items in our set is less than or equal to the capacity, and\n", + "2. The sum of the values of the items is maximised.\n", + "\n", + "Informally, think about putting items in a sack such that we maximise the total value of the sack whilst not going over the sack’s weight limit.\n" + ], + "metadata": { + "id": "GZkJHUbaIFon" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "A35VMVlIMe_g", + "outputId": "a1ef80e3-3c48-4aed-c4ec-739d90c4ca76" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " % Total % Received % Xferd Average Speed Time Time Time Current\n", + " Dload Upload Total Spent Left Speed\n", + "\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\r100 711 100 711 0 0 3353 0 --:--:-- --:--:-- --:--:-- 3338\n", + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.3.0\n", + "Repository version 987ee3fc3 (2022-06-10 21:50:17 +0100)\n", + "The conjure extension is already loaded. To reload it, use:\n", + " %reload_ext conjure\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "##Model Explained" + ], + "metadata": { + "id": "fU4y3zCXMNgX" + } + }, + { + "cell_type": "markdown", + "source": [ + "We begin by showing the entire problem as defined in Essence:\n", + "\n", + "`given items new type enum`\n", + "\n", + "\n", + "`given weight : function (total) items --> int`\n", + "\n", + "\n", + "`given gain : function (total) items --> int`\n", + "\n", + "\n", + "`given capacity : int`\n", + "\n", + "\n", + "`find picked : set of items`\n", + "\n", + "\n", + "`maximising sum i in picked . gain(i)`\n", + "\n", + "\n", + "`such that (sum i in picked . weight(i)) <= capacity`" + ], + "metadata": { + "id": "vsYVModWMMUU" + } + }, + { + "cell_type": "markdown", + "source": [ + "Going through the problem line by line:\n", + "\n", + "We begin by defining the parameters to the problem. Parameters can be defined outside of the problem, allowing different instances of the same problem to be solved without having to change the specification.\n", + "\n", + "Each parameter is denoted with the given keyword." + ], + "metadata": { + "id": "S0QHWB3fItZK" + } + }, + { + "cell_type": "markdown", + "source": [ + "`given items new type enum`" + ], + "metadata": { + "id": "RR32w1Dd5-mU" + } + }, + { + "cell_type": "markdown", + "source": [ + "This line says that a set of items will be provided as an enum type. Enums are good for labeling items where it makes no sense to attribute a value to each item. So instead of using integers to represent each item, we may just assign names to each item and group the names under an enum type. Below is an example enum declaration, as it would be written in the Conjure Magic cell:" + ], + "metadata": { + "id": "MCnXSWH_IxnM" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting items be new type enum {a,b,c,d,e}" + ], + "metadata": { + "id": "SrrZ0nFcI402", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "cc59d93f-8759-4ade-bc50-5268aa8d7a46" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'picked': ['b', 'd']}" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "`a`, `b`, etc. are just names we have given, they could be anything `bread`, `whiskey`, …" + ], + "metadata": { + "id": "CABjHWtbJGk0" + } + }, + { + "cell_type": "markdown", + "source": [ + "`given weight : function (total) items --> int`" + ], + "metadata": { + "id": "b7N-ZDa46JGr" + } + }, + { + "cell_type": "markdown", + "source": [ + "Another parameter, a function that maps from each item to an integer, we will treat these integers as weights. Since we are describing integers that will be given as parameters, no domain (lower/upper bound) is required. Here is an example function parameter:" + ], + "metadata": { + "id": "-uOA3Q_DJSvM" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting weight be function\n", + " ( a --> 15\n", + " , b --> 25\n", + " , c --> 45\n", + " , d --> 50\n", + " , e --> 60\n", + " )" + ], + "metadata": { + "id": "IKZXLIHlJVF9", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "ed11891f-6467-4d64-854a-2b60174c0182" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'picked': ['b', 'd']}" + ] + }, + "metadata": {}, + "execution_count": 14 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "`given gain : function (total) items --> int`" + ], + "metadata": { + "id": "XhUtJP1o6P0q" + } + }, + { + "cell_type": "markdown", + "source": [ + "Just the same as the weight parameter, this parameter is used to denote a mapping from each item to a value. An example value for this parameter as it would be defined in the parameter file is:" + ], + "metadata": { + "id": "6zkqdEX6tOJU" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting gain be function\n", + " ( a --> 10\n", + " , b --> 20\n", + " , c --> 40\n", + " , d --> 40\n", + " , e --> 50\n", + " )" + ], + "metadata": { + "id": "xgNtA5-4tQxX", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "1c67a603-b87a-4b59-b8d7-2909a5d5943a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'picked': ['b', 'd']}" + ] + }, + "metadata": {}, + "execution_count": 15 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The final given:" + ], + "metadata": { + "id": "X8qMCv8DKio9" + } + }, + { + "cell_type": "markdown", + "source": [ + "`given capacity : int`" + ], + "metadata": { + "id": "btL2k4bc6Xis" + } + }, + { + "cell_type": "markdown", + "source": [ + "The final parameter – a weight limit. Example value:" + ], + "metadata": { + "id": "1C84QOfkKn7Y" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting capacity be 80" + ], + "metadata": { + "id": "F1rd0BM4Kr6s", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "89cc9b79-4d88-49d0-d3ba-1e9b0a940d8e" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'picked': ['b', 'd']}" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "`find picked : set of items`" + ], + "metadata": { + "id": "tjnxxkh06m8U" + } + }, + { + "cell_type": "markdown", + "source": [ + "The `find` keyword denotes decision variables, these are the variables for which the solver will search for a valid assignment. As is common in Essence problems, our entire problem is modelled using one decision variable named `picked`. Its type is `set of items`; a set of any size whose elements are taken from the `items` domain. Note, the maximum cardinality of the set is implicitly the size of the `items` domain." + ], + "metadata": { + "id": "PvO14gKeKyLf" + } + }, + { + "cell_type": "markdown", + "source": [ + "`maximising sum i in picked . gain(i)`" + ], + "metadata": { + "id": "KwTtli4p6qd6" + } + }, + { + "cell_type": "markdown", + "source": [ + "The `maximising` keyword denotes the objective for the solver; a value for the solver to *maximise*. `minimise` is also a valid objective keyword. The expression `sum i in picked .` is a quantifier. The sum says that the values we produce should be summed together. The i in picked says we want to list out every element of the set `picked`. The expression given to the `sum` are described by the expression that follows the full-stop (.). In this case, we are asking for the image of `i` in the `gain` function. That is, for each item in the set, we are looking up the integer value that the item maps to in the `gain` function and summing these integers." + ], + "metadata": { + "id": "a_RSfRhQLAq1" + } + }, + { + "cell_type": "markdown", + "source": [ + "`such that (sum i in picked . weight(i)) <= capacity`" + ], + "metadata": { + "id": "MqbSkMYu6vIt" + } + }, + { + "cell_type": "markdown", + "source": [ + "The `such that` keyword denotes a constraint. Here the constraint is formulated in a similar manner to the objective. We are quantifying over the set of chosen items `picked`, looking up the value that the item maps to in the `weights` function and summing these values to together. We enforce that the result of the sum must be less than or equal to the capacity `<= capacity`.\n", + "\n", + "Note that you can post multiple constraints either by using commas between each constraint `,` or by reusing the keyword `such that`." + ], + "metadata": { + "id": "Z9Ug5YKJLWBt" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Solving the problem" + ], + "metadata": { + "id": "IQkhfYsfMTzt" + } + }, + { + "cell_type": "markdown", + "source": [ + "Having run the earlier definition cells, we can now run the model:" + ], + "metadata": { + "id": "zQdE5f_yMhY8" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure \n", + "find picked : set of items\n", + "maximising sum i in picked . gain(i)\n", + "such that (sum i in picked . weight(i)) <= capacity" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PykrdRJYMoO9", + "outputId": "cb3decd4-2ad6-4cd8-bdc2-2368c44287f1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'picked': ['b', 'd']}" + ] + }, + "metadata": {}, + "execution_count": 17 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Visualisations:" + ], + "metadata": { + "id": "Zeb9D96g9C_E" + } + }, + { + "cell_type": "markdown", + "source": [ + "We can print the result using python code:" + ], + "metadata": { + "id": "QKFbX2ryCXyj" + } + }, + { + "cell_type": "code", + "source": [ + "print(picked)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "zZWJyxyh9HXC", + "outputId": "dcf9fb0b-7511-4bc4-d993-b3fa656a686f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "['b', 'd']\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "We can also show `picked` as a graph:" + ], + "metadata": { + "id": "rOwOZWoyCeeE" + } + }, + { + "cell_type": "code", + "source": [ + "import graphviz\n", + "\n", + "p = graphviz.Digraph('parent')\n", + "p.attr(compound='true')\n", + "\n", + "\n", + "with p.subgraph(name='clusterx', node_attr={'shape': 'pentagon', 'color': 'blue', 'style':'rounded'}) as c:\n", + " for item in picked:\n", + " c.node(str(item))\n", + " c.attr(label='picked')\n", + " c.attr(style='rounded')\n", + "\n", + "p" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 153 + }, + "id": "tY1u6ZJSDuy8", + "outputId": "d864fb66-d29a-44ea-968f-e441dab680ee" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "" + ], + "image/svg+xml": "\n\n\n\n\n\nparent\n\n\nclusterx\n\npicked\n\n\n\nb\n\nb\n\n\n\nd\n\nd\n\n\n\n" + }, + "metadata": {}, + "execution_count": 36 + } + ] + } + ] +} \ No newline at end of file From 06f5c738f7ce4699d083ee11a6e5573b27b16ec6 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 23:09:08 +0100 Subject: [PATCH 229/378] Nurse Rostering notebook tutorial. --- NurseRostering.ipynb | 1012 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1012 insertions(+) create mode 100644 NurseRostering.ipynb diff --git a/NurseRostering.ipynb b/NurseRostering.ipynb new file mode 100644 index 0000000000..1e6af6633e --- /dev/null +++ b/NurseRostering.ipynb @@ -0,0 +1,1012 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "G0mPqC-63XVl" + }, + "source": [ + "#Nurse Rostering" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "sT5HA7OR3a_f" + }, + "source": [ + "Original [Nurse Rostering](https://conjure.readthedocs.io/en/latest/tutorials.html#nurse-rostering) by András Salamon, Nguyen Dang and Saad Attieh. Adapted by Alex Gallagher." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eyp734R43ttT" + }, + "source": [ + "We now discuss a version of [Nurse Rostering](https://en.wikipedia.org/wiki/Nurse_scheduling_problem), a constrained scheduling problem. Variants of this problem are also known by other names, such as workforce planning and staff scheduling. Unlike versions of this problem studied by operations research practitioners and researchers (such as competition instances [CDDC+19](https://conjure.readthedocs.io/en/latest/zreferences.html#id4), we here focus on just a few of the simplest constraints.\n", + "\n", + "Some nurses are available to work in a hospital. Each day is divided into a sequence of shifts, for instance an early-morning shift, a day shift, and a night shift. Each nurse should be assigned to work some shifts during the course of a period of consecutive days. A nurse can be assigned to at most one shift per day. Moreover, for each nurse we need to avoid some forbidden shift patterns within two consecutive days. For example, a nurse cannot work a night shift on one day, and an early-morning shift the next day. We also must make sure to meet the minimum number of nurses required for each shift. These demand values may vary between different days." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "tc3lNb_Q-7TL", + "outputId": "d2d00727-e5cf-47cf-96a7-a0e63c307c45" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cFk1jIuP38LE" + }, + "source": [ + "##Initial specification" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JwAsti574JRJ" + }, + "source": [ + "To begin with, let’s ignore the forbidden patterns, and focus instead on the elements needed to model the problem. We need nurses, shifts for each day, the minimum demand, and a roster." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T1zikM3e9xl-" + }, + "source": [ + "`given nNurses, nDays : int(1..)`\n", + "\n", + "`given shifts new type enum`\n", + "\n", + "`letting days be domain int(1..nDays)`\n", + "\n", + "`letting nurses be domain int(1..nNurses)`\n", + "\n", + "`letting nShifts be |'shifts'|`\n", + "\n", + "`given forbiddenPatterns : set of tuple (shifts, shifts)`\n", + "\n", + "`given minimumDemand : function (total) (days, shifts) --> int(0..nNurses)`\n", + "\n", + "`where`\n", + "\n", + " `forAll d : days .`\n", + "\n", + " `(sum s : shifts . minimumDemand((d,s))) <= nNurses`\n", + "\n", + "`find roster: function (days, shifts) --> nurses`\n", + "\n", + "`$ constraint 1 (Single assignment per day)`\n", + "\n", + "`$ a nurse can be assigned to at most one shift per day`\n", + "\n", + "`such that`\n", + "\n", + "`forAll nurse : nurses .`\n", + "\n", + "`forAll day : days .`\n", + "\n", + "`(sum ((d,_),n) in roster . toInt(n=nurse /\\ d=day)) <= 1`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jOAzUfPt-lYH" + }, + "source": [ + "This specification contains the basic elements. We made the choice to use an enumerated type for shifts, positive integers to number the nurses and the days, a set of forbidden patterns (each being a pair of shifts), and a total function mapping each shift slot to a number of nurses to represent the minimum demands. Because we only allow a nurse to work one shift each day, the forbidden patterns can only apply to one day and the next day, with the first shift in a forbidden pattern referring to the first day and the second shift referring to the subsequent day. We also added a `where` condition to ensure that instances are not trivially impossible, by requiring the minimum demand to never exceed the number of nurses." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_7i2Q2GG-utJ" + }, + "source": [ + "We also need a test instance. Generating test instances is an interesting subject (for instance, see [AkgunDM+19](https://conjure.readthedocs.io/en/latest/zreferences.html#id5)) but here we have just made one up." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "VPvjN0O4_EOo", + "outputId": "58ae8a4d-b84a-48b6-b9f2-f14186632897" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{}" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "source": [ + "%%conjure\n", + "letting nNurses be 5\n", + "letting nDays be 7\n", + "letting shifts be new type enum {Early, Late, Night}\n", + "letting forbiddenPatterns be {\n", + " (Late,Early), (Night,Early), (Night,Late)\n", + "}\n", + "letting minimumDemand be function (\n", + " (1,Early) --> 2, (1,Late) --> 2, (1,Night) --> 0,\n", + " (2,Early) --> 1, (2,Late) --> 1, (2,Night) --> 2,\n", + " (3,Early) --> 1, (3,Late) --> 1, (3,Night) --> 1,\n", + " (4,Early) --> 0, (4,Late) --> 0, (4,Night) --> 1,\n", + " (5,Early) --> 1, (5,Late) --> 1, (5,Night) --> 2,\n", + " (6,Early) --> 2, (6,Late) --> 1, (6,Night) --> 1,\n", + " (7,Early) --> 0, (7,Late) --> 1, (7,Night) --> 1\n", + ")\n", + "letting days be domain int(1..nDays)\n", + "letting nurses be domain int(1..nNurses)\n", + "letting nShifts be |`shifts`|" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GZWxlTxR_Mc0" + }, + "source": [ + "We have 5 nurses, 7 days in the period, three shifts each day, three forbidden pairs of shifts, and some minimum demands for the various shifts." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "qsGFV5Dv_OOQ" + }, + "source": [ + "##Changing an overly restrictive assumption" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "fv7fysoh_QtW" + }, + "source": [ + "However, on further reflection this first specification is not correct. Since roster is a function `(days, shifts) --> nurses` only one nurse can be assigned to the same shift of the same day. This means that if the minimum demand asks for 2 or more nurses for a particular day and shift, then we can’t satisfy this demand. We need to remove the overly restrictive assumption enforced by our choice of representation for roster.\n", + "\n", + "\n", + "Let’s change the representation of `roster`, leaving the specification exactly the same up to and including the `where` condition. Instead of mapping each day/shift pair to a single nurse, we could map each day/shift pair to a set of nurses, map each nurse to a set of day/shift pairs, or map each combination of day and nurse to a shift (but with not all combinations needing to be assigned). Each of these choices leads to a slightly different way to model the problem; here we have picked the last. It is left as an exercise to try the others!" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cYZ6AFfc_jhm", + "outputId": "a1785e39-5432-434f-f780-c14f25dcb9a2" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "Exception: Error:\n", + " In a 'such that' statement:\n", + " and([and([!((roster(d, n), roster(d + 1, n)) in forbiddenPatterns) | n : nurses]) | d : int(1..nDays - 1)])\n", + " Error: Type error in (relation projection) roster(d, n)\n", + "\n" + ] + } + ], + "source": [ + "%%conjure --solver=minion\n", + "find roster: function (days, nurses) --> shifts\n", + "$ constraint 1 (Single assignment per day)\n", + "$ a nurse can be assigned to at most one shift per day\n", + "$ NOTE: automatically satisfied because of how \"roster\" is defined\n", + "\n", + "$ constraint 2 (Under staffing)\n", + "$ the number of nurses for each shift suffice for the minimum demand\n", + "such that\n", + " forAll day : days .\n", + " forAll shift : shifts .\n", + " (sum ((d,_),s) in roster . toInt(d=day /\\ s=shift))\n", + " >= minimumDemand((day,shift))\n", + "\n", + "$ constraint 3 (Shift type successions)\n", + "$ the shift type assignments of one nurse on two consecutive days\n", + "$ must not violate any forbidden succession\n", + "such that\n", + " forAll d : int(1..(nDays-1)) .\n", + " forAll n : nurses .\n", + " !((roster(d,n), roster(d+1,n)) in forbiddenPatterns)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kE06me_J_09p" + }, + "source": [ + "Note that in this specification, the first constraint is automatically satisfied because of the way we have defined `roster` as a function from a day/nurse pair to a shift. So changing the representation of `roster` has not only removed the overly restrictive assumption that only one nurse can be assigned to a day/shift pair, but also dealt with the first real constraint.\n", + "\n", + "We have added a second constraint to enforce the minimum demand for each shift, by requiring that the number of nurses mapped to each day/shift pair is at least as large as the minimum demand for that day/shift pair.\n", + "\n", + "Finally, we have added a third constraint to ensure that forbidden shift patterns do not occur." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0uBBIwlX_9am" + }, + "source": [ + "##Final model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6QotfeQu__8C" + }, + "source": [ + "Unfortunately, the second specification is not accepted by Conjure. The `roster` function is expecting a single pair as its argument, but we have given two arguments (a day and a nurse). We replace the last constraint by a version that corrects this syntax error:" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ISY-4C0-AGHi" + }, + "source": [ + "`$ constraint 3 (Shift type successions)`\n", + "\n", + "`$ the shift type assignments of one nurse on two consecutive days`\n", + "\n", + "`$ must not violate any forbidden succession`\n", + "\n", + "`such that`\n", + " \n", + "`forAll d : int(1..(nDays-1)) .`\n", + "\n", + "`forAll n : nurses .`\n", + "\n", + "`!((roster((d,n)), roster((d+1,n))) in forbiddenPatterns)`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8LptUFIwAV4v" + }, + "source": [ + "This is a specification that is acceptable to Conjure and which captures the key constraints we wanted to include." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Lg0TdcXwAbx_" + }, + "source": [ + "Putting these constraints together gives us:\n", + "\n", + "(*warning - running this cell may take quite a while!*)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OLxLDWYPAflD" + }, + "outputs": [], + "source": [ + "%%conjure --solver=minion\n", + "find roster: function (days, nurses) --> shifts\n", + "$ constraint 1 (Single assignment per day)\n", + "$ a nurse can be assigned to at most one shift per day\n", + "$ NOTE: automatically satisfied because of how \"roster\" is defined\n", + "\n", + "$ constraint 2 (Under staffing)\n", + "$ the number of nurses for each shift suffice for the minimum demand\n", + "such that\n", + " forAll day : days .\n", + " forAll shift : shifts .\n", + " (sum ((d,_),s) in roster . toInt(d=day /\\ s=shift))\n", + " >= minimumDemand((day,shift))\n", + "\n", + "$ constraint 3 (Shift type successions)\n", + "$ the shift type assignments of one nurse on two consecutive days\n", + "$ must not violate any forbidden succession\n", + "such that\n", + " forAll d : int(1..(nDays-1)) .\n", + " forAll n : nurses .\n", + " !((roster((d,n)), roster((d+1,n))) in forbiddenPatterns)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "KvbAlL_O_hrQ" + }, + "source": [ + "The solver used here is Minion [CDDC+19](https://conjure.readthedocs.io/en/latest/zreferences.html#id4), a constraint programming solver. After quite some time, this creates the following solution:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "vm7aSCAp_2LF", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "d7adbd4e-54cd-465d-bb97-bcd8f9c5558f" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[[[1, 2], 'Early'], [[1, 3], 'Early'], [[1, 4], 'Late'], [[1, 5], 'Late'], [[2, 2], 'Early'], [[2, 3], 'Late'], [[2, 4], 'Night'], [[2, 5], 'Night'], [[3, 2], 'Early'], [[3, 3], 'Late'], [[3, 4], 'Night'], [[4, 5], 'Night'], [[5, 2], 'Early'], [[5, 3], 'Late'], [[5, 4], 'Night'], [[5, 5], 'Night'], [[6, 1], 'Early'], [[6, 2], 'Early'], [[6, 3], 'Late'], [[6, 4], 'Night'], [[7, 4], 'Night'], [[7, 5], 'Late']]\n" + ] + } + ], + "source": [ + "print(roster)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vZZnYwBxANRW" + }, + "source": [ + "A much faster way to obtain a solution is to ask Minion to use the domoverwdeg variable ordering, which is often effective on constrained scheduling problems:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-T92tQCBAOKW", + "outputId": "d8622d41-8077-413e-faf2-b021028ef2f0" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'roster': [[[1, 2], 'Early'],\n", + " [[1, 3], 'Early'],\n", + " [[1, 4], 'Late'],\n", + " [[1, 5], 'Late'],\n", + " [[2, 2], 'Early'],\n", + " [[2, 3], 'Late'],\n", + " [[2, 4], 'Night'],\n", + " [[2, 5], 'Night'],\n", + " [[3, 2], 'Early'],\n", + " [[3, 3], 'Late'],\n", + " [[3, 4], 'Night'],\n", + " [[4, 5], 'Night'],\n", + " [[5, 2], 'Early'],\n", + " [[5, 3], 'Late'],\n", + " [[5, 4], 'Night'],\n", + " [[5, 5], 'Night'],\n", + " [[6, 1], 'Early'],\n", + " [[6, 2], 'Early'],\n", + " [[6, 3], 'Late'],\n", + " [[6, 4], 'Night'],\n", + " [[7, 4], 'Night'],\n", + " [[7, 5], 'Late']]}" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "source": [ + "%%conjure --solver=minion --solver-options='-varorder domoverwdeg'\n", + "find roster: function (days, nurses) --> shifts\n", + "$ constraint 1 (Single assignment per day)\n", + "$ a nurse can be assigned to at most one shift per day\n", + "$ NOTE: automatically satisfied because of how \"roster\" is defined\n", + "\n", + "$ constraint 2 (Under staffing)\n", + "$ the number of nurses for each shift suffice for the minimum demand\n", + "such that\n", + " forAll day : days .\n", + " forAll shift : shifts .\n", + " (sum ((d,_),s) in roster . toInt(d=day /\\ s=shift))\n", + " >= minimumDemand((day,shift))\n", + "\n", + "$ constraint 3 (Shift type successions)\n", + "$ the shift type assignments of one nurse on two consecutive days\n", + "$ must not violate any forbidden succession\n", + "such that\n", + " forAll d : int(1..(nDays-1)) .\n", + " forAll n : nurses .\n", + " !((roster((d,n)), roster((d+1,n))) in forbiddenPatterns)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jav2lI9SA1mf" + }, + "source": [ + "Choosing the right parameters to control solver behaviour is important but not generally well understood, and we leave discussion of this problem for another time." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OZwGGTmKPqOQ" + }, + "source": [ + "## Python datatypes" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6XoriFZKPu0L" + }, + "source": [ + "We can also use python variables as input, either on their own or in combination with Essence inputs." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "WUWEX1edQdxu" + }, + "outputs": [], + "source": [ + "nNurses = 5\n", + "nDays = 7\n", + "shifts = ['Early', 'Late', 'Night']\n", + "forbiddenPatterns = [('Late','Early'), ('Night','Early'), ('Night','Late')]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-1_QNf5HTYz-" + }, + "source": [ + "Running the code below produces the same output as it does above, since the python variables define the same values for `nNurses`, `nDays`, `shifts`, and `forbiddenPatterns` as the Essence model did.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-k_xVdG8Q_VT", + "outputId": "9bee836b-d90f-4fc3-98f0-5598e9b3eb4d" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'roster': [[[1, 2], 'Early'],\n", + " [[1, 3], 'Early'],\n", + " [[1, 4], 'Late'],\n", + " [[1, 5], 'Late'],\n", + " [[2, 2], 'Early'],\n", + " [[2, 3], 'Late'],\n", + " [[2, 4], 'Night'],\n", + " [[2, 5], 'Night'],\n", + " [[3, 2], 'Early'],\n", + " [[3, 3], 'Late'],\n", + " [[3, 4], 'Night'],\n", + " [[4, 5], 'Night'],\n", + " [[5, 2], 'Early'],\n", + " [[5, 3], 'Late'],\n", + " [[5, 4], 'Night'],\n", + " [[5, 5], 'Night'],\n", + " [[6, 1], 'Early'],\n", + " [[6, 2], 'Early'],\n", + " [[6, 3], 'Late'],\n", + " [[6, 4], 'Night'],\n", + " [[7, 4], 'Night'],\n", + " [[7, 5], 'Late']]}" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "source": [ + "%%conjure --solver=minion --solver-options='-varorder domoverwdeg'\n", + "find roster: function (days, nurses) --> shifts\n", + "$ constraint 1 (Single assignment per day)\n", + "$ a nurse can be assigned to at most one shift per day\n", + "$ NOTE: automatically satisfied because of how \"roster\" is defined\n", + "\n", + "$ constraint 2 (Under staffing)\n", + "$ the number of nurses for each shift suffice for the minimum demand\n", + "such that\n", + " forAll day : days .\n", + " forAll shift : shifts .\n", + " (sum ((d,_),s) in roster . toInt(d=day /\\ s=shift))\n", + " >= minimumDemand((day,shift))\n", + "\n", + "$ constraint 3 (Shift type successions)\n", + "$ the shift type assignments of one nurse on two consecutive days\n", + "$ must not violate any forbidden succession\n", + "such that\n", + " forAll d : int(1..(nDays-1)) .\n", + " forAll n : nurses .\n", + " !((roster((d,n)), roster((d+1,n))) in forbiddenPatterns)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oEO7p5otBLGj" + }, + "source": [ + "##Representations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vpX_tZdQBOGH" + }, + "source": [ + "We can display the nurse roster using graphs:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "pgMq_87lBhjI", + "outputId": "1f7e2b81-b24b-4553-e5a0-e6781e24e368" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster1\n\nDay 1\n\n\ncluster2\n\nDay 2\n\n\ncluster3\n\nDay 3\n\n\ncluster4\n\nDay 4\n\n\ncluster5\n\nDay 5\n\n\ncluster6\n\nDay 6\n\n\ncluster7\n\nDay 7\n\n\n\nLate1\n\n\n\n\nLate\n\n\n\n0\n\n\n\n\nNurse ID: 4\n\n\n\nLate1->0\n\n\n\n\n\n1\n\n\n\n\nNurse ID: 5\n\n\n\nLate1->1\n\n\n\n\n\nEarly1\n\n\n\n\nEarly\n\n\n\n2\n\n\n\n\nNurse ID: 2\n\n\n\nEarly1->2\n\n\n\n\n\n3\n\n\n\n\nNurse ID: 3\n\n\n\nEarly1->3\n\n\n\n\n\nEarly2\n\n\n\n\nEarly\n\n\n\n\nNight2\n\n\n\n\nNight\n\n\n\n4\n\n\n\n\nNurse ID: 4\n\n\n\nNight2->4\n\n\n\n\n\n5\n\n\n\n\nNurse ID: 5\n\n\n\nNight2->5\n\n\n\n\n\nLate2\n\n\n\n\nLate\n\n\n\n6\n\n\n\n\nNurse ID: 3\n\n\n\nLate2->6\n\n\n\n\n\n7\n\n\n\n\nNurse ID: 2\n\n\n\nEarly2->7\n\n\n\n\n\nEarly3\n\n\n\n\nEarly\n\n\n\n\nNight3\n\n\n\n\nNight\n\n\n\n8\n\n\n\n\nNurse ID: 4\n\n\n\nNight3->8\n\n\n\n\n\nLate3\n\n\n\n\nLate\n\n\n\n9\n\n\n\n\nNurse ID: 3\n\n\n\nLate3->9\n\n\n\n\n\n10\n\n\n\n\nNurse ID: 2\n\n\n\nEarly3->10\n\n\n\n\n\nNight4\n\n\n\n\nNight\n\n\n\n\n11\n\n\n\n\nNurse ID: 5\n\n\n\nNight4->11\n\n\n\n\n\nEarly5\n\n\n\n\nEarly\n\n\n\n\nNight5\n\n\n\n\nNight\n\n\n\n12\n\n\n\n\nNurse ID: 4\n\n\n\nNight5->12\n\n\n\n\n\n13\n\n\n\n\nNurse ID: 5\n\n\n\nNight5->13\n\n\n\n\n\nLate6\n\n\n\n\nLate\n\n\n\n\nLate5\n\n\n\n\nLate\n\n\n\n14\n\n\n\n\nNurse ID: 3\n\n\n\nLate5->14\n\n\n\n\n\n15\n\n\n\n\nNurse ID: 2\n\n\n\nEarly5->15\n\n\n\n\n\nNight6\n\n\n\n\nNight\n\n\n\n16\n\n\n\n\nNurse ID: 4\n\n\n\nNight6->16\n\n\n\n\n\n17\n\n\n\n\nNurse ID: 3\n\n\n\nLate6->17\n\n\n\n\n\nEarly6\n\n\n\n\nEarly\n\n\n\n18\n\n\n\n\nNurse ID: 1\n\n\n\nEarly6->18\n\n\n\n\n\n19\n\n\n\n\nNurse ID: 2\n\n\n\nEarly6->19\n\n\n\n\n\nLate7\n\n\n\n\nLate\n\n\n\n\nNight7\n\n\n\n\nNight\n\n\n\n20\n\n\n\n\nNurse ID: 4\n\n\n\nNight7->20\n\n\n\n\n\n21\n\n\n\n\nNurse ID: 5\n\n\n\nLate7->21\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 24 + } + ], + "source": [ + "import graphviz\n", + "\n", + "p = graphviz.Digraph('parent')\n", + "p.attr(compound='true')\n", + "\n", + "nDays = 7;\n", + "edges = []\n", + "id = 0\n", + "\n", + "roster = sorted(roster, key=lambda item: item[1])\n", + "roster.reverse()\n", + " \n", + "for day in range (1, nDays+1):\n", + " with p.subgraph(name='cluster'+str(day), node_attr={'shape': 'box3d', 'color': 'purple', 'style':'rounded'}) as c:\n", + " for item in roster:\n", + " #if it is the selected day\n", + " if item[0][0] == day:\n", + " #add the time of day if it doesn't exist already\n", + " c.node(str(item[1])+str(day), item[1])\n", + " #print(str(item[1])+str(day))\n", + " #add the nurse\n", + " c.node(str(id), \"Nurse ID: \" + str(item[0][1]), color='orange')\n", + " #print(str(id), \"nurse: \", str(item[0][1]))\n", + " #add the edge\n", + " edges.append([str(item[1])+str(day), str(id)])\n", + " id=id+1\n", + " c.attr(label=\"Day \"+str(day))\n", + " c.attr(style='rounded')\n", + " c.attr(fontsize='20')\n", + " \n", + "# force each subgraph to be on new line\n", + "p.edge('2', 'Early2', None, {'style':'invis'})\n", + "p.edge('7', 'Early3', None, {'style':'invis'})\n", + "p.edge('10', 'Night4', None, {'style':'invis'})\n", + "p.edge('11', 'Early5', None, {'style':'invis'})\n", + "p.edge('12', 'Late6', None, {'style':'invis'})\n", + "p.edge('18', 'Late7', None, {'style':'invis'})\n", + "\n", + "p.edges(edges)\n", + "\n", + "p" + ] + }, + { + "cell_type": "markdown", + "source": [ + "We can also display the roster as the timetable for each nurse:" + ], + "metadata": { + "id": "LMSsgljnrY8m" + } + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "d-bgk-0-PITw", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "0ec19cd7-3ede-47c0-b8b9-ce5e5a29b537" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster1\n\nNurse 1\n\n\ncluster2\n\nNurse 2\n\n\ncluster3\n\nNurse 3\n\n\ncluster4\n\nNurse 4\n\n\ncluster5\n\nNurse 5\n\n\n\n0\n\n\n\n\nDay 6\n\n\n\n0Early1\n\n\n\n\nEarly\n\n\n\n0->0Early1\n\n\n\n\n\n5\n\n\n\n\nDay 1\n\n\n\n\n1\n\n\n\n\nDay 6\n\n\n\n1Early2\n\n\n\n\nEarly\n\n\n\n1->1Early2\n\n\n\n\n\n2\n\n\n\n\nDay 5\n\n\n\n2Early2\n\n\n\n\nEarly\n\n\n\n2->2Early2\n\n\n\n\n\n3\n\n\n\n\nDay 3\n\n\n\n3Early2\n\n\n\n\nEarly\n\n\n\n3->3Early2\n\n\n\n\n\n4\n\n\n\n\nDay 2\n\n\n\n4Early2\n\n\n\n\nEarly\n\n\n\n4->4Early2\n\n\n\n\n\n5Early2\n\n\n\n\nEarly\n\n\n\n5->5Early2\n\n\n\n\n\n10\n\n\n\n\nDay 1\n\n\n\n\n6\n\n\n\n\nDay 6\n\n\n\n6Late3\n\n\n\n\nLate\n\n\n\n6->6Late3\n\n\n\n\n\n7\n\n\n\n\nDay 5\n\n\n\n7Late3\n\n\n\n\nLate\n\n\n\n7->7Late3\n\n\n\n\n\n8\n\n\n\n\nDay 3\n\n\n\n8Late3\n\n\n\n\nLate\n\n\n\n8->8Late3\n\n\n\n\n\n9\n\n\n\n\nDay 2\n\n\n\n9Late3\n\n\n\n\nLate\n\n\n\n9->9Late3\n\n\n\n\n\n10Early3\n\n\n\n\nEarly\n\n\n\n10->10Early3\n\n\n\n\n\n16\n\n\n\n\nDay 1\n\n\n\n\n11\n\n\n\n\nDay 7\n\n\n\n11Night4\n\n\n\n\nNight\n\n\n\n11->11Night4\n\n\n\n\n\n12\n\n\n\n\nDay 6\n\n\n\n12Night4\n\n\n\n\nNight\n\n\n\n12->12Night4\n\n\n\n\n\n13\n\n\n\n\nDay 5\n\n\n\n13Night4\n\n\n\n\nNight\n\n\n\n13->13Night4\n\n\n\n\n\n14\n\n\n\n\nDay 3\n\n\n\n14Night4\n\n\n\n\nNight\n\n\n\n14->14Night4\n\n\n\n\n\n15\n\n\n\n\nDay 2\n\n\n\n15Night4\n\n\n\n\nNight\n\n\n\n15->15Night4\n\n\n\n\n\n16Late4\n\n\n\n\nLate\n\n\n\n16->16Late4\n\n\n\n\n\n21\n\n\n\n\nDay 1\n\n\n\n\n17\n\n\n\n\nDay 7\n\n\n\n17Late5\n\n\n\n\nLate\n\n\n\n17->17Late5\n\n\n\n\n\n18\n\n\n\n\nDay 5\n\n\n\n18Night5\n\n\n\n\nNight\n\n\n\n18->18Night5\n\n\n\n\n\n19\n\n\n\n\nDay 4\n\n\n\n19Night5\n\n\n\n\nNight\n\n\n\n19->19Night5\n\n\n\n\n\n20\n\n\n\n\nDay 2\n\n\n\n20Night5\n\n\n\n\nNight\n\n\n\n20->20Night5\n\n\n\n\n\n21Late5\n\n\n\n\nLate\n\n\n\n21->21Late5\n\n\n\n\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "source": [ + "p = graphviz.Digraph('parent')\n", + "p.attr(compound='true')\n", + "p.attr(rankdir=\"TB\")\n", + "\n", + "nNurses = 5;\n", + "edges = []\n", + "id = 0\n", + "\n", + "roster = sorted(roster, key=lambda item: item[0][0])\n", + "roster.reverse()\n", + " \n", + "for nurse in range (1, nNurses+1):\n", + " with p.subgraph(name='cluster'+str(nurse), node_attr={'shape': 'box3d', 'color': 'purple', 'style':'rounded'}) as c:\n", + " \n", + " for item in roster:\n", + " #if it is the selected nurse\n", + " if item[0][1] == nurse:\n", + " \n", + " #add the day\n", + " c.node(str(id), \"Day \" + str(item[0][0]), color='orange')\n", + "\n", + " #add the time of day\n", + " c.node((str(id) + str(item[1]))+str(nurse), item[1])\n", + " \n", + " #add the edge\n", + " edges.append([str(id), (str(id) + str(item[1]))+str(nurse)])\n", + " id=id+1\n", + " c.attr(label=\"Nurse \"+str(nurse))\n", + " c.attr(style='rounded')\n", + " c.attr(fontsize='20')\n", + "\n", + "\n", + "\n", + "# force each subgraph to be on new line\n", + "p.edge('0Early1', '5', None, {'style':'invis'})\n", + "p.edge('5Early2', '10', None, {'style':'invis'})\n", + "p.edge('10Early3', '16', None, {'style':'invis'})\n", + "p.edge('16Late4', '21', None, {'style':'invis'})\n", + "\n", + "p.edges(edges)\n", + "\n", + "p" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "qsGFV5Dv_OOQ" + ], + "provenance": [], + "toc_visible": true, + "include_colab_link": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 1c3a7d1d570569f1004223c53978edfb825e8ca1 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sat, 29 Apr 2023 23:09:34 +0100 Subject: [PATCH 230/378] Rename NurseRostering.ipynb to docs/tutorials/notebooks/NurseRostering.ipynb --- .../tutorials/notebooks/NurseRostering.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename NurseRostering.ipynb => docs/tutorials/notebooks/NurseRostering.ipynb (99%) diff --git a/NurseRostering.ipynb b/docs/tutorials/notebooks/NurseRostering.ipynb similarity index 99% rename from NurseRostering.ipynb rename to docs/tutorials/notebooks/NurseRostering.ipynb index 1e6af6633e..248e51e0f5 100644 --- a/NurseRostering.ipynb +++ b/docs/tutorials/notebooks/NurseRostering.ipynb @@ -1009,4 +1009,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} \ No newline at end of file +} From cd8b89b8d1aa461a49af4a50b0a9c1c2fdba275c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 10:47:31 +0100 Subject: [PATCH 231/378] Change makefile so we have a chance of updating the stack.yaml file --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e2b48c29db..e1866cae70 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,7 @@ test: stack test --test-arguments '--hide-successes --limit-time ${LIMIT_TIME}';\ fi -stack.yaml: +stack.yaml: etc/hs-deps/stack-${GHC_VERSION}.yaml @cp etc/hs-deps/stack-${GHC_VERSION}.yaml stack.yaml .PHONY: preinstall From 2ac57b38b990ef102f841e2204a0d14dddd72105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 10:47:42 +0100 Subject: [PATCH 232/378] Use GHC-9.2 by default --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index e1866cae70..d7f686dd40 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,8 @@ SHELL := /bin/bash # these are default values -# override by calling the makefile like so: "GHC_VERSION=8.6 make" -export GHC_VERSION?=9.0 +# override by calling the makefile like so: "GHC_VERSION=9.2 make" +export GHC_VERSION?=9.2 export BIN_DIR?=${HOME}/.local/bin export CI?=false export BUILD_TESTS?=false From ee9d9bb9bc4c7f546139292a4a57a139fb13f26f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 10:48:58 +0100 Subject: [PATCH 233/378] Updating LTS versions --- etc/hs-deps/stack-9.0.yaml | 2 +- etc/hs-deps/stack-9.2.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/hs-deps/stack-9.0.yaml b/etc/hs-deps/stack-9.0.yaml index 1ff3a74a02..231e232317 100644 --- a/etc/hs-deps/stack-9.0.yaml +++ b/etc/hs-deps/stack-9.0.yaml @@ -1,4 +1,4 @@ -resolver: lts-19.24 +resolver: lts-19.33 packages: - '.' system-ghc: true diff --git a/etc/hs-deps/stack-9.2.yaml b/etc/hs-deps/stack-9.2.yaml index 0cb5008d95..3f482b61fc 100644 --- a/etc/hs-deps/stack-9.2.yaml +++ b/etc/hs-deps/stack-9.2.yaml @@ -1,4 +1,4 @@ -resolver: lts-20.2 +resolver: lts-20.21 packages: - '.' system-ghc: true From ef89a73d7c64f50a6332b19e17a80f008066a3be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 18 May 2023 12:16:29 +0100 Subject: [PATCH 234/378] we are not building gecode at the moment --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6bb7c28f94..9b28719ba4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,7 +57,8 @@ RUN make install # Make binaries a bit smaller RUN ls -l /root/.local/bin RUN du -sh /root/.local/bin -RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 +RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 +# RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 RUN ls -l /root/.local/bin RUN du -sh /root/.local/bin From a617c45768b56b18df77471f2b064a8ce82f827e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 12:41:47 +0100 Subject: [PATCH 235/378] Remove unused code from the makefile --- Makefile | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Makefile b/Makefile index d7f686dd40..f379de0837 100644 --- a/Makefile +++ b/Makefile @@ -64,16 +64,6 @@ preinstall: @stack runhaskell etc/build/gen_Operator.hs @stack runhaskell etc/build/gen_Expression.hs -.PHONY: freeze -freeze: - @bash etc/build/freeze-deps.sh - -.PHONY: refreeze -refreeze: - @make clean - @BUILD_TESTS=yes make install-using-cabal - @make freeze - .PHONY: clean clean: @bash etc/build/clean.sh From 5bcb015231168bbf4e1ba51ed768a820728ab94c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 12:42:05 +0100 Subject: [PATCH 236/378] Delete old conjure-testing binary to avoid confusion --- etc/build/install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/etc/build/install.sh b/etc/build/install.sh index 7b987490a3..c8c8140e27 100755 --- a/etc/build/install.sh +++ b/etc/build/install.sh @@ -15,6 +15,7 @@ if [ ${GHC_VERSION} == "head" ]; then fi if ${BUILD_TESTS}; then + rm -f .stack-work/dist/*/*/build/conjure-testing/conjure-testing COMMAND="${COMMAND} --test --no-run-tests" fi From 9900f8896bf5efb88225a5708763bb17f6cc6210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 18 May 2023 14:00:01 +0100 Subject: [PATCH 237/378] Update test outputs --- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 1595 -------- .../typecheck.expected | 20 - .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 3285 ----------------- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../model.expected.json | 4 +- .../289~1435114959_70/model.expected.json | 4 +- .../315~1435148451_38/model.expected.json | 732 ---- .../315~1435148451_38/typecheck.expected | 26 - .../autogen/316~final/model.expected.json | 139 - .../autogen/316~final/typecheck.expected | 23 - .../317~1435132020_93/model.expected.json | 50 - .../317~1435132020_93/typecheck.expected | 12 - .../autogen/318~final/model.expected.json | 23 - .../autogen/318~final/typecheck.expected | 9 - .../319~1435138340_66/model.expected.json | 103 - .../319~1435138340_66/typecheck.expected | 15 - .../autogen/320~final/model.expected.json | 26 - .../autogen/320~final/typecheck.expected | 10 - .../321~1435140010_44/model.expected.json | 684 ---- .../321~1435140010_44/typecheck.expected | 22 - .../autogen/322~final/model.expected.json | 17 - .../autogen/322~final/typecheck.expected | 9 - .../325~1435147026_26/model.expected.json | 777 ---- .../325~1435147026_26/typecheck.expected | 35 - .../autogen/326~final/model.expected.json | 46 - .../autogen/326~final/typecheck.expected | 9 - .../345~1435141546_33/model.expected.json | 4 +- .../396~1435169954_27/model.expected.json | 4 +- .../398~1435194081_33/model.expected.json | 4 +- .../427~1435209539_80/model.expected.json | 176 - .../427~1435209539_80/typecheck.expected | 14 - .../441~1435208191_85/model.expected.json | 175 - .../441~1435208191_85/typecheck.expected | 10 - .../autogen/442~final/model.expected.json | 18 - .../autogen/442~final/typecheck.expected | 9 - .../445~1435212982_68/model.expected.json | 196 - .../445~1435212982_68/typecheck.expected | 12 - .../autogen/446~final/model.expected.json | 19 - .../autogen/446~final/typecheck.expected | 9 - .../447~1435213364_36/model.expected.json | 58 - .../447~1435213364_36/typecheck.expected | 14 - .../autogen/448~final/model.expected.json | 17 - .../autogen/448~final/typecheck.expected | 9 - .../460~1435196486_42/model.expected.json | 4 +- .../558~1435585187_20/model.expected.json | 4 +- .../560~1436548014_12/model.expected.json | 92 - .../560~1436548014_12/typecheck.expected | 11 - .../autogen/561~final/model.expected.json | 20 - .../autogen/561~final/typecheck.expected | 9 - .../562~1436556139_51/model.expected.json | 190 - .../562~1436556139_51/typecheck.expected | 13 - .../autogen/563~final/model.expected.json | 20 - .../autogen/563~final/typecheck.expected | 9 - .../605~1436581770_45/model.expected.json | 4 +- .../613~1436580506_52/model.expected.json | 125 - .../613~1436580506_52/typecheck.expected | 21 - .../autogen/614~final/model.expected.json | 17 - .../autogen/614~final/typecheck.expected | 9 - .../615~1436587408_39/model.expected.json | 79 - .../615~1436587408_39/typecheck.expected | 13 - .../autogen/616~final/model.expected.json | 27 - .../autogen/616~final/typecheck.expected | 11 - .../autogen/628~final/model.expected.json | 4 +- .../autogen/633~final/model.expected.json | 4 +- .../autogen/637~final/model.expected.json | 4 +- .../autogen/646~final/model.expected.json | 4 +- .../autogen/653~final/model.expected.json | 4 +- .../autogen/678~final/model.expected.json | 4 +- .../730~1439082038_16/model.expected.json | 4 +- .../autogen/731~final/model.expected.json | 4 +- .../768~1439583525_36/model.expected.json | 4 +- .../autogen/769~final/model.expected.json | 4 +- .../basic/typeErrorInDecl/model.expected.json | 25 - .../basic/typeErrorInDecl/typecheck.expected | 6 - .../heuristic_conflict/model.expected.json | 4 +- .../heuristic_magic/model.expected.json | 24 - .../heuristic_sdf/model.expected.json | 4 +- .../heuristic_srf/model.expected.json | 4 +- .../heuristic_static/model.expected.json | 4 +- .../issues/130/model.expected.json | 20 - .../parse_print/issues/130/typecheck.expected | 3 - .../issues/133/4/model.expected.json | 4 +- .../issues/207/model.expected.json | 573 --- .../parse_print/issues/207/typecheck.expected | 19 - .../issues/352/find/model.expected.json | 4 +- .../issues/361/1/model.expected.json | 27 - .../issues/361/1/typecheck.expected | 6 - .../change-04/model.expected.json | 4 +- .../change-05/model.expected.json | 38 - .../change-05/typecheck.expected | 5 - .../change-07/model.expected.json | 38 - .../change-07/typecheck.expected | 1 - .../change-09/model.expected.json | 4 +- .../delete-04/model.expected.json | 38 - .../delete-05/typecheck.expected | 5 - .../enum_liberated/model.expected.json | 4 +- .../set01/change-01/model.expected.json | 4 +- .../random_perturb/set01/model.expected.json | 4 +- .../syntax_test/branching/model.expected.json | 4 +- .../enums/givens/model.expected.json | 4 +- .../enums/lettings/model.expected.json | 4 +- .../declarations/finds/model.expected.json | 4 +- .../declarations/givens/model.expected.json | 4 +- .../lettings/domain/model.expected.json | 4 +- .../lettings/expression/model.expected.json | 4 +- .../unnamed-redefinition/model.expected.json | 4 +- .../unnamed-valid/model.expected.json | 4 +- .../domains/bool/model.expected.json | 4 +- .../domains/enum/model.expected.json | 4 +- .../domains/function/model.expected.json | 4 +- .../domains/int/model.expected.json | 4 +- .../domains/matrix/model.expected.json | 4 +- .../domains/mset/model.expected.json | 4 +- .../domains/partition/model.expected.json | 4 +- .../domains/record/model.expected.json | 4 +- .../domains/relation/model.expected.json | 4 +- .../domains/sequence/model.expected.json | 4 +- .../domains/set/model.expected.json | 4 +- .../domains/tuple/model.expected.json | 4 +- .../domains/unnamed/model.expected.json | 4 +- .../quantifications/typecheck.expected | 0 1573 files changed, 3008 insertions(+), 12905 deletions(-) delete mode 100644 tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/model.expected.json delete mode 100644 tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/typecheck.expected delete mode 100644 tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/model.expected.json delete mode 100644 tests/parse_print/autogen/315~1435148451_38/model.expected.json delete mode 100644 tests/parse_print/autogen/315~1435148451_38/typecheck.expected delete mode 100644 tests/parse_print/autogen/316~final/model.expected.json delete mode 100644 tests/parse_print/autogen/316~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/317~1435132020_93/model.expected.json delete mode 100644 tests/parse_print/autogen/317~1435132020_93/typecheck.expected delete mode 100644 tests/parse_print/autogen/318~final/model.expected.json delete mode 100644 tests/parse_print/autogen/318~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/319~1435138340_66/model.expected.json delete mode 100644 tests/parse_print/autogen/319~1435138340_66/typecheck.expected delete mode 100644 tests/parse_print/autogen/320~final/model.expected.json delete mode 100644 tests/parse_print/autogen/320~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/321~1435140010_44/model.expected.json delete mode 100644 tests/parse_print/autogen/321~1435140010_44/typecheck.expected delete mode 100644 tests/parse_print/autogen/322~final/model.expected.json delete mode 100644 tests/parse_print/autogen/322~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/325~1435147026_26/model.expected.json delete mode 100644 tests/parse_print/autogen/325~1435147026_26/typecheck.expected delete mode 100644 tests/parse_print/autogen/326~final/model.expected.json delete mode 100644 tests/parse_print/autogen/326~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/427~1435209539_80/model.expected.json delete mode 100644 tests/parse_print/autogen/427~1435209539_80/typecheck.expected delete mode 100644 tests/parse_print/autogen/441~1435208191_85/model.expected.json delete mode 100644 tests/parse_print/autogen/441~1435208191_85/typecheck.expected delete mode 100644 tests/parse_print/autogen/442~final/model.expected.json delete mode 100644 tests/parse_print/autogen/442~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/445~1435212982_68/model.expected.json delete mode 100644 tests/parse_print/autogen/445~1435212982_68/typecheck.expected delete mode 100644 tests/parse_print/autogen/446~final/model.expected.json delete mode 100644 tests/parse_print/autogen/446~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/447~1435213364_36/model.expected.json delete mode 100644 tests/parse_print/autogen/447~1435213364_36/typecheck.expected delete mode 100644 tests/parse_print/autogen/448~final/model.expected.json delete mode 100644 tests/parse_print/autogen/448~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/560~1436548014_12/model.expected.json delete mode 100644 tests/parse_print/autogen/560~1436548014_12/typecheck.expected delete mode 100644 tests/parse_print/autogen/561~final/model.expected.json delete mode 100644 tests/parse_print/autogen/561~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/562~1436556139_51/model.expected.json delete mode 100644 tests/parse_print/autogen/562~1436556139_51/typecheck.expected delete mode 100644 tests/parse_print/autogen/563~final/model.expected.json delete mode 100644 tests/parse_print/autogen/563~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/613~1436580506_52/model.expected.json delete mode 100644 tests/parse_print/autogen/613~1436580506_52/typecheck.expected delete mode 100644 tests/parse_print/autogen/614~final/model.expected.json delete mode 100644 tests/parse_print/autogen/614~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/615~1436587408_39/model.expected.json delete mode 100644 tests/parse_print/autogen/615~1436587408_39/typecheck.expected delete mode 100644 tests/parse_print/autogen/616~final/model.expected.json delete mode 100644 tests/parse_print/autogen/616~final/typecheck.expected delete mode 100644 tests/parse_print/basic/typeErrorInDecl/model.expected.json delete mode 100644 tests/parse_print/basic/typeErrorInDecl/typecheck.expected delete mode 100644 tests/parse_print/heuristic/heuristic_magic/model.expected.json delete mode 100644 tests/parse_print/issues/130/model.expected.json delete mode 100644 tests/parse_print/issues/130/typecheck.expected delete mode 100644 tests/parse_print/issues/207/model.expected.json delete mode 100644 tests/parse_print/issues/207/typecheck.expected delete mode 100644 tests/parse_print/issues/361/1/model.expected.json delete mode 100644 tests/parse_print/issues/361/1/typecheck.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/change-05/model.expected.json delete mode 100644 tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/change-07/model.expected.json delete mode 100644 tests/parse_print/random_perturb/enum_liberated/change-07/typecheck.expected delete mode 100644 tests/parse_print/random_perturb/enum_liberated/delete-04/model.expected.json delete mode 100644 tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected delete mode 100644 tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected diff --git a/tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/model.expected.json index 1a19ab3094..cf60995cb8 100644 --- a/tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/007a2218db6f96b1069561e17b3198fb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/model.expected.json b/tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/model.expected.json index 596af179ac..cf5d3cd480 100644 --- a/tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/00becdadf865e1668c0d5917a1c7e988/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/model.expected.json index 93a2cdabf5..8c1a6d1cb5 100644 --- a/tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/00c93ca5de9edf4765d4a3db4f26a13b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/model.expected.json b/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/model.expected.json index 03f18a83f2..3b8e1c73f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/00f3f6e00d6aaa0c44f7a7bfaeabf301/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/model.expected.json index 8b2723958a..9b20daf7c2 100644 --- a/tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0155ed23298044f98c24b049e9f674d5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/model.expected.json index e7b7c0988b..2a3a4eafdf 100644 --- a/tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/016e7609f3aa273a2a9d8f851cda23b0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/model.expected.json b/tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/model.expected.json index fca2639a6d..332f1cfe1d 100644 --- a/tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/01a3688574d726ff7368c0b8e640be02/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/model.expected.json b/tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/model.expected.json index 11102c7ccd..9d37889082 100644 --- a/tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/021ccd3de28fccf2cc4b495fdba30109/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/model.expected.json index 921806b229..a437b448a6 100644 --- a/tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0259a42fad990d5498c3d9c6c199da94/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/model.expected.json index d0c84b6ce8..cd60d7d4f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0264be56cbed0b31969c94d730d856a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/model.expected.json b/tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/model.expected.json index 76038cfd85..037519825c 100644 --- a/tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/02a5303be013b97d8241ff52e4c93499/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/model.expected.json index de44369959..464206f3d8 100644 --- a/tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/02c3aa1d8caffbb46bfd62c52ace0e3e/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/model.expected.json b/tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/model.expected.json index 74fa90a7ce..ce53c4fea6 100644 --- a/tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/03336ac6e1e3f3c00e3feb6957358811/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/model.expected.json index c3e587c0c1..b87462ab12 100644 --- a/tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/033e7117d1cbfb11af319112434a43c4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/model.expected.json index 2e33338e53..855441d512 100644 --- a/tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0360b7add8f8f957bcca54a56c5cae9c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/model.expected.json index 980d6c7bee..dfbae35d78 100644 --- a/tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0380e49407e31794a0b2dd8a573308eb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/model.expected.json index 43c86240a6..fc809e5090 100644 --- a/tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/03959476e48f296a9ba7589337ba980d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/model.expected.json index bbd3652a8c..b4ede9bcf6 100644 --- a/tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/039a29d0d4631598657b8b2611a05cf6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/model.expected.json index d181b26489..9ce5530c19 100644 --- a/tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/03e9b7dea0376c9fae09687f25f3c8d4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/model.expected.json b/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/model.expected.json index 381345c89b..ecc66a4fdd 100644 --- a/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/03fa5e0fb1010e34c88e5d085c726276/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/model.expected.json b/tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/model.expected.json index aa54af15a8..db628cc2e6 100644 --- a/tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/03ff6c27828b6e1887413bd4d0ed9f38/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/model.expected.json index 22e28cda02..bd9004ceb8 100644 --- a/tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/045555e7bef90702ef51f7c87bdc67e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/model.expected.json b/tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/model.expected.json index 8d6a1c1f16..5687266dc2 100644 --- a/tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/04747f0c54d6be6d41109f6968f5d8de/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/model.expected.json index fd52dee9ce..90788811ce 100644 --- a/tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0474d7b3e0fc1f9e80683bed58112545/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/model.expected.json index 77eb62d549..81c38fe9dd 100644 --- a/tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0475bec5e477e09755c930ee9cb1e77c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/model.expected.json index 9df23c6ce2..1ddc34f19f 100644 --- a/tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/050ad75061d29ef27db160ad376241d6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/model.expected.json b/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/model.expected.json index aa812cf498..8f69b6eb43 100644 --- a/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/053601c1257a61ff56823b814f88e436/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/model.expected.json index ed7ab0ca2c..07543f8228 100644 --- a/tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/05aae0de4708472b6282e13a9e58bb3d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/model.expected.json index 3bd3965e10..c99f19b58e 100644 --- a/tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/05e320f8ca32d2f2b177c94e9726b3cc/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/model.expected.json index 5cbe731ca8..07bf8f406a 100644 --- a/tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0632e804c201340757931f64f9587edb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/model.expected.json b/tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/model.expected.json index 028c5d6ec1..2c740f34a2 100644 --- a/tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/06541d8a69c61a87fd068728a83ff345/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/model.expected.json index bacae6dbb4..bce9f67d1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/066c17b72e812917f52f48dbd28b117d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/model.expected.json index 1d279b64b2..78d5187806 100644 --- a/tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0690143a007f37b92ca7029e5fde5945/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given3"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/model.expected.json b/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/model.expected.json index 1b29a3c415..56d9a49a23 100644 --- a/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/06af2d456d70394d86a8f427da584a37/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/model.expected.json b/tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/model.expected.json index 2171a154e6..74b510ef5a 100644 --- a/tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/06bb092495b7a73ae357f41fd4e80545/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/model.expected.json b/tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/model.expected.json index 82405defdb..cf2a79fdb2 100644 --- a/tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/06d74bb8bba2981d95e94d23c192bc87/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/model.expected.json index 6fa6e658f6..b8a9ccb15e 100644 --- a/tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/06dace5aadd7cf91ed01dc91bfb2e7cd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/model.expected.json b/tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/model.expected.json index 2e1f95f03c..261eed730c 100644 --- a/tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/06fce89389eaa7612382f7de2e6dad65/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/model.expected.json b/tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/model.expected.json index fa37ae4b51..0b51ec9c11 100644 --- a/tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/070857f26f3d80044277fc95c9981781/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/model.expected.json index a3a1c15508..6116f52df3 100644 --- a/tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0740ecd60d44fbc0953daed81067709f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/model.expected.json index ebc7dce21b..f4b9932aab 100644 --- a/tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/07462500024634d4acbf73dd0983dc6a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/model.expected.json index fe93c1c2f1..652866401d 100644 --- a/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/074ccc54476152ac02322672f43fbf1a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/model.expected.json b/tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/model.expected.json index 59e5204c02..62a635b97e 100644 --- a/tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/074ea9fbacd659cc463b376a2772bf13/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/model.expected.json index 468d11a401..e9f7882e98 100644 --- a/tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/075527221a657e78d6f1c0a6a335371f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/model.expected.json index c88d29c234..f5a287a6f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0768a92397557ea2888ecf73fb6e055d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/model.expected.json b/tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/model.expected.json index 386d3cd2ed..eed377d4d5 100644 --- a/tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/076e091e7edae3a96b247ca22c261501/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/model.expected.json index 7bbfd11bff..274b9dbb06 100644 --- a/tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/07981afd6731fa941b2cf66c663da9d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/model.expected.json b/tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/model.expected.json index 0adef8c56e..ec7549963d 100644 --- a/tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/079c0d8d0a3ed063ab9c1d3d131afd14/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/model.expected.json index 8451f04f9a..dba300fb3a 100644 --- a/tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/07ccf22dda5e5cd7bc5859d6a401c03b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/model.expected.json index ef623b3818..479c20e37b 100644 --- a/tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/07e375a767ad55521e22d0265a6d24cb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/model.expected.json b/tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/model.expected.json index 787b380ef7..8be1ce4b6d 100644 --- a/tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/08029c83a2abc0a4e98cbbf0a9a9a347/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/model.expected.json index 19b5f3a01e..ae02d6d37f 100644 --- a/tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0803a6fdd3744357ffa70483fe5deccf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/model.expected.json b/tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/model.expected.json index ec051aeee7..4f0d49bf68 100644 --- a/tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/083fa3749c456a0e2b9ad8f1da77be70/model.expected.json @@ -1,6 +1,6 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": []} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/model.expected.json b/tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/model.expected.json index cbd94fb853..42fa4725c1 100644 --- a/tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/084959e428c16c5485c7775b20480e40/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/model.expected.json index 7e73b27057..d55227233a 100644 --- a/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/089427b807ae2e05bb8e2512153035ee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/model.expected.json index f08e9ced7e..6711c93083 100644 --- a/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0896777a9c9ec7a2944d17b0f832af27/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/model.expected.json b/tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/model.expected.json index 866ed283ce..e9885d4100 100644 --- a/tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/08bd587a797e6ddb39bd8c64d0fba266/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/model.expected.json index 69f1d02dea..6350c9cba2 100644 --- a/tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0919f28f3d8bd04dcd2c87324b3b522b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/model.expected.json index 532a548f60..beb0f7d6a6 100644 --- a/tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0925a634b21e50be5bdb48c638b16daf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/model.expected.json b/tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/model.expected.json index 30fead62d6..08d3856cfb 100644 --- a/tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/092fa9099eabbebe49ccdbe7aa221899/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/model.expected.json b/tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/model.expected.json index 720bef477d..a50646feac 100644 --- a/tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/09421d66ce386f99a6901d89dfd34524/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/model.expected.json index 0e7e9ef695..ba422d264e 100644 --- a/tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0994fae329ddb38862941034298722b6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/model.expected.json b/tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/model.expected.json index 1d7628257d..ed636d8461 100644 --- a/tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/09a49f240282fdecfa5af091729c5286/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/model.expected.json index 5f14707fc4..685665ce7f 100644 --- a/tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/09ac2051b1e1a54e1b7a3b051b78bcd3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/model.expected.json index 447499a48d..0af4102cbe 100644 --- a/tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0a4c5d1f2a6f82e1a72b0732362906b6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/model.expected.json index 6af72f0af1..d5de315ec5 100644 --- a/tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0a660c9dc8b5bd092e20366d83999c79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/model.expected.json index 2c1ce73406..48a97ffb5b 100644 --- a/tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0a758b1be1256dd86b8bdf8a61478641/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/model.expected.json index 33ca65f51c..0f975e1829 100644 --- a/tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0aadcc45dd750d57e64b53ef485f4f4c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/model.expected.json index 8c6fecfc5f..ef9c2ed506 100644 --- a/tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0ac27d5763cae0514c10af9c389af127/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/model.expected.json index e399e40372..002f739c2d 100644 --- a/tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0ad8f28def383f1fc962a54c34ab1889/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/model.expected.json index 1c9c3ca566..ee37156c27 100644 --- a/tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0ae78831341ee9110d855dbcb3f31a79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/model.expected.json index 46f3e80837..ea3b254475 100644 --- a/tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0aeec4358f391008e582adce57fbc61b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/model.expected.json index 5ca564d3d2..7d6e4903fa 100644 --- a/tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0af834366fe107643dbc2b243c7517fb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/model.expected.json index 5db411d355..e1ae1e83a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0b52e52938a256e58e895b782c1e683f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/model.expected.json index 163ca96d3e..f3352b06f9 100644 --- a/tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0b621881d60dee823364b01fd40f9769/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/model.expected.json index 405d797620..e18ad52128 100644 --- a/tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0b9c64fada86488ac3024b53ef27cb08/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/model.expected.json index ab56c35e57..b938ba171f 100644 --- a/tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0bd1fe14c9f8f1a362b0ea04d01e01d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/model.expected.json index 255993d520..613e8cc821 100644 --- a/tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0bedd75963d26fd9b9e62b65f97c8aca/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/model.expected.json index 2c4d5b1e3c..90e75f4769 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0c00a0c0bbf8b7bc44081ab08cdaf350/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/model.expected.json index 5cf5299503..4ac24cc459 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0c01f39b639fb7ced4c0bab3bd2bafda/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/model.expected.json index 0c9aef2bff..ea1b1a64e2 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0c20348d77091f47ec24a50fe7470612/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/model.expected.json index dc1144431d..104143cb40 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0c96216ee08ab936ef4f94f08ff71dfe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/model.expected.json index 3b04db1956..1ce7afd642 100644 --- a/tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0c9c015c4746f7640b730e0721cab58e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/model.expected.json index 7cab405c25..9328657450 100644 --- a/tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0cad08c5a7a5756492aa63fef3d9d17a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/model.expected.json index 870c7ceac6..9e395be2b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0cc229a553645189bafef737f9fbf3e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/model.expected.json index 0dfe0514ce..f1aa59ce6b 100644 --- a/tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0cccb290abf55e6b39410c2047810443/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/model.expected.json index 1834d699c3..25bf24d962 100644 --- a/tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0d281ee0a9f58fff63f45f8f69b891d0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/model.expected.json index 2ad872a9c5..915b0d9b27 100644 --- a/tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0d330c525342e10bf0f84ec1bc0ca717/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/model.expected.json index 051927718c..f6bb605140 100644 --- a/tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0d57246ca2b2deb63c1aa6a5fc286fa2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/model.expected.json index 9e5fe9ece8..b905398503 100644 --- a/tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0d5833fba9e60ef0afe2b72ec4f531b6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/model.expected.json index e9e46f9f87..3994f27611 100644 --- a/tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0d757bbc1bf600cc00cccc23dd0dbabb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/model.expected.json index 270e90baf8..c24a46f777 100644 --- a/tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0d866300fcdf5df83d8893e36dcccb7e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/model.expected.json index 314e0ba902..f0928a57bb 100644 --- a/tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0dbfb0f638226cf7e364c76a3798a70c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/model.expected.json index 5e4d3459f2..0e8d929998 100644 --- a/tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0e06715ce07872986e298d19cbeec669/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/model.expected.json index 1dcd03b29f..80324d19f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0e772b3db5ba04ad8475bffb414dd5c5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/model.expected.json index fc795ba9a3..8414edcc5c 100644 --- a/tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0e971f829a5cc4cdbade3dba72218850/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/model.expected.json index 12773d955b..0487544709 100644 --- a/tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0ed115e4ee3afb7cae4c8f89695c5fdd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/model.expected.json index 0caa3b8563..26e2433dcf 100644 --- a/tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0f19026c66d84ffd7756ab917f5fd63b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/model.expected.json index 8ac94ed55a..5d4fefa882 100644 --- a/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0f5007250906426012eb6d31cde3ced4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/model.expected.json index 2a52f13d34..0b0ef8ac9c 100644 --- a/tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0f7be718664287a43c17484e7d9700a8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/model.expected.json index 594359628c..e886006799 100644 --- a/tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0f8881773ddd74408625e0a099d727f2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/model.expected.json index fb640123ae..d7f764c36c 100644 --- a/tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0f9d1d3f64cf8a8ca5bc17c26cddd57c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/model.expected.json index 5eae0eb2d0..8a5f4ad43e 100644 --- a/tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0fd5fe93ff8e642e8d0e612b7d9c9128/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/model.expected.json index 211f153423..2256a805f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/0fdee1fae5a38b16267d42b6c9b61bf3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/model.expected.json index f8f4690838..bb7bf0c864 100644 --- a/tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1076b971d7d8705dc501cda8fdd64d1e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/model.expected.json index e21cc3ccad..bdbab8fef2 100644 --- a/tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/10842546df041836d584225b50305c9e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/model.expected.json index 2460b213dc..3ba84da3f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/10c99281fb90ea99297131629d79951b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/model.expected.json index 8f575f7a8f..9a5cf0cd7f 100644 --- a/tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/10ee9f7ba50dfd3e0bdcc8ad341640d3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/model.expected.json index c86d11f054..4ae94c3fe5 100644 --- a/tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/113dc767ea8a8a8eecaf29ccd9225fd5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/model.expected.json index eeed49aa43..5b075a73e4 100644 --- a/tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1161723f0b235e969e15d44ebe624bd7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/model.expected.json index 75a2850eb0..363ced6a3a 100644 --- a/tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1163dc506fb63909d056f8a72b791525/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/model.expected.json b/tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/model.expected.json index 57215c46ff..7aeab2e833 100644 --- a/tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/116bd6767525b8e40249c29ddfd29a89/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/model.expected.json b/tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/model.expected.json index 10a0e05437..82446ed4bb 100644 --- a/tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/11753bcdac8d3d40e9e8bdc76724e751/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/model.expected.json index bad5d54c18..ae84b5d912 100644 --- a/tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/118db58b5c3d6bda6c3a3cf86dad8ce4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/model.expected.json index f3d9267ce7..ecb58f110b 100644 --- a/tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1191a8fe91feb6b1ae455420e223bf6e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "let1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/model.expected.json b/tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/model.expected.json index 10e88c0f34..553264a540 100644 --- a/tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/11b26443eae52a9cfd2a5bff8cf05584/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/model.expected.json index 3a4c51c414..5aa28587be 100644 --- a/tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/11dba4c0713a4dcb2984fe6c6920ddd9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/model.expected.json index 734205ad01..c7bc42bd59 100644 --- a/tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/11fa8fe8913ee7ee1f081d95b6063a79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/model.expected.json b/tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/model.expected.json index 3e0150607b..e28a1f491c 100644 --- a/tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/120a84aa329880477a4406a117b64f80/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/model.expected.json index 880746a77a..76fafc95d1 100644 --- a/tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1221facde25a185cca2874ad862470c6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/model.expected.json index c81510799c..45646e9cf3 100644 --- a/tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/125fd9801f7026ac0fa6994e988b5fa1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/model.expected.json index 96faf6bd36..7d01e23c4f 100644 --- a/tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1291155001a2b89117838f7032c4ab5e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/model.expected.json b/tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/model.expected.json index b911f531c1..2d8f182716 100644 --- a/tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/12a26212ed2df2f0e3f50bc0482c8a00/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/model.expected.json index 235cbc767a..2296f44b0b 100644 --- a/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/model.expected.json b/tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/model.expected.json index 4c7ac634b9..7478e88b8e 100644 --- a/tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/12c7a4d3cd1215d8cc58cbc32df46f67/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/model.expected.json index 2900ccaf5e..ac7e892d2b 100644 --- a/tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/12e7888da09101377ca1b913f2c9a4e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/model.expected.json index 21308cecf7..efb8445dea 100644 --- a/tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/13130017359cbf52ad8828ef62a3cbc7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/model.expected.json b/tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/model.expected.json index 227dc4563c..6d0695d016 100644 --- a/tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/133e28ad190db7648f33ec2059536160/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/model.expected.json index f3fb829d68..92ce2a1904 100644 --- a/tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/13700d10e259531c00b3ea61a5a5222e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/model.expected.json index a97b991d98..e0c65bdc1a 100644 --- a/tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/139f9520357e237c8f0d1489daa512e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/model.expected.json index 752c453633..eebc0db5c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/13b0ebaf89e84d142f13573d217cbf3e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/model.expected.json b/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/model.expected.json index 782ebbc00b..69da04eb26 100644 --- a/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/model.expected.json index 9109e236c5..2311ce539d 100644 --- a/tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1406dd256e259c3a3cdf3491514d5582/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/model.expected.json index 78da0653cb..bd8ac974fb 100644 --- a/tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/140fedc8e27d8ab36291cabdb559e4f9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/model.expected.json index 7524110139..c253af0307 100644 --- a/tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1424c6a3f9e90a484eb4c3bf0b9c955c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/model.expected.json index fe0ba640ff..ec24177f07 100644 --- a/tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1452fe35ebcfc58b9e931281b561c063/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/model.expected.json index 034c9f3588..15b9f04997 100644 --- a/tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1453aade27b19262c1d8f7ed3ed1f338/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/model.expected.json b/tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/model.expected.json index 6576cdb58e..9bd008d0dc 100644 --- a/tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/14af9ffdb4766ee9282e4fd1c911d0af/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/model.expected.json index dcdca284de..4f86b223b7 100644 --- a/tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/14df2d01d66f6af162ca46eaec94a0b3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/model.expected.json index 4e6757f0ad..1a9c8aaa17 100644 --- a/tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1563c6f8e22f942162293f1b693a40dc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/model.expected.json index 3019eb8cd8..d0e21ba455 100644 --- a/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/15916e89942607cd189f87dbe1a6552b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/model.expected.json b/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/model.expected.json index 6cdb55cfdc..39ac37c725 100644 --- a/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/15dd0fcd1eb5e61ce1542f4c402efb24/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/model.expected.json index f79cbc4f5a..1a4cb544ac 100644 --- a/tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/15e1dc2db1941b7d1260d538875b123c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/model.expected.json index bc4c4109b3..9fae6757f8 100644 --- a/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/164923d945fc6b906d47491810f5ced0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/model.expected.json index b911f531c1..2d8f182716 100644 --- a/tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/168ad762cd3c4082865928d62f9353ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/model.expected.json index 4c8dcc5bd9..7b882aac10 100644 --- a/tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/16aa3dcc852ae03bf23b5ae7a4992f5d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/model.expected.json index 3fff7be094..9d7414aa6d 100644 --- a/tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/16ca06648eec73b69aa709f229b91d2a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/model.expected.json b/tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/model.expected.json index 8dfa1d9e7b..901e00b45f 100644 --- a/tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/16fd8e97c063710963e8c810fe6d2065/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/model.expected.json index 404be25f52..2c51493684 100644 --- a/tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1751869087ec45c65da9335dec93113d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/model.expected.json index 50b4031127..ada5d1446c 100644 --- a/tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/176498a86f4f6aa56d13e84f835917e5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/model.expected.json index ba3fcfe55b..c9312475e7 100644 --- a/tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1798bcfa6ad9e714b74ba5bc6d6ee29f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/model.expected.json b/tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/model.expected.json index ddaa08a2b3..1ca19648be 100644 --- a/tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/180d7672cb7d537c63efd16a3a532538/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/model.expected.json b/tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/model.expected.json index 5f627d72f1..f987214317 100644 --- a/tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/183ea55a9258e18d69a7b15d4f823c67/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/model.expected.json index c5c2894e22..73014ed18b 100644 --- a/tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/186bb4606d62808dd6e2822b2656632e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/model.expected.json index c29caede1e..ece42b1804 100644 --- a/tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/188d7225b206376219282a15ea98bac9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/model.expected.json index b2a7331a3c..9991505857 100644 --- a/tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/18ac1fd8e4b3b77ce9495cbec2ed5ebb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/model.expected.json b/tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/model.expected.json index 3c8a383741..b191c9d248 100644 --- a/tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/18bf9a38ee59e4bcaebd478b9f980662/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/model.expected.json index 127ca42314..1ce777ebb2 100644 --- a/tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/18d2935f6d52dff23b827d77299071c3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/model.expected.json index 1c9cbcff56..b29885f23d 100644 --- a/tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1920a6bb2dcadc43b598f6c3a9603236/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/model.expected.json index 0f5683d7be..6bda58547f 100644 --- a/tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1934d72addb773493b0a745089dcfcb5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/model.expected.json index 8bb8504a6a..47bd39c970 100644 --- a/tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/193b59cb1d0a923e59fe2ef78df9864e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/model.expected.json index ad72a7748b..ada06c5718 100644 --- a/tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1950a34566222ab7172290554c9f8905/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/model.expected.json b/tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/model.expected.json index ffcd493a13..e14ea0942e 100644 --- a/tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/19714c452f09e52c3e87329c7be6c781/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/model.expected.json index d0cd8872d0..f60efbec55 100644 --- a/tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1990c76f1882ff7413c5cc43059b78fe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/model.expected.json index 63e7717e17..b6807748ae 100644 --- a/tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/19a95dc40bdd55fa709e39952798729e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/model.expected.json index 185058a249..90726a1d3c 100644 --- a/tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/19d1064ef4c8d198598abfefdf3256bf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/model.expected.json index d6ff145551..763dd00835 100644 --- a/tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1a187aeb382549fa2e585baabb219dfc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/model.expected.json index 22b3047556..050ed6c04a 100644 --- a/tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1a4f723156644e60a38ec0e325765e17/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/model.expected.json index 463ef1e02f..454112d2b1 100644 --- a/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/model.expected.json index 0974b031f4..c9f13709ea 100644 --- a/tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1a969256eca371d1564ac6ad94eb6d41/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/model.expected.json index d67e72c866..d52041a5ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1abb07c9ef975b96bf575bfbe8f442b5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/model.expected.json index 9ed6770ccd..84614222fd 100644 --- a/tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1af98fd7990664bf2b97a91da53ca098/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/model.expected.json index b05dc78580..587d76f658 100644 --- a/tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1b18244524b60fc69009f17d0221b5a5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/model.expected.json index d515fb88f7..9f8eab60a1 100644 --- a/tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1b6c1179b1a92bd88edaeed5c5bfb398/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/model.expected.json index 7cddee7a36..2e2c6923e2 100644 --- a/tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1ba7bf4085ce352d5ed369f68409a4fc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/model.expected.json index a61043be65..7b07f28015 100644 --- a/tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1ba964336829ef6ac8b9e2aabd3aca98/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/model.expected.json index 5ab3c1c388..2ff1d0ed56 100644 --- a/tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1bcbd3752f5aa0035b2cfc8af246772f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/model.expected.json index 1a23abeb4d..9064f166b1 100644 --- a/tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1beae32c0cb2a99dc50a9e2b4465cfad/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/model.expected.json index d82cda3aeb..a9cac30ff6 100644 --- a/tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1c42766c9daae67c81a785f36b3546e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/model.expected.json index cb3f5be84d..2f9fc8ebb6 100644 --- a/tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1c6bc7d97a1cfc78b0cdc6cb71e3c2d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/model.expected.json index 5ee699d52b..734b3fe7bc 100644 --- a/tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1cc10a8b3112922d6196037d563706a2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/model.expected.json index 41b18b1c78..66d37af3ac 100644 --- a/tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1cc14f70f3fd8130affee799d5120a35/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/model.expected.json index e42d183725..925c0d50c0 100644 --- a/tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1cd562165f0706928e25084fc1a9e78d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/model.expected.json index ad11019596..b603769b45 100644 --- a/tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1cd5a62f400692a5b85a18e80af82ab6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/model.expected.json index e4760542fd..6774fcdf41 100644 --- a/tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1cf3a95fce83f1c149da1709b032664f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/model.expected.json index 6ac9a7c039..5ba0ab90fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1d271b0b60ae2e3474a67901cdcc8030/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/model.expected.json index 6737fe17ae..e50a51842a 100644 --- a/tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1d3d858ddd88a4a03de0614d73e6ad47/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/model.expected.json index d9979402d1..10e7742132 100644 --- a/tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1d82ff9bf3543fa3bb751d09c3d2f55a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/model.expected.json index 4d09760041..b5f527c64a 100644 --- a/tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1db390590fecb4c5a938f3dfbaf3d4fe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/model.expected.json index 469060691e..b674a1be74 100644 --- a/tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1dec07ace23b77f34d3cc74026ca13cc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/model.expected.json index e26672e63a..3c21995055 100644 --- a/tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1e24a75f48bb605b136de436729d97e4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/model.expected.json index 992f5436c6..0af0c6af6e 100644 --- a/tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1e3c2ea5eb1b0a1eb092e59c73e21e65/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "let1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/model.expected.json index fe53d554c5..688e111ff4 100644 --- a/tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1e9a9285f7d67b725602beae7d53730a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/model.expected.json index 735170658d..8bb6a0bf36 100644 --- a/tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1ee0285168847690ddaad9da70751095/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/model.expected.json index 9c1d03e30f..2bfa7fd45a 100644 --- a/tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1f06ad8f5f3af2f71f4f0c51ebd57143/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/model.expected.json index 3f41fb63fa..eafe344135 100644 --- a/tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1f7ccc0b17cc2f7840f65b31f2c17f05/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/model.expected.json b/tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/model.expected.json index 0bc47db72f..5235f0e3fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/1ff1d401284fe32b6639121ce47b3995/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/model.expected.json index 97d4bf1fa9..afecfb2751 100644 --- a/tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/20033235278db80e48685c68146b29e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/model.expected.json b/tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/model.expected.json index 66eedfeb10..d8f834f1d4 100644 --- a/tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/200d78834a42ebeb6f12a80d41000004/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/model.expected.json index ee56ace3c0..cf7c2cc162 100644 --- a/tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2014ff2f904414bb2471250b0da1a297/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/model.expected.json b/tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/model.expected.json index b14411fd96..28315e134e 100644 --- a/tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/202ee87d3a92ce3781d914239e091097/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/model.expected.json index 0d2de513c5..36cd1bb40c 100644 --- a/tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/20320e49c559f105460436e6d7d8a1a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/model.expected.json index 1e7aba3fe2..739bc00b3c 100644 --- a/tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/208ec24add8f7b331f0829f7296b04c7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/model.expected.json b/tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/model.expected.json index d11c482a54..789bfde80c 100644 --- a/tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/209a9f520d1bcf559a4786b8e19af490/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/model.expected.json index aa11a5aafe..b617e629af 100644 --- a/tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/20a87ed854619dfbc1f01b026e5db67b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/model.expected.json b/tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/model.expected.json index 2f084ffe08..2c4b4220c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/20cd5c06ef131fd1e956636bd3674eab/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/model.expected.json index ec9a517d01..44a0fe537b 100644 --- a/tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/20d50690b43d273ec5f6d147b81dcc6a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/model.expected.json index f771117965..9de1bc5af0 100644 --- a/tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2126dcb9f7010a648e265451e068956e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/model.expected.json index 83ff44c198..f54bd88fc3 100644 --- a/tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/214884d4c5fdd90ec55a3b9ce63e1fcb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/model.expected.json index 4976d00ba7..d02ab40210 100644 --- a/tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/215a06c72d89bae1df79e244d678777b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/model.expected.json index 96d115c993..3bcbe9a970 100644 --- a/tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/215cdd562fcbb2db9e1f17a8ebf9f4aa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/model.expected.json index d193ed760b..7e976e6d94 100644 --- a/tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/218bac9b68dc4b63fe9a56e00eccb05d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/model.expected.json index 9b10967448..b10551db1c 100644 --- a/tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/21be920dffbaacd7e2b6b06b72cb75c0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/model.expected.json index 90501ae072..fe17b4e5a1 100644 --- a/tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/22163685d87afbc145bc90463cad981b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/model.expected.json index 142482c330..bab7ec1205 100644 --- a/tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/223d20931c36c3d4a55f5caf3e7564c6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/model.expected.json b/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/model.expected.json index 331c3ad718..ff3e2d411a 100644 --- a/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/22477309ce0401a8d76f05db531a8477/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/model.expected.json index ff49373429..4b83f02937 100644 --- a/tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/22699b3de15c5a4e88c1280a03a21bf2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/model.expected.json index bdf6d11cb9..d39a596bfb 100644 --- a/tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/227cfa94a3ad9346cb712cd351e4430c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/model.expected.json index ea9d60b31c..8fac2424a8 100644 --- a/tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/22a07994eba0be1abf0548df84328b0b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/model.expected.json b/tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/model.expected.json index aeba5eb147..b74bd53c7b 100644 --- a/tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/22e00fd813567d097f185ffe48d25405/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/model.expected.json b/tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/model.expected.json index b49102102f..cf253f917d 100644 --- a/tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/22e79240911812510abe6f658999a682/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/model.expected.json index e45c38e697..9a3cc063dc 100644 --- a/tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/231d88eeb42f490d20cc4a0ad92598a0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/model.expected.json index a461c09370..0bd3aa7c78 100644 --- a/tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/236900528ff2e3b09f2ed67c70fca23a/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/model.expected.json index ed0c891c42..38c8c7452a 100644 --- a/tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/23bad3eae7b82e1742600d53802770fd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/model.expected.json b/tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/model.expected.json index e6c0977d2e..e68b058eec 100644 --- a/tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/23e62b64c5943a34984dd988a2cbf643/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/model.expected.json index 73b27fa6e0..e14d70140b 100644 --- a/tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/23f59fd02b1d9c3816b417a8727e418c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/model.expected.json index 62b1f439a4..d5fa0e594c 100644 --- a/tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/244286cc2dd03e6c340ffdd9321b5fe7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/model.expected.json b/tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/model.expected.json index 1e004f376a..429ec9e865 100644 --- a/tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/248c887518286002b0579d1615279b51/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/model.expected.json b/tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/model.expected.json index ad0cc8be58..2f756cad1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/24cfea547a363a6a1cc5a0a32bafb139/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/model.expected.json index afe5c3806e..56b2b309ba 100644 --- a/tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/256afa47464e2a7d839a0636d335714b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/model.expected.json b/tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/model.expected.json index f211a7af67..9b45c678f8 100644 --- a/tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/25c731b81cdfba9a1930f6d921e9fc53/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/model.expected.json index 09ad3a3f68..1494b3d17b 100644 --- a/tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/25dea2c84343f1fb62940c93170003b6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/model.expected.json b/tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/model.expected.json index 4e74f98982..624bc903f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/26130490f798a38f76f8a8f262a2d580/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var3"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/model.expected.json index 017df551e8..b1ff055413 100644 --- a/tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2616f49a05149925625ef0cfc389d39d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/model.expected.json b/tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/model.expected.json index 0fef960ec7..6957bcc596 100644 --- a/tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/267e4c02702f032d831c2bfc66efbf69/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/model.expected.json index 3f8d8223da..ff1e664b64 100644 --- a/tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2695f2a6d656aaeb483f6daccc9be82e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/model.expected.json index f46cea0ab9..c9cfb2c714 100644 --- a/tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/26dded8ab8def8b4a6b52bf204ce84cb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/model.expected.json index 2c6bed21fc..6423ef4bc4 100644 --- a/tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/26e61daabf3a56aa76626323f893ecdf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/model.expected.json index 8fd3291ea8..d01666d46c 100644 --- a/tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/271129bfe3dc022817fb1fc98d1e4d0e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/model.expected.json b/tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/model.expected.json index e04cea6602..c401fef300 100644 --- a/tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/274393cdbcac9f3c51b82f0a0b399337/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/model.expected.json b/tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/model.expected.json index 08790a5689..851ebadafc 100644 --- a/tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/274676d6fa88ececffc2c98527414e51/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/model.expected.json index 59a01f8d27..29776941ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/27751403de10fefc991154fbb6c3f49a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/model.expected.json index 6b02c23929..4c78535342 100644 --- a/tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/280eb734981fa1f0b346703c1bba454e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/model.expected.json index c4cd8fcf59..a92c2d008a 100644 --- a/tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2835cf8d0df29e21336c9c33319cc86f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/model.expected.json index a951f413c5..86b2a5bab8 100644 --- a/tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/286dbf175e6155dc1128296f827efac7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/model.expected.json index 858231a39d..327ae0953d 100644 --- a/tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2885de1be0c03479fc478aa6b6530488/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/model.expected.json b/tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/model.expected.json index 4d3953c77b..74a39a3880 100644 --- a/tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/28a2610455b6ca94984fa755c0d52d10/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/model.expected.json index 47f1bc0336..95b55e1674 100644 --- a/tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/28d57f1390d80ea32a301bbb2a3b9b0c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/model.expected.json b/tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/model.expected.json index a784417dd4..512b84f511 100644 --- a/tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/28f120542d453f2cbf15d3bfab27db39/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/model.expected.json b/tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/model.expected.json index 76b53d7315..c18ff7654c 100644 --- a/tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/290739011e12e610230d80d971fabb30/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/model.expected.json index 8a59b5e41e..85d420f923 100644 --- a/tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2910579caa938519c953fccd48611fee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/model.expected.json index 7642d33d9f..ff7a4ef308 100644 --- a/tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2931d8c17365e4f7d93c5215f540866f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/model.expected.json index b5161cdbcc..fa70e37c4c 100644 --- a/tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2956857a22d9d2330490c41c8b5a4142/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/model.expected.json b/tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/model.expected.json index aa2d0fb648..acf4c4ec2b 100644 --- a/tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/295854f4230fa755cbb4cb009d709f41/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/model.expected.json index dab58c9559..808b723396 100644 --- a/tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/29a7a43c3a0b3215a4d95c077acd7dbb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/model.expected.json b/tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/model.expected.json index 149feff930..6fbd87548b 100644 --- a/tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/29d3e117bad5d1b803ac394d408bae00/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/model.expected.json b/tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/model.expected.json index 4349823ffb..f318ec35f1 100644 --- a/tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/29d792e7abc6c92b11ccc1d7c38d0115/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/model.expected.json b/tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/model.expected.json index 5dd99d1a85..52d904526a 100644 --- a/tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/29df720249f3d8f260f956c798d99130/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/model.expected.json index 6d7ba6c74f..dd3c74c382 100644 --- a/tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2a33caf2e89e26f6159e0cdc2cb9295a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/model.expected.json index f0a9193a13..12175f0e86 100644 --- a/tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2a9a716bc12b6582b04e4755977c7cd1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/model.expected.json index 1d85477453..223219d52c 100644 --- a/tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2aa2903816b702397e1e91a209041078/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/model.expected.json index 677d6a5f5a..7fb0cc5c74 100644 --- a/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2abab26b761b711b383086f57689adc5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/model.expected.json index 4f4b0d3c99..5b2bc8ec67 100644 --- a/tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2ace48adfbcb46a388e1477947575ad1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/model.expected.json index 24ab69f15c..3e81af33ee 100644 --- a/tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2b13a16f904708b301f055247df10317/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/model.expected.json index 129c02650c..c44ede68a7 100644 --- a/tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2b2e0dbeb429e6c181ea07d40a5be562/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantBool": true}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/model.expected.json index 3855523dcb..071513b37f 100644 --- a/tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2b44f45e2835003c9493d53c7d0bce3c/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "unused"}, {"Constant": {"ConstantBool": false}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/model.expected.json index 4ef096e37e..df1d0e53d2 100644 --- a/tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2b93c88cac468cf8763b8ae9400f129b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/model.expected.json index 4b7fbf7810..4405259bbb 100644 --- a/tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2ba20be39a7083fcaf0429a5caff6f38/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/model.expected.json index 09342b01d5..d3f504ee46 100644 --- a/tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2bbd1982f26a7d5246ced1dd6540d26e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/model.expected.json index 8a728ab0ff..39b598e826 100644 --- a/tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2bf8e4253a94be54961863e701c8ffcb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/model.expected.json index 5256f0571f..3099e2b10a 100644 --- a/tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2bff2266baf0a3ae0392de70d0401ccb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/model.expected.json index 9633e8f771..6f59fc77e0 100644 --- a/tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2c0b8c3b47aaa96a6b45785659d54fb6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/model.expected.json index c47f75c0ef..904119c477 100644 --- a/tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2c66ae20ba104065bc0b14b9b0eb8e2c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/model.expected.json index 9502867305..ff396b1d64 100644 --- a/tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2c742d849b8dba095be529f30258c776/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/model.expected.json index ce15bfd173..2e8dc714c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2c846a528fd3ad070b1e71f1019cbca2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/model.expected.json index ba2ed80b9b..9ac3d3aa5d 100644 --- a/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2cb879c833748cef779f84df872b0d71/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/model.expected.json index 0a4fa4cbd2..290b822cac 100644 --- a/tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2d9db50cec26e6c04c8774aa5009784e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/model.expected.json index b19226b2c8..746eca513a 100644 --- a/tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2dd4d3457ed3dbc49c35657e796f93cd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/model.expected.json index d048f011d4..9990122e98 100644 --- a/tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2de136cea37f8c7c6c2dbce3ad7bfe52/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/model.expected.json index 907f76f950..7566f184e7 100644 --- a/tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2e2ad8fe1fae6676863edda2c078d2f2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/model.expected.json index 330e3cbb2b..f24ed095b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2e43201f0aa8f9929f80b0120d9079ec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/model.expected.json index 3758545fe7..25ef3507fb 100644 --- a/tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2ed6c1a74ab623d07ac433d04ecc445b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/model.expected.json index 0d17566bcf..0fa2fc7105 100644 --- a/tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2f9ae530589fb178e8010506c8b1cd19/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/model.expected.json index c9bbda2690..e7be4e3335 100644 --- a/tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2fd1cf57932b12ef3d73f4af22aae142/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/model.expected.json index 2426ad4871..47bc63a26b 100644 --- a/tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2fdd1fe71fbea3100295ce989ffb06c1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/model.expected.json index e18c993ceb..bab51f5978 100644 --- a/tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/2fedddbce618e737d97ee1f14cd19b0e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/model.expected.json b/tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/model.expected.json index f07b9751e5..c5388bb3b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/300902ac80dc424a40dc0a1972aadd07/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/model.expected.json index c457b0c26a..424df809be 100644 --- a/tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3009726d0f8cf721799c1fbcaa0832f4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/model.expected.json index 124c3f4b58..002bfee5c0 100644 --- a/tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3028bd497e070409b07f06f6358eddaf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/model.expected.json index 455b60951a..4169cbd645 100644 --- a/tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/307ee3c7b82295b342954958580d321e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/model.expected.json index c2c6506f07..340986ca17 100644 --- a/tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3092be0de62c362cd1c49042c585105f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/model.expected.json index 1321604569..4fdb75d909 100644 --- a/tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/30b305e0e87e640981fb5cad77d6869e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/model.expected.json index 082a2962c2..1342113fad 100644 --- a/tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/30cae7ed2fd84c58fd597a84edc6d04a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/model.expected.json b/tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/model.expected.json index fbc79f0940..5dda7dfc08 100644 --- a/tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/30f85c027c537ca7218acc2a52c96059/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/model.expected.json index 6b428c0187..0a66b7f806 100644 --- a/tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/311e53dc2d7c804fb9e0cfc1f43c37bf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/model.expected.json b/tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/model.expected.json index 330e3cbb2b..f24ed095b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/314f8686aea5bfb35c4e5ad216d32f41/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/model.expected.json index 7035ea7742..bb72290d54 100644 --- a/tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/31541f8fbc7f16af462bb853b23b0a8b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/model.expected.json b/tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/model.expected.json index a02e6252f5..919e7ec20d 100644 --- a/tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/31626cff6d7b6ac63912726cdcd2e942/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/model.expected.json b/tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/model.expected.json index 430e9010ee..1b3c912fb6 100644 --- a/tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/317b3394b1cff127ea38f233dda04a30/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/model.expected.json index 560335a010..3029a49a6b 100644 --- a/tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/31f64ce050e6687e0af4fa4475b7e8b5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/model.expected.json b/tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/model.expected.json index f6663734e4..60ce632e08 100644 --- a/tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/31f683d305b86f1023d4853cf84d6901/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/model.expected.json index 9abe083ada..847479eabf 100644 --- a/tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/31ff3b11d8cf1b8998506f6c1933055c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/model.expected.json index cfa41a7cfc..3060dfa605 100644 --- a/tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/32359fa6e824152fabe774a5f32c5caf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/model.expected.json b/tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/model.expected.json index 2030e2017d..3a2547c63d 100644 --- a/tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/324bc97b10d8b4c59f3cd741afe3ea96/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/model.expected.json index 75063a99b8..452b2b5357 100644 --- a/tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3251aed0fcb8fca4e92b7f6316d5aa1d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/model.expected.json index 9c893d85d6..7e2a825b21 100644 --- a/tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/327977f393264ccb96efe5c4bae0368d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/model.expected.json index 1fbd2f23e5..ee5b2137a5 100644 --- a/tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3286a11865622f212644d3eb65e0cb8d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var3"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/model.expected.json b/tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/model.expected.json index b3673572e0..3b1daf1c1c 100644 --- a/tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/32ba15f900d2899e277de2884b82db33/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/model.expected.json b/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/model.expected.json index 8544bf155e..d189cc0112 100644 --- a/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/32dcb1f6e9ea6cffcddc831a9b09fe09/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/model.expected.json index b901c1ed58..6bc177c56a 100644 --- a/tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/32e72d1f75d8bcb92f9685b706dc29c1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/model.expected.json index fcf5fb1666..7be7f79c8d 100644 --- a/tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/32f8563c6daa93f905b86ab15f412aa7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/model.expected.json index fe8c911049..c2df0c6174 100644 --- a/tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/331484cef605f21f09c5f0303aa4b8a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/model.expected.json index ac3ed3c9e3..fb23d32893 100644 --- a/tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/33b13b1c09e9caeee8805e2238560dcd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/model.expected.json b/tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/model.expected.json index b96be700c7..7188ffd18e 100644 --- a/tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/33b374caf91a36a3c3213f6735ffeb85/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/model.expected.json index c86ad5d1f4..33a064b059 100644 --- a/tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/33ba178ba6a9c91283f2a1ebff4de2d9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/model.expected.json index 9d1b7dc094..4fb2b7de39 100644 --- a/tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/340440b2048fca719a123048916b4c0e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/model.expected.json index b0ecfcba9b..86d5187f64 100644 --- a/tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/34552e2be8dd2ea63930ffe4b5a015aa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/model.expected.json index f8ccd7def2..e2608186ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/345e8c1f7d7fbae43f48e4dd720d30e4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/model.expected.json index 2bdb6da2ba..eb024583dd 100644 --- a/tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/348dfb9cf626c62078be604c05c39de8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/model.expected.json b/tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/model.expected.json index d6fab177b1..8f3322a6fa 100644 --- a/tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/34a62bd32f9408027fd6b08b1f3b3c33/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/model.expected.json index ec9e6490d0..04cbb940c1 100644 --- a/tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/34ba91b9fc9c3567839da59111a3300a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/model.expected.json index 67034c9a6c..3f0329e824 100644 --- a/tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/34c6e2d47930e12182aef2c13629be9c/model.expected.json @@ -1,6 +1,6 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": []} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/model.expected.json b/tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/model.expected.json index bed7c39f34..d43140172d 100644 --- a/tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/34efe399d190ea2b129f8a3c0e7a0e52/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/model.expected.json index 175e89405e..3f09d1d640 100644 --- a/tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/34fc4f9c32a9f14d7d086719d5902ee3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/model.expected.json b/tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/model.expected.json index 064a034fbe..9517e21df5 100644 --- a/tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/353657731bc5ab2f967052fd60274d90/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/model.expected.json index f6292d8488..45a3ee31aa 100644 --- a/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35a9b9aabd733bd1da92dcfbbafbb0e0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/model.expected.json index caa1119168..a99422e8af 100644 --- a/tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35aec2a8434e0ae0a0041beca9f1d91e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/model.expected.json index 6a69df3634..d04b3cadfe 100644 --- a/tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35bd3096c398059a5f4e2e9de6159866/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/model.expected.json index fbc449b80c..74439730cc 100644 --- a/tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35c3fe42a5badc499fcbc769a6de8539/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/model.expected.json index 337890b308..35355aac5f 100644 --- a/tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35f715228097d8ae8a9aed126b91f95f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/model.expected.json index b96dbf4233..9653f41a76 100644 --- a/tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35f9786ccf16b43d20308a9a4807a45c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/model.expected.json b/tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/model.expected.json index bdfb458767..504f9f3330 100644 --- a/tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/35fe1e08f59ed5b8086e4677c7d196af/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/model.expected.json index 08d27c36b6..8248f46ead 100644 --- a/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/360166fcf3210cf2cc730698c7561f1a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/model.expected.json index b0093bfbdd..01a9d0620d 100644 --- a/tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3620a44b9d1882d1b8d68ebb7c2e267b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/model.expected.json index 7bd422f790..74d5b13bf9 100644 --- a/tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/362d7066f8d61d2894dbeb701e6c0a79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/model.expected.json index 15212f3887..08ddff669f 100644 --- a/tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/363b608789b363a35fa18f1321551fc1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/model.expected.json index 36312526b7..719e6f8bb3 100644 --- a/tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3661b2ed8d197feac2c9199dccc20ccf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/model.expected.json index 25e799a77d..3dff6d0bcd 100644 --- a/tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/36ab55fa4f0b19d12f8af4797eda170f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/model.expected.json index 1c8429293d..75fbfae968 100644 --- a/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/36adf65748e3aabfd49290654b8b9ec2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/model.expected.json index 3da817d078..cb1d4f92d1 100644 --- a/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/37465a47958e062b2b7afd0001a0e9a1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainTuple": [{"DomainBool": []}]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/model.expected.json index c9ba5ccefa..d082e1235f 100644 --- a/tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/374c1f815c417d97011dfa8c5cfa42f9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/model.expected.json b/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/model.expected.json index 9e7b0c0787..d099b07212 100644 --- a/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/37b6d848c391d03c123e6e8c55e6b822/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/model.expected.json index 22cb32669c..5a30801340 100644 --- a/tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3844dbb1b6850a1f2659adb2d65a9887/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/model.expected.json index fdaaefd276..7bdebf22a5 100644 --- a/tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3891079bd93693be99228d609690482f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/model.expected.json index 41f9d085d2..0350436283 100644 --- a/tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3897df283e1b6b72cd399738fe807325/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/model.expected.json b/tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/model.expected.json index 1d41563333..4690b4c6b9 100644 --- a/tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/38d20eb994d28a44c574330747169cea/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/model.expected.json index 8ed66e617e..7652b7c509 100644 --- a/tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/38d6f8fb97319ab03c05b9e98291e58c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/model.expected.json b/tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/model.expected.json index f8eb8083fb..3f13cc6337 100644 --- a/tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/38d76c6cc0890964b8e6839987b595de/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/model.expected.json b/tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/model.expected.json index 090814fcc4..20a95b7828 100644 --- a/tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/38e8f152255ddac04761d9c123c19756/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/model.expected.json index b285b50a06..4123d37f2a 100644 --- a/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3904efc3f4f108940913260dbf388ed1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/model.expected.json index ab781ade8f..386a33baa5 100644 --- a/tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/395f72e8642ea81704866e6c9ed64dd5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/model.expected.json index bb3ea2d159..cabf02ce1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/397465fb16d2fc9e85dcbbfc2508037c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/model.expected.json index 94ebf7d6fc..cb7958c09e 100644 --- a/tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/39936b90fd0cf508557865456d964b8b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/model.expected.json index e9dccf55b1..32c145989c 100644 --- a/tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/399b8bc4443e15daa66f9294ca5a959e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/model.expected.json index 61fd134d03..79d680e291 100644 --- a/tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/39a705752a0c5e219408facaeb5079d9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/model.expected.json index 6222b83180..cef2465aca 100644 --- a/tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/39cf126d4994f21cb4a1cb613458de1f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/model.expected.json index adf27080d0..7f117906d3 100644 --- a/tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/39e356310d9f6de4a1e96c3f82063bd4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/model.expected.json index 1d93a87203..df5126ea45 100644 --- a/tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/39fc0816e0aea89208c87fa4d39edf4d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/model.expected.json index 7df43deabe..bb64aebc42 100644 --- a/tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3a2cc7ae07080388a90a2e45e94e5c40/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/model.expected.json index d2d41763e6..1f48179320 100644 --- a/tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3afc39ce199d39888004db7e3f6f55e6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/model.expected.json index f26d702d77..fa1b296c5d 100644 --- a/tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3b3c5921839ebaedc01d5140662b9f8d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/model.expected.json index 9e6252e668..39e78c1152 100644 --- a/tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3b5e1803eab57ae500a891f3bfadce58/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/model.expected.json index f141347050..242b74b47b 100644 --- a/tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3b6775a4761d96a1d2c44a9934563cee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/model.expected.json index fedf4a2b7e..c54ba327e6 100644 --- a/tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3bb0d8267dc5acd19cceb43e17c91b79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/model.expected.json index 134605e9d6..5d140a2051 100644 --- a/tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3c226880c8b7557df44d9031c788ff5c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/model.expected.json index 7afaa87f1c..dee2ea3eba 100644 --- a/tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3c2e9d276b9b049dd831530f48da9a2c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/model.expected.json index 8a8439745a..7ad5f59a6b 100644 --- a/tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3c8c349d4ef7de43a374d30e7a1f9b71/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/model.expected.json index 8dfa57635a..7cd2590e62 100644 --- a/tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3c8ca696589fa5c50ce0679acfd8e97f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/model.expected.json index 57ac17a6f0..3f5d36de4c 100644 --- a/tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3c9559b98b49ae4783c2ca23c6780149/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/model.expected.json index fd2f0d5f82..f1f3468520 100644 --- a/tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3c998931c0705d3b120802c50d6d76b4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/model.expected.json index 8c81d8343f..d3ed4f09f0 100644 --- a/tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3cb1bc8910cd0ae751a62eb282647541/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/model.expected.json index a731cbf612..327ae491b3 100644 --- a/tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3cbe0039a34abb5da3530357feb79c1d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/model.expected.json index fe0458c34d..5208d298d5 100644 --- a/tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3cc911ee89eb40d0d5e49b63286e8f7f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/model.expected.json index f88e43ce7f..9a37813504 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ccc464fd5fa06fd1d7c047ba437a92c/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/model.expected.json index e3635c830e..40d59cd454 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ce3ca1e14adb90d865016fe581a6fa8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/model.expected.json index 98ce1a0ee9..74ae869141 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ced36091929fe0596bba739e95077aa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/model.expected.json index df9b91a24d..0a5d4ab574 100644 --- a/tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3d3417b2f5188bb06d8802ca2dbab9bb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/model.expected.json index 041a96ff2a..b76e94f5d2 100644 --- a/tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3d535f0ac7272986482b759dae43c292/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/model.expected.json index d8dcdb3e2e..13c8c5760e 100644 --- a/tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3dc53410c6bdd9d368e9342d92f683d9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/model.expected.json index 67ffdac1d7..54ec32adb9 100644 --- a/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3e000aaf4ff46e620886654cb453b7ae/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/model.expected.json index 51e93ac6a1..2912578073 100644 --- a/tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3e5896b5c4650dcc57c87c2d473b6bbb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/model.expected.json index e5cbe8810a..045c3da4d2 100644 --- a/tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3e713ec9592f369b613a3f3acaff0329/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/model.expected.json index a4b4c0bdae..9b662d4f42 100644 --- a/tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3e88c59ec65a416f21f9fe3d5374b360/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/model.expected.json index 9c68c84119..f4932baab5 100644 --- a/tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3e8d8447ffcd9d0c6b448dab890c71d5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/model.expected.json index c6127b5eaa..c2ba1e5e2b 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ebedad4456cf9db17a8b7870815735e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/model.expected.json index 761a0c9409..faa0cf1844 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ec03da1ddc427cf36261757e735114e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/model.expected.json index efb6cf8ebe..ea72264900 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ed90481a522d19bb9667ea6ef908196/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/model.expected.json index d58ad7f36c..77ee95e4e3 100644 --- a/tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3edef0a7a6a503ffe358debbd0b1d4c9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/model.expected.json index 71f6228f5e..c5dd6ceb36 100644 --- a/tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3f2d75fc3d948ca4fd97523766f3659f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/model.expected.json index 6a1ae7a9ae..12b8ed1feb 100644 --- a/tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3f3f809a0502b5a643d88e7059acb08e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/model.expected.json index a5f575308f..0aa09fc13f 100644 --- a/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3f487c8189ea7cd34b26c9482423c22f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/model.expected.json index b7d628a734..b1655f2ee9 100644 --- a/tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/3ff2fa2c4687912a41ba397eadbb6e6e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/model.expected.json b/tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/model.expected.json index f967e0f17d..ba9cf77eef 100644 --- a/tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/400c154b98432fd6d40a20b60e33a820/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/model.expected.json b/tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/model.expected.json index 8a9adce1ac..68c6b5b22d 100644 --- a/tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/401bc79800219f35bb8383806585ae12/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/model.expected.json index 2e7cfa44bb..5d163c3d4d 100644 --- a/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/401d7215ed575a743ec2b4542af4e08d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/model.expected.json b/tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/model.expected.json index fa996f8759..94a7f19be0 100644 --- a/tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/402d679b6bfcd0370633ca1d17ad1f94/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/model.expected.json index e424d75f17..7575538127 100644 --- a/tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/406db1c9f1d0b024a8ba6de04ada1fa2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/model.expected.json b/tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/model.expected.json index bb2c07895e..907a163aa2 100644 --- a/tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/40c777188c96f06f23b379634df5be19/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/model.expected.json index d9dcfc1343..d8cd500b54 100644 --- a/tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/40ce6cdb722c1098a95e3150cf28137a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/model.expected.json index c8f427f419..cafd0b9cd3 100644 --- a/tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/40df86985a668247ccc7d4d4ca3f4f6c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/model.expected.json index a8dc117ead..18e35c5939 100644 --- a/tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/419d808eaf5ba4da3a7cb3ed4cd717e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/model.expected.json b/tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/model.expected.json index a80d1eca5d..86a741a374 100644 --- a/tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/420a979c68397e28748b9281ea454667/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/model.expected.json index c982ac09eb..b306aa7eef 100644 --- a/tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/42277f8d532c4833bbdd3ec4b99809ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/model.expected.json index 55be308840..164282cd6f 100644 --- a/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4280cfb278486b51961b41fb8309b68d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/model.expected.json index 0658315716..823fcccae9 100644 --- a/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/42c5a23fafc955d441461af4184f86f2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/model.expected.json index 24a009f0f5..3fe0addf90 100644 --- a/tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/42f3b14e92ea11714f134e31ec39664c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/model.expected.json index 9cf2439485..c7badb7df6 100644 --- a/tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/42f8b49ddcf29717d4fbf4161c5438d1/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var2"}, {"Constant": {"ConstantBool": false}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/model.expected.json b/tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/model.expected.json index 9bcc6167c8..715e6586b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/434c784a35b841f5f825ff3ec5fbff68/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/model.expected.json index 36fde03963..a6570b8917 100644 --- a/tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/437b8f966aef896f8c9f11690aa1c1a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/model.expected.json index f39b2b2200..c387a1746a 100644 --- a/tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/439f472f0064355bae4b1cc168a4fad9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/model.expected.json index 8d4c50b7e6..91a9cc6342 100644 --- a/tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4413940d37bfd7e78e7ee7017ab3b954/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/model.expected.json b/tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/model.expected.json index be556cae8c..888fbd5319 100644 --- a/tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/44278034dfc02f37c01fe14e572e7434/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/model.expected.json index 86fab7579e..2fc973f0ec 100644 --- a/tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4448f802c81ddef89ede84d1923faf38/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/model.expected.json index 6e3675780b..626a622c05 100644 --- a/tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/444f84074522a17b89cf4e24e859558a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/model.expected.json b/tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/model.expected.json index 7052feaf37..d1430db5b9 100644 --- a/tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/445128f3edb059f50edbb2b0be22c084/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/model.expected.json index 0b2a01431a..a296204467 100644 --- a/tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4478aad769a350699ccf94c692327d2e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/model.expected.json index a67614f334..4649eb4503 100644 --- a/tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4479e3c0d499cca941766ab5b8a254a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/model.expected.json index 10f505310f..9d60abcf57 100644 --- a/tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/448ca65d24a3d7c8e7ddac7447a7aacf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/model.expected.json index 02b2d707aa..9813545238 100644 --- a/tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4495d6e1e94abd6d991861099b9dd715/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/model.expected.json b/tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/model.expected.json index 84ea6fa0f5..9c616838fb 100644 --- a/tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/44dd846c20ee4eb39d7cc4a19408a0ae/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/model.expected.json b/tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/model.expected.json index c394ba979f..16fe9aef0d 100644 --- a/tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/450c78ccf2a2a0f76ab7c88d108a8547/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/model.expected.json b/tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/model.expected.json index 92b0bb8944..d5a6351178 100644 --- a/tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/453d009a271e94e412374f1510693b71/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/model.expected.json b/tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/model.expected.json index 7b9b307bca..cad8b05433 100644 --- a/tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/453d7019c56c6e4fd720fcc8f83142de/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/model.expected.json b/tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/model.expected.json index b6db11fc76..572d1388eb 100644 --- a/tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/45ab0a8a38b8a16d1afe4a4b4bffef04/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/model.expected.json b/tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/model.expected.json index 8ee715ad47..2c2e984056 100644 --- a/tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/45f397b2827824d973913a780b447600/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/model.expected.json index c9bcb79fd4..cc414bf5e3 100644 --- a/tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4611a3e5fa92325652ce5b14da03d0af/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/model.expected.json b/tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/model.expected.json index 27903e7f13..5acc08338c 100644 --- a/tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/461bdf3c29b2f09b541034b080952550/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/model.expected.json b/tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/model.expected.json index 69c2c62fe9..2f57961704 100644 --- a/tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/463c263b7ca3948dadc72aac12f03675/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/model.expected.json index 5e7f9f1f07..c1d1bfd99f 100644 --- a/tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/46479321fee8a3387f42558b39b364cc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/model.expected.json index 66ac6e2b16..9aeadfcbd7 100644 --- a/tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/46590714def95df207999f7e2c6daee7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/model.expected.json index b14d561c86..e80217d68c 100644 --- a/tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/46b46a629f553e06a23cce0cb0ab3fc7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/model.expected.json index 1d81e84550..cb97af7d44 100644 --- a/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/46e7df2eefd532655b09da4ed435de1e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/model.expected.json b/tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/model.expected.json index fae736f31b..8b2aa7a8aa 100644 --- a/tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/476b6f0c19f97c01c719897ca9420946/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/model.expected.json index eb752b3640..f67c9a33e6 100644 --- a/tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4797634599665df7e1204de1282c4e2e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/model.expected.json b/tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/model.expected.json index 95d0343381..627cdc2337 100644 --- a/tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/480a96cb2363505372a90a8e73812109/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/model.expected.json index dd3d3a4a06..19a0b035ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4849ece40e3375108283d1ad3cfecc90/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/model.expected.json index 0a63cf5c8d..5228581a2c 100644 --- a/tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/485f1c0edb95678792083be90034ac0a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/model.expected.json index 48d651a199..d586b2e968 100644 --- a/tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/48929a67dab909763280169f5d4632b9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/model.expected.json b/tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/model.expected.json index ebc45f9544..2dcd97554b 100644 --- a/tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/48faac38ade4e0680ba7f0e26fc7d315/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/model.expected.json index aef2f6b493..b4f24a9703 100644 --- a/tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/490436b325ecf3283f80d59f69c60dc6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/model.expected.json b/tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/model.expected.json index 326dadcb3b..8014a1cf27 100644 --- a/tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/49049fb9a0e241dbf48a77f5ec9f7259/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/model.expected.json b/tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/model.expected.json index 2d6b9a0356..6675f60325 100644 --- a/tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/493197c9c0b2cab08bada7379e567229/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/model.expected.json b/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/model.expected.json index d68921cfbc..deb3598acf 100644 --- a/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/499e079eb49364e5f37956fbd5635887/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/model.expected.json index e4d2825191..59624ebfc5 100644 --- a/tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/49c4bb2084ae145c951d6e363a90ea9f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/model.expected.json b/tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/model.expected.json index 8cb98a3c58..3b47073f8f 100644 --- a/tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/49c6df33edfc97e3f0f7b81aa6940880/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/model.expected.json index 89660c9219..7c23d0967d 100644 --- a/tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/49f9216e32129544a9ed08e08bff59a2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/model.expected.json index 6ea06858a3..e6a7cadb9b 100644 --- a/tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4a256fa8ed1c07ea2ef405dff5b700b9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/model.expected.json index 65353a7ca8..6d71c18c54 100644 --- a/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4a598ea5ec7744cc20c3a53601371daf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/model.expected.json index 0ed77d2aea..334798da4d 100644 --- a/tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4aac419ab95021d586ca0c4be3595a8a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/model.expected.json index 6d137c2b6f..df0deb9ec6 100644 --- a/tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4aba79f85e75b7880783738a0de5456f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/model.expected.json index 19da587805..88b8a69be2 100644 --- a/tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4b22c4a968c8f76789b1164fda122364/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/model.expected.json index c8ea8659ce..22be24e4a2 100644 --- a/tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4b23607e697a7b33b7855bb9e6d8e164/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/model.expected.json index 53d93d55bf..e4560c2e5e 100644 --- a/tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4b3868c917f7a169d375b457cbe72888/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/model.expected.json index b67a443b0c..485ee10a58 100644 --- a/tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4b3aee17579d9410527145df9332fdb6/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/model.expected.json index 2c61d6b7f2..8189d3d2d4 100644 --- a/tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4bbb005a1c711470b24b1ce32927347e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/model.expected.json index 801dba64f7..234c48b2dd 100644 --- a/tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4bdd3c3b94bf57ed6b5ded25a849af9c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/model.expected.json index c42eb3cf7d..7dd0b2d4bd 100644 --- a/tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4be21fd12a8819847cbd51dea1e370a3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/model.expected.json index 32af9ee931..b354f5ae8d 100644 --- a/tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4bf6f94d3db529f4501cb0a0799a2145/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/model.expected.json index d9303c8749..55a70056a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4c2f1f690c7a08a46f98c9c20ae39638/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/model.expected.json index 634c1bae8e..4e4743783e 100644 --- a/tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4c42c6054e5582e78e2da66a04690fb4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/model.expected.json index b0890fc53d..d9eb09c484 100644 --- a/tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4c5b25d1ff6d063a890465017499de2f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/model.expected.json index ae68b3e585..e877b3d064 100644 --- a/tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4ca14af7de2b5f1fd0489e76314fbafa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/model.expected.json index 090a5627bf..d694aee75a 100644 --- a/tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4cef7ec664c5dca44df9e841fc36d16c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/model.expected.json index a381f8b41e..191091bdea 100644 --- a/tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4d092618251bbf48216dc1749454802c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/model.expected.json index 10233666a5..768f15785c 100644 --- a/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/model.expected.json index 87a02f11d8..f0f87e25f6 100644 --- a/tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4debc13b7368939beb13d0408f1225f5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/model.expected.json index 303b475fc8..3144ba9a0f 100644 --- a/tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4e9dd6bac212dc98d3103b73e3c2971e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/model.expected.json index 2b3a359673..7519226344 100644 --- a/tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4ea83cdfbcaf661ef1707eb376d12dcb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/model.expected.json index 2b3759f075..2729f3c28d 100644 --- a/tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4eb62bd911a26eca2c663622b9db8469/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/model.expected.json index e4e05362ee..422604dc20 100644 --- a/tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4ed20803dce83fac172cae8761501a39/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/model.expected.json index 1d5e4fd6ac..3a1ee0621d 100644 --- a/tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4f12b3362c3cd09cf3afc0015b65969e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/model.expected.json index 0d0fd1016c..428ae71170 100644 --- a/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4f86b4baca491f2992bb7713e7da0980/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/model.expected.json index 2092059926..d7330d88ff 100644 --- a/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4f9ae4ffb009a3b226c8414061bd362f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/model.expected.json index 216cb3f1a6..3158e9c023 100644 --- a/tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4fb5fb2fc16946670ca1e42f6fcaee7c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/model.expected.json index b8eb6694f9..14a1ebdbac 100644 --- a/tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4fca9263ae2d80342c52533f211a8f16/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/model.expected.json index 094e895c25..2e9f9951b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/4feb5c171fc58c1f25b21ccf17e9df5e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/model.expected.json b/tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/model.expected.json index 85faadf8e6..3d6ba93d81 100644 --- a/tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/503586c1bb7c6d7d42be1f332267d916/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/model.expected.json index 857c5dd0ae..9459fcc9a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5066c398855444982cf41c9d767fd995/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/model.expected.json index 33a670dddf..7329efef9e 100644 --- a/tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5068bddda9fe656697ec6de2579580db/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/model.expected.json index a33a0f2e4a..615edbc455 100644 --- a/tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5071a0ba341e7dfd170dd3d834b37ced/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/model.expected.json b/tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/model.expected.json index 11c76d2c70..b9610f0234 100644 --- a/tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/507d3282342387e2401ac58873811295/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/model.expected.json index 842ed2c562..ea4347af51 100644 --- a/tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5087e6d4b27308f7844b160d11a537c2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/model.expected.json b/tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/model.expected.json index 78f727d54e..bcfb494837 100644 --- a/tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/50c2a6964d0e24c53ade257ecdd50985/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/model.expected.json index 6f3c01fe5c..e11b46be8f 100644 --- a/tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/50c803ed8a3cba6387b21144fd06afd5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/model.expected.json b/tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/model.expected.json index f636e4295b..0f70c842ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/50d5d20326959ce7f9250b33c9f80597/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/model.expected.json index af8713d17e..fdf13f70b7 100644 --- a/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/51086d5147895ed3eb905ccab398c7a2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/model.expected.json b/tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/model.expected.json index 622e56727c..40a6779ba0 100644 --- a/tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/51679a7b584354bb97f16e9f40d5c604/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/model.expected.json index 00a341e38d..c45fd59e23 100644 --- a/tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/51e87619f2aa1a2aba11584b2edc8fd9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/model.expected.json b/tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/model.expected.json index 51b7b1a014..fab80ae102 100644 --- a/tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/51ee9aa6c23d7a75bc27e57047c67667/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/model.expected.json index 8496a37c14..5a970c4cfa 100644 --- a/tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5217aa24b09e91520ae4fd364ce14998/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/model.expected.json index 6cbc071834..701c922446 100644 --- a/tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/528ddbc341b292a9c60ce82719e299d2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/model.expected.json index f9829aebd5..5a3bb3c13a 100644 --- a/tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/533e2929b56244f23bae34632bac20e2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/model.expected.json index 85c242884a..31f03a69b5 100644 --- a/tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5389d8ae83d9b2260e7c5697c481970a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/model.expected.json index e151accdb6..d1f90f3527 100644 --- a/tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5399a212ea0b032f74966bdfe0e21709/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/model.expected.json index 3c6a7e1e08..608a0ba3f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/53a426862ebb79d1768a6c0143a8831c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/model.expected.json b/tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/model.expected.json index 30733b7dbb..ebda3806ce 100644 --- a/tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/54357c603c8679029250e83ada7fca15/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/model.expected.json index 8571add026..7bb062671f 100644 --- a/tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/546e81cb258d27b8a874bdb1a0e2ef4c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/model.expected.json index 972256be5f..7bf1f79baf 100644 --- a/tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/54b15fec24b105ed64b8e7bdeab74aec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/model.expected.json index 669f1a1779..b471c9d6b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/54c995d240bca20d3853847acef38f4b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/model.expected.json index 413973ef94..cf34865230 100644 --- a/tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/54f9669a1c9a729e3efa54d239531f1a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/model.expected.json index 6ebeaab97c..cc52596b25 100644 --- a/tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5537b34a9991a0fb4580102062c0b795/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/model.expected.json index 5cda7444f9..7179d1a9ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/55ea8b3eb2eb1d64b5891c7c6770c5f7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/model.expected.json index 5629b590ae..157941a306 100644 --- a/tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/560907760e8e19ae82dc37742bf181c1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/model.expected.json index 9ca393bc86..7ac1d6de5b 100644 --- a/tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/564d2dac2114c350d82e1b204830a24e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/model.expected.json b/tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/model.expected.json index 6724698c4f..5cf7540760 100644 --- a/tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/565e64e802e2d5fe99e575a769a10f46/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/model.expected.json index 5ab76b4ba2..2e0160ef57 100644 --- a/tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/56bb219affa56fa8585b7d93b5d7957b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/model.expected.json b/tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/model.expected.json index ff087a3bd1..0344e04400 100644 --- a/tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/56caa7ac2e7e4db76cc6c77bfd6b7019/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/model.expected.json index 01d72ac75f..fd934cbf06 100644 --- a/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5730851ebaf12a1212be46cc5a31235d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/model.expected.json index 75c2145873..0fa5a8daed 100644 --- a/tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/57fc63d1aa86555fc3580b95a7e0f8e9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/model.expected.json b/tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/model.expected.json index bf2817d3c9..0a10bcf02a 100644 --- a/tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/58541e43cb8ad8a5c8be02bd79e21388/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/model.expected.json b/tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/model.expected.json index a21b96c01a..76950dcc08 100644 --- a/tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/585c3cd2c560b3bce7f2c56c1b01d872/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/model.expected.json index 084853d51e..6fc78da72c 100644 --- a/tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5880afcb8365cb9b7a90046a06c71c13/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/model.expected.json index c1d9df5790..4059a6ced6 100644 --- a/tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/58e06280779d0562fb1094312a7ed65d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/model.expected.json index d5e4c53ca3..549b21fb8e 100644 --- a/tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/58e8a336185df542da6352134ce073d4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/model.expected.json index c84412872e..95645f80af 100644 --- a/tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5934985e5f2b49680f9a1dd0d56f49ab/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/model.expected.json index ae909e3392..b7ec436dcf 100644 --- a/tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/59c1d6b946041340649c24aa89a02a0a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/model.expected.json index 5192fdcef3..3d20e8d9b2 100644 --- a/tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/59d832cec1caf1aaab7c58d776dd173e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/model.expected.json b/tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/model.expected.json index 65a19318fe..68c38f5f0d 100644 --- a/tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/59d9cb4ee0fd320c7b9a572310b4dc73/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/model.expected.json b/tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/model.expected.json index ac61e1532b..5e3d9b781b 100644 --- a/tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/59f23e211645b15aafeb12d2a6804f75/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/model.expected.json index ad15a88bbc..87ec0f925e 100644 --- a/tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5a20e5a83d18556a657c16d0e73d4702/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/model.expected.json index bad303978a..69db345b95 100644 --- a/tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5a2a920a38b4d4dedbef4582735c169f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/model.expected.json index d2b167fc7a..9312e7096e 100644 --- a/tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5a3fabbfd4d8f7b5df04e250d4d2ac22/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/model.expected.json index eb76bd9c5b..7840d72bc5 100644 --- a/tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5a647ecc82bd6f30beb9891a30a9c3c7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/model.expected.json index 105faf41ea..48c303ee14 100644 --- a/tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5ac784c961498ebdd283a0fa62f11cf8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/model.expected.json index b617b6fa53..3701160d08 100644 --- a/tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5afbd7bb16cd84e2166aad26c94e8563/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/model.expected.json index a8fb8c1c71..c31b286f95 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b1166277b057fe1599ef59c9575a016/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/model.expected.json index 53c4b2c2f6..55b62c3cf9 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b45ba9bcc7c039c1299a896718993b6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/model.expected.json index 25914036b5..fa7f001952 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b50bb04aeb6d29b7833ddfaee9a7a06/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/model.expected.json index 6fcc5a92a5..253ccc072b 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b55d99d2def282044ece58ea0c19348/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/model.expected.json index f7304e6e35..0040100111 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b75877073445fbe5c7984032644993e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/model.expected.json index 3317f554b3..3ba4c61104 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b7f553219b00b0d37cfc5bec0f2eaf6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/model.expected.json index 1d4f5bae36..f4729efa24 100644 --- a/tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5b917841fe72a502d046936ee40d1a65/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/model.expected.json index 263475427d..d185eb1491 100644 --- a/tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5bb701ec00d09ccb13b5093812bd3842/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/model.expected.json index 49c5f1c1e3..dca54a4526 100644 --- a/tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5bc221bd0def5b302052fefcaae35403/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/model.expected.json index 3d3957966b..91669a9d41 100644 --- a/tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5bedf79d883f837a72f49f78eb9a267c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var4"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/model.expected.json index 44101f19d8..adf9b6e871 100644 --- a/tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5c05f9d9fdff466f29cbe3e931304e9a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/model.expected.json index c42e3cb0b0..ae4472303f 100644 --- a/tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5c956e151d6c442acec91f46a0a4ba90/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/model.expected.json index 7cd1d5366b..550204008e 100644 --- a/tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5cfc3c0f1cdd912aca8ac526cf3a7102/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/model.expected.json index 5d0eb650aa..19cfcf2c6a 100644 --- a/tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5d7cff7a4e6a7b0e44acde6c41c210f5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/model.expected.json index 6f64b08fa2..21fd122d53 100644 --- a/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5d9f6f1e5070e570488660a8d6079808/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/model.expected.json index 5fb6552ec9..a22364d589 100644 --- a/tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5da782cc37e87dc8ca237cf375beda92/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/model.expected.json index 80986a8df0..57aae83363 100644 --- a/tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5daa6180d595ca2238af28c4920e2345/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/model.expected.json index 31846f1877..4c1ab6dbca 100644 --- a/tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5dc1915a42a7971f38d4c1efd8fac962/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/model.expected.json index fe1b3fdb58..f647d2cdc8 100644 --- a/tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5df0ac9ae39fb7bfbf5f990f89cd23d5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/model.expected.json index 5eb6069a4d..caf4882c1c 100644 --- a/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5e209eef6a0309295e424afe63deb3b3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/model.expected.json index 6fa0223160..81ca358e7e 100644 --- a/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/model.expected.json index 4265dc97ea..ad4b9f70d4 100644 --- a/tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5e9b16aaf3fb5a3fe0d6773d78fbc7ac/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/model.expected.json index 2b88d4325f..b56c9dde13 100644 --- a/tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5ef166b15726a7b8be067fd722a0b762/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/model.expected.json index 0de35ed99e..62529611f9 100644 --- a/tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5f831cd0b29482ae5fd8b986c279f34c/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/model.expected.json index acf8f9aa33..10f2d43a31 100644 --- a/tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5f8abcfb913c155e5fcf9aad1689ee48/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/model.expected.json index 49d0fde7ad..6bf64ac0f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5fa74d2946d0a37ececba0815c38476a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/model.expected.json b/tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/model.expected.json index 3cec695d15..f54717ae51 100644 --- a/tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/5fdb0e91805fa1a4a97ef0e9d9cb2b45/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainTuple": [{"DomainBool": []}]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/model.expected.json index a67a8a13cd..0df39140ce 100644 --- a/tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/602d25f9a2041d1ebf4d4db9b3edc86e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/model.expected.json b/tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/model.expected.json index 95b2ddc1ef..7406b6dbcf 100644 --- a/tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/603465a931823cf8433459de2d015883/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/model.expected.json b/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/model.expected.json index 7760a99c42..bd9810596e 100644 --- a/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/model.expected.json index 70ceafb382..6c91612c7e 100644 --- a/tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/60a914e18367fd0c2b4e281da008535e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/model.expected.json index 92bb1e8b91..4292e83f12 100644 --- a/tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/60e6055ae747adf7736e2f5421d6557d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/model.expected.json index 2947cf6c58..a4750f341d 100644 --- a/tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/612a3b4f1e02d37d3c58b3ade9b248ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/model.expected.json index 1d7bf617a4..e748cc53ba 100644 --- a/tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/61319fb9ab3ab592319d92b204c2bdfc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/model.expected.json index 47b5c5a2ec..451fa79a9b 100644 --- a/tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6222ba236852756e97296d6b0d5a7591/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/model.expected.json index 452ec675c7..19b5b7bda7 100644 --- a/tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/622990dcaff380b2b2386b0fd2938eaf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/model.expected.json b/tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/model.expected.json index d3ffd46a00..917b44b6ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/62594a1eb17519e35762e15ecb426543/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/model.expected.json b/tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/model.expected.json index 1896ffa119..054c418847 100644 --- a/tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/627441aa1b7360baab198889cfca4427/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/model.expected.json index dd796f3740..d2ae75d926 100644 --- a/tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/627b55153f0eb551d73d1737841126b3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/model.expected.json index a21e83637a..fcdb2594dd 100644 --- a/tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/62b0458cc52011021227c9aa3001eaa2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/model.expected.json b/tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/model.expected.json index 9090e69fa4..623a159818 100644 --- a/tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/62efe6787e7be32b6775a9054b5e7a90/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/model.expected.json b/tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/model.expected.json index 9b906440ce..02bc4c61b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/635138d6d04d99c29540660d96fadd90/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/model.expected.json index 9babeba3fc..9de366f981 100644 --- a/tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/635d068c0ed6bbf9ed532bcb7160ca5b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/model.expected.json b/tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/model.expected.json index f962a1ccde..cdb88f3c8e 100644 --- a/tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/639426681f0939ff32581b49c1ed3446/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/model.expected.json index b123da8385..d9b0ce9110 100644 --- a/tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6399ac65746238face19a4940122f300/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/model.expected.json b/tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/model.expected.json index fc64fb4d59..4d1e9c9695 100644 --- a/tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/639c945efab0ddc3cd257f342bd30d93/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/model.expected.json index fcf7db1270..3ec2b9a9f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/63bd888f30c6401cb53c1608c61be98f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/model.expected.json index 56e0d435b9..12f3293297 100644 --- a/tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/63d2ce5ca79ec1ac946795d91b4a8c5c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/model.expected.json index 378f60be82..d0b8f3eed8 100644 --- a/tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/63e6f12512faa654f77596ca09876cee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/model.expected.json index 0b6f423142..4c8fedabf0 100644 --- a/tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/63f088cc502f3fbe5df99a31333bc2d3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/model.expected.json index 3ddf23245e..a89f92fe84 100644 --- a/tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/64093bd494040e20b22c48c13361293d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/model.expected.json b/tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/model.expected.json index aa3d48931d..c6dada262c 100644 --- a/tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/647f57337d2730de29c992b43a041f89/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/model.expected.json index 9cf1de5e65..49bec42464 100644 --- a/tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/64a80784861e9a2ea3acac19a9d5c43c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/model.expected.json b/tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/model.expected.json index 288c5c5c8d..071388b4e2 100644 --- a/tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/64fe7f7aaa89030d34bdb621e5deb747/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/model.expected.json b/tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/model.expected.json index 333e83d777..482bdfd12c 100644 --- a/tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/650f60c017f90e0781f3478942261393/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/model.expected.json index 92736b780e..c7f613c83c 100644 --- a/tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/660818affc709c300fd6fe6489297ffd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/model.expected.json index cb8328ea28..b37838876c 100644 --- a/tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6638a47bc0e4d1bf3de50a61b2d87868/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/model.expected.json index b08fd7174d..8493ab8d0b 100644 --- a/tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6694ad082ff9961793c0c9c0a36196e4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/model.expected.json b/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/model.expected.json index c717cbde6b..70598d70bc 100644 --- a/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/66a184c301820c299d5a74f6b3d89566/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/model.expected.json b/tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/model.expected.json index 5d23eeda90..e19428d8e1 100644 --- a/tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/66b37dcf91ac4c0988042c2b82c88561/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/model.expected.json b/tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/model.expected.json index 561317a1b6..fd0c77d02c 100644 --- a/tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/66d8aabc637186ce37a17a8dcbc75b08/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/model.expected.json index 8f3a27bf1c..78a447ed54 100644 --- a/tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/66da4175d592bc87c723993f7b709ba1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/model.expected.json b/tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/model.expected.json index b0911b7b8f..dde5f64bc5 100644 --- a/tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/674b4722ae6d5a9ebe222221c6361cad/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/model.expected.json index 99f8ce5516..c74655d9da 100644 --- a/tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/674f24d155119e8e111584cc92a47dee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/model.expected.json index a270cd1300..24f1aa7a3c 100644 --- a/tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6759663e9944fadec8876ff64502e5ec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/model.expected.json b/tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/model.expected.json index a11cc46f30..8a0cb6b07c 100644 --- a/tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/67856b9617d62beaf659a45708f21210/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/model.expected.json index 3cbd98550a..9980a913f4 100644 --- a/tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/67f44eb9dafad2f5eafc179a153aa3c1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/model.expected.json index eeaeaba999..2b281cddd1 100644 --- a/tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6816e93188da042831d6849d9fc88b51/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/model.expected.json index b6141fd803..ac8be969a8 100644 --- a/tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6819114bc3238cf5d2e085babaf65c92/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/model.expected.json index c5f472fc26..a514ab0fd7 100644 --- a/tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6845c468147ab1df800fddde373c1e17/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/model.expected.json index e821312098..339735a356 100644 --- a/tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/684c3d333688466aecbdaa587d524dfb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/model.expected.json index 327e636c7e..adf06b2103 100644 --- a/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/688d9c5f26c404975d660fcdd262858c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/model.expected.json index d2a04c330b..d12b0deda0 100644 --- a/tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/689b4574753caf426e48593872d8f4f2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/model.expected.json index b5be4cc8f3..f43ac9fde9 100644 --- a/tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/689bbf501ca871dda34a71cddb06f9ec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/model.expected.json index e2ed2a8c0d..f6afe272b7 100644 --- a/tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/68b25c7b142e7cf4257a8afe431e62b3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/model.expected.json index 11b90de4ff..71bccce057 100644 --- a/tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/68b3c16a7cec0ae650d9545654c9aaa4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/model.expected.json b/tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/model.expected.json index 0d8bf51266..391c911bd3 100644 --- a/tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/691ac05a17a4ad3b5dbac1fcf411c508/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/model.expected.json index 5ee9dd8187..c972ed3efd 100644 --- a/tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6920b205676413cff5a8ac0ba3ac9a39/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/model.expected.json b/tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/model.expected.json index 2c035deec9..08a78c6b80 100644 --- a/tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/695eea09aa21c14f80244f9c0f413304/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/model.expected.json b/tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/model.expected.json index 4a86a3739b..00f42cc927 100644 --- a/tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/697d6075ff1fdb76ea099fde1b20d219/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/model.expected.json index d9fee51f3d..749645949e 100644 --- a/tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/69b57a8e7b3674ec24bd03b8e1cd8d6d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/model.expected.json index 87726afc45..c51b04baec 100644 --- a/tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6a1444bd8e76a391728a3070075e95e9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/model.expected.json index 368d5a757f..318ee8108b 100644 --- a/tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6a21218d02d6066c0c13c2fd8dc23887/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/model.expected.json index fbfec301dc..f184945c61 100644 --- a/tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6a2d0701e4cf5c4d8f6cf1dc7e15f399/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/model.expected.json index b5cfa14f0c..4cebbe0d49 100644 --- a/tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6a571fe9e071ce201a1a010b2237b5d5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/model.expected.json index 94f7f1a124..b489c8c353 100644 --- a/tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6a88588bba462ebffae74647c144c4d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/model.expected.json index 88f2389426..f0c3d0f264 100644 --- a/tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6a9bddeca50534905aea04bbef9e17da/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/model.expected.json index b0ba42c047..62d21d3b00 100644 --- a/tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6aaa07e106687606e6ebd677288f44b1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/model.expected.json index f36ff157dc..4fd18d997d 100644 --- a/tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6ac8c752d3e4fe9a39a4baa9b01ed4f2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/model.expected.json index a08516b51e..23e0c745d1 100644 --- a/tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6aca6179aec2e811a574cc8f9b2170e5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/model.expected.json index 34385f8c07..7cf7b673a3 100644 --- a/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6aca6588ab888f9c3965cb703a7ffa87/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/model.expected.json index 395a12921a..0e85f632d3 100644 --- a/tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6adcceb830a2022acb620de53d953b28/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/model.expected.json index 93a5b670e6..7d850c4603 100644 --- a/tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6b8f8102f9c4e16ff066114f1f3aef54/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/model.expected.json index 8e69d87f40..2af1e0477c 100644 --- a/tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6ba176ef566bd4d3ad1fc9b1c02c19e9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/model.expected.json index 216be89a72..8dc0c4002f 100644 --- a/tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6cc29e070559e3617c321eddb0aa52a0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/model.expected.json index c95ebebc6c..bb5d118a1b 100644 --- a/tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6cdbc847bba12ef88f6f6f3d68d75303/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/model.expected.json index 5436fc638c..0538d40b86 100644 --- a/tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6d234926de4bf3efc85ef76d53a68827/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/model.expected.json index 2fbf93abc1..80cdfbb9d9 100644 --- a/tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6d2a055078d3ff9364d6a4715bbcce63/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/model.expected.json index 1134a254b5..95bdbf9cae 100644 --- a/tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6dcb3352ec6b88c10d4d37072cb09475/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/model.expected.json index 48f80d5e32..bf4a5f4dc3 100644 --- a/tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6e4f8f01946d51553fd4dc681c55d7ff/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/model.expected.json index 5c4ed5fcdf..ba38d5cd1b 100644 --- a/tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6e635e7e739e4a42e9752e4776b800ee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/model.expected.json index c3e63fea77..5d02abc2ea 100644 --- a/tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6e78775adcfd98bd61ddfa72523d20d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/model.expected.json index f75eceab95..e756e55968 100644 --- a/tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6f115e6ceb931de245d1914a7238a5e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/model.expected.json index a4b32dab83..8de4260b1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6f43d623f1679861f011b13015bcd6cd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/model.expected.json b/tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/model.expected.json index 0f7b12433e..f1675f3013 100644 --- a/tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/6fc55695fcddbc4d1d3987132d8eb399/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/model.expected.json index d682187461..477d5cbe47 100644 --- a/tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/701fa2a79a8effc3937e7e1f27e33cf9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/model.expected.json index fae51ef789..20c7cde654 100644 --- a/tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/706fff3f20bd3286c124f76cf527bf2f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/model.expected.json index 8d3e4eac38..e9b5942bc9 100644 --- a/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/70707c28efe6141f1c5f70cb86a86ffa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/model.expected.json b/tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/model.expected.json index a92173e1a4..7b46e7b35e 100644 --- a/tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/70729b148e4e70ab38cb319e8c952730/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/model.expected.json index 339289f06c..dc599bd46c 100644 --- a/tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/707465611baa4844701cb24902023acc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/model.expected.json index b2d667ea5e..17d4926037 100644 --- a/tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/71370392c8a48233ee7eeea22af6b66e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/model.expected.json index 9f5ac766be..4a3a6d53aa 100644 --- a/tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/71439ab95a4f5bfdf808f3cadccccb9e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/model.expected.json index 01ce4408c4..e34b23fb1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7144f5c387b1b12ae8d726b47ca182dd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/model.expected.json index 9ee8ac383b..a2c54cf336 100644 --- a/tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7149b33b5941efcd677dc5be977c5cff/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/model.expected.json b/tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/model.expected.json index 9dca69ad71..7c13f3d644 100644 --- a/tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/714eeec76271bcead5de810358d98126/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/model.expected.json b/tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/model.expected.json index 276684c47e..6477ca4cef 100644 --- a/tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/71d975d219ae56f829f74cbbc19ad650/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/model.expected.json index 56b8701536..5eb75c6074 100644 --- a/tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7213f3123fb0a3602859e59d90198141/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/model.expected.json index cbfe01c9ac..44c8547174 100644 --- a/tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7293e2d2559bf143bf5751458000ca82/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/model.expected.json index f31c872762..1b02b1fea1 100644 --- a/tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/72a4957a94bebd6accb42ca3ef8e093e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/model.expected.json b/tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/model.expected.json index ebf435a522..0a0ce49c65 100644 --- a/tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/72c5af0569e0319ae3ae80ed1ad65571/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/model.expected.json index ed34261ca5..e83b592d20 100644 --- a/tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/72d3842a90204ee73d7b599e3ece97b4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/model.expected.json b/tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/model.expected.json index c1dc6cc1fa..3b634e57f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/72e12e9f11258447393672b2d965a468/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/model.expected.json index 636471ddec..01fda8b1b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/73298c7aeac2e916b0f3f2572d18ee3f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/model.expected.json index e4fba85980..a40514ff1a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7340afcb10985a0a7ab0d48bfe3ce39a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/model.expected.json index b9b9aeedad..05d8c1c747 100644 --- a/tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/73472b413e1c687c0430a8719e4f016b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/model.expected.json b/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/model.expected.json index 18eaf6dd0a..9f0d8cadb0 100644 --- a/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/73595304cbda134ee926997219f68122/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/model.expected.json index cf6dd5ed55..b946226263 100644 --- a/tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/735fc273602e4ede28251a2e88511bf1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/model.expected.json b/tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/model.expected.json index 9e46ece4b5..5ca83cc3f9 100644 --- a/tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/73f1b7785f39dea6270c8c6e2799c366/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/model.expected.json b/tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/model.expected.json index c5aeff5f6f..89daaf49fb 100644 --- a/tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/741c831781c1130b77698ac0a8e39bac/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/model.expected.json index a3b276593f..496190d8ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7521087d0ca259f38d548880fda61315/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/model.expected.json b/tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/model.expected.json index de2f9680f5..6820d8af94 100644 --- a/tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/75765f88c1f182bd9535af1c33aa8320/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/model.expected.json index 7d5949881d..3025f6ed42 100644 --- a/tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/75849537a38dfc9993231bf6095cb2e6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/model.expected.json b/tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/model.expected.json index 74dd0f1fab..a215de2496 100644 --- a/tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/76042410b22d06836ef6e74d900d2918/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/model.expected.json index 96d5fb6b8b..05d61cb5a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/760f3eb874e49940dccaca7853a6663a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/model.expected.json index 7cb731f12c..8cdd4667df 100644 --- a/tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7624576246e8c3059ba24ec2d12a8e49/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/model.expected.json index a0d06a815a..e630085eb0 100644 --- a/tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/76b69ff02964226987ee8e85c69b99f0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/model.expected.json b/tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/model.expected.json index fa52569c8d..32a68ef087 100644 --- a/tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/76e95ca7345ad8108828e20d9116d317/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/model.expected.json index d46db10366..17620e9782 100644 --- a/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/77bf93b23c2e5269471d3e07d2d0eff3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/model.expected.json index 1d3e5c2aa4..0006b5686e 100644 --- a/tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/77f9a472db5de2e67ee40dfe0dff40a8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/model.expected.json index 435bdd9ccf..50ea2a3a7a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7813ae28e21e6cf03109291d165d4647/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/model.expected.json index a7412eedd8..b6a2e8b0ce 100644 --- a/tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/783809db2f9c9e395e52e9a135e6fbdc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/model.expected.json b/tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/model.expected.json index c114590851..0c7db183ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/783b2b5ef26440959d2b9eea8cac7602/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/model.expected.json index abdef5829b..0a8e9942f4 100644 --- a/tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7842b5f4c7ad574e4dd5e285a6512004/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/model.expected.json index b1006c8379..839eb42c6a 100644 --- a/tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/788102a4292eb30458166a213f53d06b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/model.expected.json index c37c8642a6..8dff204792 100644 --- a/tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/78b91b8a1c7e8c7268c5674ea86dfa6f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/model.expected.json index b02382ff40..be487c6480 100644 --- a/tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7916e2376c2f7a027a1836f83d31e41f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/model.expected.json index 969f080732..fbd037ca96 100644 --- a/tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7931697aa48ff1cee580a300b58b56dd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/model.expected.json index 8e0aa4870c..e403d8e828 100644 --- a/tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7957f0317999099b511813bff7f666d9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 2, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/model.expected.json index c8da14f2a7..82083caa18 100644 --- a/tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/796a75de14301706781198a596a0f82f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var4"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/model.expected.json index 1f0117ae3d..1d3f64ec4a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7a1374784817a61dd7d0ab09fc3ed1f5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/model.expected.json index fe0f521c20..cd5a75db9c 100644 --- a/tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7a6edcced80722524f0bff6778d815a0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/model.expected.json index 25046069b7..59ae9e04c7 100644 --- a/tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7a9eee2cf8d977a2f9cba8a6f6f29ddb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/model.expected.json index 3c59fb1c11..d12becc976 100644 --- a/tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7abab402c3c635d1a5ed251e23346b9d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/model.expected.json index a6fc1ba88c..3c89ed932a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7af19291f31c57f450d1584f932a5bd2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/model.expected.json index 67ae3a6699..2ca166f47e 100644 --- a/tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7b072d8dc31f10792c4942630f4c90a2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/model.expected.json index 5b4f1fcb29..35b0894e16 100644 --- a/tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7b0c8abe457f0fb2a4ff0e27c5acc7ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/model.expected.json index 591b959548..c6457cd646 100644 --- a/tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7b43b4a26dc012bc58edd762a212c306/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/model.expected.json index 8eeb3d815b..d1b04967ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7b5e1f92bb5d4a7807d1d23d112cd92d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/model.expected.json index 2d2ac0f0b9..6590016969 100644 --- a/tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7b66f514f938f081c62636b617d585e6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/model.expected.json index e05dd17938..0b1637800b 100644 --- a/tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7b9c2cef26b449a08d972bf3b5f521b6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/model.expected.json index a4a507f0fb..7766a77f10 100644 --- a/tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7bca9feb74e0d19616174e344ec7ed3f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/model.expected.json index 537b3394e8..e5674ab706 100644 --- a/tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7bf6ecd55c1648855b112f6e20c8a371/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/model.expected.json index 0d2f70ef6e..45cdf584a1 100644 --- a/tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7c370e25be12481ac743d5937d979cab/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/model.expected.json index 82496962fa..a30b54b4cb 100644 --- a/tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7c756ce0724280ed59c97a84dd82e7c0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/model.expected.json index 95f563e83d..764424de37 100644 --- a/tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7c7f91f16a7fef369fe0a0bc90496df7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/model.expected.json index 7cbec16e29..5bd43c414b 100644 --- a/tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7c9328a9df7d3971ebc02d3a5d032831/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/model.expected.json index 8019a7d701..9d06a5d84d 100644 --- a/tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7cb449bd3f6d99ec10799ce32deb058c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/model.expected.json index 8f7b762593..a55719fe16 100644 --- a/tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7cc8838035af5627767687a2a0dd2023/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/model.expected.json index 1b3d01ee06..263dbc99f5 100644 --- a/tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7cd8ae8cad72f99cbc828752bb1ac779/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/model.expected.json index a39fe80209..de43768516 100644 --- a/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7ced3deed438dc0d1abf978eefd25a73/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/model.expected.json index 2e620a72eb..b46a46372a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7d51a8ed37eefbc3671568f26b3ae864/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/model.expected.json index ddd231f595..1c4ada804c 100644 --- a/tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7db9a3d9ee627d332a146e54d5412c2a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/model.expected.json index 56f1c6d0c3..1f76d4b1fa 100644 --- a/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7e32221a2aa518579c4cbca35995bad7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/model.expected.json index 32d95940e8..1b26fefe5e 100644 --- a/tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7e379263b7076cf01287d6b3b627c2d6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/model.expected.json index da0d753a36..a6b129e6ae 100644 --- a/tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7e3fcaa59bbfbe569b009320dc601838/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/model.expected.json index f53533579a..8fce445fbc 100644 --- a/tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7e5af3ac9a29055da76bfcb22c29525b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/model.expected.json index d21fbb62fc..d32494e18e 100644 --- a/tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7ec84a5eb1ae188fa85813dd512686a4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/model.expected.json index c16df208fb..5db717ffee 100644 --- a/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7eeaf2347f1bf8b83db5d0b7c15483e6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/model.expected.json index 3987766ed5..a4cc7b227a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7f266b6dbe432f711cc93c3c3134d1f6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/model.expected.json index 7b887e8539..0659dabf8a 100644 --- a/tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7f29f662e63c9cbeb7ef949471076baf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/model.expected.json index bffb1d7df7..3b770df858 100644 --- a/tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7f5dcefd7bf9747fd024609b49219e09/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/model.expected.json index 4a2f15d3b3..2077006b6b 100644 --- a/tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7f9216e93251e34cc26833867e932b73/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/model.expected.json index f8f449dfa8..f9120787d6 100644 --- a/tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7fc019c5d2aa866d1e64841472c50e95/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/model.expected.json b/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/model.expected.json index 4bfe774fc8..24ad10c406 100644 --- a/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/7fe2fcf2a860ff56a8cce5c04d1de189/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/model.expected.json index 8cda42d336..d73ae6507f 100644 --- a/tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8020e4ffd83f6ff3cd5314eb173c7c4f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/model.expected.json index 22a0ac8f08..7096638c46 100644 --- a/tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8031e98607d45acd28638158da5f736b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/model.expected.json index 9b5c2bc8d7..f132b9f444 100644 --- a/tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/803365043841034f75b79d281852dca3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/model.expected.json index dc460c3f57..7b6e033eb5 100644 --- a/tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8041caf40ae2bfc01f9c38fb844e65dc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/model.expected.json b/tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/model.expected.json index 2e6b0021dc..15a4939730 100644 --- a/tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/804e99a6d72e62f05440f42a891aea92/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/model.expected.json index 02d49fc4e2..de9b71a58a 100644 --- a/tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8086e31b5dffcbcc49d6b8d9ea848d81/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/model.expected.json index 8ca74f21df..3ea17eff21 100644 --- a/tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/808ee9e11be2db00173b3b5015b974c7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/model.expected.json b/tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/model.expected.json index 153967bdf1..a07799bc0e 100644 --- a/tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/80d1aafbf701603221876e8a8338fc92/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/model.expected.json b/tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/model.expected.json index 11a4f72ae5..aac8b2f628 100644 --- a/tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/80f5cf8b4f3d2bde79f24aff19381265/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/model.expected.json b/tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/model.expected.json index 8026c719bd..30c7099a9e 100644 --- a/tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/80facdc32f9ebbcd2cdde891eaee8074/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/model.expected.json b/tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/model.expected.json index a011717df6..5effe992b2 100644 --- a/tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/818ec086c054d27d412fd647960ada42/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/model.expected.json index 2c93537436..156bc0a5c1 100644 --- a/tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8197eca2918662b12cc62050e0a7a042/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "nnodes"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/model.expected.json deleted file mode 100644 index b8e68b698b..0000000000 --- a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/model.expected.json +++ /dev/null @@ -1,1595 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainPartition": - [[], - {"isRegular": true, - "partsNum": - {"SizeAttr_MinMaxSize": - [{"Op": {"MkOpNegate": {"Op": {"MkOpToInt": {"Constant": {"ConstantBool": false}}}}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - "partsSize": {"SizeAttr_None": []}}, - {"DomainPartition": - [[], - {"isRegular": true, - "partsNum": - {"SizeAttr_MaxSize": - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}}}, - "partsSize": - {"SizeAttr_Size": - {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}}}}, - {"DomainSet": - [[], {"SizeAttr_MinSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}]]}]}]}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitMSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 4]}]}}], - [{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 2]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}}], - [{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 0]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 0]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": [{"TypeInt": {"TagInt": []}}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 4]}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 3]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}}]]}}}]}}, - {"Op": - {"MkOpGeq": - [{"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}]}}]}}]}}, - {"Op": - {"MkOpFreq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}]}}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}]}}]}}]}}], - [{"AbstractLiteral": - {"AbsLitMSet": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 5]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 4]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": [{"TypeInt": {"TagInt": []}}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 5]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]]}}]}}, - {"Op": - {"MkOpSubsetEq": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeBool": []}, - {"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}]}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeBool": []}, - {"TypeFunction": - [{"TypeBool": []}, {"TypeBool": []}]}]}]}]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 5]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}], - [{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 4]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}], - [{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 0]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, 4]}]}}]]}}]}}}, - {"Op": - {"MkOpNeq": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 5]}}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 5]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 1]}}]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 4]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": [{"TypeInt": {"TagInt": []}}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Op": - {"MkOpToInt": - {"Constant": {"ConstantBool": true}}}}]]}}]}}], - [{"AbstractLiteral": - {"AbsLitMSet": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 5]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 3]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 0]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 3]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": [{"TypeInt": {"TagInt": []}}]}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 1]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 3]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 3]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 0]}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]]}}]}}, - {"Op": - {"MkOpIff": - [{"Op": - {"MkOpInverse": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantBool": false}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantBool": true}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantBool": true}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantBool": false}]]}}}]}}, - {"Op": - {"MkOpSupsetEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeInt": {"TagInt": []}}, - {"TypeBool": []}, {"TypeBool": []}]}]}]}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 4]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 5]}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, 0]}]}}]]}}}]}}, - {"Op": - {"MkOpIntersect": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": - [{"TypeRelation": [{"TypeInt": {"TagInt": []}}]}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": - [{"TypeRelation": [{"TypeInt": {"TagInt": []}}]}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]}]}}]}}]}}, - {"Op": - {"MkOpSubsetEq": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}]}]}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 0]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 8]}, - {"ConstantInt": - [{"TagInt": []}, 11]}]}]]}, - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}]}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 1]}]]}}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 0]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantInt": - [{"TagInt": []}, 4]}]}]]}, - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]]}}]]}}}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Op": - {"MkOpProduct": - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantInt": - [{"TagInt": []}, 6]}]}]]}, - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]]}}}}}, - {"Op": - {"MkOpNegate": - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 4]}}]}}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}], - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": - {"TypeRelation": - [{"TypeTuple": [{"TypeBool": []}]}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}]}]}}]}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Op": - {"MkOpToInt": - {"Op": - {"MkOpGt": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}}}}, - {"Op": - {"MkOpDiv": - [{"Op": {"MkOpToInt": {"Constant": {"ConstantBool": true}}}}, - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}]}}]}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 3]}]}]]}, - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 4]}]]}}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Op": - {"MkOpToInt": - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}}}, - {"Op": - {"MkOpImage": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 3]}}]}}]}}, - {"Op": - {"MkOpTwoBars": - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}}}]}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 8]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 7]}, - {"ConstantInt": - [{"TagInt": []}, 8]}]}, - {"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 6]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantInt": - [{"TagInt": []}, 3]}]}]]}, - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": - [{"TagInt": []}, 4]}]]}}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantBool": true}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]]}}}]]}}]}}, - {"Op": - {"MkOpIndexing": - [{"AbstractLiteral": - {"AbsLitTuple": - [{"Constant": - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantBool": false}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": true}, - {"ConstantBool": true}]}}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}]]}}]}}, - {"Op": - {"MkOpLexLeq": - [{"Comprehension": - [{"Reference": [{"Name": "l_1"}, null]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}]]}]}}]]}, - {"Comprehension": - [{"Reference": [{"Name": "l_2"}, null]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_2"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}]]}]}}, - {"Condition": - {"Op": - {"MkOpAnd": - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}}}}]]}]}}, - {"Op": - {"MkOpAllDiff": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitPartition": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypePartition": {"TypeBool": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}]]}}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypePartition": {"TypeBool": []}}}]}], - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}]]}}}]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypePartition": {"TypeBool": []}}}]}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}]]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypePartition": {"TypeBool": []}}}]}]]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}]]}}]}}}]]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeMSet": {"TypePartition": {"TypeBool": []}}}}]}]]}}}}, - {"Op": - {"MkOpLexLt": - [{"Comprehension": - [{"Reference": [{"Name": "l_3"}, null]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_3"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}]]}]}}, - {"Condition": {"Constant": {"ConstantBool": false}}}]]}, - {"Comprehension": - [{"Reference": [{"Name": "l_5"}, null]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_4"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_5"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}]}}, - {"Condition": - {"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": {"ConstantBool": false}}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_4"}, null]}, - {"Constant": {"ConstantBool": true}}]]}}, - {"Op": {"MkOpNot": {"Constant": {"ConstantBool": true}}}}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": {"ConstantBool": false}}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": false}}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Constant": {"ConstantBool": true}}]]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": {"ConstantBool": true}}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Constant": {"ConstantBool": false}}], - [{"Constant": {"ConstantBool": false}}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_4"}, null]}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": true}}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_5"}, null]}, - {"Constant": {"ConstantBool": false}}]]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}]]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeBool": []}, {"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}]}}}, - {"Condition": - {"Op": - {"MkOpAllDiff": - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeFunction": - [{"TypeBool": []}, {"TypeBool": []}]}]}]}}}}]]}]}}, - {"Op": - {"MkOpIndexing": - [{"Comprehension": - [{"Reference": [{"Name": "l_7"}, null]}, - [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_6"}}, {"DomainBool": []}]}}, - {"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_7"}}, {"DomainBool": []}]}}]]}, - {"Op": - {"MkOpFreq": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeMSet": {"TypeInt": {"TagInt": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]}]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitMSet": - [{"Op": - {"MkOpFactorial": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}}, - {"Op": {"MkOpToInt": {"Constant": {"ConstantBool": true}}}}, - {"Op": - {"MkOpFactorial": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 0]}}}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 0]}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 4]}}]}}]]}}], - [{"Op": - {"MkOpToMSet": - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpFactorial": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 1]}}}}, - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 1]}}}}], - [{"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}}, - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 4]}}]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 3]}}}}]]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 4]}]}}}]}}, - {"Op": - {"MkOpMinus": - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]}}], - [{"Op": - {"MkOpToMSet": - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}]}}}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 3]}}]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}], - [{"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 5]}}]}}], - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 0]}}}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 0]}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Op": {"MkOpToInt": {"Constant": {"ConstantBool": true}}}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 5]}}]}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 4]}}]}}], - [{"Op": {"MkOpToInt": {"Constant": {"ConstantBool": false}}}}, - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 1]}}]}}, - {"Op": {"MkOpToInt": {"Constant": {"ConstantBool": false}}}}], - [{"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 4]}}]}}, - {"Op": {"MkOpToInt": {"Constant": {"ConstantBool": true}}}}, - {"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}}, - {"Op": {"MkOpToInt": {"Constant": {"ConstantBool": false}}}}], - [{"Op": - {"MkOpMod": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 3]}}]}}, - {"Op": - {"MkOpFactorial": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 3]}}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}}], - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 0]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 0]}}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 0]}}]}}]]}}]]}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/typecheck.expected b/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/typecheck.expected deleted file mode 100644 index 6d52c9ac43..0000000000 --- a/tests/parse_print/autogen-bilals-fixed/820969cf7025c19eb6a8b65584b5c7ec/typecheck.expected +++ /dev/null @@ -1,20 +0,0 @@ -Error: - In a 'such that' statement: - [l_7 | l_6 : bool, l_7 : bool] - [freq(mset((relation() : `relation of (mset of int * partition from int)`)), - relation((mset(factorial(1), toInt(true), factorial(0)), partition({0 / 0}, {2 - 4})), - (toMSet({2}), partition({factorial(1), 5 % 2, -1}, {1 % 2, 4 % 4, -3})), - (mset(4, 0, 4) - mset(4), - (partition() : `partition from int`) - (partition() : `partition from int`)), - (toMSet({3}), partition({0 ** 3, 0}, {0 / 5}, {-0, 5 ** 0})), - (mset(toInt(true)), - partition({0 ** 5, 4 ** 4}, {toInt(false), 2 % 1, toInt(false)}, - {1 / 4, toInt(true), 3 % 2, toInt(false)}, {4 % 3, factorial(3), 3 - 2}, - {-0, -0, 3 - 0}))))] - Error: - When type checking: (partition() : `partition from int`) - (partition() : `partition from int`) - Arguments have unsupported types. - lhs : (partition() : `partition from int`) - type of lhs: partition from int - rhs : (partition() : `partition from int`) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/model.expected.json index 85dfb5fed5..901ef3359a 100644 --- a/tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/820f5feaa0b5969b6ee656fc5d24fe1d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/model.expected.json b/tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/model.expected.json index bebd2c322e..326690f290 100644 --- a/tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/82204c450b52c775ee8976d551212a46/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/model.expected.json index 3d60902bac..b67746d024 100644 --- a/tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/827f1d4ebd57ab718caa032cc8b297fc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/model.expected.json b/tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/model.expected.json index b34e792279..82e7d32fa8 100644 --- a/tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/82bfeece5b79e08184cc8749d9df8e38/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/model.expected.json b/tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/model.expected.json index efa079ac4f..d8f01250cd 100644 --- a/tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/82fe9e8a0156acab6ba50f4cc3b3af01/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/model.expected.json index 1f1a023a74..23c4d83c28 100644 --- a/tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8367e8de71de185d6acf3e859e23a37b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/model.expected.json b/tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/model.expected.json index 1f8e32c2e9..67950f84a3 100644 --- a/tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/83aa247156640416d52e2c458a03de71/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/model.expected.json index f30c667c03..fe6bdcca01 100644 --- a/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/83e79dafff20cf8bb9bbf4e0e4da6ed2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/model.expected.json b/tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/model.expected.json index a46ce033b0..2c9286a755 100644 --- a/tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/841ed02320da61b19ba7f29d3547a734/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/model.expected.json index 9bd19685f1..ea89589a19 100644 --- a/tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/843a2e9d983a6dacd46917b47c2bb64c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/model.expected.json index b8aae052ff..21663b836c 100644 --- a/tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8446c84e9772883e9b089836df280ea0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/model.expected.json index e55b115ccb..0ae92be989 100644 --- a/tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/846c6659d7512b713d169b2b99b66b1c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/model.expected.json b/tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/model.expected.json index eab5c4d4a2..3913125209 100644 --- a/tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/848ce262a35f2e94cdbab80b8f227640/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/model.expected.json index e35c4e0d19..edfbf472e3 100644 --- a/tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/84c8be86e209af5b5ab3e1db3bbc0ca9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/model.expected.json index b087a355bd..89e9d7454e 100644 --- a/tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/84cf4a0dfc2ad853d530a5a9c9d9cce3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/model.expected.json index dbe7ab5808..f4badc3d1b 100644 --- a/tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/84d7057dd52ef23efabb8abd969d826a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/model.expected.json b/tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/model.expected.json index a3edcc4329..ba692664ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/84e2ac06d5257472f3b6d1cc3abbe977/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/model.expected.json index 13e09fab8f..94aea353a8 100644 --- a/tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/84f87112eab6b17142e5b14caae5774c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/model.expected.json b/tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/model.expected.json index 8010af7c3e..96ac4ac0f1 100644 --- a/tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/851192d3d7c1ec86c1869bb52c0f6640/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/model.expected.json index 1de5e2e938..65c0898195 100644 --- a/tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/855dae2be3de835a4f981a6d9ee2cd1a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/model.expected.json index 0ca91a9f7d..b9be7a8e97 100644 --- a/tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/85aa2391985aebf2d902133b0eac8aa1/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var2"}, {"Constant": {"ConstantBool": false}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/model.expected.json index 3f1615f2ee..3f505a735e 100644 --- a/tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/85b8db7be2f6abe894214a12a3d2b71d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/model.expected.json index 34007acab7..6816d43ffc 100644 --- a/tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/862c0589559fb341ccb5ad1d924f1b9c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/model.expected.json index 24e76db55b..33e81ac444 100644 --- a/tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/86302603127c6befda9307b173096b8d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/model.expected.json index a379351d85..06e076f18d 100644 --- a/tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8660afc281dcc05d0e23c96d6f6bed05/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/model.expected.json b/tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/model.expected.json index 76bd4db66b..969a292d13 100644 --- a/tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/866a1bd5f8b062c2d25978ee5e72de29/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/model.expected.json index c120d9c2c1..4d64f91e44 100644 --- a/tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8694ff3ac1162a541f4c7c314ae002e7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/model.expected.json index cd8425155c..419b9ccbae 100644 --- a/tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/86dad1e03f12a85fe28f594548912cc9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/model.expected.json index a7e89c8287..eb76f4307d 100644 --- a/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/877d629f542f55f0f97157cd8c1654fe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/model.expected.json b/tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/model.expected.json index ae90595294..37b95b85b3 100644 --- a/tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/878b93190b5a24acce17d2a97e8cc7af/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/model.expected.json index 1885f70523..3ea1d4b1ae 100644 --- a/tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/87d64817d9031ce1ce57748338fd3be3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/model.expected.json index fdae40d8b9..acc7206fed 100644 --- a/tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/882edd879ad2f01823f68560740819fe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var5"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/model.expected.json b/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/model.expected.json index 97405cbd5a..9fd73a5d0a 100644 --- a/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/88443db0c7030dc3235b70084b331e12/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/model.expected.json index 8ad7587a76..6ca8a803fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/88d16dd01ce393e846b3b9c187ec3e9d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/model.expected.json index 8be48147e3..fc7bdd76e7 100644 --- a/tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/88fb8c6b9616da911eaa4532629f05d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/model.expected.json index f07aa95dd7..1874f1744c 100644 --- a/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/890bfc7260b9693bee3681fdd772c9d9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/model.expected.json b/tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/model.expected.json index ea55edd2f6..59632e967c 100644 --- a/tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/892ec3692f0f67c7ad6c4526f89adc16/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/model.expected.json index fb865ba0b2..83c7920455 100644 --- a/tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8937cb3d6ee40ef8da27a428c4a612e0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/model.expected.json index 8de8e83940..9d51209c83 100644 --- a/tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8952206f0aaf01adc569795bd19ce4b0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/model.expected.json b/tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/model.expected.json index 8aca102bf0..19125fa6fc 100644 --- a/tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/895563db093bc77bacce9d4985c342da/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/model.expected.json b/tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/model.expected.json index 2a7dc1a001..a0114be509 100644 --- a/tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/89ca579e7ee4e23e24eeca23d3114140/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/model.expected.json index 4072bfb3c5..f5ca186b85 100644 --- a/tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/89d2147bf114d8dd9a90e093dc5af5c2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/model.expected.json b/tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/model.expected.json index 53b9ba1f2c..0304555851 100644 --- a/tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/89f7d427253b927c806aa29971b41345/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/model.expected.json index ef1986d595..9b76ee5ef1 100644 --- a/tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8a008fe73eaeed9aac0a4eb3373ac800/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/model.expected.json index 0afc8d7728..5ec44ae76a 100644 --- a/tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8a27347b2dd2e2b9609a3c469d6ad778/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/model.expected.json index 36ef795367..2360fe5f68 100644 --- a/tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8a3540d56a402b0fc31a413179deca54/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/model.expected.json index ba1854898c..aa19eb7fd6 100644 --- a/tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8a55b0279e21655cce9abfb6113ff43b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/model.expected.json index b401934026..6ca232985f 100644 --- a/tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8a5e7fc807d28b304de719433d2cdbe5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/model.expected.json index 46e6242b35..7b73bddd34 100644 --- a/tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8a800a7287fc2d812a65ade22d37cf24/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/model.expected.json index 02c0f17949..935f6b1eef 100644 --- a/tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8aa2647e6f93da5463593460b8f3b511/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/model.expected.json index 0d9118f707..0aff90f2e5 100644 --- a/tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8aa81485456e83c2f3c31bf0124d95e4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/model.expected.json index 4fb2e1a5c9..588621a6ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8abb65ebdd36ca8f84ec49174151b12d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/model.expected.json index b534ae0a06..00e66c444b 100644 --- a/tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8b18b9af68196441a501019b9212cb97/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/model.expected.json index 78ce968f6e..ebdbe8558e 100644 --- a/tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8b42943e4abff9ae0fb2d1449fb076e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/model.expected.json index b53a203c23..750344b2b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8b50e6822575f3de1074c27e466f1189/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/model.expected.json index 6f9bb1434a..f5a0f5ae71 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/model.expected.json index d20aa2ea65..18fa3fb85d 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8c29a5ce12d82bfce1dbb019db60c9ca/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/model.expected.json index 78967b5934..2db88538f0 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8c6249e4d3029b23653b7f2c74259b87/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/model.expected.json index e2cdc407d4..bcce490de2 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8c73957439e2f9438a9d273a2caaed0f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/model.expected.json index 90a82bf919..6e68e20f1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8cf86ce733dc743db476cc53aad4d6dc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/model.expected.json index 633cf00683..a96acb94a0 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8d1b8189b396c995301b7af280621470/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/model.expected.json index 3c86bf87a8..bc4088613b 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8d24bbf635ac91ecf06f51548f733735/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/model.expected.json index ce2d20c5d3..caee02d9e7 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8d47dfa1129d0d9a0970aa6e38e36998/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/model.expected.json index b184194a80..447e676a6a 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8d7e54f03c2611e7fa2bfa11714fef12/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/model.expected.json index 9bda0a1e65..1c6a47998e 100644 --- a/tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8dc861607d33f49777a45579a6462e0c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/model.expected.json index 54028562e9..0ff1ca0e0a 100644 --- a/tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8dd925d930329defff30de69da88eda8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/model.expected.json index 370128f6ac..a5fb5c3d13 100644 --- a/tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8e0c1d7db5c270376e3d631b35db4339/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/model.expected.json index 5ca1cb5b29..10deb060bb 100644 --- a/tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8e57797389036cafd59682f3b212615f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/model.expected.json index 9d91b10453..069568648c 100644 --- a/tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8e5d66a2f3f055cde6e272b30fdcf933/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/model.expected.json index 2f8b1c4fb8..9c530fad3d 100644 --- a/tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8e60d4f6e3658efdc211aa5fc057619e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/model.expected.json index 9a0e740832..5a4d47f51d 100644 --- a/tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8e7aea1c1a683206e6a897c6ad5d8bd3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/model.expected.json index 97e42c4ba9..42d7fcb7e6 100644 --- a/tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8e93ce71508f064beff9a26d88d989ce/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/model.expected.json index b7b302cddd..87539fe9b2 100644 --- a/tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8ec00ef169857742e7874fe54717f1cf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/model.expected.json index 257a5fd412..b320e163c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8ed5ce0a29d96b4df6f636dbdad1e2fd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/model.expected.json index 203429ef6d..9f2d329633 100644 --- a/tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8ed64e4aee1ec8f5d11bdce8b0794770/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/model.expected.json index 924320c93f..1ec4a6f1a7 100644 --- a/tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8f501dda2021fc3c7c4e001157f1e6e6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/model.expected.json index 4db398a118..1aa6096aba 100644 --- a/tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8f6e9e6d64f63ef25db9d4aa4e113bb0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/model.expected.json index 25f682c0aa..9bc476a4d6 100644 --- a/tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8f796d2c2807c6ea530b07b82c77bd83/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/model.expected.json b/tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/model.expected.json index ed6c859c38..d35c6400bc 100644 --- a/tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/8fa1dbe2b5061280fa287b09746834ee/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/model.expected.json index 1d76309135..656c57e93e 100644 --- a/tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90299a9f0a7a69f3c96b6cbd3af60a79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/model.expected.json index 2a7c0584b2..a8f7728352 100644 --- a/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90320206b02563fde63fe692179aedbe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/model.expected.json index 93fe72ac47..b3e5780050 100644 --- a/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90955ca420084f220878f52c9a1671bc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/model.expected.json index 3f647c88e8..24686e089f 100644 --- a/tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90a9448a74952ba0cece6a7b1b7947fa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/model.expected.json index 7e572b7d1d..29e82331c7 100644 --- a/tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90d639a3b2f496a9abac113456848d5a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/model.expected.json index 22a61f946b..d094cf9f38 100644 --- a/tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90ea9088b0aa25fc33a1a86535fac68f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/model.expected.json index 7268c6a7f1..72c5becefb 100644 --- a/tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/90f2c8e9f3458e147cb1f50d16c3e4cb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/model.expected.json index 559d0f8cc4..f508533411 100644 --- a/tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/91c188d85dd94a4944c93eedd6dd286e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/model.expected.json b/tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/model.expected.json index 6485c5266c..a9f60698a7 100644 --- a/tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/92153839be64245ef4416df291ac3aba/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/model.expected.json b/tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/model.expected.json index 40debec34b..bf4af314c0 100644 --- a/tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/92598f5f307ca7499686cc4dbed50824/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/model.expected.json index 9aafb46ea2..c5d1f6ccda 100644 --- a/tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/92612015e4c8034476c0db682d3319c4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "capacity"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 7]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/model.expected.json b/tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/model.expected.json index f69ac93ce2..6099ac181c 100644 --- a/tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/92bafdce8551adecaa5412f757cbd639/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/model.expected.json index 3784d67b0e..c7820545fc 100644 --- a/tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/92deb88ede01f166a1c4af2f4120555d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/model.expected.json index 28840c8130..a7094a2471 100644 --- a/tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/92e662998492b98daa5a6a0332603ea2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/model.expected.json index 58fe1d3ceb..00b6b23da6 100644 --- a/tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/931175e0768cf1f6a21f204355b8dca5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/model.expected.json index 5f569a308e..0e081c4aac 100644 --- a/tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/93252b0ebfbeb644ae73b8a784adc4e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/model.expected.json b/tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/model.expected.json index 34984d124c..05bff5672c 100644 --- a/tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/93284da4a4bcb0b65f9af4e148349956/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/model.expected.json index c19ac4c6e0..b9c17e1624 100644 --- a/tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9333c5df4a82f75bde6f2e3ec63382e3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/model.expected.json index 3d1d55c488..03328d31fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9336968c84835480f78834ee1d9335b5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/model.expected.json index 330e3cbb2b..f24ed095b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/933c4b5f18128e59bd2fc5d3bf73960b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/model.expected.json index faf418fcd4..7828809cd4 100644 --- a/tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9378c4a717a68960aa405ca27d538fc9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/model.expected.json index 217465fd26..10c7632ccf 100644 --- a/tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9391796d63e7e046757dd85404c97910/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/model.expected.json index b654c715be..d6553bb8c2 100644 --- a/tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/93bf76b55dc3b1fc1580ca8a747b70ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/model.expected.json index 876e31d05f..e1ec893b01 100644 --- a/tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/93d0856761e66a52053d96ec3afd88a4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/model.expected.json b/tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/model.expected.json index e6b9b7c2f4..5002e540cb 100644 --- a/tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/93e2a922d768e544f792248d1ead5798/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/model.expected.json b/tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/model.expected.json index a69f9b672f..6caf48190d 100644 --- a/tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/93f65b5f85c9951f025b767bd3272208/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/model.expected.json index ee1dd18c7a..842dcbe235 100644 --- a/tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9463f4f2bd81e9b00e18ecab501331f0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/model.expected.json index aded25db03..5ff04aea3c 100644 --- a/tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/947baf2a6b9f590eb910d978843c670b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/model.expected.json index e08be2a27c..9a1245e625 100644 --- a/tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/94d0161fbef6b271aae867644ec230fa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/model.expected.json b/tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/model.expected.json index d689c2aca8..51b43c1f8d 100644 --- a/tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/94df0cbb4b067b4913084c2c0ba39c25/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/model.expected.json b/tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/model.expected.json index 41c659e197..3054f1e063 100644 --- a/tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/950926788ae00620bf3eefe8cfa83b48/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/model.expected.json index 5b095585b0..8f0fa1b196 100644 --- a/tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/951d3c18901f9994c032518bb08cd59c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/model.expected.json index 394937e6e5..f9dbe19bd1 100644 --- a/tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/952e8615c6da932c1bd0255f5ee021c2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/model.expected.json index 7bbe31e773..be0c595391 100644 --- a/tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9541bd67eea6db5dafd1082634c24ba1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/model.expected.json index 194d61faf3..43024d3395 100644 --- a/tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/95673ede51a7abf39744fbcc1b3524b5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/model.expected.json index 4179fe55c1..750c34bbbd 100644 --- a/tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9571ad4d3d6860b62276decba16314f0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/model.expected.json index 1f5af45df9..656d6e5ff0 100644 --- a/tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/95e96e71787b541a0f9137e42797a5b2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/model.expected.json index f15ebffaaf..ca109d87cc 100644 --- a/tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9660baf70b06d52075a8c2c29fbccbdb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/model.expected.json b/tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/model.expected.json index bce82e50ef..14882c3087 100644 --- a/tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/96a453cc18a685f8389fec2d8a6eb138/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/model.expected.json index 96508eaa7a..af01b2e0f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/96ad37a360894f0ccc0818f5e2dbb60f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/model.expected.json b/tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/model.expected.json index acb0a4368a..1f04a30d8f 100644 --- a/tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/96bccf0f520f5724107edb2af79bd637/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/model.expected.json index 8a9be86fc5..56c54b7c76 100644 --- a/tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/96e89498179d3a93c6dd71000a72ce7e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/model.expected.json index 53fdb18f70..90c722551f 100644 --- a/tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/973d5a1ff0a13310b0134abb50f0c2cc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/model.expected.json index 3500f38917..cdb14e8bcf 100644 --- a/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/model.expected.json b/tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/model.expected.json index fd61832b96..10397619fc 100644 --- a/tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/979854a979c1d69c3dc6653f5b2db319/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/model.expected.json index 6536f3b4f0..f4310021ba 100644 --- a/tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/97d0365bab1f9d009ff4f0f62ab42f0d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/model.expected.json index e04643d706..4fd67d4e10 100644 --- a/tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9816fff64d3f46d274f2cc35141b8ddc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/model.expected.json index 218e6c5d64..cc1e1ddde2 100644 --- a/tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/981f70500ed5d05980523114811892f7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/model.expected.json index cf105ae79c..bf7938de4b 100644 --- a/tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/982574e0185269f9c521d81bf777839c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/model.expected.json b/tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/model.expected.json index 4820563cc2..9343a11386 100644 --- a/tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/982885c091c3f3c10bce2fa43eb09375/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/model.expected.json b/tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/model.expected.json index a69be400fe..b80126085c 100644 --- a/tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/984898fa40ed0ba9c50bb8cb67c7e661/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/model.expected.json index 2f092471e8..7f2b029233 100644 --- a/tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9877d3e1f5e58a3bc09e37824cc5f794/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/model.expected.json index 7f6de23e2a..971c0fa1fb 100644 --- a/tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/987a6b11bf61527428e95276264dba7c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/model.expected.json index 2122ffee63..e90c32f807 100644 --- a/tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/98f60d7ecdbc83c732111b4c2c19e2dc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/model.expected.json b/tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/model.expected.json index 9e457bd796..e098fd353d 100644 --- a/tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/98faadf71151c98f3ba7890f3cfc5561/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/model.expected.json b/tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/model.expected.json index 03f85f0893..1665eec1b6 100644 --- a/tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/99442f27f0d2939b7caf49f63779f513/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/model.expected.json index c6cbef2a57..6a8f6248c7 100644 --- a/tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/996e0c697e30345a03bba1030123498b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/model.expected.json index 0a01918196..2b1bf76242 100644 --- a/tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/99a8aa88b94cf878a9e7a415212c082b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/model.expected.json index a47331432c..7644290c4c 100644 --- a/tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/99b35c7862469001642e139275eb67cb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/model.expected.json index ab108603c5..accd9fa350 100644 --- a/tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/99f6c9d65ed814c4e6f72bf949826fa2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/model.expected.json index 405b2079c3..d342551067 100644 --- a/tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9a0d61ffdcb4d471c71fcb70f6ff1232/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/model.expected.json index a3a56fda47..487e188c4b 100644 --- a/tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9a180dd7ae58ead0dd9e267df03321f7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/model.expected.json index 2e7cdbf424..9051542bd0 100644 --- a/tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9a33ed76a93af659745eb6902c7df5c0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/model.expected.json index 3b7abc3a0b..64c952de1d 100644 --- a/tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9a5f6f309a87af93404d72cb159b5840/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/model.expected.json index 319f1a4b49..d2c6a76d42 100644 --- a/tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9a784d81d10dc8cccf9dbabf48a8e990/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/model.expected.json index dcf92c6a6d..9ac16a2ab1 100644 --- a/tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9aa81bc2d667ea8cadebe72fdd563c6d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/model.expected.json index feddec6108..e05cb698f4 100644 --- a/tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9abdea7380788d3969dc2640d22d213c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/model.expected.json index 441985e8a2..d583a5458f 100644 --- a/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9ac3f75c1e13c0710509398532042647/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/model.expected.json index b6205674e1..5841fe6327 100644 --- a/tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9b049f77e2989f8c2025310e51bad76d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/model.expected.json index 91c9de90e6..e4b264339f 100644 --- a/tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9b2afc7268f96473c48caf6d3e206c31/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/model.expected.json index 1b1a2e8e6e..9367ad4df0 100644 --- a/tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9b469468a3b10432c0ce1da021333952/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/model.expected.json index 9510ad4be3..1b6ad60f74 100644 --- a/tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9b6f03d616fd958ec69f8362abfb00ac/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/model.expected.json index 71cd90391d..ce60c1a86e 100644 --- a/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9bdd1358d3bedcf3d0604f276779b66d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/model.expected.json index edfc1f7d51..77f563e04e 100644 --- a/tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9bfb780b3c2fba75e53ab3203cef9279/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/model.expected.json index 6fff817599..f651b195ba 100644 --- a/tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9c03010bd51a771189cd5536a18e2f04/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/model.expected.json index 7b42443d4b..2db34ff027 100644 --- a/tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9c55294c0d3d31ba76c9c8253bef3ef8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "let1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/model.expected.json index 87e656cad0..a55c9c7fda 100644 --- a/tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9c7ac59a352b59446be92d9724945913/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/model.expected.json index bcd38992dc..de232a5527 100644 --- a/tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9cfb8ee2ea896efcddeebeccd5bd3711/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/model.expected.json index 4b0cd94cf4..434fac1489 100644 --- a/tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9cfc0004cabea5af2bcd505f97913bb5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/model.expected.json index d9fdb5a631..512e0630a9 100644 --- a/tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9d2f4e849e1c8f3e7bbf4f44c6947e20/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/model.expected.json index 5a1784926d..5d63457e8e 100644 --- a/tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9d370387c39185b72ed108acdcd412a1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/model.expected.json index 45be487765..1839282c5d 100644 --- a/tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9d3ffe596365f3f356cdf3eb7e785b83/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/model.expected.json index ab01c9029b..b06913dbb8 100644 --- a/tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9d9440d946dd0a2494f8ad0ef44d90e4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/model.expected.json index 737df73824..83e16da0f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9db7329469e0dba0d9dff49a5d1e2300/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/model.expected.json index eebd074ac3..374b5f15c0 100644 --- a/tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9dd9794292570f18cb58bd2b90e52231/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/model.expected.json index 09ef5d5a3e..77e2f6521c 100644 --- a/tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9df60a32943a5971a4f694bb26aa11f1/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/model.expected.json index a62e872b94..16acc1a802 100644 --- a/tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9e34c2ed21636c2c3c7277b6275cbc4f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/model.expected.json index c6687bf167..41e6008cc9 100644 --- a/tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9e3ca1b1b59b0e6c2982f941233bf696/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/model.expected.json index 527d625aac..a76f21844c 100644 --- a/tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9e4b1361b32c613b5fa1e221ec3357f1/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantBool": true}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/model.expected.json index cbe3b1e5c7..95d609a5ec 100644 --- a/tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9e52878539b138a1df6958f490b94b7c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/model.expected.json index b5f3baccf9..71955292c5 100644 --- a/tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9e73f0e3f8f1ac3a815081e0dfa1ccfb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/model.expected.json index 457466667a..4933958631 100644 --- a/tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9e7c9dedada85ad3e072da5d7534bade/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/model.expected.json index fc73b62cc9..4e9bb06bd4 100644 --- a/tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9ea54b487a734e53316eba53dd16f268/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/model.expected.json index 99c85dde2f..684e326290 100644 --- a/tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9ebbff2eda9f9a53a0eccf5b2d2076d4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/model.expected.json index ccb07b545e..7970eb6869 100644 --- a/tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9f0da0c4289dcd010e92c8ab6d50b07a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/model.expected.json index 62341fb09b..4fd43334a9 100644 --- a/tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9f9192f87a87bd8c7eab6605ea8d2ebb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/model.expected.json index 19b809b29c..8d32952b4b 100644 --- a/tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/9fb3812b9de68be7a7c5ff4a238f69a8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/model.expected.json index df358f0c50..10f7ef9bc4 100644 --- a/tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a006f0c1cb66bd72725cad95f144015b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/model.expected.json index 1b59bc9fdd..13d2b9a81d 100644 --- a/tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a01046ebd775365cd4802f377ea06422/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/model.expected.json index 0fa80a5cad..9d7c4b3067 100644 --- a/tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a016b613a468fa41c3e0957ca9205227/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/model.expected.json index 7a2d17fb5d..9e17659a2c 100644 --- a/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a03ddc28b5f272001ba23db986726a9f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/model.expected.json index 0b6d583112..85206efbfe 100644 --- a/tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a077e78a13138544db622fefb4945e9a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/model.expected.json index 287dae75e4..d6d8848e8e 100644 --- a/tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a09afb2228f7343e721bc5c01bdd1fa3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/model.expected.json index 952b181178..eaa1d808e3 100644 --- a/tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a09b27e60c42a3e4ab0c27e3826dfc25/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/model.expected.json index 67a8b78d4a..36b2b5b7f6 100644 --- a/tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a0ad07b97e1685ca2e2c111457133e90/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "unused"}, {"Constant": {"ConstantBool": false}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/model.expected.json index cbad5e8ca9..137e827368 100644 --- a/tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a0c6405918b286ca82e020a2b7d7cf00/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/model.expected.json index 9253cec860..14a3d2677e 100644 --- a/tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a0d073a0e024ef76a14be2b252c46325/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/model.expected.json index f7efad5a53..2d4d5fe598 100644 --- a/tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a0e4b0ea439a18784bdc4b76134e741d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/model.expected.json index adf2854e86..e4627ba980 100644 --- a/tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a10653f603b57480444e59a7f67a1eea/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/model.expected.json index 8413956f66..cc3e19ffab 100644 --- a/tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a113fdda7fda4e683db04122e85f1eb9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/model.expected.json index 03541ca173..b1d9f86d00 100644 --- a/tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a132548e1417c097233240500dd08b47/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/model.expected.json index 3392a06beb..05835d1172 100644 --- a/tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a1336f3b52422c5f8f9979ad8fc8a7db/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/model.expected.json index f3a747593c..e05c4490c3 100644 --- a/tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a13dddfa9c8fe9b026f0f80ebd5885ab/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/model.expected.json index 5003bfcb86..e29b6cb873 100644 --- a/tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a14b88c5adc5536184d37af5a6f188ca/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/model.expected.json index d7ed3fa7f5..2655e4c191 100644 --- a/tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a213c8d1ec823b6cb728b74b40ba7301/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/model.expected.json index 1b6a534674..5cebb2f460 100644 --- a/tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a24146deb495305d4ee888ff7800707f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/model.expected.json index 42bb665a1d..0f58dc6372 100644 --- a/tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a25d226dacf7592fa4ccf76608329331/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/model.expected.json index d01323ae88..6ef9645694 100644 --- a/tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a26aea264556a8f0fdfe45a35db6fa4e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/model.expected.json index ff3bc55711..9795616ce5 100644 --- a/tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a278490eff4c7aaa3efb73ab7cb5a355/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/model.expected.json index 0c32477d2d..01d2f1d74a 100644 --- a/tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a29843ebaa6b51bea21d033d0410646e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/model.expected.json index 8c904bf935..0249dde820 100644 --- a/tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a2b7f35d86498ed90d54066bf3f451bc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/model.expected.json index ccd1143880..8757b33cac 100644 --- a/tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a2d859e9768309b9821313f15f257203/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/model.expected.json index ab96c712c3..6ebb9722fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a2d869e1257b1c53d062dbc8e2d442fd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/model.expected.json index 40fe213c2a..e183abc32e 100644 --- a/tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a2f78265400c2125ffba87791599091b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/model.expected.json index 5b9129f92d..8d46062b4e 100644 --- a/tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a3388cc4ac0391c01bd28ce12f011bfd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/model.expected.json index 833a51d396..9bc34f2adf 100644 --- a/tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a34a221ea024f629caf135e945eee35b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/model.expected.json index 6221464628..3014a28020 100644 --- a/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a34c8275c1d9524a08d2ec1d329ed35a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/model.expected.json index 63d28d6bfe..1a6eaf04dc 100644 --- a/tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a363b2628f65efb0290c8d10d2a18ac4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/model.expected.json index 93098212be..24cc1e8a16 100644 --- a/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a370966830e4e6e3d5c258cbed1908e2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/model.expected.json index 3ea7902749..f016087eea 100644 --- a/tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a39552e9ed1bd8481c8c6a692b9a507c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/model.expected.json index 10209181e7..d9b4d6ee72 100644 --- a/tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a3a075358b168ec8d79e31f8ed43961d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/model.expected.json index b977e410cb..fddb227c36 100644 --- a/tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a3a54bbf04a27937aac3bddfe7019f21/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/model.expected.json index c68e7da49f..b640b25656 100644 --- a/tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a3c32ac7b68b7056569b3146a0d5c486/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/model.expected.json index f2b605e97e..8c79ca2a09 100644 --- a/tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a3e9b4abdd60d8b8426ee3a7e2e72475/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/model.expected.json index 7710331df3..c06429b8e9 100644 --- a/tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a40bc6a0417f684847d2d44f886c6d61/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/model.expected.json index 4309017527..9da8fdc0c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a46f0f8380128f04446402757318c1d6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/model.expected.json index 3fdaa9bbf7..4e4b6f9a18 100644 --- a/tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a46f951200e57005f4e9c8830866edcc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/model.expected.json index e5df855868..710b264452 100644 --- a/tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a4dfe434c651645a3287054935685825/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/model.expected.json index 3e41fd2fe9..266e415380 100644 --- a/tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a4fa08d673ebb8bbb06a5bc9c1f39441/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/model.expected.json index 553896e27d..3873727341 100644 --- a/tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a4fa1c3afc021a129ec5dd233c4c10b5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/model.expected.json index 30c12e676a..cf7701351b 100644 --- a/tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a53a6a9dd9196d0a14ae3b4b0e39913b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/model.expected.json index 38095f3217..ce2662ebec 100644 --- a/tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a569624863aa273c01c6312a624723f1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/model.expected.json index de9d7edd81..dd29cd9728 100644 --- a/tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a59a038c1f2344f80d84a30997a193f5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/model.expected.json index e51e0a8e64..4fada7406e 100644 --- a/tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a5a8dc4db8f4987615f65dcca82955c7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/model.expected.json index 9a3b834856..5585fa748d 100644 --- a/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a5da41200401440fbed34793aaf4a1f9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/model.expected.json index 09f6019ff0..3fb2384a00 100644 --- a/tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a5f89c8745074bbbd432690c47cee7e7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/model.expected.json index 48fe596a0c..f071b97c79 100644 --- a/tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a5f97387c646309f28161687f8ce5e52/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/model.expected.json index d23733000b..43e3cf9d09 100644 --- a/tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a60598f23c2356a85d0b426465bbaa62/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/model.expected.json index 036f1a879d..0339392ecd 100644 --- a/tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a606a391852e05ddc52386ed6a6287cb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/model.expected.json index 87daa92fd7..e00e085f64 100644 --- a/tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a67c3735f80066994faf7b6478cef1df/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/model.expected.json index a96ec3dead..7bfe3d807b 100644 --- a/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a6e121cacb3fcfc3686d158963d59199/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/model.expected.json index 1e2ec3ea8c..ab59384aba 100644 --- a/tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a722dbeaf9763e8403948d210db0f009/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/model.expected.json index 285f81d709..5b5397413c 100644 --- a/tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a73db0d516a2bfe1cf37eb14273c17a5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/model.expected.json index df5fef057f..9553c08ca3 100644 --- a/tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a747a06b8ce4f18eaabdc79af95c005f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/model.expected.json index 69ab4b4df8..4018efddf0 100644 --- a/tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a79dda05fbffc4c52468a642a8a59634/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/model.expected.json index 9e4c434185..2991e27b13 100644 --- a/tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a81bfd36585a1f3dfd83ad20da897574/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/model.expected.json index 81d77e3d2b..928976113f 100644 --- a/tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a82bac554f50cdeaf2990a7c87c196fb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/model.expected.json index 97ee58d3b5..f00691d244 100644 --- a/tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a8486d142ceb5bd28d6916b002b65e9b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/model.expected.json index a064629a93..068d1f3369 100644 --- a/tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a86a19acd180fa620be92f72da196137/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/model.expected.json index 8fdb5c60ab..bb691fa0ea 100644 --- a/tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a8c33551d82efabd5dc8fbd1da9bdb76/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/model.expected.json index f6fb148f8d..053305f304 100644 --- a/tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a911a0725625ec718adf4897ee006d78/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/model.expected.json index 953731f895..904ad9e564 100644 --- a/tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a92907ef0f1df1943e88b8ff2c0a4106/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/model.expected.json index 8afaef3621..efff1d4341 100644 --- a/tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a9833bb1a05cbe195b2b712eb3adc0f3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/model.expected.json index b5a1d1e803..2a891ca126 100644 --- a/tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a9ab77b84c21743c54e1a69abe25a1ae/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/model.expected.json index 6fdb310751..7a0c4b1d75 100644 --- a/tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a9bbb84eaa63096107c5b5288303bbd3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/model.expected.json b/tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/model.expected.json index bc1001167e..b20eca9a11 100644 --- a/tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/a9f733d77ae148fd1c421bcca2786218/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/model.expected.json index 1ae6bee312..8b690b0b43 100644 --- a/tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aa4cf640ebbecdf31f14815829763e60/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/model.expected.json index f44688d6a4..ba2adb4792 100644 --- a/tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aa79c19e3b821dc7ba06b81ea70d4da1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/model.expected.json index 0c7a0d27ed..131ac7c5b4 100644 --- a/tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aa87f4ba05d4f8ceb28dda2ecced003a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/model.expected.json index 34c784ac31..81f9c4196e 100644 --- a/tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aaf7524e7d2478b2902702a5c750d45f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/model.expected.json index a9b04ed948..567cfb982a 100644 --- a/tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ab03a32d2ffe82b9a97e9bcb41d8db5a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/model.expected.json index b38a169576..8454809850 100644 --- a/tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ab3498b5367b4b4179da2809e7fcc628/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/model.expected.json index 87714f407d..329185258d 100644 --- a/tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ab53a48ee2d60f33403a71653c51811c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/model.expected.json index 4d076a1187..e88e8e2a78 100644 --- a/tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ab828d5a7f3d31d42bf66810cab3da9b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/model.expected.json index e12be34e9f..8518ca6ed2 100644 --- a/tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aba70bb3bf8b25a63968e36b7aa1469a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/model.expected.json index 6bab92c531..d31c30f519 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ac0be820dc594e22c0314df67936b437/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/model.expected.json index b066af4bec..f5f78121d5 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ac198413eefefcc5bb8b961355337676/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/model.expected.json index 00b391a6fa..c0586be8f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ac3c843495fdbdb21291451d275c05f4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/model.expected.json index 41588cbfe0..019b8c8463 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ac5a804e41cec04dc88e787c39746687/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/model.expected.json index 94d861753a..086871b8ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ac8a100b38e71fa08961b590ea591dfb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/model.expected.json index f44fa79dc7..98666ec4e1 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ac9289759eeeed046f3665ecaa69e92c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/model.expected.json index cb985e755d..6335542be8 100644 --- a/tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aca7d331e72e81eea496eaf092cd07d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/model.expected.json b/tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/model.expected.json index 8ba2223955..abe7b53741 100644 --- a/tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/acc9dd7a9d879b3fd0f4154f5ec49c81/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/model.expected.json index ef5710b88f..85bd6b49e9 100644 --- a/tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ace83ec31d76d447765ce42172cffaa6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/model.expected.json index 44058736b7..fc10e7c4eb 100644 --- a/tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ad451cf4f5c4d4aa6453166bc1fb9637/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/model.expected.json index ee91e49166..fc8b8b19ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ad58de7a6f4b8961d21962c5c1339af3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/model.expected.json index df1d80f05e..11ea4e0b32 100644 --- a/tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ad5f741657701738770c818541d371d1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/model.expected.json index cf0021fae6..5a67f3b20a 100644 --- a/tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ad613a17f3cee2196b552d3d7248765d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/model.expected.json index c4642b35c9..416ed6bb16 100644 --- a/tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ad926564e9b2c6eba0277bc567b8144a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/model.expected.json index a44e9304a6..427ef84bf3 100644 --- a/tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ad9688a81f740706aa94689fca7a305e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/model.expected.json index 71b2236272..f64ee6a60c 100644 --- a/tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/addd14e8dfc91037ec8c416bcefe5a6f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/model.expected.json index 045b3787f1..9bbb56fba5 100644 --- a/tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/adf148d3c9b24578da2d82722b1cdd5a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/model.expected.json index d66a125e3e..e81b8215c5 100644 --- a/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ae18a4a435dc69d385d04a00db890160/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/model.expected.json index 6d4906e25d..1975b1c749 100644 --- a/tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ae3239ef6502388c67dff54e9dd38369/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/model.expected.json index 99e338a22a..50c0971f38 100644 --- a/tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aea4619a9a5a0fd8a902c55ccdfcf159/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/model.expected.json index d086433995..532e943b33 100644 --- a/tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aed13960e31378529c240b2392950a53/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/model.expected.json index 50a8834d9d..270953c30e 100644 --- a/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/af743e3117ee7bb4e2b1e8c57f50c92b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/model.expected.json b/tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/model.expected.json index b26bf41dc0..41b96de62c 100644 --- a/tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/af8b7ba49f3da7b43601534cea6c9a52/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/model.expected.json b/tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/model.expected.json index 3e9ee59c8a..cd183cc4d0 100644 --- a/tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/afc735a10b56337b796738ed1c69dcff/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/model.expected.json b/tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/model.expected.json index bbf27a0564..2f45ef4893 100644 --- a/tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/afe897fe5856ec3cfae35ecc75a2b689/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/model.expected.json b/tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/model.expected.json index c4c73b4bf6..a01d2295c3 100644 --- a/tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/aff37a614c45b7cbfad99c7e884ab813/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/model.expected.json index 1ca27af1f2..37d1b20c9b 100644 --- a/tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b016ae2a33a178f9661233f5107ff40d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/model.expected.json index 0f17639169..be4bff7f6b 100644 --- a/tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b04682273e3c787e3dc790f31278124c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/model.expected.json index 73f858e5bf..fc0cc184fe 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b0a268a2089046a016a0a03d1a709e79/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/model.expected.json index 3aab2c9a65..8a03c7b5dc 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b0a86f8190115820c0473cbe11e9d73b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/model.expected.json index 9b72ee842c..95353c4cd3 100644 --- a/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b0c22716eda56b873b42d632dd725701/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/model.expected.json index 32e7ef8534..37811ea746 100644 --- a/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b1ded79047d5b8161604945e8d89cb42/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/model.expected.json index e163ff9686..2907c03c78 100644 --- a/tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b20a88a48ca68397fb84abb1ffdfbb20/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/model.expected.json index 1c9c876a10..ef459368cf 100644 --- a/tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b2167f75554417bcd37f5b11571ce7fc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var5"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/model.expected.json index 3671fcc368..1893b8799c 100644 --- a/tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b23bd23d747514f05deb05092adcbc3d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/model.expected.json index 85e163787e..55631e20b4 100644 --- a/tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b2607644339c60b7dc33caa86ffa9dd2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/model.expected.json index 0b2d10471b..5096e4d211 100644 --- a/tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b292d71c864427f2522d80399b0e16c4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/model.expected.json index 146e14b2ea..26a1e3a75e 100644 --- a/tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b2addf138a556b6b21ac6d4585825828/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/model.expected.json index e020755666..fae5f5b69d 100644 --- a/tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b2c5b1865f75280212cbde17b6203d21/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/model.expected.json index 61ebe202db..2e6393a2f6 100644 --- a/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b38ec6d36aff0c916226635561cbd1a6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/model.expected.json index a432e3e27f..42ddb263c3 100644 --- a/tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b3bf8939659c445bd732414fbe57ccf7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/model.expected.json index 36f63f335c..ce32319d2f 100644 --- a/tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b3d03314511a8876a66d524dd0240cdb/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/model.expected.json index e9b50f32cb..52df3312dc 100644 --- a/tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b3e5efec04851a6556b23a0d4a9f50d0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/model.expected.json index 5b4b8fb4a8..047dfcd4be 100644 --- a/tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b4242fa95f76260bd55ae4b62785ca8a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/model.expected.json index d175a779a2..0a6c723840 100644 --- a/tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b427cac47c65e49ff32c22d2b3e8c19b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/model.expected.json index 211f529ced..d9b60d7df4 100644 --- a/tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b45554d61a3d984d22739b92a39fbf9a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/model.expected.json index 076766009c..dda44a0a72 100644 --- a/tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b4620a7bf97886729d0c139c741b474f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/model.expected.json index d1a8753f0a..e8237211b2 100644 --- a/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b464ffefb1b910de2383cdd4db034de4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/model.expected.json index f312971d47..c572cabe42 100644 --- a/tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b4a0864bbf55cf63ffd8e703e5ef7d5c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/model.expected.json index 7be8a71835..3a653a0e83 100644 --- a/tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b4d111eb9e87b80bd5a5b4fdcb14fe54/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/model.expected.json index c2627d9db2..5995f3603f 100644 --- a/tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b585a56df7b92c03073077c213cf70e4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/model.expected.json index 914a27426d..5853702dcf 100644 --- a/tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b5a0336d0a0a8aeb65a6dd3effbbe1c3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/model.expected.json index f1cc36910f..a3d06fa2ea 100644 --- a/tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b5c7ee358b6a6607d61c3429066bef38/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/model.expected.json index 2fa2d9c166..120cfdc1bf 100644 --- a/tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b60ebd8c197f6819c061027cb80758ce/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/model.expected.json index cae09c909a..70af302af8 100644 --- a/tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b621a47f67ebf92dab65e3f36a65aeb0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/model.expected.json index ee48eac847..d1439ed447 100644 --- a/tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b66e7da196a60e38bb95fbadfe03228a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/model.expected.json index b123bd6a1a..cac13990b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b6716decf75eddda33df3ec06f7cc400/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/model.expected.json index b528b9ce1c..f1bd6d4de7 100644 --- a/tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b68d49c8a5e7d08c87edf866544ee453/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/model.expected.json index d3911b3395..309bef0f51 100644 --- a/tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b68ea8a7e4351cdfc4b3b75bb6582893/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/model.expected.json index 18b9d3bf2d..9240792961 100644 --- a/tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b6af969b2b536ddf5cfae45210fa4165/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/model.expected.json index 1afb96dd71..c65f540eec 100644 --- a/tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b71c00715ba61ced0f86e3bc43166f35/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/model.expected.json index 86d9e43198..3391596119 100644 --- a/tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b7689a502ec829c7763e77d9691b1327/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/model.expected.json index d595e15406..9ddc621381 100644 --- a/tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b79ccd977e609a75497edf1ccf2ee937/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/model.expected.json index 2fb2780b08..641f76d013 100644 --- a/tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b79d93a39401f5435ba6a518c8db0821/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/model.expected.json index f978f18cfa..d0a2427b2b 100644 --- a/tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b7a753117dec70ec2c63efe8fcc47a65/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/model.expected.json index 6d0aefeb7d..83a0cafd45 100644 --- a/tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b7c7cd774fa35b4a548be2e3bd6033fc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/model.expected.json index 62eb37d21e..71f87ae5f2 100644 --- a/tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b7ca13696cd34ed7006ef9dfac6d66ff/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/model.expected.json index efa0e12e32..3928072a60 100644 --- a/tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b7eff6ada58015f7994346e5ca41950c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/model.expected.json index d94e2542fd..7324acc47b 100644 --- a/tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b813f1982cff69612c9bec6020316b25/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/model.expected.json index 596a3aef0a..04b33b0f77 100644 --- a/tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b82f142660089e621dc2e46af3650725/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/model.expected.json index 3c63e00669..4a807bbdc6 100644 --- a/tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b83445d4bf1480adfef310882eb92fd4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/model.expected.json index ec051aeee7..4f0d49bf68 100644 --- a/tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b9053d156faa845a9b26778d6c852ced/model.expected.json @@ -1,6 +1,6 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": []} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/model.expected.json index 3704d4b170..2418737c09 100644 --- a/tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b90fa3069c597d89a13b7f5db3466c81/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/model.expected.json index 8f31432b08..65941071df 100644 --- a/tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b91aacd4bc92fd5c7323e78a2f9a9d2f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/model.expected.json index 3453da0756..af7600d5cb 100644 --- a/tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b95be16193c0617ac3f6fa8338bbfcaf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/model.expected.json index 729ec014cd..47ca622b57 100644 --- a/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b97231328d01c59346c93171844928df/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/model.expected.json index be347a9666..4cd3099c55 100644 --- a/tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b99de7a99ed72b99faa90220b64f2f6b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/model.expected.json index 2aefdd330a..788c61285e 100644 --- a/tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b9abca4e0521f3fe860da1ab68d0fce3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/model.expected.json index af25b84226..7967ff2c22 100644 --- a/tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/b9e91ae9cdc74dfc72c64709c85041a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/model.expected.json index afb556e910..9c90cc5bfe 100644 --- a/tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ba11676f6e3d1b08c11d9371a6d371e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/model.expected.json index 5258903e29..2a169cb2c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ba2c7cadd697f7536313eecd1899bb28/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/model.expected.json index 586aa8e054..7d6c27db7d 100644 --- a/tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ba57bded992c27570523330a6638fae2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/model.expected.json index c208c9ed3a..cb9769d2fb 100644 --- a/tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ba67a75dc5e5f426156762bf669abcf5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/model.expected.json index baac7460dc..dac7e12e99 100644 --- a/tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bab3e1df6fdf4a2f82163db838994be4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/model.expected.json index 953c4fa527..8378604024 100644 --- a/tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bb13903b879fbc18e1d9d64cf0289190/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/model.expected.json index 5d7b9d871c..be41228b15 100644 --- a/tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bb2014ae94421f243112c038ddf96494/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/model.expected.json index ce434316fe..2189aceadd 100644 --- a/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bb61866f0f2e5c9384276ae0396b5513/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/model.expected.json index fc08fda0e5..d031972ed0 100644 --- a/tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bb926ba62f74a7445396970a0346c2a9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/model.expected.json index 0eff3b9709..555b46cbb0 100644 --- a/tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bbb14bf74d24cecfbb010388b777932e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/model.expected.json index 478db2dce8..3814a59bf6 100644 --- a/tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bbb388ac3c8c38fc6fb2b259f3443a62/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/model.expected.json index fdb5791b49..0577360cc6 100644 --- a/tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bbbac65e63fb9a20f50aa192f3d4510b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/model.expected.json index 807103a057..4d8d5a729b 100644 --- a/tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bbc5fd6f103aa00c642cd8a16f0fcd2a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/model.expected.json index 3e262e62c0..2b6d9d1a4d 100644 --- a/tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bbe3f66a50742afbb33589d94d014b78/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/model.expected.json index c9755854ea..3af0362310 100644 --- a/tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bc07b283263666f921684988965bd90f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/model.expected.json index 777e2bf24e..c3205f9561 100644 --- a/tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bc45b8d80af7b0427721713bfe2f97c3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/model.expected.json index ac7829f11b..7c17c4796c 100644 --- a/tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bca160ac0038e5fbfbd71c81006de2ce/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/model.expected.json index 34257d14da..bef0e790a0 100644 --- a/tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bcb28e847b7fd22b500fc68f328c2269/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/model.expected.json index c569fdf236..1fcd514574 100644 --- a/tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bcc1e37cd9ab1417ffa962e137f9b284/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/model.expected.json index b124c39667..9fed361dd8 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd131b4d8998f764796aa1bbae756992/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/model.expected.json index 8c24fa3e70..39d594c3f1 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd1f8fe6088b9a887cdc202885ad4150/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/model.expected.json index d3ebf44d64..2677d1d541 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd30521aace879d601572ed605ffcf25/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/model.expected.json index 363feb3d27..3beb9bbc4c 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd3e7688a995691fc7143ffda5bba96e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/model.expected.json index 77d0ff60c5..c5f67833df 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd478332e179f9f0af76f10aa42d8e7b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/model.expected.json index 879109721c..ac7a60e614 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd4e616b6582a4aa4aa22828874ddf4b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/model.expected.json index 8dd40e9ad2..226efaad91 100644 --- a/tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bd7cfa0f099b440c1f12276d281df610/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/model.expected.json index 334f8932bb..2a9c2a8c3a 100644 --- a/tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bdcbe56f6a549ac3bd7c9bae5bb2d511/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/model.expected.json index 1d980dc99d..a545f6d8f0 100644 --- a/tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/be0de29426929bc0929e105a90307e5b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/model.expected.json index ef7fcaf7d2..4853fbbcd8 100644 --- a/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/be5b5a644521be5b55c6a12c503cad3a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/model.expected.json b/tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/model.expected.json index 79ecee7182..35f031d879 100644 --- a/tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/be61eda358af1c064b10fb0f1fb64c96/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/model.expected.json index 2d36309bc0..1abd8c8aea 100644 --- a/tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/be94e853947c3d3fa51c7eab4ce862b3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/model.expected.json index 686dd97dc0..edf3bbbf75 100644 --- a/tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/be9f5b19948f28f905022b77223c3be2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/model.expected.json index 90dc55ed18..9487794c6f 100644 --- a/tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bf260ebe2c81e12c93948051b93d11da/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/model.expected.json index 7acf5c62d3..204f4f0e2c 100644 --- a/tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bf63b3e171567b8deefb648d5e8f7daf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/model.expected.json index 239c022291..44a2c74a21 100644 --- a/tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bf760e520ac0c9fc6e4392ca9d2c8f27/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/model.expected.json index 88728745d1..e8daefd4b7 100644 --- a/tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bf7d4eb316fa86bd43389c69e2572be2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/model.expected.json index 2e9bf0dbd1..31592d6568 100644 --- a/tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bf81fbe51a3238b216bc40f436eddee5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/model.expected.json index 86836a4253..c31e513d2c 100644 --- a/tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bf8cf5b1b970cbcd41992ad1412d1675/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/model.expected.json index 1baef27274..bc0d3667b0 100644 --- a/tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bfa891f78900273d2685d432e5de7efa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/model.expected.json index 9f77c83fbd..0c24c1c689 100644 --- a/tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bfa9376df55a92d81e3d6ada44f900e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/model.expected.json index 76b1007835..8668f6a0ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bfad9d7d69b1676ba04137649a362c8a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/model.expected.json index 2952a5abb8..8bc4e36404 100644 --- a/tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/bfd00aba95070795c7a808361a3c495d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/model.expected.json index dcbc7fa01b..58bb1633e5 100644 --- a/tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c012b856025e2c580aa6d09abc8a939b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/model.expected.json index cd50088cee..730ad6129d 100644 --- a/tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c06eacfedc11cfea2b681414cb3f1ee0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/model.expected.json index 066d96dc97..c126c51bde 100644 --- a/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c0929bb90fee827dde819c6dacffe4c0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/model.expected.json index ea5acec065..eed32e1103 100644 --- a/tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c094ffd2e9d36397bff8e96fd44884d1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/model.expected.json index fffacd3d31..480bb06293 100644 --- a/tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c09db9fd3028ee0633eaff8bd7644cb6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/model.expected.json index 33146f36f5..a584b13ee2 100644 --- a/tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c120a9cd6dd0f5f002a4cda9613481d1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/model.expected.json index dde39f76e5..9bc8a373b1 100644 --- a/tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c1f6795e92c4ed7b8d90f26f64edff16/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/model.expected.json index 53e6882226..a7b138a784 100644 --- a/tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c23f30dfa58f7135e9c61ff93975c98d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/model.expected.json index 22c9531703..b92cf58325 100644 --- a/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c25359bbfc6b0d4d348e9a7c9593afb3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/model.expected.json index 9e960240cd..05451aef82 100644 --- a/tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c2d39618c48aa2cf04741165bf25582e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/model.expected.json index 3dc74eeed7..da2d7ed6c6 100644 --- a/tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c308cb4305e31ab207f2141469b12fb5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/model.expected.json index d5e9c013da..b4a559a535 100644 --- a/tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c31ab0d299c5fac897401f5a372e078a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/model.expected.json index f9151998de..06bb0ac08b 100644 --- a/tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c330245024f1d54f5c43c277805b9fdf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/model.expected.json index f5febb5444..e2566ac69d 100644 --- a/tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c333656a35aba68d8062d212c421d88e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/model.expected.json index 252891aafc..6c0ba73b54 100644 --- a/tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c35882af6abc63358c2bab1e851bd680/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/model.expected.json index d00290d574..c1d953cda6 100644 --- a/tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c3841e1877c34e8e5bfd1c1837d307e1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/model.expected.json index 7e7b12a014..b65d95f434 100644 --- a/tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c39921c8a0b5837e3801fd57cb76fdc8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/model.expected.json index 899c8fc386..c5c4581ff8 100644 --- a/tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c423e819384eec3bed63a038add27ca6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/model.expected.json index 22df252846..e701501fbc 100644 --- a/tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c460ed31b8197fde698b2890cf38015f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/model.expected.json index bfa352c027..b93cd20285 100644 --- a/tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c5272f0460d36d154f10770be9088fa4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/model.expected.json index 7dfd2f5ed8..e73d40bf5f 100644 --- a/tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c539dc840839e54f8d3d5ca53104102f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/model.expected.json index 2be11a23fb..d4658e8085 100644 --- a/tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c549a9cc335032709f6ddf549bea7671/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/model.expected.json index b5d5f3dd24..4791603d5e 100644 --- a/tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c565bb47d72f56a38090dab8d99b7d5d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/model.expected.json index b48d885e20..42d01f4622 100644 --- a/tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c56795206adea7f4fedd8a14e92b89a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/model.expected.json index b00891dea6..feca1a51c9 100644 --- a/tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c646db3b98dae1b357b763e33c0c6cfb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/model.expected.json index d2a39aab0c..7fe98e7471 100644 --- a/tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c6723915d52f32f79d0d95b0c45b5690/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/model.expected.json index 01b1677a1c..c174eda9d5 100644 --- a/tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c688731bea55e5a8af305c16384da5b8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/model.expected.json index c01c45943e..28035702f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c6ca31c282cb623a0bd6d0ce51630721/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/model.expected.json index 493102a00f..9675ba369d 100644 --- a/tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c6f07fc1b59d5295892164e99ab6b192/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/model.expected.json index c764e570be..6b0271ba3a 100644 --- a/tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c6f1aead53d40454b7d12ecb7a129adb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/model.expected.json index f947f97c8d..9ff3046ddc 100644 --- a/tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c7081572bfc6c6db3d45afd912301c67/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/model.expected.json index edc4d7b827..8ed93e957d 100644 --- a/tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c7212c02f8b6793b8264a84f7c5d918a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/model.expected.json deleted file mode 100644 index 6c9921d412..0000000000 --- a/tests/parse_print/autogen-bilals-fixed/c73ac7607ea8c1229507ce9b34100189/model.expected.json +++ /dev/null @@ -1,3285 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainFunction": - [[], [{"SizeAttr_None": []}, "PartialityAttr_Partial", "JectivityAttr_None"], {"DomainBool": []}, - {"DomainSet": - [[], {"SizeAttr_None": []}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Op": - {"MkOpNegate": - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}}}]]}]}]}]}}, - {"Declaration": - {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainSet": [[], {"SizeAttr_None": []}, {"DomainBool": []}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var3"}, - {"DomainTuple": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}}, - {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}}]}]]}, - {"DomainTuple": - [{"DomainBool": []}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}}}, - {"RangeSingle": - {"Op": - {"MkOpNegate": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}}}]]}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var4"}, - {"DomainFunction": - [[], [{"SizeAttr_None": []}, "PartialityAttr_Partial", "JectivityAttr_None"], - {"DomainPartition": - [[], - {"isRegular": false, "partsNum": {"SizeAttr_None": []}, - "partsSize": {"SizeAttr_None": []}}, - {"DomainBool": []}]}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}}}]]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var5"}, - {"DomainRelation": - [[], [{"SizeAttr_None": []}, []], - [{"DomainTuple": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - {"RangeSingle": - {"Op": - {"MkOpNegate": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}}}]]}]}, - {"DomainTuple": - [{"DomainBool": []}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}]]}]}, - {"DomainTuple": [{"DomainBool": []}]}]]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var6"}, - {"DomainPartition": - [[], {"isRegular": false, "partsNum": {"SizeAttr_None": []}, "partsSize": {"SizeAttr_None": []}}, - {"DomainSet": [[], {"SizeAttr_None": []}, {"DomainBool": []}]}]}]}}, - {"SuchThat": - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpParticipants": - {"AbstractLiteral": - {"AbsLitPartition": - [[{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 2]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}]}}], - [{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 7]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 7]}}}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}]}}]]}}]]}}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": - false}}]}}]]}}]]}}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": - true}]]}}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": - false}]]}}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Constant": {"ConstantBool": true}}], - [{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}], - [{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 2]}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}]}}]]}}]]}}]]}}}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpUnion": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}]}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 0]}}]}}]]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": - true}]]}}}]}}]]}}]}}, - {"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": true}}], - [{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 9]}}}}]}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": - false}]]}}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}], - [{"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 4]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]}}, - {"Constant": {"ConstantBool": true}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}]}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Constant": {"ConstantBool": true}}]]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": - true}]]}}}]}}]]}}]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, -6]}], - [{"ConstantInt": - [{"TagInt": []}, 2]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, - -4]}]]}}}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpIn": - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}]}}}]}}, - {"Op": - {"MkOpImply": - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]}}], - [{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 8]}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": []}}}, - {"TypeSet": - {"TypeInt": {"TagInt": []}}}]}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, -4]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": - [{"TagInt": []}, - -3]}]]}}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]}}, - {"Op": - {"MkOpNeq": - [{"Reference": [{"Name": "var3"}, null]}, - {"Reference": [{"Name": "var3"}, null]}]}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 7]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}]}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}]]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": - true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": - false}], - [{"ConstantBool": false}, - {"ConstantBool": - true}]]}}}]}}]}}]}}]]}}, - {"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 3]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}]}}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 8]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 5]}}}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": - true}]]}}}]}}]]}}]}}, - {"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]}}, - {"Constant": {"ConstantBool": false}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": - false}]]}}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 0]}}]}}], - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Constant": {"ConstantBool": true}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 2]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 8]}}}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 8]}}}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}]]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": - true}]]}}}]}}]]}}]}}, - {"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": false}}]]}}], - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 3]}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": - false}}]}}]]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}], - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Constant": {"ConstantBool": false}}]]}}]]}}]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}]}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 8]}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}, - {"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 4]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 8]}}}}]}}, - {"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 4]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 9]}}]}}]]}}]}}]}}], - [{"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}], - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 3]}}]}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 6]}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 8]}}]}}]]}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 5]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 7]}}}}]}}]}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}]}]]}, - [{"Op": - {"MkOpImply": - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]}}]]}}}}], - [{"Op": - {"MkOpEq": - [{"Reference": [{"Name": "var2"}, null]}, - {"Reference": [{"Name": "var2"}, null]}]}}, - {"Op": - {"MkOpIn": - [{"Op": - {"MkOpToInt": - {"Constant": {"ConstantBool": false}}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, -8]}, - {"ConstantInt": - [{"TagInt": []}, -5]}]}}}]}}], - [{"Op": - {"MkOpTogether": - [{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]}}, - {"Op": - {"MkOpSupsetEq": - [{"Reference": [{"Name": "var2"}, null]}, - {"Reference": [{"Name": "var2"}, null]}]}}]]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpMinus": - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}]}}, - {"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]}}, - {"Constant": {"ConstantBool": true}}], - [{"Op": - {"MkOpImply": - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]}}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}]]}}]}}]}}], - [{"Op": - {"MkOpIntersect": - [{"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}], - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": false}}]]}}]}}], - [{"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpNeq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 5]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 7]}}]}}], - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}, - {"Op": - {"MkOpIntersect": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantBool": - true}]]}}}]}}]}}]]}}]}}]}}, - {"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - true}]]}}]]}}}]}}], - [{"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": - true}]]}}}]]}}]}}], - [{"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - true}]]}}]]}}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}}]]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 7]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]}}]]}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": true}}]]}}], - [{"Op": - {"MkOpParticipants": - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": false}]]}}}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Constant": {"ConstantBool": true}}], - [{"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}}}]}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": true}}]}}]]}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": - false}}]}}]]}}]]}}], - [{"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}]]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - true}]]}}}]]}}]}}]]}}]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Op": - {"MkOpIntersect": - [{"Op": - {"MkOpIntersect": - [{"Op": - {"MkOpIntersect": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - true}], - [{"ConstantBool": - true}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - false}], - [{"ConstantBool": - false}]]}}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": - false}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - false}, - {"ConstantBool": - true}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - true}], - [{"ConstantBool": - true}]]}}}]]}}]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - false}]]}}}]]}}]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 10]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}]}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 10]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 4]}}}}]}}, - {"Constant": {"ConstantBool": true}}]]}}], - [{"Op": - {"MkOpToSet": - [false, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 6]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 6]}}]}}], - [{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 10]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]}}]]}}]]}}]}}], - [{"Op": - {"MkOpMinus": - [{"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpIff": - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - true}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}]]}}], - [{"Op": - {"MkOpToSet": - [false, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": - false}]}}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpImply": - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - true}}]}}, - {"Constant": - {"ConstantBool": false}}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpImply": - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - false}}]}}], - [{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 4]}}]}}]]}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": true}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": - false}]]}}}]]}}]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Constant": {"ConstantBool": true}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}]]}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}]]}}], - [{"Op": - {"MkOpToSet": - [false, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]]}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - false}}]]}}}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]}}]]}}]]}}]}}], - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpIntersect": - [{"Op": - {"MkOpParty": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": false}]]}}}]}}, - {"Op": - {"MkOpParty": - [{"Op": - {"MkOpIn": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": - false}]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpImply": - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 8]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 9]}}]}}]}}], - [{"Op": - {"MkOpNeq": - [{"Reference": [{"Name": "var3"}, null]}, - {"Reference": [{"Name": "var3"}, null]}]}}]]}}], - [{"Op": - {"MkOpRange": - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 0]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 10]}}}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 5]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 7]}}}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}]}}]]}}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpEq": - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, - -10]}]}}}]}}, - {"Constant": {"ConstantBool": false}}], - [{"Op": - {"MkOpNeq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, - {"ConstantInt": - [{"TagInt": []}, 9]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantInt": - [{"TagInt": []}, -10]}], - [{"ConstantBool": false}, - {"ConstantInt": - [{"TagInt": []}, - 6]}]]}}}]}}, - {"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 2]}}]}]]}, - [{"Op": - {"MkOpOr": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Constant": - {"ConstantBool": - false}}, - {"Constant": - {"ConstantBool": - true}}]]}}}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantBool": - true}}, - {"Constant": - {"ConstantBool": - true}}]}}]]}}}}]]}}], - [{"Reference": [{"Name": "var2"}, null]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpIn": - [{"Constant": - {"ConstantInt": [{"TagInt": []}, 6]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": - [{"TagInt": []}, 6]}, - {"ConstantInt": - [{"TagInt": []}, - -2]}]}}}]}}], - [{"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpIn": - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": - {"ConstantBool": false}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": true}]}}}]}}], - [{"Op": - {"MkOpEq": - [{"Reference": [{"Name": "var6"}, null]}, - {"Reference": [{"Name": "var6"}, null]}]}}], - [{"Op": - {"MkOpEq": - [{"Reference": [{"Name": "var3"}, null]}, - {"Reference": [{"Name": "var3"}, null]}]}}], - [{"Op": - {"MkOpNeq": - [{"Reference": [{"Name": "var6"}, null]}, - {"Reference": - [{"Name": "var6"}, null]}]}}]]}}]]}}]]}}]}}, - {"Op": - {"MkOpAnd": - {"Comprehension": - [{"Op": - {"MkOpEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": - [{"TagInt": []}, -6]}]}}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeTuple": [{"TypeInt": {"TagInt": []}}]}}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": [{"TagInt": []}, -2]}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": [{"TagInt": []}, -2]}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": - [{"TagInt": []}, -1]}]}}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}]]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": [{"TagInt": []}, -10]}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": - [{"TagInt": []}, 7]}]}}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": true}]]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantInt": - [{"TagInt": []}, -10]}]}}]}}}]]}}]}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "q_7"}}, - {"DomainSet": [[], {"SizeAttr_None": []}, {"DomainBool": []}]}]}}, - {"Condition": - {"Op": - {"MkOpGeq": - [{"Op": - {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 10]}}}}, - {"Op": {"MkOpTwoBars": {"Reference": [{"Name": "q_7"}, null]}}}]}}}]]}}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpMin": - {"Op": - {"MkOpUnion": - [{"Op": - {"MkOpParty": - [{"Op": - {"MkOpDiv": - [{"Op": - {"MkOpRelationProj": - [{"Reference": [{"Name": "var4"}, null]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": - false}]]}}}]]}}, - {"Op": - {"MkOpProduct": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpProduct": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 5]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 9]}}}}]]}}}}, - {"Op": - {"MkOpToInt": - {"Constant": - {"ConstantBool": - true}}}}]]}}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 10]}, - {"ConstantInt": [{"TagInt": []}, -4]}]]}}}]}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpDiv": - [{"Op": - {"MkOpProduct": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 9]}}}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 5]}}]]}}}}, - {"Op": - {"MkOpMod": - [{"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 9]}}}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 1]}}}}]}}]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]}}}}, - {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/model.expected.json index 9719845ee8..84a480f675 100644 --- a/tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c7701a368d5b05a93fcea0618dfe80ae/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/model.expected.json index 5591ee2347..08674ecb0e 100644 --- a/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c7a05c6406dc0bf72a24b7344bf05115/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/model.expected.json index a4536c1316..0291ff2fe3 100644 --- a/tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c7bab02871b463a4b24d6530e2009c74/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/model.expected.json index c7f9134856..05bd6f12c4 100644 --- a/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c863e1aefc22489efd92991f527ae5a2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/model.expected.json index b508384d47..138f0cb1ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c87b10e4d0646bf5a1cccde450c77342/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/model.expected.json index 404d57958d..19b087ff1b 100644 --- a/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c89bdec4acf5b8c9aaaa53cb0cb59f7d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/model.expected.json index a22a9ae43c..758e456c9c 100644 --- a/tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c8cbbeb91436bc3cbb6db533e1de1c9f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/model.expected.json index 9740737174..55fc966ebe 100644 --- a/tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c8cc670b809293626467998d149a92ca/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/model.expected.json index 335b3db27a..92b5848e91 100644 --- a/tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c90fe79b4b3c5feeb47e5ba79e72b0e5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given2"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/model.expected.json index fdf4f1eaa6..7f30a35ba7 100644 --- a/tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c93ff154e91b9bb6635c22be3ae7ecfa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/model.expected.json index e2e3986c6a..2d3ab10c8b 100644 --- a/tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c94c721e03e88dc01a16fa9b0b3b7431/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/model.expected.json index cd3c51fcb4..ecbb085bff 100644 --- a/tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c96d788458c4c7e3247f608a018776aa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/model.expected.json index ef81675210..7c775bde40 100644 --- a/tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c99ba20043c63432d9487a23ff54c113/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/model.expected.json index f212413e98..3356a7eecb 100644 --- a/tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c9a33c7dcd76afe05345be3216bcfe9b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/model.expected.json index bb46831fa2..ecc3febe85 100644 --- a/tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c9b7a310cade3d7fdb27589ad8a3e3fe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/model.expected.json index 8fdc182a42..06f252e437 100644 --- a/tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c9e1cd7a71dc9c900ce717378a2e7326/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/model.expected.json index 209935306f..8250ee07c2 100644 --- a/tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/c9f3f4ce7f1422c36af5e8b4bbd4255a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/model.expected.json index be8e61a0c5..bb6fe017a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ca6d3bbc350e094480efac50bdc26694/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/model.expected.json index c93d136bd3..88298d28a4 100644 --- a/tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/caaa1454e10014cfe14a7700ed41272b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/model.expected.json index ceec2a55d6..c354b3d25f 100644 --- a/tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cad537c995fb03554a83b3fb49b715bc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/model.expected.json index e743dd214f..606fc080ae 100644 --- a/tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cb56531cbb4df9698d8f0cf00d0944f3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/model.expected.json index 476f698f92..c1f0daa268 100644 --- a/tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cb74150a8c73ed6ff0be9fe51e42d794/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/model.expected.json index e548908b0d..46ceb74139 100644 --- a/tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cb7b739e25b3fe249ffabcd46210a7a4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/model.expected.json index e53dd2c357..df0eeff538 100644 --- a/tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cbabd362a21657745073ef1a34fb2f97/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/model.expected.json index 5535c95946..18a9d81190 100644 --- a/tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cbbb526650a66d168ab009f76b41ac7e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/model.expected.json index e2b29621f7..defa43edb9 100644 --- a/tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cbc4f7ec129e0d6b2868f35a8835828b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/model.expected.json index ae9b00a17e..9f8151847d 100644 --- a/tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cbd987a72d6fcc160ca0c276b2ad0594/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/model.expected.json index 99d159b346..095ee98f98 100644 --- a/tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cbf9663144fdb0a944c8c9eb9276186f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/model.expected.json index 0303433d31..5b62d1d141 100644 --- a/tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cc2192ed7f68debf33abcbf2de08eff2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/model.expected.json index b5b3ff8dec..b9c515771d 100644 --- a/tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cc228e7aa4bdec711a971946c1ab0816/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/model.expected.json index c948bbf8d2..f75d44490b 100644 --- a/tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cc2e944db81bd1d2cbbe89830450aef4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/model.expected.json index d96d45890d..4bb5c11920 100644 --- a/tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cc34727d6328f78dd681783e5b094162/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/model.expected.json index d5b30cda2f..81545835ff 100644 --- a/tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cca22afe2ff559a314ecd14c2296b387/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/model.expected.json index 630db00dbc..ae36de78bf 100644 --- a/tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cd11163441a1534d06cf64e8f168fcac/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/model.expected.json index 94f3791abb..468addb4d2 100644 --- a/tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cd4e9ca8ff5e1d257d6d078aa15002c2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/model.expected.json index 04cde5048a..458765e1f1 100644 --- a/tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cd703d198a7caa0ed1cc30dfc71b5293/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/model.expected.json index 83a3dfee03..ac0dc9e8f1 100644 --- a/tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cd82b726b9bc042bf11078723d7ddebf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/model.expected.json index a344a9ccb7..647334841c 100644 --- a/tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cdb90fb872844fc0f220512280d64db4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/model.expected.json index 42b0c91066..0ce02e3ff9 100644 --- a/tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cdbd05170298b1bd1aa7a45f454e3d63/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/model.expected.json index 2d04b482d7..2b1d91b20a 100644 --- a/tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cdd2cde0e8a96682225ea6ac1be2037d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/model.expected.json index ea7e966e3c..5fba3b2e21 100644 --- a/tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cde1afcab624b8f5cf6026d76a182b03/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/model.expected.json index b34a886780..6fa1ab5142 100644 --- a/tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cdfa715a0ae81a4cb3d42e7ca4e9b8af/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/model.expected.json index 77574a6469..c87f99c507 100644 --- a/tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cdfefc24c895f36d5ec7846039f0b859/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/model.expected.json index 0808596851..9ec6480a70 100644 --- a/tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cea26bcbcd27151494695b5d2cd176d1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/model.expected.json index 0a9c9cb088..7e0334ac9c 100644 --- a/tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ceede496d7adf47c26a9d01220b317c0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/model.expected.json index 49b0254e9a..320360d94b 100644 --- a/tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cef118dc017b24a21dfb5a88c529eda9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/model.expected.json index 4f6fb8c8d8..5b3f4c9ba1 100644 --- a/tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cf4c4a53d3ab9c4732e322aef0177215/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/model.expected.json index 5dd5c738fb..b2e99e1b1b 100644 --- a/tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cf86537a6fa95a340a00e5b6b22afff9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/model.expected.json index 555dbd3ee1..ae496fd383 100644 --- a/tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cfa5de1e898ada0ab6eb52584e9a9b7c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/model.expected.json index 27c5aea6ee..5209be3754 100644 --- a/tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/cff0ab3b52e4246f757238b11b8fe82b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/model.expected.json index e823b2c5b2..7fac212af7 100644 --- a/tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d0394edeb6136c30f61b15986636f05e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/model.expected.json index a313637aa4..3004449d50 100644 --- a/tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d0705cf9aeea70d0112cd8cf1ad2fc28/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/model.expected.json index 87683417c7..73dd8d9090 100644 --- a/tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d0d3714bca19279a25ffad6fe8ff6b1a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/model.expected.json index 02a7642216..fb71e2cc33 100644 --- a/tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d0dd7887605ab4505721457d3924e8e2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/model.expected.json index 5e9818461a..ac48ecc698 100644 --- a/tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d196536263bceb21a881742553628980/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/model.expected.json index 9285daab9a..5a6d114f22 100644 --- a/tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d1f9f5646ad02f51e81ccd962c936011/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/model.expected.json index 90e220778e..e1735cbbd8 100644 --- a/tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d1ffc6dc30ae73ba44e3f9c55d3e1636/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/model.expected.json index 613d4add2a..60f880432b 100644 --- a/tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d208285ba6d6405a34832d73dc232057/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/model.expected.json index 1957125b4d..85f967837d 100644 --- a/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d20ff5e630ee919f1fcc726ea14f1e21/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/model.expected.json index f0a2fb8d87..f46146ae34 100644 --- a/tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d2d3c576ca58a9c8a00c79ff7099cf80/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/model.expected.json index 62480f766d..13cee521bf 100644 --- a/tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d2d4b6dd1eb76f25c117fe82249925fb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/model.expected.json index 1ebd59aa54..a38c53103d 100644 --- a/tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d2f262de61496ad07219546d13f3cedd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/model.expected.json index 25f4a3a6a1..a22aeb293c 100644 --- a/tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d3655944a04ded091e0721479cd791dd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/model.expected.json index a08ba5952f..f495f15673 100644 --- a/tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d3909eeb253333c473b61058dd67f690/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/model.expected.json index 89272f59cc..a229a112ea 100644 --- a/tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d3a54dbb8b939655a1a6e6c929c4d1ef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/model.expected.json index 8cfb181352..29a8da9868 100644 --- a/tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d3c29831ec8d5ce670af7b87ace0f0c6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/model.expected.json index 88e1da680f..109df2cc2f 100644 --- a/tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d40ffe1ce2def4f80c820d417c7c0ef7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/model.expected.json index 883c948e1d..2f1584fb08 100644 --- a/tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d42368812350b5837938b26c3b121fde/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/model.expected.json index 6b0d6ee9d7..3c43afe412 100644 --- a/tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d45d2b678a76683b5b19379b69f7d2f7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/model.expected.json index b702d6c495..69d38e654e 100644 --- a/tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d4cbd9476c638f58ea42456b67ec17c2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/model.expected.json index f8acf683ad..1fdfbce2a2 100644 --- a/tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d4f50d7d88e9c968c1e69e2c88508bc9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/model.expected.json index 0d9885a3e6..f234c91e1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d548102740c166c94c1585976df85834/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/model.expected.json index 8d981e1963..c005bcc66f 100644 --- a/tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d563cbf2c040240a470a21faf1f336cb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/model.expected.json index f428ffb9f0..f5ba3c9593 100644 --- a/tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d58aaa071ca86ec814d84096e26fa6d6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/model.expected.json index 6d27115992..133cf6bc07 100644 --- a/tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d5934d344621e95bfb757cd4fe12b3f9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/model.expected.json index d96ecdc3a8..55e964143c 100644 --- a/tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d5c4f9fd5e009e4efaeda02b5577fa3c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/model.expected.json index 15b3bf9d19..b14c61ee50 100644 --- a/tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d5f6742f1236a8cc8b59fcce2604fcf0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/model.expected.json index e207cee410..a29b40b409 100644 --- a/tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d60b24319fab7ae0818780057329fe3c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/model.expected.json index 5f0bc203d5..3354252a45 100644 --- a/tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d6126c026677dbe18227570b51c9ba40/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/model.expected.json index 3f2bcb2cd6..db17049654 100644 --- a/tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d630b8886b00763ff5fdcba6b0acdfad/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/model.expected.json index 479a5accee..a87b7bd9b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d6433d786cf5b2c2d5d4f84e13ebbeff/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/model.expected.json index f9be48178a..4db830b35a 100644 --- a/tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d6b3494aaacb9f588de0875051f0040c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/model.expected.json index 0643217ff1..afdee18997 100644 --- a/tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d6df3f33a48f4c110d5f35a0d6649a10/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/model.expected.json index 6d3fe8113b..0829368ad6 100644 --- a/tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d6e6abaa4508ba4e8f498b547cb7b484/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/model.expected.json index 00dcb14843..517a72cd89 100644 --- a/tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d712140e47b1aced2902ff8b63805eaf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/model.expected.json index f4c8d6055e..692890728a 100644 --- a/tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d72e3ef20e4e6ce59aac43b9bdadb680/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/model.expected.json index e3e3476f6a..bd132d6e16 100644 --- a/tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d7480be9792039d938131bb1cf2e5396/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/model.expected.json index c0beccba60..c81ec98be4 100644 --- a/tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d75b01e01b11eb07e4bc4fbd71ce3b5e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1_1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/model.expected.json index c2d93d90f3..73eb487d9a 100644 --- a/tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d77d039eded33b2161c11a3e2582ff8b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/model.expected.json index a3a0496552..6c06fefea5 100644 --- a/tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d7c44baa298084f75524e68994d7f48d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/model.expected.json index 378ae6dd19..00cd5dc1e8 100644 --- a/tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d7d816b10a6f459ed78f1bd604bca06f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/model.expected.json index a7b0cbc700..db23cd7790 100644 --- a/tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d840bf570b5591c94e3744e977db18c9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/model.expected.json index 72d3b9b2f3..fc366c40b8 100644 --- a/tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d89a06ed8f4ec8185046a435ad85ca8c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/model.expected.json index 5e2cd9c77b..349a24f987 100644 --- a/tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d8eb6baba24eaa3fd9db1695871e9a02/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/model.expected.json index c87d433f60..7a17cd7bdf 100644 --- a/tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d908114cc84df4098382dc169c3d33d2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/model.expected.json index c211fc5901..1fb224b95f 100644 --- a/tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d90cedcab21d181b33a89f6dce2a9d92/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/model.expected.json index cff7488a18..83d61ff8a7 100644 --- a/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d92076e69308eb50f5eb562d89a97d2e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/model.expected.json index f782b7ce9d..b5851ec6c2 100644 --- a/tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d943fb912926ca72b165e37a50117f0b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/model.expected.json index e592fbc1aa..85939d0832 100644 --- a/tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d949e29f0824109241310a096cc10722/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/model.expected.json index 0d7f61c8dd..14e9e6d951 100644 --- a/tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d98e4c46386fe1cb7c5878769a04cad6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/model.expected.json index 3fe054c7ea..56937bd328 100644 --- a/tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d9b7bc6ac6d954267d819c0f76d17a98/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/model.expected.json index bffe2765e7..65738718e5 100644 --- a/tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d9d7484d2c3845cb2dfb71b35a280914/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/model.expected.json index 8584da3c77..05ecb92c7d 100644 --- a/tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/d9e130069d7226626220415e5374f4d8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/model.expected.json index e860de87b9..009f660a10 100644 --- a/tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/da2dd87b9830b0d92b6148601757e71f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "let1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/model.expected.json index bfc3ee1d7b..18146088bb 100644 --- a/tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/da3454572e4f3dd1b2d1e78940b0f0fe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/model.expected.json b/tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/model.expected.json index 68c7256d33..d1fbf5e81b 100644 --- a/tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/da883f3c7ed0cdb26f8c84c1fffa5c86/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/model.expected.json index 0bf6498f03..5a569d6bbb 100644 --- a/tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/da973f85880a36c6073f00b808f88b6a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/model.expected.json index a1497762ba..c382d220b1 100644 --- a/tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/daa42b8b7081f9119fb8929638de497c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/model.expected.json index b45a9531d6..e4635d68fd 100644 --- a/tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dab9f5202b2b1070b876ac9463bfb41d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/model.expected.json index 49ba515445..52ed1e52b5 100644 --- a/tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dad7b9b0bdd9e288f1dc3b19ec96c213/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/model.expected.json b/tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/model.expected.json index 5110e0e851..cc864d8cb5 100644 --- a/tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/db116ac9b252e8eb75103d22161db099/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/model.expected.json b/tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/model.expected.json index ba08ae3887..5955e04e86 100644 --- a/tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/db16c0f1b3325f600e8e589ed559de53/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/model.expected.json index e35fd7a0cb..7039c7a25c 100644 --- a/tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dbc08914b7c5505e1136cc21ac9d5125/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/model.expected.json index eac47021b8..9ff63e2a9d 100644 --- a/tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dbf9ff4b4f3e79b96504ed12188ad2fa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/model.expected.json index d432509985..b2aae0b842 100644 --- a/tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dc23eb30711c692381b05041b160b972/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/model.expected.json index d4876c96b5..d9307c5079 100644 --- a/tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dc313d314ac3d4882ffeb1b18c98895e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/model.expected.json index cd41f19be3..c8f753f611 100644 --- a/tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dc672cdd8a4df36b49833dc8762a79bd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/model.expected.json index 53913a6f07..2f6e3a160f 100644 --- a/tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dd2404135067bc1bf50c79709a678888/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/model.expected.json index bb6dca1354..fefd2331f4 100644 --- a/tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dd53f8032612f41cf818d2fd9f86229c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/model.expected.json index 5727a1e9d0..c899067a01 100644 --- a/tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dd69d43592ee50c25398c0d09f0db6ec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/model.expected.json index 6eb30e1ec8..a18f28b27a 100644 --- a/tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ddc59e161a729c98406b1fdbadcf1931/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/model.expected.json index d0dd47e335..35a2fdc57c 100644 --- a/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dde8c80f0b2d3b76d21ae3c49f3f56c1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/model.expected.json b/tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/model.expected.json index 78cab74e2c..e6f8829b29 100644 --- a/tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/de1153ba8992148669da05f4713891ff/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/model.expected.json index 9bf6b87654..34af4fc56a 100644 --- a/tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/de41745f2cd146147d539b8b2a4fe97f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/model.expected.json b/tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/model.expected.json index c7405fbbd6..55c85b31dc 100644 --- a/tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/de4b9074bdc6984c3245f04df15c8c96/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/model.expected.json b/tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/model.expected.json index 65d57d452c..2042ca4527 100644 --- a/tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/de829bda6aed51d91ed168dcaa7d3283/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/model.expected.json index b024462293..ab0dbcc494 100644 --- a/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/de9716a7ff65a1574f48f0b1858be3bd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/model.expected.json b/tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/model.expected.json index 83f556667c..87ee247c03 100644 --- a/tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/de98c56929c67f420c29fa2f74d46c69/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/model.expected.json index cfdaf9e580..68fe789331 100644 --- a/tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dec056eee47fd05a251225b16b62ab64/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/model.expected.json index dc172b4bf5..fd7c40327b 100644 --- a/tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dec8399568996e2cac2a2f4e6eab94f7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/model.expected.json b/tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/model.expected.json index fa88380c3c..0837e131c9 100644 --- a/tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/deceb37952fa992b20b6038107ef1c91/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/model.expected.json index 07dc18d4dd..019e38d8a7 100644 --- a/tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dee8cacb2b0d2d2e4e260e919675594d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/model.expected.json b/tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/model.expected.json index f53f8baa53..48cdd4e581 100644 --- a/tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/df221c6ed757b169b367cde70ca01740/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/model.expected.json index da27afe466..3a6e17122d 100644 --- a/tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/df25e8e6fa4509621aa00858c52537f3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/model.expected.json index 84297eded6..a91348699c 100644 --- a/tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/df2c273b94d39520c80a1bd97d7f3a5b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/model.expected.json b/tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/model.expected.json index e814a35add..3b0114ef25 100644 --- a/tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/df7f516a0aca4383de3282063aada958/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/model.expected.json b/tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/model.expected.json index d13bb32392..d9c530961e 100644 --- a/tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/dfa5468062e090930fa12617870524da/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/model.expected.json index c676fd60cd..33559136c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e02f77cea3324e91d885d1f3fe504cd4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/model.expected.json index 25c45662cd..ef02f382de 100644 --- a/tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e070168566c16231cc6322ee38e1ac49/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/model.expected.json index 6bd4bac918..f6dd5d4a81 100644 --- a/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e0bb089c7844a06fba3ed1abd7cb6608/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/model.expected.json index 99f6ce2f1a..e925a82fe7 100644 --- a/tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e1044649abbc9d8d84153f49c31608fa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/model.expected.json index 10da77aaf3..adb588f637 100644 --- a/tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e1095300fed2e22ccb27b795ebbace46/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/model.expected.json index 01c39670e4..f8b1e7aa41 100644 --- a/tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e111e9686fc1e2309b88378ea20b03b7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/model.expected.json index bbee86672b..1c312793f3 100644 --- a/tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e1294b8c2c5314f98240221178785764/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/model.expected.json index 5c2553d893..bd63464f64 100644 --- a/tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e13c11158e6c85d45ce49409c9cd8ceb/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/model.expected.json index 0c2411eef8..a8401c6701 100644 --- a/tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e14d717d203fa10fcdf72b541c14ba80/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/model.expected.json index 26060d9fbc..4abc563713 100644 --- a/tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e1aecd4c14589221e87e2ec00b232d51/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/model.expected.json index cbdd254e86..6a95e7816a 100644 --- a/tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e1cd26d93bc21f5125614f06e04fe307/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/model.expected.json index 769d4bd868..6733d2f3fd 100644 --- a/tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e1ffc88979eb73efb8ee6166eff8ad49/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/model.expected.json index 7fced2990e..89a0c4299d 100644 --- a/tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e21cd7b0f710515a79d787945d809a81/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/model.expected.json index 1522019084..0eca4a6eee 100644 --- a/tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e23b30b15d31c2b5b4eadd501c0770ec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/model.expected.json index 649864d619..36f30844bb 100644 --- a/tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e284f026466fe24b24af370e324ed842/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/model.expected.json index b20398d62a..2a0e0fc8f6 100644 --- a/tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e29c0260c4c2c194df9bfcb06e99a6d0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/model.expected.json index 9bf121be79..9c74873165 100644 --- a/tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e2f22e0ba5654302502f31d32b39e260/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/model.expected.json index f4818729e0..c722bb7aa6 100644 --- a/tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e31e8258961a4a8fa32e4eb491491bdc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/model.expected.json index 355a3b2f9d..34c6107eb9 100644 --- a/tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e33c5a4b1eca296873386a312774d872/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/model.expected.json index ea48af39aa..30e833e59e 100644 --- a/tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e34605b6797826c4331b589705613f02/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/model.expected.json index 4c49043fda..c321d79903 100644 --- a/tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e365ceb4dac67b8e61a50d68a2af7285/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/model.expected.json index 928d5be1f5..5780476ec3 100644 --- a/tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e382656008ccf8727fd5e055cf6debfa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/model.expected.json index 6076b4bb99..73e997d1ca 100644 --- a/tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e38dc481ce407a6a1f53e6580e562bef/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/model.expected.json index eec94bff6f..cf6dc40a30 100644 --- a/tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e3a244e0c1531a789b3b2b6ea6dce563/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/model.expected.json index 442b6fbd06..63caf218d2 100644 --- a/tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e3a6177402630530eb98e2268949540f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/model.expected.json index 72a1dcce3e..80119ef6af 100644 --- a/tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e3bc51416538b2caf00e19e5640c44e2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/model.expected.json index a6fde62091..fa2e9c03c1 100644 --- a/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e3f9560663238de1da11e96346429b1e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/model.expected.json index 9fa7cbac31..f70f36cc0a 100644 --- a/tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e409a673a76b4471de16f12370c89c4b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/model.expected.json index 382bd91702..ee1d9f9b44 100644 --- a/tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e411c4ea45ae7f66786a093af8dd679e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/model.expected.json index ebe9ed4fe8..660633c78d 100644 --- a/tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e4bdea8fa38ec88f12183229003d0816/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/model.expected.json index 0476a1671d..553ac45ab0 100644 --- a/tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e4efb5b7c5d268bf08ca728bba8f9a3a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/model.expected.json index a53ce1277b..1942b57cd1 100644 --- a/tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e50b067fb90fe11172cb0610514ccd39/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/model.expected.json index f58c27e721..c49631ce10 100644 --- a/tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e51b695dbd433af6cd1f71e5e1c83b01/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/model.expected.json index 025b03c50c..f7776e8831 100644 --- a/tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e52709f55be1d4b847f34e24378fde01/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/model.expected.json index 7ada98f19c..72fdc52cd4 100644 --- a/tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e579ee476594ce184db0bd4a70bd44f6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/model.expected.json index 1f44f58b2d..8dfc7a4c8d 100644 --- a/tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e5c113460990fde26723d11aa27cbea5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/model.expected.json index 980abd7d0f..7f1afcd48c 100644 --- a/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e5ef686faac39c34b542eec223509aa8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/model.expected.json index dc8165fce8..396d4c6b74 100644 --- a/tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e5f4a75a9e27bf4ccf95b4be8aa047b9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/model.expected.json index 1d3113a165..1f595c7b2d 100644 --- a/tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e637e7d01e5d483d8840ac29a760548c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/model.expected.json index c36bdbc1bc..98730f43c1 100644 --- a/tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e64befa0b6da3e1c9f30faf22b2449df/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/model.expected.json index c39d494d17..9c4c27cfe5 100644 --- a/tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e65878a75f8a723504c5189d62b6f391/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/model.expected.json index cfc927e80f..e390eee6e5 100644 --- a/tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e6b42a5e4f082c16f763685001476c97/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/model.expected.json index 714fd96a08..f12c664b1e 100644 --- a/tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e6cb9c836b54fafe792680c969f86e0c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/model.expected.json index d398355813..05faf02890 100644 --- a/tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e6d35b55e35082d3fa2dd4068f7ebfdf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/model.expected.json index baeeb9b237..8dc41bc5d0 100644 --- a/tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e6e4b876fba7437dd65fd67c136855f9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/model.expected.json index e049fc052a..de33619f7a 100644 --- a/tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e73f7a7c31a8573f1ed7d8d617123c57/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/model.expected.json index 75ea1fa5ff..2a7778a066 100644 --- a/tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e7a6d29d4285dcfdd7daddc00be2c882/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/model.expected.json index e69993f379..f858f124ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e7f89fcbcdbd0a79caefef0e87678c8d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/model.expected.json index 9f836cde3b..9f98ede0c9 100644 --- a/tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e800461807962940370a2085b2b69d2d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/model.expected.json index c5e2d82f81..e013bba2f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e82a67e0fdd3e0139246615decdcd5c5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/model.expected.json index 82a84c206e..239676697f 100644 --- a/tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e840a5670518b4972194e3436761ec3d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/model.expected.json index f06c65f4b1..f434df1d6e 100644 --- a/tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e87d232f06188474ec6e722aa7e64525/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/model.expected.json index 3276cf3d75..92744967c6 100644 --- a/tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e8b367599a5f7fcb2e355134b78bc13f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/model.expected.json index 66d88bd345..162c8c0096 100644 --- a/tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e8c88ac8a94a5384bada05774e023b0c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/model.expected.json index 69c5c8a6a3..35de9d364c 100644 --- a/tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e8d5dccfc3d9f7b3ee51ca0a76946dd8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/model.expected.json index 2535fafc81..2d16ce1dbe 100644 --- a/tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e8f228bf132523400052fdfd6c5de67c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/model.expected.json index 859d46da41..f0ff0e7a71 100644 --- a/tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e91966578f72192934799d4557e48802/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/model.expected.json index 1fbaccd1ab..4fcc12359a 100644 --- a/tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e91bac96af4d1f0fc2a422fc0e662a73/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/model.expected.json index d90e8f5cb3..960b1c8b57 100644 --- a/tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e938482d4eff3413375a9a4f1f09648c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/model.expected.json index 1642fc9d0e..04792e5eb5 100644 --- a/tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e94042e71ae4aca4b2dcbe6a1c03eeb5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/model.expected.json index a3e02951f6..902ee90451 100644 --- a/tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e945a36e0d23b836d582e691732a717d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/model.expected.json index 3bc7eb613c..1000b745a1 100644 --- a/tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e94f81e31dce6a8efb7cdffe25cc7a9a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/model.expected.json index 4e6719c43f..a6d7527c51 100644 --- a/tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e9929aa72d7832a4623e7b816a2e9af2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/model.expected.json b/tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/model.expected.json index 36308d21a8..aaf3d54061 100644 --- a/tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/e9d7c8d883f5971d53a58ee5183b4c11/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/model.expected.json index 0983072b34..4834e319e4 100644 --- a/tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ea5025564f1fcb5c1c2588afb4483b8e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/model.expected.json index b00a64329d..2aef1b34c0 100644 --- a/tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ea79865a51efdd02842ffb6654cfb7e5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/model.expected.json index ac44d1e08f..484aedbb3f 100644 --- a/tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eaa45321fa09e5ac7b722523a615feba/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/model.expected.json index dd6f4778e9..c95d5a66a6 100644 --- a/tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eae2dc34bf5517b3a4070ef1714f089a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/model.expected.json index 43d5b959f6..acf1251b7a 100644 --- a/tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eb0e88cd958943e2e87a5ade86710827/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/model.expected.json index e0e0ecab74..bdda6165f7 100644 --- a/tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eb22d7172ced999f8568dccf4a1a3d94/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/model.expected.json index c7bc4b3b37..4ab57dda66 100644 --- a/tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eb5e229a3045349ef118229f11ede50b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/model.expected.json index 1fb40b9a38..3677c3afdc 100644 --- a/tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eb60aacef45f3261fb8764a8c2d339a9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/model.expected.json index 98d8523cc5..1e3a1a4905 100644 --- a/tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eb76f41475438c3ed398cb3e2dbd5b6b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/model.expected.json index 51c8f868ef..530d2ec435 100644 --- a/tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ebd771c5c81dac1c206f28e4d3eaa737/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/model.expected.json index bb61937452..ae40a17703 100644 --- a/tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ebee2b95d0090aad677f2fbfcf9e0274/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/model.expected.json index 01dba3d8c2..fe79df9a4d 100644 --- a/tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ebf05e849ab1490bdd5852d44db646c8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/model.expected.json index b020a097db..a2263ff26e 100644 --- a/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ec1a6f796ecb53ab8b847c313c165256/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/model.expected.json index 99052d3035..6e24c82c47 100644 --- a/tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ec9aed752e5eeb363b644516fc85dd8f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/model.expected.json index 33cedc2750..187be12376 100644 --- a/tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ecd0956ed566db30a05226812f9a24c2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/model.expected.json index 5c2e47d5cd..8e3b1f3d34 100644 --- a/tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ece12ae05e35cb440db8d49bdd6a83b8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/model.expected.json index d0cce27c84..69ade048c6 100644 --- a/tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ed0e6ab88e79cb8c6c179357811e4b33/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/model.expected.json index bd2c419733..7865d68078 100644 --- a/tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ed2ddcbb96d234e4f4dd7147965b47fc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/model.expected.json index ca6bf7e035..e964b3a76c 100644 --- a/tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ed3c0907a796850d638f57e4004efc44/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/model.expected.json index 7ffe21af23..b262d56aca 100644 --- a/tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ed529213e4789b79a6929c96d89b6eb2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/model.expected.json index d6b9c6e646..c9b800ba45 100644 --- a/tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ed6e2ac3457110fd811f7f6066338883/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/model.expected.json index e8e8056fa8..ff1ed29338 100644 --- a/tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ede82ece37232fcdcff220a71e6c4336/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/model.expected.json index 170f28e02b..52777c742d 100644 --- a/tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/edeee104245da0f75d4b86e7146e073f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/model.expected.json index 433e991a75..304cd47d6d 100644 --- a/tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ee0f4f29b6fcae0b8a1a80540fff7469/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/model.expected.json index 39504ddb29..508c3d2caa 100644 --- a/tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ee3e8d0c49be4d87a16584a000657a1f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/model.expected.json index ca6dec10c0..6633666afe 100644 --- a/tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ee41686a3922fcd3e8d19cfa965b0277/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/model.expected.json index cf342db12b..7a7af85d95 100644 --- a/tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ee779538eab812cac235345d906f97a0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/model.expected.json index c319e8bfe4..f0e9bbe897 100644 --- a/tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ee82afd2cd6a746ecf89368b7b1bc6f3/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/model.expected.json index f124fb18b7..6c89c82149 100644 --- a/tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eea850512090333fd6ac248e3474adfe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/model.expected.json index d9e40ba0ec..aff73a99bd 100644 --- a/tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eea88321d1ee362a31dd52ddf4ec6f75/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/model.expected.json index da00a8695a..ca2734ef32 100644 --- a/tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eebf57c0e408c9d7b113317d714541bf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/model.expected.json index e406faf091..209387f52c 100644 --- a/tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eed1a2fb0387d257448ddfccff4bd5f5/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/model.expected.json index 7b6962e4b6..d185d120ea 100644 --- a/tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/eee79bab97319cb6a1cfb2a945bcc1a6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/model.expected.json index 09875090bd..3840632531 100644 --- a/tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ef1db2a31177900e3baf4331a5942ac8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/model.expected.json index a7f9a03127..d7d4371979 100644 --- a/tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ef336eba26eb0a9a90de40b18d840b84/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/model.expected.json index 3cc69323b8..963c98fbf9 100644 --- a/tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ef422b238d7533811a8ed2445009e19c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/model.expected.json index b574da41cb..13a70c41da 100644 --- a/tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ef443db8cd28e24e1a6d7a75548c1de0/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/model.expected.json index 5c23cf24cf..c2d467ae11 100644 --- a/tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ef47512eb208c3dc333c0f019cdd3b41/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/model.expected.json index 09074314d2..89a6366537 100644 --- a/tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ef483210845a518a24793add7f479305/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/model.expected.json index b8b4f35808..4d1e787eaa 100644 --- a/tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f01773dda299c7dcb2eaf99eff9bf075/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/model.expected.json index 23af5eaee7..ccaf29bbac 100644 --- a/tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f019c5cdd99099f33d53cf9be0031c0b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/model.expected.json index 2284412cfc..3902f539c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f01fdac91e838e2203abc5cc7899830c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/model.expected.json index bb83a286a4..a4748c7199 100644 --- a/tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f04824a85432120b11d2c0f024940b08/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/model.expected.json index f53533579a..8fce445fbc 100644 --- a/tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f08df3b51ad479d28a8ea0a94707f70c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/model.expected.json index 68d543687a..3d45672ce5 100644 --- a/tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f08f3252ac868467a41c8c6d7f0bd425/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/model.expected.json index 74af729b88..19f0dc1092 100644 --- a/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f0a8b4dc9eb64ca83b84026196a58e07/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/model.expected.json index 983fad9ec0..7a869bf691 100644 --- a/tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f0da1b32d64901550697edd2a56acbb1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/model.expected.json index af160f3039..489aa8d5dd 100644 --- a/tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f0fc2fcf48b2784adbc82bebe8debe1d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/model.expected.json index 90895d3992..5aaa1ecb7b 100644 --- a/tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f11a6d1a6b6ea819dc5ab8227c9c909d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/model.expected.json index 7078085840..d925a0d470 100644 --- a/tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f17b4b0018354dbb3657f42a48ff8c38/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/model.expected.json index 982d2534b5..bb0dc52a3f 100644 --- a/tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f1fd537fecc6c852b01a571e701d7e59/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/model.expected.json index 5090355f22..27b1e7cffc 100644 --- a/tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f243bccb3b210797782c1c047cbf7643/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/model.expected.json index 952280b035..9a8cbb3f06 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f2555ccbaf900e06880e7a06e4d54635/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/model.expected.json index aab1c822b2..b92e30ec68 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f2b5914faa565573231cd3ddd7e5704c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/model.expected.json index b50a337137..50d3668be3 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f2e7d31ce6e0939bd05b0cb55c362a05/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/model.expected.json index 1cb624b979..98730901f6 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f2f725a26126338e19e3f08ef990f1da/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/model.expected.json index 607ebd3874..26b3675239 100644 --- a/tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f3366597baeed3d35bc64e12142e5d36/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/model.expected.json index 60f6e5956e..f954afaaa1 100644 --- a/tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f3b4b055e266a994218c9c7c4772d7db/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/model.expected.json index a33f39c36e..c35f9d8661 100644 --- a/tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f41a286594c108909b183b37074c3e76/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/model.expected.json index 9d7b05125e..f9fdf33b36 100644 --- a/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f42851729ee7b455bb9015d9c3e76513/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/model.expected.json index adc1b1b7d6..87068266ad 100644 --- a/tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f4db5a8548a15052f8da491f1a84ecbe/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/model.expected.json index cf203d20ab..1e51c24587 100644 --- a/tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f5650f709d784157b7cac1ee24385d89/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/model.expected.json index efaa1d84b9..975afcddc2 100644 --- a/tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f57b04b76b4d073350370fd57711d175/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/model.expected.json index 8a0793da92..1d258bdbb8 100644 --- a/tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f57b3d11bf42b1452c009a9c008864fd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/model.expected.json index 9c94cf1675..50c8b71713 100644 --- a/tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f5827ae829a0622e323234a0dda7c6a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/model.expected.json index a5c4024884..87479a6a14 100644 --- a/tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f5a3242772b8cd94e91769f8879256da/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/model.expected.json index 7ac31a68d3..19dd5b83fc 100644 --- a/tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f5b84f33ec9ad582d7a93d92c0e8cba7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/model.expected.json index a419a7403e..e17ba744e2 100644 --- a/tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f5e0dd3dd1ecaf45dc4127467fcbd4dd/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/model.expected.json index 2a61a86e58..59d7d28093 100644 --- a/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f62f9ea8b0746be5eaea19e9cede8737/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/model.expected.json index cde1d36155..975ee597de 100644 --- a/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f631685d83ae9335bfaa14ec9c45af5a/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/model.expected.json index 721344982d..69ad4c8090 100644 --- a/tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f6423154493aba2f92069b620dc65a81/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/model.expected.json index 0479e287cc..95a8ff08e9 100644 --- a/tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f64a23f20f4b5987c912ace009afe7fa/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/model.expected.json index 34967fcb58..bfe59686dd 100644 --- a/tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f6964545525c08e038e50dbb7491e10f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/model.expected.json index 0a1c6be968..2e59f83190 100644 --- a/tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f6f3227d62d29091577943cbcc8b7b7f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/model.expected.json index bad664b251..59dbb5cde6 100644 --- a/tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f6f7c303c2a2778d821d72c0850eac44/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/model.expected.json index 07972b4474..186691985a 100644 --- a/tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f744bd6464f77eed6047d49b3ab882d7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/model.expected.json index dd86b5de7b..6c20a25977 100644 --- a/tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f76691ed63ac07df5afa89ebd0185bfc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/model.expected.json index 122f8c62f2..45a8a22417 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f7735ba844b813417ce561c482cb8646/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/model.expected.json index 532495a774..0acb690f5b 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f7b45af6add056ea2e2175a1570992d2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/model.expected.json index 939905c494..3deb5cbbb1 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f7c8ae4c852309475656603fd5f504ec/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1_1"}, {"Constant": {"ConstantBool": false}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/model.expected.json index d3417feaf3..d2df03d805 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f7ca7b1d6cc6e70633f755ff96d8e503/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/model.expected.json index fe6322d272..7d22b2d5c7 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f7e0e3cd39f57231ef5045587906ea06/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/model.expected.json index 387a61efcd..37bef21343 100644 --- a/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f7faf3149f0cc222402ea4da0e2865f1/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/model.expected.json index 3f026073d6..f2ed0fc054 100644 --- a/tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f82a4527f67eca4c2d17cab8c2c8925c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/model.expected.json index f9bafece7b..70f9b126be 100644 --- a/tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f8544bf93a9335fb77cbf5bfacf6e962/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": true}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/model.expected.json index aafc7766c4..fd704a86d6 100644 --- a/tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f8551d2ded7dfbb7f4fc2fefcfe32146/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/model.expected.json index 906a194b72..8614f8e6c8 100644 --- a/tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f8fee1e382cb8c8e9f5b9a3ebea35fb9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/model.expected.json index 208e632ec1..78ac0e6aed 100644 --- a/tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f98271d6100357f37b1ed437cd031c73/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/model.expected.json index e138e69063..f3b02b7db6 100644 --- a/tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f99a15c6848a54572cf2de6cb08a28a7/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/model.expected.json index c4f2f8d9bc..d7f5583fd1 100644 --- a/tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f9a76a3a228ae3fd65dcf7c0e2d89cdf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "given1"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/model.expected.json index 82bcdf1d4f..ea82588a20 100644 --- a/tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f9d485560d6cb58f7ee08ec9126031d2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/model.expected.json b/tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/model.expected.json index 3ade35c8c3..b782146fa2 100644 --- a/tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/f9d78cef087ed11d5d6a829969836193/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/model.expected.json index 19c15b76c4..cb81a2c610 100644 --- a/tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fa438291f1596214e9904d9d6f8d6d2f/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/model.expected.json index 53f5ddcad8..a75de477f3 100644 --- a/tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fa49a38ca4d09bdd3747fb2d64454682/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/model.expected.json index 0eec0584ab..4d281c1cef 100644 --- a/tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fa781d63daf055c90275ea7edc79ec2d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/model.expected.json index a49fcd98b9..4bb6006c4c 100644 --- a/tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fa79e79e1ecec248182967b52cc2b211/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/model.expected.json index f13ea0bec5..a8b7705a40 100644 --- a/tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fbc3ef48d14e02ea27959c4d1eb1cd89/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/model.expected.json index 60d2ce8e76..1883d4bd97 100644 --- a/tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fbfe220f5450d8f205a3e3e9ec02f054/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/model.expected.json index 14212aa41d..5b145f53e8 100644 --- a/tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fc3b7a0fb6d208b6d517245174d48f1d/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/model.expected.json index 69d12bb134..5a16a24b06 100644 --- a/tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fc6449f2b4958962d63cffad0c3fa8bc/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/model.expected.json index 9f3a01c520..95b9cbf4a0 100644 --- a/tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fc809d43c1d22b53118425514b8db93c/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/model.expected.json index 019c3904e6..4c1012b079 100644 --- a/tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fcd0c80113acf558e792eecf20ab9b66/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/model.expected.json index a78afae45b..c43203855b 100644 --- a/tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fcd37dc5d1ffb7d6a0d6bb54244f1be9/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/model.expected.json index 984bcef532..12b930482a 100644 --- a/tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fcda2c5f3d64e89af9ad58a5cc80d2ba/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/model.expected.json index 9032254667..4a7c0984a2 100644 --- a/tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fd01009e3310a4fd69199a796116c7c6/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "given1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/model.expected.json index c9400b4815..e6029180f8 100644 --- a/tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fd678aa87d9bd31e9a7b2c15ba98bf45/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/model.expected.json index 787ecd44da..fd803653ff 100644 --- a/tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fd7b6f7ecedac668274924e6b8b11ac0/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantBool": false}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/model.expected.json index c903ecaee5..82c9c13be9 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe212de553740bfdc730e0a8d309134b/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/model.expected.json index e3e68ad7ad..2594aefbf3 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe305e153612d5a71fc20d4fa69a948e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/model.expected.json index 77db481857..23fb9d6e67 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe69fefccf202453d52ce4d1db22e655/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/model.expected.json index 5bd6ebbc25..a296f50f59 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe774ea400594cb14dd3fa5110d42c82/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/model.expected.json index c75653c8d1..331c089762 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe7777e1ad2badafc794d13da8eddcf4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/model.expected.json index 32bb6420d0..5d24a69543 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe94536b17f67b32662685867f8081e2/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/model.expected.json index e4326a3541..43508267d6 100644 --- a/tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fe9faaf55302fb0443c460ecf2f7d426/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var1"}, {"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/model.expected.json index 3989cfe701..e4e4f25b38 100644 --- a/tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/fec2abdead2802a7ba6dedf110d62af8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/model.expected.json b/tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/model.expected.json index 43e80634bf..61c122b60c 100644 --- a/tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/feed8f610e58923dd317fd57dfee37e8/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/model.expected.json index e8639ebb4e..96799ef328 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff12462023888e1e691c92627d7a1c53/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/model.expected.json index 382e3c833f..e275addb05 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff226931c79ca27e68e71f211b4aa84e/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/model.expected.json index 1a3c3bc8f3..538e776c0e 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff24366e88f4086c0e1b6a272319c4cf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/model.expected.json index bca1bdc19f..f1f6723a51 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff245493fc8f9f5cb71ace3838fe38ce/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "fin1"}, {"DomainInt": [{"TagInt": []}, []]}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/model.expected.json index 71b400cb8d..9bb9f92ec7 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff52b10be7a6ca5288aab35423d864fe/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "var2"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/model.expected.json index d4c592572b..70a5816f1f 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff5a4c2b2d4b2d7988a7eb5334e625ac/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/model.expected.json index 0a9374edc0..e256ce35a7 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff8b241d52c3ebd4d986c5218030d318/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/model.expected.json index dfeb8c6e93..0b3fedf27d 100644 --- a/tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ff9d4f6eb338fa49d2628bab60bf48ac/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "ESSENCE'"}, "version": [1, 0]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/model.expected.json b/tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/model.expected.json index b9ab3a3371..4e70158aff 100644 --- a/tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/model.expected.json +++ b/tests/parse_print/autogen-bilals-fixed/ffb32a0c4fd02d6181ed0120a2781cb4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/289~1435114959_70/model.expected.json b/tests/parse_print/autogen/289~1435114959_70/model.expected.json index f73107c16f..537503a3d3 100644 --- a/tests/parse_print/autogen/289~1435114959_70/model.expected.json +++ b/tests/parse_print/autogen/289~1435114959_70/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/315~1435148451_38/model.expected.json b/tests/parse_print/autogen/315~1435148451_38/model.expected.json deleted file mode 100644 index c38c178be1..0000000000 --- a/tests/parse_print/autogen/315~1435148451_38/model.expected.json +++ /dev/null @@ -1,732 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainSet": - [[], - {"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}, - {"DomainMSet": - [[], - [{"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - {"OccurAttr_None": []}], - {"DomainBool": []}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var2"}, - {"DomainSet": - [[], - {"SizeAttr_MaxSize": {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}}}, - {"DomainMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}]]}, - {"DomainBool": []}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var3"}, - {"DomainPartition": - [[], - {"isRegular": false, - "partsNum": - {"SizeAttr_MaxSize": - {"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}}, - "partsSize": - {"SizeAttr_MinSize": - {"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}}}, - {"DomainFunction": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - "PartialityAttr_Partial", "JectivityAttr_None"], - {"DomainBool": []}, {"DomainBool": []}]}]}]}}, - {"SuchThat": - [{"Op": {"MkOpNot": {"Constant": {"ConstantBool": true}}}}, - {"Op": - {"MkOpSupset": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"RangeSingle": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpGt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}]]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}}]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 9]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpGt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpGt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}], - [{"Op": {"MkOpNot": {"Constant": {"ConstantBool": true}}}}, - {"Constant": {"ConstantBool": false}}]]}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}]]}}}]}}, - {"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpApart": - [{"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}}]]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeSet": {"TypeInt": {"TagInt": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeSet": {"TypeInt": {"TagInt": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 0]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}]]}}]]}}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": false}]]}}}]]}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}]]}}], - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeSet": {"TypeInt": {"TagInt": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": false}]]}}]]}}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 2]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}]]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}]]}}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}], - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 0]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}}]]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeSet": {"TypeInt": {"TagInt": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeSet": {"TypeInt": {"TagInt": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}], - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 0]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}]]}}]]}}]}}, - {"Op": - {"MkOpSubset": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeTuple": [{"TypeBool": []}]}}]}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeTuple": [{"TypeBool": []}]}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/315~1435148451_38/typecheck.expected b/tests/parse_print/autogen/315~1435148451_38/typecheck.expected deleted file mode 100644 index e3be359921..0000000000 --- a/tests/parse_print/autogen/315~1435148451_38/typecheck.expected +++ /dev/null @@ -1,26 +0,0 @@ -Error: - In a 'such that' statement: - function([tuple (true), tuple (false), tuple (true); int(5, 4, 1)] - --> partition({false, false, true}, {true}, {false, true, false, false, true}, {true}, - {true, true, false}), - [tuple (true), tuple (false); int(3..4)] - --> partition({true <= true, false > true, false < false, true < false, false < true}, - {true, false >= true, true < true, false -> true}), - [tuple (false), tuple (false), tuple (true), tuple (true); int(1..4)] - --> partition({false, true, true}, {false, false}, {true, true, false, false}) - - partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true}), - [tuple (false), tuple (true), tuple (true); int(9, 1..2)] - --> partition({true < true, false < false, false > true}, - {true > true, true <-> false, false <= false, true, true != false}, {!true, false})) - supset function([tuple (true), tuple (false); int(1, 0)] --> partition({true, false, true, true, true})) - Error: - When type checking: partition({false, true, true}, {false, false}, {true, true, false, false}) - - partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true}) - Arguments have unsupported types. - lhs : partition({false, true, true}, {false, false}, {true, true, false, false}) - type of lhs: partition from bool - rhs : partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/316~final/model.expected.json b/tests/parse_print/autogen/316~final/model.expected.json deleted file mode 100644 index ce95254fd2..0000000000 --- a/tests/parse_print/autogen/316~final/model.expected.json +++ /dev/null @@ -1,139 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpSupset": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"RangeSingle": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpGt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": false}]}}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}]}}]]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}]}}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}]]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/316~final/typecheck.expected b/tests/parse_print/autogen/316~final/typecheck.expected deleted file mode 100644 index 89dc6cb8d7..0000000000 --- a/tests/parse_print/autogen/316~final/typecheck.expected +++ /dev/null @@ -1,23 +0,0 @@ -Error: - In a 'such that' statement: - function([tuple (true), tuple (false), tuple (true); int(5, 4, 1)] - --> partition({false, false, true}, {true}, {false, true, false, false, true}, {true}, - {true, true, false}), - [tuple (true), tuple (false); int(3..4)] - --> partition({true <= true, false > true, false < false, true < false, false < true}, - {true, false >= true, true < true, false -> true}), - [tuple (false), tuple (false), tuple (true), tuple (true); int(1..4)] - --> partition({false, true, true}, {false, false}, {true, true, false, false}) - - partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true})) - supset function([tuple (true), tuple (false); int(1, 0)] --> partition({true, false, true, true, true})) - Error: - When type checking: partition({false, true, true}, {false, false}, {true, true, false, false}) - - partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true}) - Arguments have unsupported types. - lhs : partition({false, true, true}, {false, false}, {true, true, false, false}) - type of lhs: partition from bool - rhs : partition({false, false, true, true, true}, {false, true, true}, {false, false, true, true}, - {true, true}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/317~1435132020_93/model.expected.json b/tests/parse_print/autogen/317~1435132020_93/model.expected.json deleted file mode 100644 index 6b1fb0b58b..0000000000 --- a/tests/parse_print/autogen/317~1435132020_93/model.expected.json +++ /dev/null @@ -1,50 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Reference": [{"Name": "var1"}, null]}, {"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpParticipants": - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}}]}}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}}}]}}, - {"Reference": [{"Name": "var1"}, null]}, {"Constant": {"ConstantBool": false}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/317~1435132020_93/typecheck.expected b/tests/parse_print/autogen/317~1435132020_93/typecheck.expected deleted file mode 100644 index 28abff4f96..0000000000 --- a/tests/parse_print/autogen/317~1435132020_93/typecheck.expected +++ /dev/null @@ -1,12 +0,0 @@ -Error: - In a 'such that' statement: - participants(partition({4, 0, 3}, {0, 0, 2, 4}) - partition({2, 1, 2}, {2, 1, 3, 0, 1}, {1, 5, 0, 5}, {3, 2})) = - {4, 5} - Error: - When type checking: partition({4, 0, 3}, {0, 0, 2, 4}) - - partition({2, 1, 2}, {2, 1, 3, 0, 1}, {1, 5, 0, 5}, {3, 2}) - Arguments have unsupported types. - lhs : partition({4, 0, 3}, {0, 0, 2, 4}) - type of lhs: partition from int - rhs : partition({2, 1, 2}, {2, 1, 3, 0, 1}, {1, 5, 0, 5}, {3, 2}) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen/318~final/model.expected.json b/tests/parse_print/autogen/318~final/model.expected.json deleted file mode 100644 index 1788600ec2..0000000000 --- a/tests/parse_print/autogen/318~final/model.expected.json +++ /dev/null @@ -1,23 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpParticipants": - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantInt": [{"TagInt": []}, 0]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}]]}}}]}}}}, - {"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 5]}]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/318~final/typecheck.expected b/tests/parse_print/autogen/318~final/typecheck.expected deleted file mode 100644 index 5f1ba70119..0000000000 --- a/tests/parse_print/autogen/318~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: participants(partition({0}) - partition({4})) = {5} - Error: - When type checking: partition({0}) - partition({4}) - Arguments have unsupported types. - lhs : partition({0}) - type of lhs: partition from int - rhs : partition({4}) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen/319~1435138340_66/model.expected.json b/tests/parse_print/autogen/319~1435138340_66/model.expected.json deleted file mode 100644 index 7206ccb87d..0000000000 --- a/tests/parse_print/autogen/319~1435138340_66/model.expected.json +++ /dev/null @@ -1,103 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainFunction": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}, - "PartialityAttr_Partial", "JectivityAttr_Bijective"], - {"DomainBool": []}, {"DomainBool": []}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var2"}, - {"DomainTuple": [{"DomainBool": []}, {"DomainBool": []}, {"DomainBool": []}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpIff": - [{"Op": - {"MkOpLexLeq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}]]}}}]}}, - {"Op": - {"MkOpSubsetEq": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]}}}]}}]}}, - {"Op": - {"MkOpGt": - [{"Op": - {"MkOpSupset": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}]}}, - {"Op": - {"MkOpNot": - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}}}]}}, - {"Op": - {"MkOpIn": - [{"Op": - {"MkOpMinus": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}]]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/319~1435138340_66/typecheck.expected b/tests/parse_print/autogen/319~1435138340_66/typecheck.expected deleted file mode 100644 index a4a18f6a86..0000000000 --- a/tests/parse_print/autogen/319~1435138340_66/typecheck.expected +++ /dev/null @@ -1,15 +0,0 @@ -Error: - In a 'such that' statement: - (partition() : `partition from bool`) - - partition({false, false, true}, {false, true, false, true, false}, {false}) - in - {partition({true, true, false, true, true}), - partition({true, true, true, false, true}, {false, true, false, false})} - Error: - When type checking: (partition() : `partition from bool`) - - partition({false, false, true}, {false, true, false, true, false}, {false}) - Arguments have unsupported types. - lhs : (partition() : `partition from bool`) - type of lhs: partition from bool - rhs : partition({false, false, true}, {false, true, false, true, false}, {false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/320~final/model.expected.json b/tests/parse_print/autogen/320~final/model.expected.json deleted file mode 100644 index 3b0d135017..0000000000 --- a/tests/parse_print/autogen/320~final/model.expected.json +++ /dev/null @@ -1,26 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpIn": - [{"Op": - {"MkOpMinus": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/320~final/typecheck.expected b/tests/parse_print/autogen/320~final/typecheck.expected deleted file mode 100644 index 95795e8027..0000000000 --- a/tests/parse_print/autogen/320~final/typecheck.expected +++ /dev/null @@ -1,10 +0,0 @@ -Error: - In a 'such that' statement: - (partition() : `partition from bool`) - partition({false}) in {partition({true, true, false, true, true})} - Error: - When type checking: (partition() : `partition from bool`) - partition({false}) - Arguments have unsupported types. - lhs : (partition() : `partition from bool`) - type of lhs: partition from bool - rhs : partition({false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/321~1435140010_44/model.expected.json b/tests/parse_print/autogen/321~1435140010_44/model.expected.json deleted file mode 100644 index e95c4fe9ce..0000000000 --- a/tests/parse_print/autogen/321~1435140010_44/model.expected.json +++ /dev/null @@ -1,684 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainRelation": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, - []], - [{"DomainPartition": - [[], - {"isRegular": true, - "partsNum": {"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}, - "partsSize": {"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}}, - {"DomainBool": []}]}]]}]}}, - {"SuchThat": - [{"Op": - {"MkOpAllDiff": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 12]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 6]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 9]}, - {"ConstantInt": [{"TagInt": []}, 11]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 2]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 6]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 10]}, - {"ConstantInt": [{"TagInt": []}, 14]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 10]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 7]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 11]}, - {"ConstantInt": [{"TagInt": []}, 11]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]}}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 9]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 10]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, {"ConstantBool": false}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 2]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 8]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 1]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 7]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 9]}, - {"ConstantInt": [{"TagInt": []}, 10]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 7]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 6]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 6]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]}}]]}}}, - {"AbstractLiteral": - {"AbsLitRelation": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 8]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 1]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]}}}]]}}]]}}}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpImage": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": - [{"TypeTuple": [{"TypeBool": []}, {"TypeBool": []}]}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}]}, - {"AbstractLiteral": - {"AbsLitTuple": - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}]}}]}}, - {"Op": - {"MkOpSum": - {"Comprehension": - [{"Op": - {"MkOpMod": - [{"Reference": [{"Name": "l_2"}, null]}, - {"Reference": [{"Name": "l_1"}, null]}]}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 5]}}]}]]}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_2"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - {"RangeSingle": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 2]}}}]]}]}}]]}}}]}}, - {"Op": - {"MkOpSubsetEq": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}}}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}}}]}]}}, - {"Op": - {"MkOpTogether": - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpAnd": - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 2]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 11]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}]]}}}}}, - {"Op": - {"MkOpIff": - [{"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}]}}, - {"Op": - {"MkOpLt": - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpGt": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}]}}]}}, - {"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitPartition": - [[{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpGt": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": {"MkOpNot": {"Constant": {"ConstantBool": true}}}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}]]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}]}}]}}, - {"Op": - {"MkOpApart": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}, - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, {"ConstantBool": false}]}}]}}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": - {"TypeTuple": [{"TypeSet": {"TypeBool": []}}, {"TypeMSet": {"TypeBool": []}}]}}]}]}}, - {"Constant": {"ConstantBool": false}}, - {"Op": - {"MkOpLexLeq": - [{"Op": - {"MkOpFlatten": - [null, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 9]}, - {"ConstantInt": [{"TagInt": []}, 10]}]}, - {"RangeSingle": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 7]}, - {"ConstantInt": [{"TagInt": []}, 7]}]}]]}, - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 7]}, - {"ConstantInt": [{"TagInt": []}, 10]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 10]}, - {"ConstantInt": [{"TagInt": []}, 11]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 2]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 10]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 12]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 7]}, - {"ConstantInt": [{"TagInt": []}, 7]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}]]}}}]}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/321~1435140010_44/typecheck.expected b/tests/parse_print/autogen/321~1435140010_44/typecheck.expected deleted file mode 100644 index 3a849a365a..0000000000 --- a/tests/parse_print/autogen/321~1435140010_44/typecheck.expected +++ /dev/null @@ -1,22 +0,0 @@ -Error: - In a 'such that' statement: - together({and([true, true, false, true; int(2, 11, 4, 3)]), false >= false <-> false >= false, - (true <-> false) < (false > false)}, - partition({true -> true}, {true <= false, false <-> false, false <-> false}, - {false -> true, true >= false, false <= true, false <-> true}, - {false -> false, true > false, true >= true, true <-> true}, - {true != true, !true, false <-> false, true <= false, true >= false}) - - - (partition({false, false, false, true, false}, {true, true}, {false, false, false, false}, - {true, true, false, false, true}) - - partition({true}, {true, true, true}, {false, true, false}, {false, true, true, true}))) - Error: - When type checking: partition({false, false, false, true, false}, {true, true}, {false, false, false, false}, - {true, true, false, false, true}) - - partition({true}, {true, true, true}, {false, true, false}, {false, true, true, true}) - Arguments have unsupported types. - lhs : partition({false, false, false, true, false}, {true, true}, {false, false, false, false}, - {true, true, false, false, true}) - type of lhs: partition from bool - rhs : partition({true}, {true, true, true}, {false, true, false}, {false, true, true, true}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/322~final/model.expected.json b/tests/parse_print/autogen/322~final/model.expected.json deleted file mode 100644 index 06c2decd60..0000000000 --- a/tests/parse_print/autogen/322~final/model.expected.json +++ /dev/null @@ -1,17 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpTogether": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": true}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": true}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/322~final/typecheck.expected b/tests/parse_print/autogen/322~final/typecheck.expected deleted file mode 100644 index bb50273e43..0000000000 --- a/tests/parse_print/autogen/322~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: together({true}, partition({true}) - partition({true})) - Error: - When type checking: partition({true}) - partition({true}) - Arguments have unsupported types. - lhs : partition({true}) - type of lhs: partition from bool - rhs : partition({true}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/325~1435147026_26/model.expected.json b/tests/parse_print/autogen/325~1435147026_26/model.expected.json deleted file mode 100644 index 536064bf6c..0000000000 --- a/tests/parse_print/autogen/325~1435147026_26/model.expected.json +++ /dev/null @@ -1,777 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}, - {"OccurAttr_MinMaxOccur": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}], - {"DomainBool": []}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpIn": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": - [{"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantInt": [{"TagInt": []}, 0]}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]]}}]]}}, - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}]]}}]}}}]}}, - {"Op": - {"MkOpAllDiff": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitRelation": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}]}}}], - [{"Constant": - {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}]}}}], - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}]}}}]]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitRelation": []}}}, - {"TypeRelation": - [{"TypeSet": {"TypeBool": []}}, - {"TypeTuple": - [{"TypeBool": []}, {"TypeBool": []}, {"TypeBool": []}, - {"TypeBool": []}]}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitRelation": - [[{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}]}}], - [{"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}]}}], - [{"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}]}}]]}}}]]}}}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], [{"ConstantBool": true}], - [{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}], [{"ConstantBool": true}], - [{"ConstantBool": false}]]}}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}], [{"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], [{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], [{"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}]]}}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypePartition": {"TypeBool": []}}}]}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, - {"ConstantBool": true}]]}}}]]}}]}}]}}, - {"Op": - {"MkOpTogether": - [{"AbstractLiteral": - {"AbsLitSet": - [{"Comprehension": - [{"Reference": [{"Name": "l_1"}, null]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, {"DomainBool": []}]}}]]}, - {"Op": - {"MkOpFlatten": - [null, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": true}]]}}}]}}]}}, - {"Op": - {"MkOpMinus": - [{"AbstractLiteral": - {"AbsLitPartition": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 8]}}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 9]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 6]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 6]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 6]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 8]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": false}]]}}}]]}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 8]}, - {"ConstantInt": [{"TagInt": []}, 10]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}]]}}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 7]}, - {"ConstantInt": [{"TagInt": []}, 8]}]}, - {"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}]]}}}]]}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/325~1435147026_26/typecheck.expected b/tests/parse_print/autogen/325~1435147026_26/typecheck.expected deleted file mode 100644 index 029af6685c..0000000000 --- a/tests/parse_print/autogen/325~1435147026_26/typecheck.expected +++ /dev/null @@ -1,35 +0,0 @@ -Error: - In a 'such that' statement: - together({[l_1 | l_1 : bool], flatten([true; int(1)])}, - partition({[false; int(0)], [false, false, false, false, true; int(1..2, 8, 9, 5)]}, - {([] : `matrix indexed by [int] of bool`)}, - {[false, false, true, false; int(6, 2..4)], ([] : `matrix indexed by [int] of bool`)}, - {[false; int(1)], [true; int(0)], [true, true, false; int(4..6)], - [false, false, false, false; int(6, 3..4, 8)]}) - - - partition({[true, false; int(4, 2)], [false, false, true, false; int(5..8)], - [false, true, true, false; int(8..10, 2)]}, - {([] : `matrix indexed by [int] of bool`), [true, false, false, true; int(7..8, 3, 1)]})) - Error: - When type checking: partition({[false; int(0)], [false, false, false, false, true; int(1..2, 8, 9, 5)]}, - {([] : `matrix indexed by [int] of bool`)}, - {[false, false, true, false; int(6, 2..4)], - ([] : `matrix indexed by [int] of bool`)}, - {[false; int(1)], [true; int(0)], [true, true, false; int(4..6)], - [false, false, false, false; int(6, 3..4, 8)]}) - - - partition({[true, false; int(4, 2)], [false, false, true, false; int(5..8)], - [false, true, true, false; int(8..10, 2)]}, - {([] : `matrix indexed by [int] of bool`), - [true, false, false, true; int(7..8, 3, 1)]}) - Arguments have unsupported types. - lhs : partition({[false; int(0)], [false, false, false, false, true; int(1..2, 8, 9, 5)]}, - {([] : `matrix indexed by [int] of bool`)}, - {[false, false, true, false; int(6, 2..4)], ([] : `matrix indexed by [int] of bool`)}, - {[false; int(1)], [true; int(0)], [true, true, false; int(4..6)], - [false, false, false, false; int(6, 3..4, 8)]}) - type of lhs: partition from matrix indexed by [int] of bool - rhs : partition({[true, false; int(4, 2)], [false, false, true, false; int(5..8)], - [false, true, true, false; int(8..10, 2)]}, - {([] : `matrix indexed by [int] of bool`), [true, false, false, true; int(7..8, 3, 1)]}) - type of rhs: partition from matrix indexed by [int] of bool \ No newline at end of file diff --git a/tests/parse_print/autogen/326~final/model.expected.json b/tests/parse_print/autogen/326~final/model.expected.json deleted file mode 100644 index 8da455ba03..0000000000 --- a/tests/parse_print/autogen/326~final/model.expected.json +++ /dev/null @@ -1,46 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpTogether": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": true}]]}}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": true}]]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": false}]]}}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/326~final/typecheck.expected b/tests/parse_print/autogen/326~final/typecheck.expected deleted file mode 100644 index 5dd4ae0552..0000000000 --- a/tests/parse_print/autogen/326~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: together({[true; int(1)]}, partition({[true; int(1)]}) - partition({[false; int(1)]})) - Error: - When type checking: partition({[true; int(1)]}) - partition({[false; int(1)]}) - Arguments have unsupported types. - lhs : partition({[true; int(1)]}) - type of lhs: partition from matrix indexed by [int] of bool - rhs : partition({[false; int(1)]}) - type of rhs: partition from matrix indexed by [int] of bool \ No newline at end of file diff --git a/tests/parse_print/autogen/345~1435141546_33/model.expected.json b/tests/parse_print/autogen/345~1435141546_33/model.expected.json index 21fb4ee136..17d8238a32 100644 --- a/tests/parse_print/autogen/345~1435141546_33/model.expected.json +++ b/tests/parse_print/autogen/345~1435141546_33/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen/396~1435169954_27/model.expected.json b/tests/parse_print/autogen/396~1435169954_27/model.expected.json index 7dc981d0f3..8e9b207757 100644 --- a/tests/parse_print/autogen/396~1435169954_27/model.expected.json +++ b/tests/parse_print/autogen/396~1435169954_27/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/398~1435194081_33/model.expected.json b/tests/parse_print/autogen/398~1435194081_33/model.expected.json index 185d08386c..eb19f81365 100644 --- a/tests/parse_print/autogen/398~1435194081_33/model.expected.json +++ b/tests/parse_print/autogen/398~1435194081_33/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/427~1435209539_80/model.expected.json b/tests/parse_print/autogen/427~1435209539_80/model.expected.json deleted file mode 100644 index 7aa96e9251..0000000000 --- a/tests/parse_print/autogen/427~1435209539_80/model.expected.json +++ /dev/null @@ -1,176 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpSupset": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]]}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 8]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}]}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}, - [{"Reference": [{"Name": "var2"}, null]}, - {"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var2"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]]}}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Reference": [{"Name": "var2"}, null]}, - {"Reference": [{"Name": "var2"}, null]}]]}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}]]}, - [{"Reference": [{"Name": "var2"}, null]}]]}}]}}]}}, - {"Op": {"MkOpLeq": [{"Constant": {"ConstantBool": false}}, {"Reference": [{"Name": "var1"}, null]}]}}, - {"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Op": {"MkOpNot": {"Constant": {"ConstantBool": false}}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}}, - {"Op": {"MkOpNot": {"Constant": {"ConstantBool": false}}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}]]}}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}}, - {"Constant": {"ConstantBool": true}}]]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}}]}}, - {"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}}, - {"Constant": {"ConstantBool": true}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}}, - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}], - [{"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}]]}}]}}, - {"Op": - {"MkOpGt": - [{"Op": - {"MkOpSupsetEq": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeBool": []}}]}, - {"AbstractLiteral": {"AbsLitSet": [{"Reference": [{"Name": "var2"}, null]}]}}]}}, - {"Op": - {"MkOpSupsetEq": - [{"AbstractLiteral": {"AbsLitMSet": [{"Reference": [{"Name": "var1"}, null]}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var2"}, null]}]}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/427~1435209539_80/typecheck.expected b/tests/parse_print/autogen/427~1435209539_80/typecheck.expected deleted file mode 100644 index e875ef55f5..0000000000 --- a/tests/parse_print/autogen/427~1435209539_80/typecheck.expected +++ /dev/null @@ -1,14 +0,0 @@ -Error: - In a 'such that' statement: - image(function(partition({false}, {true, false}) --> !false, - partition({true}, {true, false, true, false}, {false, false}) --> !false, - partition({false}, {true, false, false, false}, {true, false}, {true}) --> true = false, - partition({false}, {true, false}, {true}, {true, true}, {false, false, false}) --> true), - partition({true, false, true}) - (partition() : `partition from bool`)) - Error: - When type checking: partition({true, false, true}) - (partition() : `partition from bool`) - Arguments have unsupported types. - lhs : partition({true, false, true}) - type of lhs: partition from bool - rhs : (partition() : `partition from bool`) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/441~1435208191_85/model.expected.json b/tests/parse_print/autogen/441~1435208191_85/model.expected.json deleted file mode 100644 index 26414a5608..0000000000 --- a/tests/parse_print/autogen/441~1435208191_85/model.expected.json +++ /dev/null @@ -1,175 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainTuple": - [{"DomainPartition": - [[], - {"isRegular": false, - "partsNum": {"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - "partsSize": {"SizeAttr_MinSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}}, - {"DomainBool": []}]}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}, - {"OccurAttr_MinMaxOccur": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}], - {"DomainBool": []}]}, - {"DomainFunction": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}, - "PartialityAttr_Partial", "JectivityAttr_Surjective"], - {"DomainBool": []}, {"DomainBool": []}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var2"}, - {"DomainTuple": - [{"DomainBool": []}, - {"DomainMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}, - {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}]]}, - {"DomainBool": []}]}, - {"DomainSet": - [[], {"SizeAttr_MinSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - {"DomainBool": []}]}, - {"DomainMSet": - [[], - [{"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, - {"OccurAttr_MinMaxOccur": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}], - {"DomainBool": []}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var3"}, - {"DomainTuple": - [{"DomainMSet": - [[], - [{"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"OccurAttr_MinMaxOccur": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}], - {"DomainBool": []}]}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpGt": - [{"Op": {"MkOpNot": {"Op": {"MkOpNot": {"Constant": {"ConstantBool": false}}}}}}, - {"Op": - {"MkOpImage": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}}, - {"Op": - {"MkOpNeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}]}}]}}, - {"Op": - {"MkOpTogether": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, {"ConstantBool": true}, {"ConstantBool": false}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}}]}}, - {"Op": - {"MkOpAllDiff": - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeSingle": {"ConstantInt": [{"TagInt": []}, 8]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 6]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}]]}}}}}, - {"Op": - {"MkOpApart": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitFunction": [[{"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitFunction": [[{"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}]}]]}}]}}, - {"Op": - {"MkOpIndexing": - [{"Comprehension": - [{"Reference": [{"Name": "l_1"}, null]}, - [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_1"}}, {"DomainBool": []}]}}]]}, - {"Op": - {"MkOpFreq": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": false}]}}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}]}}]}}, - {"Constant": {"ConstantBool": true}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/441~1435208191_85/typecheck.expected b/tests/parse_print/autogen/441~1435208191_85/typecheck.expected deleted file mode 100644 index 6698471b53..0000000000 --- a/tests/parse_print/autogen/441~1435208191_85/typecheck.expected +++ /dev/null @@ -1,10 +0,0 @@ -Error: - In a 'such that' statement: - together({false, true, false}, partition({false, true, true, true}) - (partition() : `partition from bool`)) - Error: - When type checking: partition({false, true, true, true}) - (partition() : `partition from bool`) - Arguments have unsupported types. - lhs : partition({false, true, true, true}) - type of lhs: partition from bool - rhs : (partition() : `partition from bool`) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/442~final/model.expected.json b/tests/parse_print/autogen/442~final/model.expected.json deleted file mode 100644 index 8adf475e4a..0000000000 --- a/tests/parse_print/autogen/442~final/model.expected.json +++ /dev/null @@ -1,18 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpTogether": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/442~final/typecheck.expected b/tests/parse_print/autogen/442~final/typecheck.expected deleted file mode 100644 index 19b70f378c..0000000000 --- a/tests/parse_print/autogen/442~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: together({false}, partition({false}) - (partition() : `partition from bool`)) - Error: - When type checking: partition({false}) - (partition() : `partition from bool`) - Arguments have unsupported types. - lhs : partition({false}) - type of lhs: partition from bool - rhs : (partition() : `partition from bool`) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/445~1435212982_68/model.expected.json b/tests/parse_print/autogen/445~1435212982_68/model.expected.json deleted file mode 100644 index eb737268bb..0000000000 --- a/tests/parse_print/autogen/445~1435212982_68/model.expected.json +++ /dev/null @@ -1,196 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainMSet": - [[], - [{"SizeAttr_MaxSize": - {"Op": - {"MkOpDiv": - [{"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}}, - {"Op": {"MkOpToInt": {"Constant": {"ConstantBool": true}}}}]}}}, - {"OccurAttr_MaxOccur": - {"Op": - {"MkOpMinus": - [{"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, - {"Op": {"MkOpNegate": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}}]}}}], - {"DomainFunction": - [[], - [{"SizeAttr_MaxSize": - {"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}}}, - "PartialityAttr_Total", "JectivityAttr_Bijective"], - {"DomainTuple": - [{"DomainBool": []}, {"DomainBool": []}, {"DomainBool": []}, {"DomainBool": []}]}, - {"DomainFunction": - [[], - [{"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - "PartialityAttr_Total", "JectivityAttr_Surjective"], - {"DomainBool": []}, {"DomainBool": []}]}]}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpLeq": - [{"Op": - {"MkOpIndexing": - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}, - {"Op": - {"MkOpEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": false}]]}}}]}}]}}, - {"Op": - {"MkOpSubset": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeSingle": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}, - {"ConstantAbstract": - {"AbsLitSet": [{"ConstantBool": false}, {"ConstantBool": false}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}]]}}, - {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}]]}}, - {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 8]}}, - {"RangeSingle": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": true}]]}}, - {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}]]}}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpMinus": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}]}}]}}, - {"Constant": {"ConstantBool": true}}, - {"Op": - {"MkOpGeq": - [{"Op": - {"MkOpAnd": - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}}}}, - {"Op": - {"MkOpAllDiff": - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": [{"TypeInt": {"TagInt": []}}, {"TypeBool": []}]}]}}}]}}, - {"Op": {"MkOpNot": {"Constant": {"ConstantBool": false}}}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/445~1435212982_68/typecheck.expected b/tests/parse_print/autogen/445~1435212982_68/typecheck.expected deleted file mode 100644 index 35f5e4f806..0000000000 --- a/tests/parse_print/autogen/445~1435212982_68/typecheck.expected +++ /dev/null @@ -1,12 +0,0 @@ -Error: - In a 'such that' statement: - partition({false}) - (partition() : `partition from bool`) = - partition({false, true, true}) - - partition({false, false}, {false, true, false, true}, {true}, {true, false, true}) - Error: - When type checking: partition({false}) - (partition() : `partition from bool`) - Arguments have unsupported types. - lhs : partition({false}) - type of lhs: partition from bool - rhs : (partition() : `partition from bool`) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/446~final/model.expected.json b/tests/parse_print/autogen/446~final/model.expected.json deleted file mode 100644 index 781877f719..0000000000 --- a/tests/parse_print/autogen/446~final/model.expected.json +++ /dev/null @@ -1,19 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/446~final/typecheck.expected b/tests/parse_print/autogen/446~final/typecheck.expected deleted file mode 100644 index 867ec0ec6b..0000000000 --- a/tests/parse_print/autogen/446~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: (partition() : `partition from bool`) = partition({true}) - partition({false}) - Error: - When type checking: partition({true}) - partition({false}) - Arguments have unsupported types. - lhs : partition({true}) - type of lhs: partition from bool - rhs : partition({false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/447~1435213364_36/model.expected.json b/tests/parse_print/autogen/447~1435213364_36/model.expected.json deleted file mode 100644 index 73208af10c..0000000000 --- a/tests/parse_print/autogen/447~1435213364_36/model.expected.json +++ /dev/null @@ -1,58 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpLexLt": - [{"Comprehension": - [{"Reference": [{"Name": "l_2"}, null]}, - [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_1"}}, {"DomainBool": []}]}}, - {"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_2"}}, {"DomainBool": []}]}}, - {"Condition": {"Reference": [{"Name": "l_2"}, null]}}]]}, - {"Comprehension": - [{"Reference": [{"Name": "l_4"}, null]}, - [{"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_3"}}, {"DomainBool": []}]}}, - {"Generator": {"GenDomainNoRepr": [{"Single": {"Name": "l_4"}}, {"DomainBool": []}]}}, - {"Condition": - {"Op": - {"MkOpNeq": - [{"Reference": [{"Name": "l_3"}, null]}, - {"Reference": [{"Name": "l_3"}, null]}]}}}, - {"Condition": {"Reference": [{"Name": "l_4"}, null]}}]]}]}}, - {"Op": - {"MkOpTogether": - [{"AbstractLiteral": - {"AbsLitSet": - [{"Op": - {"MkOpLeq": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}, - {"Op": - {"MkOpLeq": - [{"Reference": [{"Name": "var1"}, null]}, - {"Constant": {"ConstantBool": true}}]}}, - {"Reference": [{"Name": "var1"}, null]}]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": true}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/447~1435213364_36/typecheck.expected b/tests/parse_print/autogen/447~1435213364_36/typecheck.expected deleted file mode 100644 index 77a7710f1f..0000000000 --- a/tests/parse_print/autogen/447~1435213364_36/typecheck.expected +++ /dev/null @@ -1,14 +0,0 @@ -Error: - In a 'such that' statement: - together({var1 <= var1, var1 <= true, var1}, - partition({false, false, false}, {false, true, true, true}, {true, false, true, false}, {true}) - - partition({false, false, true, false, true}, {true})) - Error: - When type checking: partition({false, false, false}, {false, true, true, true}, {true, false, true, false}, - {true}) - - partition({false, false, true, false, true}, {true}) - Arguments have unsupported types. - lhs : partition({false, false, false}, {false, true, true, true}, {true, false, true, false}, {true}) - type of lhs: partition from bool - rhs : partition({false, false, true, false, true}, {true}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/448~final/model.expected.json b/tests/parse_print/autogen/448~final/model.expected.json deleted file mode 100644 index 03ae0499ad..0000000000 --- a/tests/parse_print/autogen/448~final/model.expected.json +++ /dev/null @@ -1,17 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpTogether": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}, - {"Constant": - {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/448~final/typecheck.expected b/tests/parse_print/autogen/448~final/typecheck.expected deleted file mode 100644 index 28400fa65e..0000000000 --- a/tests/parse_print/autogen/448~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: together({false}, partition({false}) - partition({false})) - Error: - When type checking: partition({false}) - partition({false}) - Arguments have unsupported types. - lhs : partition({false}) - type of lhs: partition from bool - rhs : partition({false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/460~1435196486_42/model.expected.json b/tests/parse_print/autogen/460~1435196486_42/model.expected.json index 3c6f147a30..9b296e9da3 100644 --- a/tests/parse_print/autogen/460~1435196486_42/model.expected.json +++ b/tests/parse_print/autogen/460~1435196486_42/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/558~1435585187_20/model.expected.json b/tests/parse_print/autogen/558~1435585187_20/model.expected.json index c0467b36c4..4bd0da612b 100644 --- a/tests/parse_print/autogen/558~1435585187_20/model.expected.json +++ b/tests/parse_print/autogen/558~1435585187_20/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/560~1436548014_12/model.expected.json b/tests/parse_print/autogen/560~1436548014_12/model.expected.json deleted file mode 100644 index b1d7fe140d..0000000000 --- a/tests/parse_print/autogen/560~1436548014_12/model.expected.json +++ /dev/null @@ -1,92 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainSet": - [[], - {"SizeAttr_MinSize": - {"Op": - {"MkOpMod": - [{"Op": {"MkOpFactorial": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}]}}}, - {"DomainTuple": - [{"DomainFunction": - [[], - [{"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}, - "PartialityAttr_Total", "JectivityAttr_Bijective"], - {"DomainBool": []}, {"DomainBool": []}]}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var2"}, - {"DomainSet": - [[], {"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}}, - {"DomainSet": - [[], - {"SizeAttr_MinSize": - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}}}, - {"DomainRelation": - [[], [{"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, []], - [{"DomainBool": []}]]}]}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpTogether": - [{"Op": - {"MkOpParticipants": - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 1]}]]}}}]}}]}}, - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}}, - {"Constant": {"ConstantBool": false}}, {"Constant": {"ConstantBool": false}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/560~1436548014_12/typecheck.expected b/tests/parse_print/autogen/560~1436548014_12/typecheck.expected deleted file mode 100644 index ed9029ece7..0000000000 --- a/tests/parse_print/autogen/560~1436548014_12/typecheck.expected +++ /dev/null @@ -1,11 +0,0 @@ -Error: - In a 'such that' statement: - together(participants(partition({0, 3, 0}, {3, 4, 1, 3, 1}, {5, 5, 4, 5, 4}, {4}, {5, 5, 0, 5})), - partition({5, 5, 4, 3, 1}, {1}) - partition({0, 1, 4, 1, 4}, {1})) - Error: - When type checking: partition({5, 5, 4, 3, 1}, {1}) - partition({0, 1, 4, 1, 4}, {1}) - Arguments have unsupported types. - lhs : partition({5, 5, 4, 3, 1}, {1}) - type of lhs: partition from int - rhs : partition({0, 1, 4, 1, 4}, {1}) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen/561~final/model.expected.json b/tests/parse_print/autogen/561~final/model.expected.json deleted file mode 100644 index e1b114d833..0000000000 --- a/tests/parse_print/autogen/561~final/model.expected.json +++ /dev/null @@ -1,20 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpTogether": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantInt": [{"TagInt": []}, 0]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantInt": [{"TagInt": []}, 3]}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/561~final/typecheck.expected b/tests/parse_print/autogen/561~final/typecheck.expected deleted file mode 100644 index c95bf87cc4..0000000000 --- a/tests/parse_print/autogen/561~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: together({2}, partition({0}) - partition({3})) - Error: - When type checking: partition({0}) - partition({3}) - Arguments have unsupported types. - lhs : partition({0}) - type of lhs: partition from int - rhs : partition({3}) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen/562~1436556139_51/model.expected.json b/tests/parse_print/autogen/562~1436556139_51/model.expected.json deleted file mode 100644 index 68be59f3dc..0000000000 --- a/tests/parse_print/autogen/562~1436556139_51/model.expected.json +++ /dev/null @@ -1,190 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainSet": [[], {"SizeAttr_None": []}, {"DomainBool": []}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var2"}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}, - {"OccurAttr_MaxOccur": {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}}], - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}]]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var3"}, - {"DomainPartition": - [[], - {"isRegular": true, - "partsNum": {"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - "partsSize": {"SizeAttr_MaxSize": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}}, - {"DomainBool": []}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var4"}, - {"DomainMSet": - [[], - [{"SizeAttr_None": []}, - {"OccurAttr_MinMaxOccur": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}], - {"DomainBool": []}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpLt": - [{"Op": - {"MkOpSubsetEq": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": false}]}}}, - {"Constant": {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": false}]}}}]}}, - {"Op": - {"MkOpGt": - [{"Op": {"MkOpNot": {"Constant": {"ConstantBool": false}}}}, - {"Op": - {"MkOpLt": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}]}}]}}, - {"Op": - {"MkOpApart": - [{"Op": - {"MkOpUnion": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}}]}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 3]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}}]}}]}}, - {"Op": - {"MkOpInverse": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Constant": {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": false}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}]]}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}}], - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}]]}}}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}, {"ConstantBool": false}]}}], - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}]]}}}]}}, - {"Op": - {"MkOpInverse": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": true}, - {"ConstantAbstract": {"AbsLitTuple": [{"ConstantBool": true}]}}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": [{"TypeTuple": [{"TypeBool": []}]}, {"TypeBool": []}]}]}]}}, - {"Op": - {"MkOpSubsetEq": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": true}]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": false}]}}]}}}]}}, - {"Constant": {"ConstantBool": true}}, {"Constant": {"ConstantBool": false}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/562~1436556139_51/typecheck.expected b/tests/parse_print/autogen/562~1436556139_51/typecheck.expected deleted file mode 100644 index 4555ce64cb..0000000000 --- a/tests/parse_print/autogen/562~1436556139_51/typecheck.expected +++ /dev/null @@ -1,13 +0,0 @@ -Error: - In a 'such that' statement: - apart({0, 1} union {2, 3}, - partition({5}, {2, 2, 2, 4}, {2, 3, 2, 5}, {3}) - - partition({5, 2, 5, 4}, {1, 2, 0, 1, 3}, {3, 5, 1, 4, 3})) - Error: - When type checking: partition({5}, {2, 2, 2, 4}, {2, 3, 2, 5}, {3}) - - partition({5, 2, 5, 4}, {1, 2, 0, 1, 3}, {3, 5, 1, 4, 3}) - Arguments have unsupported types. - lhs : partition({5}, {2, 2, 2, 4}, {2, 3, 2, 5}, {3}) - type of lhs: partition from int - rhs : partition({5, 2, 5, 4}, {1, 2, 0, 1, 3}, {3, 5, 1, 4, 3}) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen/563~final/model.expected.json b/tests/parse_print/autogen/563~final/model.expected.json deleted file mode 100644 index 3c9f36eb0a..0000000000 --- a/tests/parse_print/autogen/563~final/model.expected.json +++ /dev/null @@ -1,20 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpApart": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 3]}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantInt": [{"TagInt": []}, 5]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": [[{"ConstantInt": [{"TagInt": []}, 5]}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/563~final/typecheck.expected b/tests/parse_print/autogen/563~final/typecheck.expected deleted file mode 100644 index 39197f467f..0000000000 --- a/tests/parse_print/autogen/563~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: apart({3}, partition({5}) - partition({5})) - Error: - When type checking: partition({5}) - partition({5}) - Arguments have unsupported types. - lhs : partition({5}) - type of lhs: partition from int - rhs : partition({5}) - type of rhs: partition from int \ No newline at end of file diff --git a/tests/parse_print/autogen/605~1436581770_45/model.expected.json b/tests/parse_print/autogen/605~1436581770_45/model.expected.json index b9bd832356..a8ebf915cc 100644 --- a/tests/parse_print/autogen/605~1436581770_45/model.expected.json +++ b/tests/parse_print/autogen/605~1436581770_45/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/613~1436580506_52/model.expected.json b/tests/parse_print/autogen/613~1436580506_52/model.expected.json deleted file mode 100644 index d4d777e640..0000000000 --- a/tests/parse_print/autogen/613~1436580506_52/model.expected.json +++ /dev/null @@ -1,125 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "var2"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpImply": - [{"Reference": [{"Name": "var2"}, null]}, - {"Op": - {"MkOpSupset": - [{"Constant": - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}]]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitFunction": []}}}, - {"TypeFunction": [{"TypeBool": []}, {"TypeBool": []}]}]}]}}]}}, - {"Reference": [{"Name": "var2"}, null]}, - {"Op": - {"MkOpLexLt": - [{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}]]}, - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Op": - {"MkOpDiv": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}}]]}}, - {"Comprehension": - [{"Op": {"MkOpFactorial": {"Reference": [{"Name": "l_2"}, null]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}]]}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_2"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}]]}]}}, - {"Condition": - {"Op": - {"MkOpGeq": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Reference": [{"Name": "l_2"}, null]}]}}}, - {"Condition": - {"Op": - {"MkOpLeq": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": false}}]}}}]]}]}}, - {"Op": - {"MkOpApart": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}], - [{"ConstantBool": true}], [{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": true}, - {"ConstantBool": true}, {"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": true}, - {"ConstantBool": true}], - [{"ConstantBool": false}, {"ConstantBool": false}]]}}}]}}]}}, - {"Op": - {"MkOpSupsetEq": - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}]}}, - {"Op": - {"MkOpUnion": - [{"Constant": - {"ConstantAbstract": {"AbsLitMSet": [{"ConstantInt": [{"TagInt": []}, 1]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/613~1436580506_52/typecheck.expected b/tests/parse_print/autogen/613~1436580506_52/typecheck.expected deleted file mode 100644 index 466ce57a55..0000000000 --- a/tests/parse_print/autogen/613~1436580506_52/typecheck.expected +++ /dev/null @@ -1,21 +0,0 @@ -Error: - In a 'such that' statement: - apart({false}, - partition({true, true, true, false, false}, {true}, {false}, {true, false}, - {false, false, false, false, true}) - - - partition({true, false, false, true, true}, {false, true, true}, {false, true, true, true}, - {true, true, true}, {false, false})) - Error: - When type checking: partition({true, true, true, false, false}, {true}, {false}, {true, false}, - {false, false, false, false, true}) - - - partition({true, false, false, true, true}, {false, true, true}, {false, true, true, true}, - {true, true, true}, {false, false}) - Arguments have unsupported types. - lhs : partition({true, true, true, false, false}, {true}, {false}, {true, false}, - {false, false, false, false, true}) - type of lhs: partition from bool - rhs : partition({true, false, false, true, true}, {false, true, true}, {false, true, true, true}, - {true, true, true}, {false, false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/614~final/model.expected.json b/tests/parse_print/autogen/614~final/model.expected.json deleted file mode 100644 index ec55d6c3ae..0000000000 --- a/tests/parse_print/autogen/614~final/model.expected.json +++ /dev/null @@ -1,17 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpApart": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantBool": false}]}}}, - {"Op": - {"MkOpMinus": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": true}]]}}}, - {"Constant": - {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/614~final/typecheck.expected b/tests/parse_print/autogen/614~final/typecheck.expected deleted file mode 100644 index 2a17426316..0000000000 --- a/tests/parse_print/autogen/614~final/typecheck.expected +++ /dev/null @@ -1,9 +0,0 @@ -Error: - In a 'such that' statement: apart({false}, partition({true}) - partition({false})) - Error: - When type checking: partition({true}) - partition({false}) - Arguments have unsupported types. - lhs : partition({true}) - type of lhs: partition from bool - rhs : partition({false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/615~1436587408_39/model.expected.json b/tests/parse_print/autogen/615~1436587408_39/model.expected.json deleted file mode 100644 index 03039146b4..0000000000 --- a/tests/parse_print/autogen/615~1436587408_39/model.expected.json +++ /dev/null @@ -1,79 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}]]}}, - {"Op": - {"MkOpMinus": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": false}, {"ConstantBool": false}], - [{"ConstantBool": false}], - [{"ConstantBool": true}, {"ConstantBool": false}], - [{"ConstantBool": true}], - [{"ConstantBool": true}, {"ConstantBool": false}, - {"ConstantBool": true}]]}}}]}}]}}, - {"Reference": [{"Name": "var1"}, null]}, - {"Op": - {"MkOpApart": - [{"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}, - {"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": true}, {"ConstantBool": false}]}}], - [{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": true}]}}], - [{"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": [{"ConstantBool": false}, {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitTuple": - [{"ConstantBool": false}, {"ConstantBool": false}]}}]]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/615~1436587408_39/typecheck.expected b/tests/parse_print/autogen/615~1436587408_39/typecheck.expected deleted file mode 100644 index b7d930776f..0000000000 --- a/tests/parse_print/autogen/615~1436587408_39/typecheck.expected +++ /dev/null @@ -1,13 +0,0 @@ -Error: - In a 'such that' statement: - image(function((partition() : `partition from bool`) --> false -> true), - (partition() : `partition from bool`) - - partition({false, false}, {false}, {true, false}, {true}, {true, false, true})) - Error: - When type checking: (partition() : `partition from bool`) - - partition({false, false}, {false}, {true, false}, {true}, {true, false, true}) - Arguments have unsupported types. - lhs : (partition() : `partition from bool`) - type of lhs: partition from bool - rhs : partition({false, false}, {false}, {true, false}, {true}, {true, false, true}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/616~final/model.expected.json b/tests/parse_print/autogen/616~final/model.expected.json deleted file mode 100644 index 68965bdecc..0000000000 --- a/tests/parse_print/autogen/616~final/model.expected.json +++ /dev/null @@ -1,27 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "unused"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": false}}, - {"Constant": {"ConstantBool": true}}]}}]]}}, - {"Op": - {"MkOpMinus": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": {"AbsLitPartition": [[{"ConstantBool": false}]]}}}]}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/616~final/typecheck.expected b/tests/parse_print/autogen/616~final/typecheck.expected deleted file mode 100644 index 707f69d334..0000000000 --- a/tests/parse_print/autogen/616~final/typecheck.expected +++ /dev/null @@ -1,11 +0,0 @@ -Error: - In a 'such that' statement: - image(function((partition() : `partition from bool`) --> false -> true), - (partition() : `partition from bool`) - partition({false})) - Error: - When type checking: (partition() : `partition from bool`) - partition({false}) - Arguments have unsupported types. - lhs : (partition() : `partition from bool`) - type of lhs: partition from bool - rhs : partition({false}) - type of rhs: partition from bool \ No newline at end of file diff --git a/tests/parse_print/autogen/628~final/model.expected.json b/tests/parse_print/autogen/628~final/model.expected.json index 4ffaa6efce..534b284ec9 100644 --- a/tests/parse_print/autogen/628~final/model.expected.json +++ b/tests/parse_print/autogen/628~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/633~final/model.expected.json b/tests/parse_print/autogen/633~final/model.expected.json index eb58f01158..fa292d0cac 100644 --- a/tests/parse_print/autogen/633~final/model.expected.json +++ b/tests/parse_print/autogen/633~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen/637~final/model.expected.json b/tests/parse_print/autogen/637~final/model.expected.json index 37a80e4b5c..bfcf37c35f 100644 --- a/tests/parse_print/autogen/637~final/model.expected.json +++ b/tests/parse_print/autogen/637~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/646~final/model.expected.json b/tests/parse_print/autogen/646~final/model.expected.json index b4313a9d42..eb820dfb92 100644 --- a/tests/parse_print/autogen/646~final/model.expected.json +++ b/tests/parse_print/autogen/646~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/653~final/model.expected.json b/tests/parse_print/autogen/653~final/model.expected.json index 92a7b21615..5afa4cf85c 100644 --- a/tests/parse_print/autogen/653~final/model.expected.json +++ b/tests/parse_print/autogen/653~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/678~final/model.expected.json b/tests/parse_print/autogen/678~final/model.expected.json index 914a7c23fb..08a3b476d2 100644 --- a/tests/parse_print/autogen/678~final/model.expected.json +++ b/tests/parse_print/autogen/678~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/730~1439082038_16/model.expected.json b/tests/parse_print/autogen/730~1439082038_16/model.expected.json index c75b08c812..2648972b55 100644 --- a/tests/parse_print/autogen/730~1439082038_16/model.expected.json +++ b/tests/parse_print/autogen/730~1439082038_16/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/731~final/model.expected.json b/tests/parse_print/autogen/731~final/model.expected.json index 4395bb7576..e09b459fe0 100644 --- a/tests/parse_print/autogen/731~final/model.expected.json +++ b/tests/parse_print/autogen/731~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/autogen/768~1439583525_36/model.expected.json b/tests/parse_print/autogen/768~1439583525_36/model.expected.json index bb875647cd..738127a697 100644 --- a/tests/parse_print/autogen/768~1439583525_36/model.expected.json +++ b/tests/parse_print/autogen/768~1439583525_36/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/autogen/769~final/model.expected.json b/tests/parse_print/autogen/769~final/model.expected.json index 143f235c9f..733477c240 100644 --- a/tests/parse_print/autogen/769~final/model.expected.json +++ b/tests/parse_print/autogen/769~final/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/basic/typeErrorInDecl/model.expected.json b/tests/parse_print/basic/typeErrorInDecl/model.expected.json deleted file mode 100644 index 78cc755ba0..0000000000 --- a/tests/parse_print/basic/typeErrorInDecl/model.expected.json +++ /dev/null @@ -1,25 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "x"}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Op": - {"MkOpSum": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantBool": false}}]]}}}}]}]]}]}}]} \ No newline at end of file diff --git a/tests/parse_print/basic/typeErrorInDecl/typecheck.expected b/tests/parse_print/basic/typeErrorInDecl/typecheck.expected deleted file mode 100644 index d463327bc7..0000000000 --- a/tests/parse_print/basic/typeErrorInDecl/typecheck.expected +++ /dev/null @@ -1,6 +0,0 @@ -Error: - In a declaration statement: find x: int(1..2 + false) - Error: - Not uniformly typed: [2, false; int(1..2)] - Involved types are: int - bool \ No newline at end of file diff --git a/tests/parse_print/heuristic/heuristic_conflict/model.expected.json b/tests/parse_print/heuristic/heuristic_conflict/model.expected.json index 76400b82ea..e8eae1eee0 100644 --- a/tests/parse_print/heuristic/heuristic_conflict/model.expected.json +++ b/tests/parse_print/heuristic/heuristic_conflict/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/heuristic/heuristic_magic/model.expected.json b/tests/parse_print/heuristic/heuristic_magic/model.expected.json deleted file mode 100644 index 4a67210633..0000000000 --- a/tests/parse_print/heuristic/heuristic_magic/model.expected.json +++ /dev/null @@ -1,24 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "a"}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}]]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "b"}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}]}}, - {"SearchHeuristic": {"Name": "magic"}}]} \ No newline at end of file diff --git a/tests/parse_print/heuristic/heuristic_sdf/model.expected.json b/tests/parse_print/heuristic/heuristic_sdf/model.expected.json index 0fce97cc7b..70c42bf087 100644 --- a/tests/parse_print/heuristic/heuristic_sdf/model.expected.json +++ b/tests/parse_print/heuristic/heuristic_sdf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/heuristic/heuristic_srf/model.expected.json b/tests/parse_print/heuristic/heuristic_srf/model.expected.json index f9a7341336..2f1c984d76 100644 --- a/tests/parse_print/heuristic/heuristic_srf/model.expected.json +++ b/tests/parse_print/heuristic/heuristic_srf/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/heuristic/heuristic_static/model.expected.json b/tests/parse_print/heuristic/heuristic_static/model.expected.json index fdc985125c..5ea5f9b103 100644 --- a/tests/parse_print/heuristic/heuristic_static/model.expected.json +++ b/tests/parse_print/heuristic/heuristic_static/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/issues/130/model.expected.json b/tests/parse_print/issues/130/model.expected.json deleted file mode 100644 index b74deb11d2..0000000000 --- a/tests/parse_print/issues/130/model.expected.json +++ /dev/null @@ -1,20 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"Letting": - [{"Name": "Looper"}, - {"Domain": {"DomainTuple": [{"DomainBool": []}, {"DomainReference": [{"Name": "Looper"}, null]}]}}]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "loop"}, {"DomainReference": [{"Name": "Looper"}, null]}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpIndexing": - [{"Reference": [{"Name": "loop"}, null]}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}]}}, - {"Constant": {"ConstantBool": true}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/issues/130/typecheck.expected b/tests/parse_print/issues/130/typecheck.expected deleted file mode 100644 index 6fc659b111..0000000000 --- a/tests/parse_print/issues/130/typecheck.expected +++ /dev/null @@ -1,3 +0,0 @@ -Error: - In a 'such that' statement: loop[0] = true - Error: Out of bounds tuple indexing: loop[0] \ No newline at end of file diff --git a/tests/parse_print/issues/133/4/model.expected.json b/tests/parse_print/issues/133/4/model.expected.json index 1945735b86..64436a77f4 100644 --- a/tests/parse_print/issues/133/4/model.expected.json +++ b/tests/parse_print/issues/133/4/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/issues/207/model.expected.json b/tests/parse_print/issues/207/model.expected.json deleted file mode 100644 index ce46428a2e..0000000000 --- a/tests/parse_print/issues/207/model.expected.json +++ /dev/null @@ -1,573 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "path_AsReln_RelationAsSet"}, - {"DomainMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 30]}}]}]]}, - {"DomainSet": - [[], {"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - {"DomainTuple": - [{"DomainTuple": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}]}, - {"DomainTuple": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}]}]}]}]}]}}, - {"Declaration": - {"FindOrGiven": - ["Given", {"Name": "lookup_AsReln_RelationAsSet"}, - {"DomainSet": - [[], {"SizeAttr_Size": {"Constant": {"ConstantInt": [{"TagInt": []}, 76]}}}, - {"DomainTuple": - [{"DomainTuple": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}]}, - {"DomainTuple": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}]}]]}]}]}]}]}}, - {"SuchThat": - [{"Op": - {"MkOpAnd": - {"Comprehension": - [{"Op": - {"MkOpOr": - {"Comprehension": - [{"Op": - {"MkOpOr": - {"Comprehension": - [{"Op": - {"MkOpOr": - {"Comprehension": - [{"Op": - {"MkOpOr": - {"Comprehension": - [{"Op": - {"MkOpAnd": - {"Comprehension": - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpSum": - {"Comprehension": - [{"Op": - {"MkOpProduct": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__6"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__5"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__6"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__5"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}]}}]]}}}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__6"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}]]}}}}, - [{"Generator": - {"GenInExpr": - [{"Single": - {"Name": - "v__6"}}, - {"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "path_AsReln_RelationAsSet"}, - null]}, - {"Reference": - [{"Name": - "v__0"}, - null]}]}}]}}]]}}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpRelationProj": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": - [{"Name": - "v__1"}, - null]}, - {"Reference": - [{"Name": - "v__2"}, - null]}]}}, - {"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": - [{"Name": - "v__3"}, - null]}, - {"Reference": - [{"Name": - "v__4"}, - null]}]}}]]}}, - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__5"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}]]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpSum": - {"Comprehension": - [{"Op": - {"MkOpProduct": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpAnd": - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}]]}, - [{"Op": - {"MkOpEq": - [{"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__6"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__5"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}]}}, - {"Op": - {"MkOpEq": - [{"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__6"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__5"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}]}}]]}}}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__6"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}]]}}}}, - [{"Generator": - {"GenInExpr": - [{"Single": - {"Name": - "v__6"}}, - {"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "path_AsReln_RelationAsSet"}, - null]}, - {"Reference": - [{"Name": - "v__0"}, - null]}]}}]}}]]}}}, - {"Op": - {"MkOpIndexing": - [{"Op": - {"MkOpRelationProj": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": - [{"Name": - "v__1"}, - null]}, - {"Reference": - [{"Name": - "v__2"}, - null]}]}}, - {"AbstractLiteral": - {"AbsLitTuple": - [{"Reference": - [{"Name": - "v__3"}, - null]}, - {"Reference": - [{"Name": - "v__4"}, - null]}]}}]]}}, - [{"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "v__5"}, - null]}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 1]}}]}}]]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 2]}}]}}]}}]]}}}}, - [{"Generator": - {"GenInExpr": - [{"Single": - {"Name": - "v__5"}}, - {"Op": - {"MkOpIndexing": - [{"Reference": - [{"Name": - "path_AsReln_RelationAsSet"}, - null]}, - {"Reference": - [{"Name": - "v__0"}, - null]}]}}]}}]]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": - {"Name": - "v__4"}}, - {"DomainInt": - [{"TagInt": - []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 0]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 6]}}]}]]}]}}]]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "v__3"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 0]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": - []}, - 6]}}]}]]}]}}]]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "v__2"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 6]}}]}]]}]}}]]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "v__1"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 6]}}]}]]}]}}]]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "v__0"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 30]}}]}]]}]}}]]}}}]}]} \ No newline at end of file diff --git a/tests/parse_print/issues/207/typecheck.expected b/tests/parse_print/issues/207/typecheck.expected deleted file mode 100644 index 8ea3b4c5fe..0000000000 --- a/tests/parse_print/issues/207/typecheck.expected +++ /dev/null @@ -1,19 +0,0 @@ -Error: - In a 'such that' statement: - and([or([or([or([or([and([sum([(v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 1] - | v__6 <- path_AsReln_RelationAsSet[v__0]]) - = image(function((v__1, v__2) --> (v__3, v__4)), v__5[1])[1] - /\ - sum([(v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2]) * v__6[2, 2] - | v__6 <- path_AsReln_RelationAsSet[v__0]]) - = image(function((v__1, v__2) --> (v__3, v__4)), v__5[1])[2] - | v__5 <- path_AsReln_RelationAsSet[v__0]]) - | v__4 : int(0..6)]) - | v__3 : int(0..6)]) - | v__2 : int(0..6)]) - | v__1 : int(0..6)]) - | v__0 : int(0..30)]) - Error: - Not uniformly typed: [v__6[1, 1] = v__5[1, 1] /\ v__6[1, 2] = v__5[1, 2], v__6[2, 1]; int(1..2)] - Involved types are: bool - int \ No newline at end of file diff --git a/tests/parse_print/issues/352/find/model.expected.json b/tests/parse_print/issues/352/find/model.expected.json index cc2d83e3a5..2472bbb7f3 100644 --- a/tests/parse_print/issues/352/find/model.expected.json +++ b/tests/parse_print/issues/352/find/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "myDomain"}, {"Domain": {"DomainInt": [{"TagInt": []}, []]}}]}}, diff --git a/tests/parse_print/issues/361/1/model.expected.json b/tests/parse_print/issues/361/1/model.expected.json deleted file mode 100644 index 04de8e7227..0000000000 --- a/tests/parse_print/issues/361/1/model.expected.json +++ /dev/null @@ -1,27 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"Letting": - [{"Name": "V"}, - {"Domain": - {"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}}]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "x"}, {"DomainReference": [{"Name": "V"}, null]}]}}, - {"SuchThat": - [{"Op": - {"MkOpAnd": - {"Comprehension": - [{"Op": - {"MkOpLeq": - [{"Reference": [{"Name": "x"}, null]}, {"Reference": [{"Name": "j"}, null]}]}}, - [{"Generator": - {"GenInExpr": - [{"Single": {"Name": "j"}}, {"Reference": [{"Name": "V"}, null]}]}}]]}}}]}]} \ No newline at end of file diff --git a/tests/parse_print/issues/361/1/typecheck.expected b/tests/parse_print/issues/361/1/typecheck.expected deleted file mode 100644 index d3a8bc28ae..0000000000 --- a/tests/parse_print/issues/361/1/typecheck.expected +++ /dev/null @@ -1,6 +0,0 @@ -Error: - In a 'such that' statement: and([x <= j | j <- V]) - Error: - Expected an expression, but got a domain: int(1..2) - In the generator of a comprehension or a quantified expression - Consider using j : V \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/change-04/model.expected.json b/tests/parse_print/random_perturb/enum_liberated/change-04/model.expected.json index c6ec4ef93c..c41e4c44be 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-04/model.expected.json +++ b/tests/parse_print/random_perturb/enum_liberated/change-04/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"GivenDomainDefnEnum": {"Name": "E1"}}}, diff --git a/tests/parse_print/random_perturb/enum_liberated/change-05/model.expected.json b/tests/parse_print/random_perturb/enum_liberated/change-05/model.expected.json deleted file mode 100644 index 394386a083..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/change-05/model.expected.json +++ /dev/null @@ -1,38 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"GivenDomainDefnEnum": {"Name": "E1"}}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "x"}, {"DomainEnum": [{"Name": "E1"}, null, null]}]}}, - {"Declaration": - {"LettingDomainDefnEnum": - [{"Name": "E2"}, - [{"Name": "a"}, {"Name": "b"}, {"Name": "c"}, {"Name": "d"}, {"Name": "\"hoh hoh hooo\""}]]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "y"}, {"DomainEnum": [{"Name": "E2"}, null, null]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "z"}, - {"DomainEnum": - [{"Name": "E2"}, - [{"RangeBounded": [{"Reference": [{"Name": "a"}, null]}, {"Reference": [{"Name": "c"}, null]}]}], - null]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "t"}, - {"DomainEnum": - [{"Name": "E2"}, - [{"RangeSingle": {"Reference": [{"Name": "b"}, null]}}, - {"RangeSingle": {"Reference": [{"Name": "d"}, null]}}], - null]}]}}, - {"SuchThat": - [{"Op": {"MkOpEq": [{"Reference": [{"Name": "y"}, null]}, {"Reference": [{"Name": "z"}, null]}]}}, - {"Op": {"MkOpEq": [{"Reference": [{"Name": "z"}, null]}, {"Reference": [{"Name": "t"}, null]}]}}]}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "k"}, {"DomainEnum": [{"Name": "E2"}, null, null]}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"Reference": [{"Name": "k"}, null]}, - {"Op": {"MkOpMax": {"Domain": {"DomainReference": [{"Name": "g2"}, null]}}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected b/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected deleted file mode 100644 index 06cf5168bd..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/change-05/typecheck.expected +++ /dev/null @@ -1,5 +0,0 @@ -Error: - In a 'such that' statement: k = max(`?`) - Error: - Type error in max(`?`) - Unexpected type inside min: ? \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/change-07/model.expected.json b/tests/parse_print/random_perturb/enum_liberated/change-07/model.expected.json deleted file mode 100644 index 50a183829d..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/change-07/model.expected.json +++ /dev/null @@ -1,38 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"GivenDomainDefnEnum": {"Name": "E1"}}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "x"}, {"DomainEnum": [{"Name": "E1"}, null, null]}]}}, - {"Declaration": - {"LettingDomainDefnEnum": - [{"Name": "E2"}, - [{"Name": "a"}, {"Name": "b"}, {"Name": "c"}, {"Name": "d"}, {"Name": "\"hoh hoh hooo\""}]]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "y"}, {"DomainEnum": [{"Name": "E2"}, null, null]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "z"}, - {"DomainEnum": - [{"Name": "E2"}, - [{"RangeBounded": [{"Reference": [{"Name": "a"}, null]}, {"Reference": [{"Name": "z"}, null]}]}], - null]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "t"}, - {"DomainEnum": - [{"Name": "E2"}, - [{"RangeSingle": {"Reference": [{"Name": "b"}, null]}}, - {"RangeSingle": {"Reference": [{"Name": "d"}, null]}}], - null]}]}}, - {"SuchThat": - [{"Op": {"MkOpEq": [{"Reference": [{"Name": "y"}, null]}, {"Reference": [{"Name": "z"}, null]}]}}, - {"Op": {"MkOpEq": [{"Reference": [{"Name": "z"}, null]}, {"Reference": [{"Name": "t"}, null]}]}}]}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "k"}, {"DomainEnum": [{"Name": "E2"}, null, null]}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"Reference": [{"Name": "k"}, null]}, - {"Op": {"MkOpMax": {"Domain": {"DomainEnum": [{"Name": "E2"}, null, null]}}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/change-07/typecheck.expected b/tests/parse_print/random_perturb/enum_liberated/change-07/typecheck.expected deleted file mode 100644 index 03638a81b0..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/change-07/typecheck.expected +++ /dev/null @@ -1 +0,0 @@ -z is used in a domain, but it isn't a member of the enum domain. \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/change-09/model.expected.json b/tests/parse_print/random_perturb/enum_liberated/change-09/model.expected.json index eaefdc3462..8225cd8bcf 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-09/model.expected.json +++ b/tests/parse_print/random_perturb/enum_liberated/change-09/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"GivenDomainDefnEnum": {"Name": "E1"}}}, diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-04/model.expected.json b/tests/parse_print/random_perturb/enum_liberated/delete-04/model.expected.json deleted file mode 100644 index 63096624a4..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/delete-04/model.expected.json +++ /dev/null @@ -1,38 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"GivenDomainDefnEnum": {"Name": "E1"}}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "x"}, {"DomainReference": [{"Name": "E"}, null]}]}}, - {"Declaration": - {"LettingDomainDefnEnum": - [{"Name": "E2"}, - [{"Name": "a"}, {"Name": "b"}, {"Name": "c"}, {"Name": "d"}, {"Name": "\"hoh hoh hooo\""}]]}}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "y"}, {"DomainEnum": [{"Name": "E2"}, null, null]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "z"}, - {"DomainEnum": - [{"Name": "E2"}, - [{"RangeBounded": [{"Reference": [{"Name": "a"}, null]}, {"Reference": [{"Name": "c"}, null]}]}], - null]}]}}, - {"Declaration": - {"FindOrGiven": - ["Find", {"Name": "t"}, - {"DomainEnum": - [{"Name": "E2"}, - [{"RangeSingle": {"Reference": [{"Name": "b"}, null]}}, - {"RangeSingle": {"Reference": [{"Name": "d"}, null]}}], - null]}]}}, - {"SuchThat": - [{"Op": {"MkOpEq": [{"Reference": [{"Name": "y"}, null]}, {"Reference": [{"Name": "z"}, null]}]}}, - {"Op": {"MkOpEq": [{"Reference": [{"Name": "z"}, null]}, {"Reference": [{"Name": "t"}, null]}]}}]}, - {"Declaration": {"FindOrGiven": ["Find", {"Name": "k"}, {"DomainEnum": [{"Name": "E2"}, null, null]}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"Reference": [{"Name": "k"}, null]}, - {"Op": {"MkOpMax": {"Domain": {"DomainEnum": [{"Name": "E2"}, null, null]}}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected b/tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected deleted file mode 100644 index 06cf5168bd..0000000000 --- a/tests/parse_print/random_perturb/enum_liberated/delete-05/typecheck.expected +++ /dev/null @@ -1,5 +0,0 @@ -Error: - In a 'such that' statement: k = max(`?`) - Error: - Type error in max(`?`) - Unexpected type inside min: ? \ No newline at end of file diff --git a/tests/parse_print/random_perturb/enum_liberated/model.expected.json b/tests/parse_print/random_perturb/enum_liberated/model.expected.json index eaefdc3462..8225cd8bcf 100644 --- a/tests/parse_print/random_perturb/enum_liberated/model.expected.json +++ b/tests/parse_print/random_perturb/enum_liberated/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"GivenDomainDefnEnum": {"Name": "E1"}}}, diff --git a/tests/parse_print/random_perturb/set01/change-01/model.expected.json b/tests/parse_print/random_perturb/set01/change-01/model.expected.json index 4f3181f0b6..5ce892be43 100644 --- a/tests/parse_print/random_perturb/set01/change-01/model.expected.json +++ b/tests/parse_print/random_perturb/set01/change-01/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/random_perturb/set01/model.expected.json b/tests/parse_print/random_perturb/set01/model.expected.json index 4f3181f0b6..5ce892be43 100644 --- a/tests/parse_print/random_perturb/set01/model.expected.json +++ b/tests/parse_print/random_perturb/set01/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/branching/model.expected.json b/tests/parse_print/syntax_test/branching/model.expected.json index d69cf2571f..febd24a73f 100644 --- a/tests/parse_print/syntax_test/branching/model.expected.json +++ b/tests/parse_print/syntax_test/branching/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/declarations/enums/givens/model.expected.json b/tests/parse_print/syntax_test/declarations/enums/givens/model.expected.json index 4897d5de8b..7fa7b44086 100644 --- a/tests/parse_print/syntax_test/declarations/enums/givens/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/enums/givens/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"GivenDomainDefnEnum": {"Name": "x"}}}, {"Declaration": {"GivenDomainDefnEnum": {"Name": "x2"}}}, diff --git a/tests/parse_print/syntax_test/declarations/enums/lettings/model.expected.json b/tests/parse_print/syntax_test/declarations/enums/lettings/model.expected.json index 0bc729bf04..999e27aa87 100644 --- a/tests/parse_print/syntax_test/declarations/enums/lettings/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/enums/lettings/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"LettingDomainDefnEnum": [{"Name": "x"}, [{"Name": "a"}, {"Name": "b"}, {"Name": "c"}]]}}, diff --git a/tests/parse_print/syntax_test/declarations/finds/model.expected.json b/tests/parse_print/syntax_test/declarations/finds/model.expected.json index c1397173f0..f70abdc8ee 100644 --- a/tests/parse_print/syntax_test/declarations/finds/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/finds/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Find", {"Name": "x"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/syntax_test/declarations/givens/model.expected.json b/tests/parse_print/syntax_test/declarations/givens/model.expected.json index 9211948cfb..7d2f668c6a 100644 --- a/tests/parse_print/syntax_test/declarations/givens/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/givens/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"FindOrGiven": ["Given", {"Name": "x"}, {"DomainBool": []}]}}, diff --git a/tests/parse_print/syntax_test/declarations/lettings/domain/model.expected.json b/tests/parse_print/syntax_test/declarations/lettings/domain/model.expected.json index 769a9e9df1..c7784bcc49 100644 --- a/tests/parse_print/syntax_test/declarations/lettings/domain/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/lettings/domain/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "x"}, {"Domain": {"DomainBool": []}}]}}, diff --git a/tests/parse_print/syntax_test/declarations/lettings/expression/model.expected.json b/tests/parse_print/syntax_test/declarations/lettings/expression/model.expected.json index a09d38fe0d..8ae7c2a1cf 100644 --- a/tests/parse_print/syntax_test/declarations/lettings/expression/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/lettings/expression/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "x"}, {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}}, diff --git a/tests/parse_print/syntax_test/declarations/unnamed-redefinition/model.expected.json b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/model.expected.json index b6fefc2f04..863f7afd61 100644 --- a/tests/parse_print/syntax_test/declarations/unnamed-redefinition/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/unnamed-redefinition/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json b/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json index bb79989af6..acedda1c11 100644 --- a/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json +++ b/tests/parse_print/syntax_test/declarations/unnamed-valid/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/bool/model.expected.json b/tests/parse_print/syntax_test/domains/bool/model.expected.json index 5e8ae98d0e..460eb56016 100644 --- a/tests/parse_print/syntax_test/domains/bool/model.expected.json +++ b/tests/parse_print/syntax_test/domains/bool/model.expected.json @@ -1,7 +1,7 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "x"}, {"Domain": {"DomainBool": []}}]}}]} \ No newline at end of file diff --git a/tests/parse_print/syntax_test/domains/enum/model.expected.json b/tests/parse_print/syntax_test/domains/enum/model.expected.json index c9f7c83ee7..a5244c1c0d 100644 --- a/tests/parse_print/syntax_test/domains/enum/model.expected.json +++ b/tests/parse_print/syntax_test/domains/enum/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/function/model.expected.json b/tests/parse_print/syntax_test/domains/function/model.expected.json index 0aa1de09be..eed490d279 100644 --- a/tests/parse_print/syntax_test/domains/function/model.expected.json +++ b/tests/parse_print/syntax_test/domains/function/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/int/model.expected.json b/tests/parse_print/syntax_test/domains/int/model.expected.json index f4a721fbc4..1f1a12640b 100644 --- a/tests/parse_print/syntax_test/domains/int/model.expected.json +++ b/tests/parse_print/syntax_test/domains/int/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "a"}, {"Domain": {"DomainInt": [{"TagInt": []}, []]}}]}}, diff --git a/tests/parse_print/syntax_test/domains/matrix/model.expected.json b/tests/parse_print/syntax_test/domains/matrix/model.expected.json index 87b4c5207f..fea4bef13d 100644 --- a/tests/parse_print/syntax_test/domains/matrix/model.expected.json +++ b/tests/parse_print/syntax_test/domains/matrix/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/mset/model.expected.json b/tests/parse_print/syntax_test/domains/mset/model.expected.json index daf5ac86ef..4681430331 100644 --- a/tests/parse_print/syntax_test/domains/mset/model.expected.json +++ b/tests/parse_print/syntax_test/domains/mset/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/partition/model.expected.json b/tests/parse_print/syntax_test/domains/partition/model.expected.json index a8c2acda87..a09418ff42 100644 --- a/tests/parse_print/syntax_test/domains/partition/model.expected.json +++ b/tests/parse_print/syntax_test/domains/partition/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/record/model.expected.json b/tests/parse_print/syntax_test/domains/record/model.expected.json index 0a60ebbb3a..1bd180d9b3 100644 --- a/tests/parse_print/syntax_test/domains/record/model.expected.json +++ b/tests/parse_print/syntax_test/domains/record/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/relation/model.expected.json b/tests/parse_print/syntax_test/domains/relation/model.expected.json index 30c3a226e5..df4d01ab7d 100644 --- a/tests/parse_print/syntax_test/domains/relation/model.expected.json +++ b/tests/parse_print/syntax_test/domains/relation/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/sequence/model.expected.json b/tests/parse_print/syntax_test/domains/sequence/model.expected.json index 1b974ce615..34304cc0aa 100644 --- a/tests/parse_print/syntax_test/domains/sequence/model.expected.json +++ b/tests/parse_print/syntax_test/domains/sequence/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/set/model.expected.json b/tests/parse_print/syntax_test/domains/set/model.expected.json index 7d1f45583b..5a6905d91b 100644 --- a/tests/parse_print/syntax_test/domains/set/model.expected.json +++ b/tests/parse_print/syntax_test/domains/set/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/domains/tuple/model.expected.json b/tests/parse_print/syntax_test/domains/tuple/model.expected.json index 1b0cb9d39c..32caeab518 100644 --- a/tests/parse_print/syntax_test/domains/tuple/model.expected.json +++ b/tests/parse_print/syntax_test/domains/tuple/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": {"Letting": [{"Name": "q"}, {"Domain": {"DomainTuple": [{"DomainBool": []}]}}]}}, diff --git a/tests/parse_print/syntax_test/domains/unnamed/model.expected.json b/tests/parse_print/syntax_test/domains/unnamed/model.expected.json index 1003d0237a..b212c1a0ae 100644 --- a/tests/parse_print/syntax_test/domains/unnamed/model.expected.json +++ b/tests/parse_print/syntax_test/domains/unnamed/model.expected.json @@ -1,8 +1,8 @@ {"mInfo": {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "trailVerbose": [], "trailRewrites": [], "nameGenState": [], "nbExtraGivens": 0, "representations": [], - "representationsTree": [], "originalDomains": [], "trailGeneralised": []}, + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, "mStatements": [{"Declaration": diff --git a/tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected b/tests/parse_print/syntax_test/expressions/quantifications/typecheck.expected deleted file mode 100644 index e69de29bb2..0000000000 From 41536c055c1eba022320ebf718c680bd91721d9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 14:03:02 +0100 Subject: [PATCH 238/378] release version 2.5.0 --- CITATION.cff | 4 ++-- conjure-cp.cabal | 2 +- docs/conf.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index a802003563..1ddbc0c1ec 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -5,5 +5,5 @@ authors: given-names: Özgür orcid: https://orcid.org/0000-0001-9519-938X title: Conjure: The Automated Constraint Modelling Tool -version: v2.4.1 -date-released: 2023-04-24 +version: v2.5.0 +date-released: 2023-05-18 diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 888c5db117..a0e0162f67 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -1,6 +1,6 @@ Cabal-version: 2.4 Name: conjure-cp -Version: 2.4.1 +Version: 2.5.0 Synopsis: Conjure: The Automated Constraint Modelling Tool Description: . Homepage: http://github.com/conjure-cp/conjure diff --git a/docs/conf.py b/docs/conf.py index 9b7a2fd341..5d3eb62887 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -71,7 +71,7 @@ # built documents. # # The short X.Y version. -version = u'2.4.1' +version = u'2.5.0' # The full version, including alpha/beta/rc tags. release = version From e3a61f505674db04151c582ca05177fede3e1e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 14:35:37 +0100 Subject: [PATCH 239/378] Explicitly depending on sphinxcontrib.jquery for RTD --- docs/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/conf.py b/docs/conf.py index 5d3eb62887..941b91a038 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -33,6 +33,7 @@ extensions = [ 'sphinx.ext.todo', 'sphinxcontrib.bibtex', + 'sphinxcontrib.jquery' ] bibtex_bibfiles = ['refs.bib'] From df5614d89cba84100084b586d629fef9bd528470 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 14:37:41 +0100 Subject: [PATCH 240/378] update sphinx to 7.0.1 --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 2261578874..5354bcafed 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 sphinx_rtd_theme==1.2.0 -sphinx==6.1.3 +sphinx==7.0.1 From 773b7fa748d3b85e765c93c2f59284ece40df0c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 18 May 2023 14:39:58 +0100 Subject: [PATCH 241/378] Revert "update sphinx to 7.0.1" This reverts commit df5614d89cba84100084b586d629fef9bd528470. --- docs/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index 5354bcafed..2261578874 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,4 @@ sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 sphinx_rtd_theme==1.2.0 -sphinx==7.0.1 +sphinx==6.1.3 From 8f320228cab49c4e05f60fa70da626f2f2cb31a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 26 May 2023 15:20:55 +0100 Subject: [PATCH 242/378] lts-20.22 --- etc/hs-deps/stack-9.2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/hs-deps/stack-9.2.yaml b/etc/hs-deps/stack-9.2.yaml index 3f482b61fc..e9acb71d88 100644 --- a/etc/hs-deps/stack-9.2.yaml +++ b/etc/hs-deps/stack-9.2.yaml @@ -1,4 +1,4 @@ -resolver: lts-20.21 +resolver: lts-20.22 packages: - '.' system-ghc: true From 59095faeb845f16dc3fe8e3abe57c5b6e1b52f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 26 May 2023 15:38:46 +0100 Subject: [PATCH 243/378] We don't have this file anymore... --- etc/build/clean.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/etc/build/clean.sh b/etc/build/clean.sh index 91b7b729ea..15a2b8b278 100755 --- a/etc/build/clean.sh +++ b/etc/build/clean.sh @@ -4,7 +4,6 @@ set -o errexit set -o nounset SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" -source ${SCRIPT_DIR}/default_envvars.sh rm -rf dist \ cabal.sandbox.config .cabal-sandbox \ From 013b1fb5c3d2f4b2035b86840ba276180b1837ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 26 May 2023 15:38:56 +0100 Subject: [PATCH 244/378] Remove unused imports --- src/test/Conjure/Custom.hs | 5 +---- src/test/Conjure/ModelAllSolveAll.hs | 2 +- src/test/Conjure/ParserFuzz.hs | 20 ++++++++------------ 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/test/Conjure/Custom.hs b/src/test/Conjure/Custom.hs index e6eb22381b..624b676349 100644 --- a/src/test/Conjure/Custom.hs +++ b/src/test/Conjure/Custom.hs @@ -15,10 +15,7 @@ import Test.Tasty.HUnit ( testCaseSteps, assertFailure ) import Data.Text.IO as T ( readFile, writeFile ) -- shelly -import Shelly ( cd, bash, errExit, lastStderr,FilePath ) - --- system-filepath -import Filesystem.Path.CurrentOS as Path ( fromText ) +import Shelly ( cd, bash, errExit, lastStderr ) tests :: IO (TestTimeLimit -> TestTree) diff --git a/src/test/Conjure/ModelAllSolveAll.hs b/src/test/Conjure/ModelAllSolveAll.hs index 34f1e4a573..47749303e9 100644 --- a/src/test/Conjure/ModelAllSolveAll.hs +++ b/src/test/Conjure/ModelAllSolveAll.hs @@ -43,7 +43,7 @@ import qualified Data.Set as S ( fromList, toList, empty, null, difference ) -- Diff -- Diff -import Data.Algorithm.Diff ( Diff(..), getGroupedDiff, PolyDiff (..) ) +import Data.Algorithm.Diff ( getGroupedDiff, PolyDiff (..) ) import Data.Algorithm.DiffOutput ( ppDiff ) diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 0bb675cc44..15af7ee763 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -10,28 +10,24 @@ import Conjure.Prelude -- tasty import Test.Tasty (TestTree, testGroup) -import Test.Tasty.HUnit (assertFailure, testCaseSteps, assertEqual) +import Test.Tasty.HUnit (assertFailure, testCaseSteps) -import Conjure.Language.Parser (runLexerAndParser) import Conjure.Language.AST.ASTParser (runASTParser, parseProgram) -import Conjure.Language.Lexer (runLexer, Reformable (reform), reformList) -import qualified Data.Text as T (pack, lines, unpack) -import qualified Data.Text.Lazy as L -import Data.ByteString.Char8(hPutStrLn, pack, unpack) +import Conjure.Language.Lexer (runLexer, reformList) +import qualified Data.Text as T (pack, unpack) +import qualified Data.Text.Lazy as L +import Data.ByteString.Char8(hPutStrLn, pack) import Conjure.Language.AST.Reformer (Flattenable(flatten)) -import Data.Algorithm.Diff (getDiff, getGroupedDiff) +import Data.Algorithm.Diff (getGroupedDiff) import Data.Algorithm.DiffOutput (ppDiff) import GHC.IO.Handle.FD (stderr) -import System.Console.CmdArgs.Helper (execute) import Shelly (run, shelly, silently) tests :: IO TestTree tests = do - let baseDir = "tests" allFiles <- shelly $ silently $ run "git" ["ls-tree", "--full-tree", "--name-only", "-r", "HEAD"] let allFileList = lines $ T.unpack allFiles - -- contents <- mapM readFileIfExists allFileList let testCases = testFile <$> allFileList return (testGroup "parse_fuzz" testCases) @@ -42,11 +38,11 @@ testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \s let usableFileData = concat (take 1000 . lines $ fromMaybe [] fd) let fText = T.pack usableFileData case runLexer $ fText of - Left le -> assertFailure $ "Lexer failed in:" ++ fp + Left _le -> assertFailure $ "Lexer failed in:" ++ fp Right ets -> do step "parsing" case runASTParser parseProgram ets of - Left pe -> assertFailure $ "Parser failed in:" ++ fp + Left _pe -> assertFailure $ "Parser failed in:" ++ fp Right pt -> do step "RoundTripping" let roundTrip = L.unpack $ reformList $ flatten pt From ade28242a0586bf8c57e3510d742bd93993b8423 Mon Sep 17 00:00:00 2001 From: Andras Salamon Date: Tue, 30 May 2023 15:24:21 +0100 Subject: [PATCH 245/378] ensure BIN_DIR is in path, needed for Homebrew formula build --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index f379de0837..6a974c4771 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ SHELL := /bin/bash # override by calling the makefile like so: "GHC_VERSION=9.2 make" export GHC_VERSION?=9.2 export BIN_DIR?=${HOME}/.local/bin +export PATH := $(BIN_DIR):$(PATH) export CI?=false export BUILD_TESTS?=false export COVERAGE?=false From a86bc411e53cb5bd08af01fda5842be4a47490d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 1 Jun 2023 09:37:52 +0100 Subject: [PATCH 246/378] Fix regression in how we handle solution copying. This only effected parameter files that had dashes (-) in the filename. Added a regression test case as well. Thanks @ott2 for reporting! --- src/Conjure/UI/MainHelper.hs | 8 +++++++- tests/custom/solution-copy-dashed/p.param | 5 +++++ tests/custom/solution-copy-dashed/run.sh | 6 ++++++ .../solution-copy-dashed/stdout.expected | 15 +++++++++++++++ .../solution-copy-dashed/sumplete-1x1-42.param | 5 +++++ .../sumplete-2023053102.essence | 18 ++++++++++++++++++ 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 tests/custom/solution-copy-dashed/p.param create mode 100755 tests/custom/solution-copy-dashed/run.sh create mode 100644 tests/custom/solution-copy-dashed/stdout.expected create mode 100644 tests/custom/solution-copy-dashed/sumplete-1x1-42.param create mode 100644 tests/custom/solution-copy-dashed/sumplete-2023053102.essence diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 23eeb7fc4a..8f4508d761 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -376,7 +376,13 @@ mainWithArgs config@Solve{..} = do case stripPostfix ext (snd (splitFileName file)) of Nothing -> return () Just base -> do - let parts = splitOn "-" base + let parts' = splitOn "-" base + let parts = case (head parts', parts', last parts') of + (model, _:paramparts, stripPrefix "solution" -> msolnum) -> + case msolnum of + Nothing -> [model, intercalate "-" paramparts] + Just{} -> [model, intercalate "-" (init paramparts), last paramparts] + _ -> parts' case (solutionsInOneFile, null essenceParams, nbSolutions == "1", parts) of -- not parameterised, but no solution numbers. must be using solutionsInOneFile. (True, True, _singleSolution, [_model]) -> diff --git a/tests/custom/solution-copy-dashed/p.param b/tests/custom/solution-copy-dashed/p.param new file mode 100644 index 0000000000..7d8e34296e --- /dev/null +++ b/tests/custom/solution-copy-dashed/p.param @@ -0,0 +1,5 @@ +$ sumplete 1 x 1 instance generated by ./sumplete-gen.pl -s 42 +letting n be 1 +letting c be [[4]] +letting rt be [0] +letting ct be [0] diff --git a/tests/custom/solution-copy-dashed/run.sh b/tests/custom/solution-copy-dashed/run.sh new file mode 100755 index 0000000000..4e590d60a5 --- /dev/null +++ b/tests/custom/solution-copy-dashed/run.sh @@ -0,0 +1,6 @@ +rm -rf conjure-output *.solution +conjure solve sumplete-2023053102.essence p.param +ls -1 *.solution +conjure solve sumplete-2023053102.essence sumplete-1x1-42.param +ls -1 *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/solution-copy-dashed/stdout.expected b/tests/custom/solution-copy-dashed/stdout.expected new file mode 100644 index 0000000000..0fd97cecdc --- /dev/null +++ b/tests/custom/solution-copy-dashed/stdout.expected @@ -0,0 +1,15 @@ +Generating models for sumplete-2023053102.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime p.param +Running minion for domain filtering. +Running solver: minion +Copying solution to: sumplete-2023053102-p.solution +sumplete-2023053102-p.solution +Using cached models. +Savile Row: model000001.eprime sumplete-1x1-42.param +Running minion for domain filtering. +Running solver: minion +Copying solution to: sumplete-2023053102-sumplete-1x1-42.solution +sumplete-2023053102-p.solution +sumplete-2023053102-sumplete-1x1-42.solution diff --git a/tests/custom/solution-copy-dashed/sumplete-1x1-42.param b/tests/custom/solution-copy-dashed/sumplete-1x1-42.param new file mode 100644 index 0000000000..7d8e34296e --- /dev/null +++ b/tests/custom/solution-copy-dashed/sumplete-1x1-42.param @@ -0,0 +1,5 @@ +$ sumplete 1 x 1 instance generated by ./sumplete-gen.pl -s 42 +letting n be 1 +letting c be [[4]] +letting rt be [0] +letting ct be [0] diff --git a/tests/custom/solution-copy-dashed/sumplete-2023053102.essence b/tests/custom/solution-copy-dashed/sumplete-2023053102.essence new file mode 100644 index 0000000000..02c87ddf26 --- /dev/null +++ b/tests/custom/solution-copy-dashed/sumplete-2023053102.essence @@ -0,0 +1,18 @@ +$ https://sumplete.com/ +$ delete numbers so each row and column adds up to the target number + +given n : int(1..) +letting M be n*9 $ largest possible target number +letting rows be domain int(1..n) +letting cols be domain int(1..n) +letting digits be domain int(1..9) +letting targets be domain int(0..M) + +given c : matrix indexed by [rows,cols] of digits +given rt : matrix indexed by [rows] of targets +given ct : matrix indexed by [cols] of targets + +find d : function (total) (rows,cols) --> int(0..1) +such that + forAll i : rows . (sum j : cols . d((i,j))*c[i,j]) = rt[i] +, forAll j : cols . (sum i : rows . d((i,j))*c[i,j]) = ct[j] From 008667d6a3bb328f9da3bc186f815e4d45a10dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 1 Jun 2023 09:38:43 +0100 Subject: [PATCH 247/378] typo fix + lts-20.23 --- Makefile | 2 +- etc/hs-deps/stack-9.2.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6a974c4771..5ea92d7773 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ install: @echo "Using GHC version ${GHC_VERSION} (major version)" @echo "Set the environment variable GHC_VERSION to change this location." @echo "For example: \"GHC_VERSION=9.2 make install\"" - @echo "Supported version: 9.0 , 9.2" + @echo "Supported versions: 9.0, 9.2" @echo "" @echo "Installing executables to ${BIN_DIR}" @echo "Add this directory to your PATH." diff --git a/etc/hs-deps/stack-9.2.yaml b/etc/hs-deps/stack-9.2.yaml index 3f482b61fc..97de451bc1 100644 --- a/etc/hs-deps/stack-9.2.yaml +++ b/etc/hs-deps/stack-9.2.yaml @@ -1,4 +1,4 @@ -resolver: lts-20.21 +resolver: lts-20.23 packages: - '.' system-ghc: true From 7c9ef3c812d9314664a5c2dd0a39aaddb048b529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 2 Jun 2023 00:11:25 +0100 Subject: [PATCH 248/378] the new logic generates an empty string when there isn't a parameter --- src/Conjure/UI/MainHelper.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 8f4508d761..92bac86bf4 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -385,12 +385,12 @@ mainWithArgs config@Solve{..} = do _ -> parts' case (solutionsInOneFile, null essenceParams, nbSolutions == "1", parts) of -- not parameterised, but no solution numbers. must be using solutionsInOneFile. - (True, True, _singleSolution, [_model]) -> + (True, True, _singleSolution, [_model, ""]) -> copySolution file $ essenceDir essenceBasename <.> ext -- not parameterised, with solution numbers - (False, True, singleSolution, [_model, (stripPrefix "solution" -> Just solnum)]) -> + (False, True, singleSolution, [_model, "", (stripPrefix "solution" -> Just solnum)]) -> if singleSolution then when (solnum == "000001") $ -- only copy the first solution copySolution file $ essenceDir From 03956fd37821879e0b30d5fc0b80967b90b2a2c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 12 Jun 2023 14:25:28 +0100 Subject: [PATCH 249/378] Add nbsphinx --- docs/conf.py | 3 ++- docs/requirements.txt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 941b91a038..d75181935f 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -33,7 +33,8 @@ extensions = [ 'sphinx.ext.todo', 'sphinxcontrib.bibtex', - 'sphinxcontrib.jquery' + 'sphinxcontrib.jquery', + 'nbsphinx' ] bibtex_bibfiles = ['refs.bib'] diff --git a/docs/requirements.txt b/docs/requirements.txt index 2261578874..56d028ff4c 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,3 +2,4 @@ sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 sphinx_rtd_theme==1.2.0 sphinx==6.1.3 +nbsphinx==0.9.1 \ No newline at end of file From d1882b9c64325297c93256be87385255d354c106 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 12 Jun 2023 14:29:51 +0100 Subject: [PATCH 250/378] Add a new section: "Tutorials using Conjure notebook" --- docs/index.rst | 1 + docs/tutorials-notebook.rst | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 docs/tutorials-notebook.rst diff --git a/docs/index.rst b/docs/index.rst index 20c6990b09..701ab0799d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -16,6 +16,7 @@ Conjure: The Automated Constraint Modelling Tool features essence tutorials + tutorials-notebook zreferences contact diff --git a/docs/tutorials-notebook.rst b/docs/tutorials-notebook.rst new file mode 100644 index 0000000000..8ff11342ee --- /dev/null +++ b/docs/tutorials-notebook.rst @@ -0,0 +1,12 @@ + +.. _tutorials_notebook: + +Tutorials using Conjure notebook +================================ + + +We demonstrate the use of Conjure for some small problems. + +See `conjure-notebook repository `_ for details. + +.. include:: tutorials/notebooks/KnapsackProblem.ipynb From a137c5b33ed5772bc968a1e2a310b722d717f944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 12 Jun 2023 14:37:35 +0100 Subject: [PATCH 251/378] without the file extension --- docs/tutorials-notebook.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials-notebook.rst b/docs/tutorials-notebook.rst index 8ff11342ee..26a4852815 100644 --- a/docs/tutorials-notebook.rst +++ b/docs/tutorials-notebook.rst @@ -9,4 +9,4 @@ We demonstrate the use of Conjure for some small problems. See `conjure-notebook repository `_ for details. -.. include:: tutorials/notebooks/KnapsackProblem.ipynb +.. include:: tutorials/notebooks/KnapsackProblem From 1e3353596679f4dd5260cfcbc115249a7fcfdb54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 12 Jun 2023 14:45:04 +0100 Subject: [PATCH 252/378] trying to include in the toctree --- docs/index.rst | 1 + docs/tutorials-notebook.rst | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.rst b/docs/index.rst index 701ab0799d..632946afa7 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,6 +17,7 @@ Conjure: The Automated Constraint Modelling Tool essence tutorials tutorials-notebook + tutorials/notebooks/KnapsackProblem zreferences contact diff --git a/docs/tutorials-notebook.rst b/docs/tutorials-notebook.rst index 26a4852815..e85b229e3b 100644 --- a/docs/tutorials-notebook.rst +++ b/docs/tutorials-notebook.rst @@ -9,4 +9,3 @@ We demonstrate the use of Conjure for some small problems. See `conjure-notebook repository `_ for details. -.. include:: tutorials/notebooks/KnapsackProblem From 5a3f5732c19047c5930270430f41e1eb34e0f442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 10:34:51 +0100 Subject: [PATCH 253/378] referring to the notebook in the toctree --- docs/build.sh | 2 + docs/index.rst | 1 - docs/tutorials-notebook.rst | 5 + docs/tutorials.rst | 22 +- docs/tutorials/futoshiki/Futoshiki.rst | 2 +- .../tutorials/notebooks/KnapsackProblem.ipynb | 483 ++++++++++-------- 6 files changed, 291 insertions(+), 224 deletions(-) create mode 100644 docs/build.sh diff --git a/docs/build.sh b/docs/build.sh new file mode 100644 index 0000000000..8d83542b96 --- /dev/null +++ b/docs/build.sh @@ -0,0 +1,2 @@ +python3 -m pip install -r requirements.txt +python3 -m sphinx . _build diff --git a/docs/index.rst b/docs/index.rst index 632946afa7..701ab0799d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,7 +17,6 @@ Conjure: The Automated Constraint Modelling Tool essence tutorials tutorials-notebook - tutorials/notebooks/KnapsackProblem zreferences contact diff --git a/docs/tutorials-notebook.rst b/docs/tutorials-notebook.rst index e85b229e3b..ff276ed811 100644 --- a/docs/tutorials-notebook.rst +++ b/docs/tutorials-notebook.rst @@ -9,3 +9,8 @@ We demonstrate the use of Conjure for some small problems. See `conjure-notebook repository `_ for details. + +.. toctree:: + :maxdepth: 1 + + tutorials/notebooks/KnapsackProblem diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 5065b17482..028eca8f64 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -4,15 +4,17 @@ Tutorials ============== - We demonstrate the use of Conjure for some small problems. -.. include:: tutorials/NumberPuzzle.rst -.. include:: tutorials/knapsack.rst -.. include:: tutorials/NurseRostering.rst -.. include:: tutorials/LabelledConnectedGraphs.rst -.. include:: tutorials/futoshiki/Futoshiki.rst -.. include:: tutorials/BIBD.rst -.. include:: tutorials/Groups.rst -.. include:: tutorials/knapsack_generator/KnapGen.rst -.. include:: tutorials/simple_perm/simple_perm.rst +.. toctree:: + :maxdepth: 1 + + tutorials/NumberPuzzle + tutorials/knapsack + tutorials/NurseRostering + tutorials/LabelledConnectedGraphs + tutorials/futoshiki/Futoshiki + tutorials/BIBD + tutorials/Groups + tutorials/knapsack_generator/KnapGen + tutorials/simple_perm/simple_perm.rst diff --git a/docs/tutorials/futoshiki/Futoshiki.rst b/docs/tutorials/futoshiki/Futoshiki.rst index 1985a94504..91ce74bf32 100644 --- a/docs/tutorials/futoshiki/Futoshiki.rst +++ b/docs/tutorials/futoshiki/Futoshiki.rst @@ -9,7 +9,7 @@ Problem ``n x n`` board where each column and row is filled with the unique numbers from 1 to ``n``, similar to a sudoku. In contrast to sudoku, there are less than and greater than symbols between cells indicating that one cell has to be filled with a number greater than (or less than) than the cell on the other side of the operator. -.. image:: tutorials/futoshiki/example.png +.. image:: example.png :scale: 50% :alt: Example futoshiki board. diff --git a/docs/tutorials/notebooks/KnapsackProblem.ipynb b/docs/tutorials/notebooks/KnapsackProblem.ipynb index ac87912e7f..7ea425b398 100644 --- a/docs/tutorials/notebooks/KnapsackProblem.ipynb +++ b/docs/tutorials/notebooks/KnapsackProblem.ipynb @@ -1,51 +1,42 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "toc_visible": true, - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "#The Knapsack problem" - ], "metadata": { "id": "Q-O7ivbPHtqI" - } + }, + "source": [ + "# The Knapsack problem" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Original [The Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials.html#the-knapsack-problem) by Saad Attieh and Christopher Stone. Adapted by Alex Gallagher." - ], "metadata": { "id": "5I6cwwqhH19R" - } + }, + "source": [ + "Original [The Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials.html#the-knapsack-problem) by Saad Attieh and Christopher Stone. Adapted by Alex Gallagher." + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "GZkJHUbaIFon" + }, "source": [ "The Knapsack problem is a classical combinatorial optimisation problem, often used in areas of resource allocation. A basic variant of the Knapsack problem is defined as follows:\n", "\n", @@ -58,17 +49,11 @@ "2. The sum of the values of the items is maximised.\n", "\n", "Informally, think about putting items in a sack such that we maximise the total value of the sack whilst not going over the sack’s weight limit.\n" - ], - "metadata": { - "id": "GZkJHUbaIFon" - } + ] }, { "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure\n" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -76,11 +61,10 @@ "id": "A35VMVlIMe_g", "outputId": "a1ef80e3-3c48-4aed-c4ec-739d90c4ca76" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", @@ -93,19 +77,28 @@ " %reload_ext conjure\n" ] } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure\n" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "##Model Explained" - ], "metadata": { "id": "fU4y3zCXMNgX" - } + }, + "source": [ + "##Model Explained" + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "vsYVModWMMUU" + }, "source": [ "We begin by showing the entire problem as defined in Essence:\n", "\n", @@ -128,316 +121,327 @@ "\n", "\n", "`such that (sum i in picked . weight(i)) <= capacity`" - ], - "metadata": { - "id": "vsYVModWMMUU" - } + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "S0QHWB3fItZK" + }, "source": [ "Going through the problem line by line:\n", "\n", "We begin by defining the parameters to the problem. Parameters can be defined outside of the problem, allowing different instances of the same problem to be solved without having to change the specification.\n", "\n", "Each parameter is denoted with the given keyword." - ], - "metadata": { - "id": "S0QHWB3fItZK" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`given items new type enum`" - ], "metadata": { "id": "RR32w1Dd5-mU" - } + }, + "source": [ + "`given items new type enum`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This line says that a set of items will be provided as an enum type. Enums are good for labeling items where it makes no sense to attribute a value to each item. So instead of using integers to represent each item, we may just assign names to each item and group the names under an enum type. Below is an example enum declaration, as it would be written in the Conjure Magic cell:" - ], "metadata": { "id": "MCnXSWH_IxnM" - } + }, + "source": [ + "This line says that a set of items will be provided as an enum type. Enums are good for labeling items where it makes no sense to attribute a value to each item. So instead of using integers to represent each item, we may just assign names to each item and group the names under an enum type. Below is an example enum declaration, as it would be written in the Conjure Magic cell:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting items be new type enum {a,b,c,d,e}" - ], + "execution_count": null, "metadata": { - "id": "SrrZ0nFcI402", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "SrrZ0nFcI402", "outputId": "cc59d93f-8759-4ade-bc50-5268aa8d7a46" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'picked': ['b', 'd']}" ] }, + "execution_count": 13, "metadata": {}, - "execution_count": 13 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting items be new type enum {a,b,c,d,e}" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`a`, `b`, etc. are just names we have given, they could be anything `bread`, `whiskey`, …" - ], "metadata": { "id": "CABjHWtbJGk0" - } + }, + "source": [ + "`a`, `b`, etc. are just names we have given, they could be anything `bread`, `whiskey`, …" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`given weight : function (total) items --> int`" - ], "metadata": { "id": "b7N-ZDa46JGr" - } + }, + "source": [ + "`given weight : function (total) items --> int`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Another parameter, a function that maps from each item to an integer, we will treat these integers as weights. Since we are describing integers that will be given as parameters, no domain (lower/upper bound) is required. Here is an example function parameter:" - ], "metadata": { "id": "-uOA3Q_DJSvM" - } + }, + "source": [ + "Another parameter, a function that maps from each item to an integer, we will treat these integers as weights. Since we are describing integers that will be given as parameters, no domain (lower/upper bound) is required. Here is an example function parameter:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting weight be function\n", - " ( a --> 15\n", - " , b --> 25\n", - " , c --> 45\n", - " , d --> 50\n", - " , e --> 60\n", - " )" - ], + "execution_count": null, "metadata": { - "id": "IKZXLIHlJVF9", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "IKZXLIHlJVF9", "outputId": "ed11891f-6467-4d64-854a-2b60174c0182" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'picked': ['b', 'd']}" ] }, + "execution_count": 14, "metadata": {}, - "execution_count": 14 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting weight be function\n", + " ( a --> 15\n", + " , b --> 25\n", + " , c --> 45\n", + " , d --> 50\n", + " , e --> 60\n", + " )" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`given gain : function (total) items --> int`" - ], "metadata": { "id": "XhUtJP1o6P0q" - } + }, + "source": [ + "`given gain : function (total) items --> int`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Just the same as the weight parameter, this parameter is used to denote a mapping from each item to a value. An example value for this parameter as it would be defined in the parameter file is:" - ], "metadata": { "id": "6zkqdEX6tOJU" - } + }, + "source": [ + "Just the same as the weight parameter, this parameter is used to denote a mapping from each item to a value. An example value for this parameter as it would be defined in the parameter file is:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting gain be function\n", - " ( a --> 10\n", - " , b --> 20\n", - " , c --> 40\n", - " , d --> 40\n", - " , e --> 50\n", - " )" - ], + "execution_count": null, "metadata": { - "id": "xgNtA5-4tQxX", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "xgNtA5-4tQxX", "outputId": "1c67a603-b87a-4b59-b8d7-2909a5d5943a" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'picked': ['b', 'd']}" ] }, + "execution_count": 15, "metadata": {}, - "execution_count": 15 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting gain be function\n", + " ( a --> 10\n", + " , b --> 20\n", + " , c --> 40\n", + " , d --> 40\n", + " , e --> 50\n", + " )" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The final given:" - ], "metadata": { "id": "X8qMCv8DKio9" - } + }, + "source": [ + "The final given:" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`given capacity : int`" - ], "metadata": { "id": "btL2k4bc6Xis" - } + }, + "source": [ + "`given capacity : int`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The final parameter – a weight limit. Example value:" - ], "metadata": { "id": "1C84QOfkKn7Y" - } + }, + "source": [ + "The final parameter – a weight limit. Example value:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting capacity be 80" - ], + "execution_count": null, "metadata": { - "id": "F1rd0BM4Kr6s", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "F1rd0BM4Kr6s", "outputId": "89cc9b79-4d88-49d0-d3ba-1e9b0a940d8e" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'picked': ['b', 'd']}" ] }, + "execution_count": 16, "metadata": {}, - "execution_count": 16 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting capacity be 80" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`find picked : set of items`" - ], "metadata": { "id": "tjnxxkh06m8U" - } + }, + "source": [ + "`find picked : set of items`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The `find` keyword denotes decision variables, these are the variables for which the solver will search for a valid assignment. As is common in Essence problems, our entire problem is modelled using one decision variable named `picked`. Its type is `set of items`; a set of any size whose elements are taken from the `items` domain. Note, the maximum cardinality of the set is implicitly the size of the `items` domain." - ], "metadata": { "id": "PvO14gKeKyLf" - } + }, + "source": [ + "The `find` keyword denotes decision variables, these are the variables for which the solver will search for a valid assignment. As is common in Essence problems, our entire problem is modelled using one decision variable named `picked`. Its type is `set of items`; a set of any size whose elements are taken from the `items` domain. Note, the maximum cardinality of the set is implicitly the size of the `items` domain." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`maximising sum i in picked . gain(i)`" - ], "metadata": { "id": "KwTtli4p6qd6" - } + }, + "source": [ + "`maximising sum i in picked . gain(i)`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The `maximising` keyword denotes the objective for the solver; a value for the solver to *maximise*. `minimise` is also a valid objective keyword. The expression `sum i in picked .` is a quantifier. The sum says that the values we produce should be summed together. The i in picked says we want to list out every element of the set `picked`. The expression given to the `sum` are described by the expression that follows the full-stop (.). In this case, we are asking for the image of `i` in the `gain` function. That is, for each item in the set, we are looking up the integer value that the item maps to in the `gain` function and summing these integers." - ], "metadata": { "id": "a_RSfRhQLAq1" - } + }, + "source": [ + "The `maximising` keyword denotes the objective for the solver; a value for the solver to *maximise*. `minimise` is also a valid objective keyword. The expression `sum i in picked .` is a quantifier. The sum says that the values we produce should be summed together. The i in picked says we want to list out every element of the set `picked`. The expression given to the `sum` are described by the expression that follows the full-stop (.). In this case, we are asking for the image of `i` in the `gain` function. That is, for each item in the set, we are looking up the integer value that the item maps to in the `gain` function and summing these integers." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`such that (sum i in picked . weight(i)) <= capacity`" - ], "metadata": { "id": "MqbSkMYu6vIt" - } + }, + "source": [ + "`such that (sum i in picked . weight(i)) <= capacity`" + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "Z9Ug5YKJLWBt" + }, "source": [ "The `such that` keyword denotes a constraint. Here the constraint is formulated in a similar manner to the objective. We are quantifying over the set of chosen items `picked`, looking up the value that the item maps to in the `weights` function and summing these values to together. We enforce that the result of the sum must be less than or equal to the capacity `<= capacity`.\n", "\n", "Note that you can post multiple constraints either by using commas between each constraint `,` or by reusing the keyword `such that`." - ], - "metadata": { - "id": "Z9Ug5YKJLWBt" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Solving the problem" - ], "metadata": { "id": "IQkhfYsfMTzt" - } + }, + "source": [ + "## Solving the problem" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Having run the earlier definition cells, we can now run the model:" - ], "metadata": { "id": "zQdE5f_yMhY8" - } + }, + "source": [ + "Having run the earlier definition cells, we can now run the model:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure \n", - "find picked : set of items\n", - "maximising sum i in picked . gain(i)\n", - "such that (sum i in picked . weight(i)) <= capacity" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -445,43 +449,48 @@ "id": "PykrdRJYMoO9", "outputId": "cb3decd4-2ad6-4cd8-bdc2-2368c44287f1" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'picked': ['b', 'd']}" ] }, + "execution_count": 17, "metadata": {}, - "execution_count": 17 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure \n", + "find picked : set of items\n", + "maximising sum i in picked . gain(i)\n", + "such that (sum i in picked . weight(i)) <= capacity" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Visualisations:" - ], "metadata": { "id": "Zeb9D96g9C_E" - } + }, + "source": [ + "## Visualisations:" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We can print the result using python code:" - ], "metadata": { "id": "QKFbX2ryCXyj" - } + }, + "source": [ + "We can print the result using python code:" + ] }, { "cell_type": "code", - "source": [ - "print(picked)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -489,43 +498,32 @@ "id": "zZWJyxyh9HXC", "outputId": "dcf9fb0b-7511-4bc4-d993-b3fa656a686f" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "['b', 'd']\n" ] } + ], + "source": [ + "print(picked)" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We can also show `picked` as a graph:" - ], "metadata": { "id": "rOwOZWoyCeeE" - } + }, + "source": [ + "We can also show `picked` as a graph:" + ] }, { "cell_type": "code", - "source": [ - "import graphviz\n", - "\n", - "p = graphviz.Digraph('parent')\n", - "p.attr(compound='true')\n", - "\n", - "\n", - "with p.subgraph(name='clusterx', node_attr={'shape': 'pentagon', 'color': 'blue', 'style':'rounded'}) as c:\n", - " for item in picked:\n", - " c.node(str(item))\n", - " c.attr(label='picked')\n", - " c.attr(style='rounded')\n", - "\n", - "p" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -534,20 +532,81 @@ "id": "tY1u6ZJSDuy8", "outputId": "d864fb66-d29a-44ea-968f-e441dab680ee" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parent\n", + "\n", + "\n", + "clusterx\n", + "\n", + "picked\n", + "\n", + "\n", + "\n", + "b\n", + "\n", + "b\n", + "\n", + "\n", + "\n", + "d\n", + "\n", + "d\n", + "\n", + "\n", + "\n" + ], "text/plain": [ "" - ], - "image/svg+xml": "\n\n\n\n\n\nparent\n\n\nclusterx\n\npicked\n\n\n\nb\n\nb\n\n\n\nd\n\nd\n\n\n\n" + ] }, + "execution_count": 36, "metadata": {}, - "execution_count": 36 + "output_type": "execute_result" } + ], + "source": [ + "import graphviz\n", + "\n", + "p = graphviz.Digraph('parent')\n", + "p.attr(compound='true')\n", + "\n", + "\n", + "with p.subgraph(name='clusterx', node_attr={'shape': 'pentagon', 'color': 'blue', 'style':'rounded'}) as c:\n", + " for item in picked:\n", + " c.node(str(item))\n", + " c.attr(label='picked')\n", + " c.attr(style='rounded')\n", + "\n", + "p" ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "include_colab_link": true, + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 0f916428cc73a684053df1af0fee2962c4d049c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 11:35:28 +0100 Subject: [PATCH 254/378] move where the docs live --- {data/docs/attributes => docs/bits/attribute}/L_regular.md | 0 {data/docs => docs/bits}/function/allDiff.md | 0 {data/docs => docs/bits}/function/max.md | 0 {data/docs => docs/bits}/function/min.md | 0 {data/docs => docs/bits}/keyword/expr_projection.md | 0 {data/docs => docs/bits}/keyword/find.md | 0 {data/docs => docs/bits}/keyword/new_type_enum.md | 0 {data/docs/op => docs/bits/operator}/L_in.md | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename {data/docs/attributes => docs/bits/attribute}/L_regular.md (100%) rename {data/docs => docs/bits}/function/allDiff.md (100%) rename {data/docs => docs/bits}/function/max.md (100%) rename {data/docs => docs/bits}/function/min.md (100%) rename {data/docs => docs/bits}/keyword/expr_projection.md (100%) rename {data/docs => docs/bits}/keyword/find.md (100%) rename {data/docs => docs/bits}/keyword/new_type_enum.md (100%) rename {data/docs/op => docs/bits/operator}/L_in.md (100%) diff --git a/data/docs/attributes/L_regular.md b/docs/bits/attribute/L_regular.md similarity index 100% rename from data/docs/attributes/L_regular.md rename to docs/bits/attribute/L_regular.md diff --git a/data/docs/function/allDiff.md b/docs/bits/function/allDiff.md similarity index 100% rename from data/docs/function/allDiff.md rename to docs/bits/function/allDiff.md diff --git a/data/docs/function/max.md b/docs/bits/function/max.md similarity index 100% rename from data/docs/function/max.md rename to docs/bits/function/max.md diff --git a/data/docs/function/min.md b/docs/bits/function/min.md similarity index 100% rename from data/docs/function/min.md rename to docs/bits/function/min.md diff --git a/data/docs/keyword/expr_projection.md b/docs/bits/keyword/expr_projection.md similarity index 100% rename from data/docs/keyword/expr_projection.md rename to docs/bits/keyword/expr_projection.md diff --git a/data/docs/keyword/find.md b/docs/bits/keyword/find.md similarity index 100% rename from data/docs/keyword/find.md rename to docs/bits/keyword/find.md diff --git a/data/docs/keyword/new_type_enum.md b/docs/bits/keyword/new_type_enum.md similarity index 100% rename from data/docs/keyword/new_type_enum.md rename to docs/bits/keyword/new_type_enum.md diff --git a/data/docs/op/L_in.md b/docs/bits/operator/L_in.md similarity index 100% rename from data/docs/op/L_in.md rename to docs/bits/operator/L_in.md From 198205e6dee3e2904a91fe19b6211271614d0f8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 14:40:27 +0100 Subject: [PATCH 255/378] add http-client so we can download things --- conjure-cp.cabal | 70 ++---------------------------------------------- 1 file changed, 2 insertions(+), 68 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index a0e0162f67..ca23dc5999 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -10,7 +10,6 @@ Author: Özgür Akgün Maintainer: ozgurakgun@gmail.com Category: Constraint Programming Build-type: Simple -Data-files: data/docs/**/*.md Library default-language : Haskell2010 hs-source-dirs : src @@ -318,26 +317,8 @@ Library , lsp , lens , template-haskell - - -- if impl(ghc == 7.8.*) - -- build-depends: template-haskell == 2.9.* - -- if impl(ghc == 7.10.*) - -- build-depends: template-haskell == 2.10.* - -- if impl(ghc == 8.0.*) - -- build-depends: template-haskell == 2.11.* - -- ghc-options: -Wno-redundant-constraints - -- if impl(ghc == 8.2.*) - -- build-depends: template-haskell == 2.12.* - -- if impl(ghc == 8.4.*) - -- build-depends: template-haskell == 2.13.* - -- if impl(ghc == 8.6.*) - -- build-depends: template-haskell == 2.14.* - -- if impl(ghc == 8.8.*) - -- build-depends: template-haskell == 2.15.* - -- if impl(ghc == 8.10.*) - -- build-depends: template-haskell == 2.16.* - -- if impl(ghc == 9.0.*) - -- build-depends: template-haskell == 2.17.* + , http-client + , http-client-tls default-extensions: FlexibleContexts @@ -469,50 +450,3 @@ Test-Suite conjure-testing ghc-prof-options: -fprof-auto-top -fprof-auto-exported - --- Test-Suite conjure-lsp-test --- type : exitcode-stdio-1.0 --- default-language : Haskell2010 --- hs-source-dirs : src/test-lsp --- main-is : LSPTestsMain.hs --- other-modules : Conjure.LSP.Util - --- build-depends : conjure-cp --- , base --- , unliftio --- , hspec --- , lsp --- , lsp-test --- default-extensions: --- FlexibleContexts --- FlexibleInstances --- ImplicitParams --- LambdaCase --- MultiParamTypeClasses --- MultiWayIf --- DataKinds --- NoImplicitPrelude --- OverloadedStrings --- ScopedTypeVariables --- TypeOperators --- ViewPatterns --- ghc-options: --- -fwarn-incomplete-patterns --- -fwarn-incomplete-uni-patterns --- -fwarn-missing-signatures --- -fwarn-name-shadowing --- -fwarn-orphans --- -fwarn-overlapping-patterns --- -fwarn-tabs --- -fwarn-unused-do-bind --- -fwarn-unused-matches --- -Wall --- -threaded --- -rtsopts --- -with-rtsopts=-N1 --- -with-rtsopts=-K200M --- -with-rtsopts=-M4G --- ghc-prof-options: --- -fprof-auto-top --- -fprof-auto-exported --- build-tool-depends: hspec-discover:hspec-discover == 2.* \ No newline at end of file From 7e2b4c69d715224f3402855994b3bcae3ac23f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 14:41:12 +0100 Subject: [PATCH 256/378] ignoring some events explicitly --- src/Conjure/LSP/Handlers/File.hs | 10 ++++++---- src/Conjure/LSP/LanguageServer.hs | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Conjure/LSP/Handlers/File.hs b/src/Conjure/LSP/Handlers/File.hs index c9e9c37c5e..f74f0b2f2e 100644 --- a/src/Conjure/LSP/Handlers/File.hs +++ b/src/Conjure/LSP/Handlers/File.hs @@ -5,10 +5,7 @@ module Conjure.LSP.Handlers.File where import Conjure.Prelude import Language.LSP.Server (notificationHandler, Handlers, LspM, publishDiagnostics, getVirtualFile) -import Language.LSP.Types ( - SMethod (STextDocumentDidOpen, STextDocumentDidChange, STextDocumentDidClose) - , toNormalizedUri - ,Uri) +import Language.LSP.Types (SMethod (..), toNormalizedUri, Uri) import Data.Text (pack) import Control.Lens import Language.LSP.VFS @@ -19,6 +16,11 @@ import Prettyprinter fileHandlers :: Handlers (LspM ()) fileHandlers = mconcat [fileOpenedHandler,fileChangedHandler,fileClosedHandler] +unhandled :: [Handlers (LspM ())] +unhandled = [ notificationHandler SCancelRequest $ \ _ -> pure () + , notificationHandler STextDocumentDidSave $ \ _ -> pure () + ] + fileOpenedHandler :: Handlers (LspM ()) fileOpenedHandler = notificationHandler STextDocumentDidOpen $ \ req -> do let td = req^.params.textDocument diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index 92321c9ace..eb42536e08 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -5,7 +5,7 @@ module Conjure.LSP.LanguageServer where import Language.LSP.Server import qualified Language.LSP.Types as J -import Conjure.LSP.Handlers.File (fileHandlers) +import Conjure.LSP.Handlers.File (unhandled, fileHandlers) import Conjure.LSP.Handlers.Initialize (handleInitialized) import Conjure.Prelude import Conjure.LSP.Handlers.Hover (hoverHandler) @@ -35,7 +35,7 @@ conjureLanguageServer = handlers :: Handlers (LspM ()) handlers = - mconcat + mconcat $ unhandled ++ [ fileHandlers , handleInitialized , hoverHandler From 8e566246fec41a46c8a6d3e9b3f3f05c7476f8da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 14:41:21 +0100 Subject: [PATCH 257/378] downloading documentation --- src/Conjure/LSP/Documentation.hs | 84 ++++++++++++++++++++++---------- 1 file changed, 58 insertions(+), 26 deletions(-) diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs index c3568d652f..da48eff6f7 100644 --- a/src/Conjure/LSP/Documentation.hs +++ b/src/Conjure/LSP/Documentation.hs @@ -1,41 +1,73 @@ module Conjure.LSP.Documentation where -import Paths_conjure_cp (getDataFileName) -import Language.LSP.Types (MarkupKind (MkMarkdown), MarkupContent (MarkupContent)) + import Conjure.Prelude -import qualified Data.Text as T import Conjure.Language.Validator (DocType (..), RegionType (Documentation)) -tryGetDocsByName :: String -> IO(Maybe MarkupContent) -tryGetDocsByName name = do - fileName <- getDataFileName ("data/docs/"++name ++ ".md") - fileData <- readFileIfExists fileName - return $ MarkupContent MkMarkdown . T.pack <$> fileData - +import Language.LSP.Types (MarkupKind (MkMarkdown), MarkupContent (MarkupContent)) +import qualified Data.Text as T +import Data.Text.Encoding ( decodeUtf8 ) + +-- from: https://stackoverflow.com/a/60793739/463977 +import Network.HTTP.Client -- package http-client +import Network.HTTP.Client.TLS -- package http-client-tls +import qualified Data.ByteString.Lazy as BL getDocsForBuiltin :: RegionType -> IO (Maybe MarkupContent) -getDocsForBuiltin (Documentation prefix (T.unpack->name)) = do +getDocsForBuiltin (Documentation prefix (T.unpack -> name)) = do let category = case prefix of - OperatorD -> "op/" - FunctionD -> "function/" - KeywordD -> "keyword/" - TypeD -> "types/" - AttributeD -> "attributes/" - res <- tryGetDocsByName $ category ++ name - return . Just $ case res of - Nothing -> fallbackMsg category name - Just mc -> mc -getDocsForBuiltin _ = pure Nothing + OperatorD -> "operator" + FunctionD -> "function" + KeywordD -> "keyword" + TypeD -> "type" + AttributeD -> "attribute" + -- create a connection manager + manager <- newManager tlsManagerSettings + -- create the request + request <- parseRequest (getReadUrl category name) + -- make the request + r <- httpLbs request manager + -- get the contents (as a lazy ByteString) + let contents = decodeUtf8 $ BL.toStrict $ responseBody r + + if contents == "404: Not Found" + then return $ Just $ fallbackMsg category name + else return $ Just $ MarkupContent MkMarkdown $ T.concat + [ contents + , "\n\n -- \n\n" + , "[Edit this doc](",edit category name,")" + ] +getDocsForBuiltin _ = pure Nothing fallbackMsg :: String -> String -> MarkupContent -fallbackMsg c n = MarkupContent MkMarkdown $ T.concat ["[Create This Doc](",getEditUrl c n,")"] +fallbackMsg c n = MarkupContent MkMarkdown $ T.concat ["[Create this doc](", createURL c n,")"] + -getEditUrl :: String -> String -> Text -getEditUrl category name = T.pack $ concat [ - "https://github.com/conjure-cp/conjure/new/master/data/docs/" +readUrl :: String -> String -> String +readUrl category name = concat + [ "https://raw.githubusercontent.com/conjure-cp/conjure/onlinedocs-hover/docs/bits/" + , category + , "/" + , name + , ".md" + ] + + +createURL :: String -> String -> Text +createURL category name = T.pack $ concat [ + "https://github.com/conjure-cp/conjure/new/onlinedocs-hover/docs/bits/" ,category - ,name ,"?filename=" , name ,".md" - ] \ No newline at end of file + ] + + +editURL :: String -> String -> Text +editURL category name = T.pack $ concat [ + "https://github.com/conjure-cp/conjure/edit/onlinedocs-hover/docs/bits/" + ,category + ,"/" + , name + ,".md" + ] From ef872456ba4897023e35c423478a76526d57e5c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Tue, 13 Jun 2023 14:19:48 +0100 Subject: [PATCH 258/378] Create and.md --- docs/bits/function/and.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/bits/function/and.md diff --git a/docs/bits/function/and.md b/docs/bits/function/and.md new file mode 100644 index 0000000000..ce24e6e042 --- /dev/null +++ b/docs/bits/function/and.md @@ -0,0 +1,3 @@ +Conjunction (logical and) operator. + +Can be applied on a list of Booleans and produces a single Boolean as the result. From eef3b8898b98c962a3d44d4c3fd13831b1cb94df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 14:52:28 +0100 Subject: [PATCH 259/378] exception handling --- src/Conjure/LSP/Documentation.hs | 39 +++++++++++++++++++------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs index da48eff6f7..bcd1fe9442 100644 --- a/src/Conjure/LSP/Documentation.hs +++ b/src/Conjure/LSP/Documentation.hs @@ -14,28 +14,35 @@ import qualified Data.ByteString.Lazy as BL getDocsForBuiltin :: RegionType -> IO (Maybe MarkupContent) getDocsForBuiltin (Documentation prefix (T.unpack -> name)) = do - let category = case prefix of + let + category = case prefix of OperatorD -> "operator" FunctionD -> "function" KeywordD -> "keyword" TypeD -> "type" AttributeD -> "attribute" - -- create a connection manager - manager <- newManager tlsManagerSettings - -- create the request - request <- parseRequest (getReadUrl category name) - -- make the request - r <- httpLbs request manager - -- get the contents (as a lazy ByteString) - let contents = decodeUtf8 $ BL.toStrict $ responseBody r - if contents == "404: Not Found" - then return $ Just $ fallbackMsg category name - else return $ Just $ MarkupContent MkMarkdown $ T.concat - [ contents - , "\n\n -- \n\n" - , "[Edit this doc](",edit category name,")" - ] + download = do + -- create a connection manager + manager <- newManager tlsManagerSettings + -- create the request + request <- parseRequest (readUrl category name) + -- make the request + r <- httpLbs request manager + -- get the contents (as a lazy ByteString) + let contents = decodeUtf8 $ BL.toStrict $ responseBody r + if contents == "404: Not Found" + then return $ Just $ fallbackMsg category name + else return $ Just $ MarkupContent MkMarkdown $ T.concat + [ contents + , "\n\n -- \n\n" + , "[Edit this doc](",editURL category name,")" + ] + + handler :: HttpException -> IO (Maybe MarkupContent) + handler _ = return $ Just $ MarkupContent MkMarkdown "No internet connection" + + download `catch` handler getDocsForBuiltin _ = pure Nothing From 41e70c0e459dd7c061e11c09eef4740f58ae73ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 14:53:35 +0100 Subject: [PATCH 260/378] Update to work on the main branch --- src/Conjure/LSP/Documentation.hs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Conjure/LSP/Documentation.hs b/src/Conjure/LSP/Documentation.hs index bcd1fe9442..a1cf30aaf0 100644 --- a/src/Conjure/LSP/Documentation.hs +++ b/src/Conjure/LSP/Documentation.hs @@ -49,10 +49,12 @@ getDocsForBuiltin _ = pure Nothing fallbackMsg :: String -> String -> MarkupContent fallbackMsg c n = MarkupContent MkMarkdown $ T.concat ["[Create this doc](", createURL c n,")"] +branch :: String +branch = "main" readUrl :: String -> String -> String readUrl category name = concat - [ "https://raw.githubusercontent.com/conjure-cp/conjure/onlinedocs-hover/docs/bits/" + [ "https://raw.githubusercontent.com/conjure-cp/conjure/" ++ branch ++ "/docs/bits/" , category , "/" , name @@ -62,7 +64,7 @@ readUrl category name = concat createURL :: String -> String -> Text createURL category name = T.pack $ concat [ - "https://github.com/conjure-cp/conjure/new/onlinedocs-hover/docs/bits/" + "https://github.com/conjure-cp/conjure/new/" ++ branch ++ "/docs/bits/" ,category ,"?filename=" , name @@ -72,7 +74,7 @@ createURL category name = T.pack $ concat [ editURL :: String -> String -> Text editURL category name = T.pack $ concat [ - "https://github.com/conjure-cp/conjure/edit/onlinedocs-hover/docs/bits/" + "https://github.com/conjure-cp/conjure/edit/" ++ branch ++ "/docs/bits/" ,category ,"/" , name From be0ddfa4d7f8c1c0b50dc921921c53a69df72790 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 19:27:12 +0100 Subject: [PATCH 261/378] Add 5 more notebook style tutorials, thanks @sasha704! --- docs/tutorials-notebook.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/tutorials-notebook.rst b/docs/tutorials-notebook.rst index ff276ed811..c036754a28 100644 --- a/docs/tutorials-notebook.rst +++ b/docs/tutorials-notebook.rst @@ -14,3 +14,8 @@ See `conjure-notebook repository Date: Tue, 13 Jun 2023 20:07:54 +0100 Subject: [PATCH 262/378] typo --- docs/tutorials/notebooks/NurseRostering.ipynb | 1409 ++++++++++++++--- 1 file changed, 1166 insertions(+), 243 deletions(-) diff --git a/docs/tutorials/notebooks/NurseRostering.ipynb b/docs/tutorials/notebooks/NurseRostering.ipynb index 248e51e0f5..6ffa1fd11e 100644 --- a/docs/tutorials/notebooks/NurseRostering.ipynb +++ b/docs/tutorials/notebooks/NurseRostering.ipynb @@ -1,25 +1,28 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "G0mPqC-63XVl" }, "source": [ - "#Nurse Rostering" + "# Nurse Rostering" ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "sT5HA7OR3a_f" @@ -29,6 +32,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "eyp734R43ttT" @@ -52,8 +56,8 @@ }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Installing Conjure...\n", "Conjure: The Automated Constraint Modelling Tool\n", @@ -62,231 +66,18 @@ ] }, { - "output_type": "display_data", "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", "text/plain": [ "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure extension is loaded.\n", "For usage help run: %conjure_help\n" @@ -299,6 +90,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "cFk1jIuP38LE" @@ -308,6 +100,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "JwAsti574JRJ" @@ -317,6 +110,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "T1zikM3e9xl-" @@ -358,6 +152,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "jOAzUfPt-lYH" @@ -367,6 +162,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "_7i2Q2GG-utJ" @@ -387,14 +183,14 @@ }, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } ], "source": [ @@ -420,6 +216,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "GZWxlTxR_Mc0" @@ -429,6 +226,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "qsGFV5Dv_OOQ" @@ -438,6 +236,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "fv7fysoh_QtW" @@ -461,8 +260,8 @@ }, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "Exception: Error:\n", " In a 'such that' statement:\n", @@ -497,6 +296,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "kE06me_J_09p" @@ -510,6 +310,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "0uBBIwlX_9am" @@ -519,6 +320,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "6QotfeQu__8C" @@ -528,6 +330,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "ISY-4C0-AGHi" @@ -549,6 +352,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "8LptUFIwAV4v" @@ -558,6 +362,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "Lg0TdcXwAbx_" @@ -601,6 +406,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "KvbAlL_O_hrQ" @@ -613,16 +419,16 @@ "cell_type": "code", "execution_count": 6, "metadata": { - "id": "vm7aSCAp_2LF", "colab": { "base_uri": "https://localhost:8080/" }, + "id": "vm7aSCAp_2LF", "outputId": "d7adbd4e-54cd-465d-bb97-bcd8f9c5558f" }, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "[[[1, 2], 'Early'], [[1, 3], 'Early'], [[1, 4], 'Late'], [[1, 5], 'Late'], [[2, 2], 'Early'], [[2, 3], 'Late'], [[2, 4], 'Night'], [[2, 5], 'Night'], [[3, 2], 'Early'], [[3, 3], 'Late'], [[3, 4], 'Night'], [[4, 5], 'Night'], [[5, 2], 'Early'], [[5, 3], 'Late'], [[5, 4], 'Night'], [[5, 5], 'Night'], [[6, 1], 'Early'], [[6, 2], 'Early'], [[6, 3], 'Late'], [[6, 4], 'Night'], [[7, 4], 'Night'], [[7, 5], 'Late']]\n" ] @@ -633,6 +439,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "vZZnYwBxANRW" @@ -653,7 +460,6 @@ }, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'roster': [[[1, 2], 'Early'],\n", @@ -680,8 +486,9 @@ " [[7, 5], 'Late']]}" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } ], "source": [ @@ -709,6 +516,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "jav2lI9SA1mf" @@ -718,6 +526,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "OZwGGTmKPqOQ" @@ -727,6 +536,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "6XoriFZKPu0L" @@ -750,6 +560,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "-1_QNf5HTYz-" @@ -770,7 +581,6 @@ }, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'roster': [[[1, 2], 'Early'],\n", @@ -797,8 +607,9 @@ " [[7, 5], 'Late']]}" ] }, + "execution_count": 8, "metadata": {}, - "execution_count": 8 + "output_type": "execute_result" } ], "source": [ @@ -826,6 +637,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "oEO7p5otBLGj" @@ -835,6 +647,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "metadata": { "id": "vpX_tZdQBOGH" @@ -856,15 +669,553 @@ }, "outputs": [ { - "output_type": "execute_result", "data": { - "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster1\n\nDay 1\n\n\ncluster2\n\nDay 2\n\n\ncluster3\n\nDay 3\n\n\ncluster4\n\nDay 4\n\n\ncluster5\n\nDay 5\n\n\ncluster6\n\nDay 6\n\n\ncluster7\n\nDay 7\n\n\n\nLate1\n\n\n\n\nLate\n\n\n\n0\n\n\n\n\nNurse ID: 4\n\n\n\nLate1->0\n\n\n\n\n\n1\n\n\n\n\nNurse ID: 5\n\n\n\nLate1->1\n\n\n\n\n\nEarly1\n\n\n\n\nEarly\n\n\n\n2\n\n\n\n\nNurse ID: 2\n\n\n\nEarly1->2\n\n\n\n\n\n3\n\n\n\n\nNurse ID: 3\n\n\n\nEarly1->3\n\n\n\n\n\nEarly2\n\n\n\n\nEarly\n\n\n\n\nNight2\n\n\n\n\nNight\n\n\n\n4\n\n\n\n\nNurse ID: 4\n\n\n\nNight2->4\n\n\n\n\n\n5\n\n\n\n\nNurse ID: 5\n\n\n\nNight2->5\n\n\n\n\n\nLate2\n\n\n\n\nLate\n\n\n\n6\n\n\n\n\nNurse ID: 3\n\n\n\nLate2->6\n\n\n\n\n\n7\n\n\n\n\nNurse ID: 2\n\n\n\nEarly2->7\n\n\n\n\n\nEarly3\n\n\n\n\nEarly\n\n\n\n\nNight3\n\n\n\n\nNight\n\n\n\n8\n\n\n\n\nNurse ID: 4\n\n\n\nNight3->8\n\n\n\n\n\nLate3\n\n\n\n\nLate\n\n\n\n9\n\n\n\n\nNurse ID: 3\n\n\n\nLate3->9\n\n\n\n\n\n10\n\n\n\n\nNurse ID: 2\n\n\n\nEarly3->10\n\n\n\n\n\nNight4\n\n\n\n\nNight\n\n\n\n\n11\n\n\n\n\nNurse ID: 5\n\n\n\nNight4->11\n\n\n\n\n\nEarly5\n\n\n\n\nEarly\n\n\n\n\nNight5\n\n\n\n\nNight\n\n\n\n12\n\n\n\n\nNurse ID: 4\n\n\n\nNight5->12\n\n\n\n\n\n13\n\n\n\n\nNurse ID: 5\n\n\n\nNight5->13\n\n\n\n\n\nLate6\n\n\n\n\nLate\n\n\n\n\nLate5\n\n\n\n\nLate\n\n\n\n14\n\n\n\n\nNurse ID: 3\n\n\n\nLate5->14\n\n\n\n\n\n15\n\n\n\n\nNurse ID: 2\n\n\n\nEarly5->15\n\n\n\n\n\nNight6\n\n\n\n\nNight\n\n\n\n16\n\n\n\n\nNurse ID: 4\n\n\n\nNight6->16\n\n\n\n\n\n17\n\n\n\n\nNurse ID: 3\n\n\n\nLate6->17\n\n\n\n\n\nEarly6\n\n\n\n\nEarly\n\n\n\n18\n\n\n\n\nNurse ID: 1\n\n\n\nEarly6->18\n\n\n\n\n\n19\n\n\n\n\nNurse ID: 2\n\n\n\nEarly6->19\n\n\n\n\n\nLate7\n\n\n\n\nLate\n\n\n\n\nNight7\n\n\n\n\nNight\n\n\n\n20\n\n\n\n\nNurse ID: 4\n\n\n\nNight7->20\n\n\n\n\n\n21\n\n\n\n\nNurse ID: 5\n\n\n\nLate7->21\n\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parent\n", + "\n", + "\n", + "cluster1\n", + "\n", + "Day 1\n", + "\n", + "\n", + "cluster2\n", + "\n", + "Day 2\n", + "\n", + "\n", + "cluster3\n", + "\n", + "Day 3\n", + "\n", + "\n", + "cluster4\n", + "\n", + "Day 4\n", + "\n", + "\n", + "cluster5\n", + "\n", + "Day 5\n", + "\n", + "\n", + "cluster6\n", + "\n", + "Day 6\n", + "\n", + "\n", + "cluster7\n", + "\n", + "Day 7\n", + "\n", + "\n", + "\n", + "Late1\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 4\n", + "\n", + "\n", + "\n", + "Late1->0\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 5\n", + "\n", + "\n", + "\n", + "Late1->1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Early1\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 2\n", + "\n", + "\n", + "\n", + "Early1->2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 3\n", + "\n", + "\n", + "\n", + "Early1->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Early2\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "\n", + "Night2\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 4\n", + "\n", + "\n", + "\n", + "Night2->4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 5\n", + "\n", + "\n", + "\n", + "Night2->5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Late2\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 3\n", + "\n", + "\n", + "\n", + "Late2->6\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 2\n", + "\n", + "\n", + "\n", + "Early2->7\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Early3\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "\n", + "Night3\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 4\n", + "\n", + "\n", + "\n", + "Night3->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Late3\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 3\n", + "\n", + "\n", + "\n", + "Late3->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 2\n", + "\n", + "\n", + "\n", + "Early3->10\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Night4\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "\n", + "11\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 5\n", + "\n", + "\n", + "\n", + "Night4->11\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Early5\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "\n", + "Night5\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "12\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 4\n", + "\n", + "\n", + "\n", + "Night5->12\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 5\n", + "\n", + "\n", + "\n", + "Night5->13\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Late6\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "\n", + "Late5\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "14\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 3\n", + "\n", + "\n", + "\n", + "Late5->14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 2\n", + "\n", + "\n", + "\n", + "Early5->15\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Night6\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "16\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 4\n", + "\n", + "\n", + "\n", + "Night6->16\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "17\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 3\n", + "\n", + "\n", + "\n", + "Late6->17\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Early6\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "18\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 1\n", + "\n", + "\n", + "\n", + "Early6->18\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "19\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 2\n", + "\n", + "\n", + "\n", + "Early6->19\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Late7\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "\n", + "Night7\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "20\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 4\n", + "\n", + "\n", + "\n", + "Night7->20\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "21\n", + "\n", + "\n", + "\n", + "\n", + "Nurse ID: 5\n", + "\n", + "\n", + "\n", + "Late7->21\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], "text/plain": [ "" ] }, + "execution_count": 24, "metadata": {}, - "execution_count": 24 + "output_type": "execute_result" } ], "source": [ @@ -912,36 +1263,608 @@ ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We can also display the roster as the timetable for each nurse:" - ], "metadata": { "id": "LMSsgljnrY8m" - } + }, + "source": [ + "We can also display the roster as the timetable for each nurse:" + ] }, { "cell_type": "code", "execution_count": 10, "metadata": { - "id": "d-bgk-0-PITw", "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, + "id": "d-bgk-0-PITw", "outputId": "0ec19cd7-3ede-47c0-b8b9-ce5e5a29b537" }, "outputs": [ { - "output_type": "execute_result", "data": { - "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster1\n\nNurse 1\n\n\ncluster2\n\nNurse 2\n\n\ncluster3\n\nNurse 3\n\n\ncluster4\n\nNurse 4\n\n\ncluster5\n\nNurse 5\n\n\n\n0\n\n\n\n\nDay 6\n\n\n\n0Early1\n\n\n\n\nEarly\n\n\n\n0->0Early1\n\n\n\n\n\n5\n\n\n\n\nDay 1\n\n\n\n\n1\n\n\n\n\nDay 6\n\n\n\n1Early2\n\n\n\n\nEarly\n\n\n\n1->1Early2\n\n\n\n\n\n2\n\n\n\n\nDay 5\n\n\n\n2Early2\n\n\n\n\nEarly\n\n\n\n2->2Early2\n\n\n\n\n\n3\n\n\n\n\nDay 3\n\n\n\n3Early2\n\n\n\n\nEarly\n\n\n\n3->3Early2\n\n\n\n\n\n4\n\n\n\n\nDay 2\n\n\n\n4Early2\n\n\n\n\nEarly\n\n\n\n4->4Early2\n\n\n\n\n\n5Early2\n\n\n\n\nEarly\n\n\n\n5->5Early2\n\n\n\n\n\n10\n\n\n\n\nDay 1\n\n\n\n\n6\n\n\n\n\nDay 6\n\n\n\n6Late3\n\n\n\n\nLate\n\n\n\n6->6Late3\n\n\n\n\n\n7\n\n\n\n\nDay 5\n\n\n\n7Late3\n\n\n\n\nLate\n\n\n\n7->7Late3\n\n\n\n\n\n8\n\n\n\n\nDay 3\n\n\n\n8Late3\n\n\n\n\nLate\n\n\n\n8->8Late3\n\n\n\n\n\n9\n\n\n\n\nDay 2\n\n\n\n9Late3\n\n\n\n\nLate\n\n\n\n9->9Late3\n\n\n\n\n\n10Early3\n\n\n\n\nEarly\n\n\n\n10->10Early3\n\n\n\n\n\n16\n\n\n\n\nDay 1\n\n\n\n\n11\n\n\n\n\nDay 7\n\n\n\n11Night4\n\n\n\n\nNight\n\n\n\n11->11Night4\n\n\n\n\n\n12\n\n\n\n\nDay 6\n\n\n\n12Night4\n\n\n\n\nNight\n\n\n\n12->12Night4\n\n\n\n\n\n13\n\n\n\n\nDay 5\n\n\n\n13Night4\n\n\n\n\nNight\n\n\n\n13->13Night4\n\n\n\n\n\n14\n\n\n\n\nDay 3\n\n\n\n14Night4\n\n\n\n\nNight\n\n\n\n14->14Night4\n\n\n\n\n\n15\n\n\n\n\nDay 2\n\n\n\n15Night4\n\n\n\n\nNight\n\n\n\n15->15Night4\n\n\n\n\n\n16Late4\n\n\n\n\nLate\n\n\n\n16->16Late4\n\n\n\n\n\n21\n\n\n\n\nDay 1\n\n\n\n\n17\n\n\n\n\nDay 7\n\n\n\n17Late5\n\n\n\n\nLate\n\n\n\n17->17Late5\n\n\n\n\n\n18\n\n\n\n\nDay 5\n\n\n\n18Night5\n\n\n\n\nNight\n\n\n\n18->18Night5\n\n\n\n\n\n19\n\n\n\n\nDay 4\n\n\n\n19Night5\n\n\n\n\nNight\n\n\n\n19->19Night5\n\n\n\n\n\n20\n\n\n\n\nDay 2\n\n\n\n20Night5\n\n\n\n\nNight\n\n\n\n20->20Night5\n\n\n\n\n\n21Late5\n\n\n\n\nLate\n\n\n\n21->21Late5\n\n\n\n\n\n", + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parent\n", + "\n", + "\n", + "cluster1\n", + "\n", + "Nurse 1\n", + "\n", + "\n", + "cluster2\n", + "\n", + "Nurse 2\n", + "\n", + "\n", + "cluster3\n", + "\n", + "Nurse 3\n", + "\n", + "\n", + "cluster4\n", + "\n", + "Nurse 4\n", + "\n", + "\n", + "cluster5\n", + "\n", + "Nurse 5\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "\n", + "\n", + "\n", + "Day 6\n", + "\n", + "\n", + "\n", + "0Early1\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "0->0Early1\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "\n", + "\n", + "\n", + "Day 1\n", + "\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "\n", + "Day 6\n", + "\n", + "\n", + "\n", + "1Early2\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "1->1Early2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "\n", + "Day 5\n", + "\n", + "\n", + "\n", + "2Early2\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "2->2Early2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "\n", + "Day 3\n", + "\n", + "\n", + "\n", + "3Early2\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "3->3Early2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "\n", + "Day 2\n", + "\n", + "\n", + "\n", + "4Early2\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "4->4Early2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "5Early2\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "5->5Early2\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "\n", + "\n", + "\n", + "Day 1\n", + "\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "\n", + "\n", + "\n", + "Day 6\n", + "\n", + "\n", + "\n", + "6Late3\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "6->6Late3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "\n", + "\n", + "\n", + "Day 5\n", + "\n", + "\n", + "\n", + "7Late3\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "7->7Late3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "\n", + "\n", + "\n", + "Day 3\n", + "\n", + "\n", + "\n", + "8Late3\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "8->8Late3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "\n", + "\n", + "\n", + "Day 2\n", + "\n", + "\n", + "\n", + "9Late3\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "9->9Late3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "10Early3\n", + "\n", + "\n", + "\n", + "\n", + "Early\n", + "\n", + "\n", + "\n", + "10->10Early3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "16\n", + "\n", + "\n", + "\n", + "\n", + "Day 1\n", + "\n", + "\n", + "\n", + "\n", + "11\n", + "\n", + "\n", + "\n", + "\n", + "Day 7\n", + "\n", + "\n", + "\n", + "11Night4\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "11->11Night4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12\n", + "\n", + "\n", + "\n", + "\n", + "Day 6\n", + "\n", + "\n", + "\n", + "12Night4\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "12->12Night4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13\n", + "\n", + "\n", + "\n", + "\n", + "Day 5\n", + "\n", + "\n", + "\n", + "13Night4\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "13->13Night4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "14\n", + "\n", + "\n", + "\n", + "\n", + "Day 3\n", + "\n", + "\n", + "\n", + "14Night4\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "14->14Night4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "15\n", + "\n", + "\n", + "\n", + "\n", + "Day 2\n", + "\n", + "\n", + "\n", + "15Night4\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "15->15Night4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "16Late4\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "16->16Late4\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "21\n", + "\n", + "\n", + "\n", + "\n", + "Day 1\n", + "\n", + "\n", + "\n", + "\n", + "17\n", + "\n", + "\n", + "\n", + "\n", + "Day 7\n", + "\n", + "\n", + "\n", + "17Late5\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "17->17Late5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "18\n", + "\n", + "\n", + "\n", + "\n", + "Day 5\n", + "\n", + "\n", + "\n", + "18Night5\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "18->18Night5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "19\n", + "\n", + "\n", + "\n", + "\n", + "Day 4\n", + "\n", + "\n", + "\n", + "19Night5\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "19->19Night5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "20\n", + "\n", + "\n", + "\n", + "\n", + "Day 2\n", + "\n", + "\n", + "\n", + "20Night5\n", + "\n", + "\n", + "\n", + "\n", + "Night\n", + "\n", + "\n", + "\n", + "20->20Night5\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "21Late5\n", + "\n", + "\n", + "\n", + "\n", + "Late\n", + "\n", + "\n", + "\n", + "21->21Late5\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], "text/plain": [ "" ] }, + "execution_count": 10, "metadata": {}, - "execution_count": 10 + "output_type": "execute_result" } ], "source": [ @@ -995,9 +1918,9 @@ "collapsed_sections": [ "qsGFV5Dv_OOQ" ], + "include_colab_link": true, "provenance": [], - "toc_visible": true, - "include_colab_link": true + "toc_visible": true }, "kernelspec": { "display_name": "Python 3", From 41133863c4779f7fbd6a9c3ffb2accc3f69693aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 20:10:02 +0100 Subject: [PATCH 263/378] some more text --- docs/tutorials-notebook.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/tutorials-notebook.rst b/docs/tutorials-notebook.rst index c036754a28..05b62c6e97 100644 --- a/docs/tutorials-notebook.rst +++ b/docs/tutorials-notebook.rst @@ -4,11 +4,13 @@ Tutorials using Conjure notebook ================================ - We demonstrate the use of Conjure for some small problems. -See `conjure-notebook repository `_ for details. +Tutorials in this section are a copy of those in the tutorials section. +They are adapted to use the notebook extension for better interactivity. +We might add new tutorials using this style in the future. +See `conjure-notebook repository `_ for details. .. toctree:: :maxdepth: 1 From 6ac3b457093069342cb7cdfbc396e021a3ee980c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 20:21:32 +0100 Subject: [PATCH 264/378] add a space after #'s --- .../tutorials/notebooks/KnapsackProblem.ipynb | 2 +- docs/tutorials/notebooks/NurseRostering.ipynb | 28 +- .../Semigroups,_Monoids_and_Groups.ipynb | 598 ++++++------------ 3 files changed, 217 insertions(+), 411 deletions(-) diff --git a/docs/tutorials/notebooks/KnapsackProblem.ipynb b/docs/tutorials/notebooks/KnapsackProblem.ipynb index 7ea425b398..f4610f9661 100644 --- a/docs/tutorials/notebooks/KnapsackProblem.ipynb +++ b/docs/tutorials/notebooks/KnapsackProblem.ipynb @@ -90,7 +90,7 @@ "id": "fU4y3zCXMNgX" }, "source": [ - "##Model Explained" + "## Model Explained" ] }, { diff --git a/docs/tutorials/notebooks/NurseRostering.ipynb b/docs/tutorials/notebooks/NurseRostering.ipynb index 6ffa1fd11e..98d77c29fb 100644 --- a/docs/tutorials/notebooks/NurseRostering.ipynb +++ b/docs/tutorials/notebooks/NurseRostering.ipynb @@ -96,7 +96,7 @@ "id": "cFk1jIuP38LE" }, "source": [ - "##Initial specification" + "## Initial specification" ] }, { @@ -232,7 +232,7 @@ "id": "qsGFV5Dv_OOQ" }, "source": [ - "##Changing an overly restrictive assumption" + "## Changing an overly restrictive assumption" ] }, { @@ -316,7 +316,7 @@ "id": "0uBBIwlX_9am" }, "source": [ - "##Final model" + "## Final model" ] }, { @@ -643,7 +643,7 @@ "id": "oEO7p5otBLGj" }, "source": [ - "##Representations" + "## Visualisations" ] }, { @@ -1234,15 +1234,15 @@ "for day in range (1, nDays+1):\n", " with p.subgraph(name='cluster'+str(day), node_attr={'shape': 'box3d', 'color': 'purple', 'style':'rounded'}) as c:\n", " for item in roster:\n", - " #if it is the selected day\n", + " # if it is the selected day\n", " if item[0][0] == day:\n", - " #add the time of day if it doesn't exist already\n", + " # add the time of day if it doesn't exist already\n", " c.node(str(item[1])+str(day), item[1])\n", - " #print(str(item[1])+str(day))\n", - " #add the nurse\n", + " # print(str(item[1])+str(day))\n", + " # add the nurse\n", " c.node(str(id), \"Nurse ID: \" + str(item[0][1]), color='orange')\n", - " #print(str(id), \"nurse: \", str(item[0][1]))\n", - " #add the edge\n", + " # print(str(id), \"nurse: \", str(item[0][1]))\n", + " # add the edge\n", " edges.append([str(item[1])+str(day), str(id)])\n", " id=id+1\n", " c.attr(label=\"Day \"+str(day))\n", @@ -1883,16 +1883,16 @@ " with p.subgraph(name='cluster'+str(nurse), node_attr={'shape': 'box3d', 'color': 'purple', 'style':'rounded'}) as c:\n", " \n", " for item in roster:\n", - " #if it is the selected nurse\n", + " # if it is the selected nurse\n", " if item[0][1] == nurse:\n", " \n", - " #add the day\n", + " # add the day\n", " c.node(str(id), \"Day \" + str(item[0][0]), color='orange')\n", "\n", - " #add the time of day\n", + " # add the time of day\n", " c.node((str(id) + str(item[1]))+str(nurse), item[1])\n", " \n", - " #add the edge\n", + " # add the edge\n", " edges.append([str(id), (str(id) + str(item[1]))+str(nurse)])\n", " id=id+1\n", " c.attr(label=\"Nurse \"+str(nurse))\n", diff --git a/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb b/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb index 6b383c8bf2..27b924269c 100644 --- a/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb +++ b/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb @@ -1,64 +1,49 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "authorship_tag": "ABX9TyNmwuGfH/vOYeP0Tj5vUcu/", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "# Semigroups, Monoids and Groups" - ], "metadata": { "id": "tlwA1gWxaq7u" - } + }, + "source": [ + "# Semigroups, Monoids and Groups" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Original [Semigroups, Monoids and Groups](https://conjure.readthedocs.io/en/latest/tutorials.html#semigroups-monoids-and-groups) by Chris Jefferson and Alice Lynch. Adapted by Alex Gallagher." - ], "metadata": { "id": "3kKmC_37a2uo" - } + }, + "source": [ + "Original [Semigroups, Monoids and Groups](https://conjure.readthedocs.io/en/latest/tutorials.html#semigroups-monoids-and-groups) by Chris Jefferson and Alice Lynch. Adapted by Alex Gallagher." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This tutorial discusses how to model semigroups, monoids and groups in Essence." - ], "metadata": { "id": "Tly_igpYbNYM" - } + }, + "source": [ + "This tutorial discusses how to model semigroups, monoids and groups in Essence." + ] }, { "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -67,11 +52,10 @@ "id": "0RYHwN9UcZ0A", "outputId": "a740cb25-36a7-4a06-95bd-9a546aa001ea" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", @@ -83,291 +67,79 @@ ] }, { - "output_type": "display_data", "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", "text/plain": [ "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure extension is loaded.\n", "For usage help run: %conjure_help\n" ] } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## The Problem" - ], "metadata": { "id": "IIXm6aerbQEv" - } + }, + "source": [ + "## The Problem" + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "8_84KDprbpLq" + }, "source": [ "Semigroups, monoids and groups are all examples of binary operations, with added conditions.\n", "\n", "\n", "We will begin by building a binary operation. A binary relation `R` on a domain `S` is a two-argument function which maps two elements of `S` to a third element of `S`. We will make `S` be the integers from `1` to `n`, for some given `n`." - ], - "metadata": { - "id": "8_84KDprbpLq" - } + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "aP09RDjCc03v" + }, "source": [ "We make a new type of size `n` to represent the set the operation is defined on. We then define a function from `(S,S)` to `S`. Technically, this function doesn’t take two arguments - it takes a single argument which is a pair of values from `S`. This is mathematically the same, but will change how we use `R`.\n", "\n", "\n", "We will begin by creating a solution to this, for `n = 4`." - ], - "metadata": { - "id": "aP09RDjCc03v" - } + ] }, { "cell_type": "code", - "source": [ - "n = 4" - ], + "execution_count": null, "metadata": { "id": "WutDydBpcrlm" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "n = 4" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "given n : int\n", - "letting S be domain int(1..n)\n", - "\n", - "find R : function(total) (S,S) --> S" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -375,10 +147,8 @@ "id": "ruoE-Rc-b-eP", "outputId": "2404a163-69b6-466e-86a0-ef24f370ba85" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'R': [[[1, 1], 1],\n", @@ -399,63 +169,66 @@ " [[4, 4], 1]]}" ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "given n : int\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function(total) (S,S) --> S" ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "d6aN2lyydSpa" + }, "source": [ "At the moment this is quite boring, as the function can take any value at all! Asking Conjure how many solutions this problem has is unreasonable, but we can figure it out with maths:\n", "\n", "416 = 4,294,967,296\n", "\n", "Let’s try adding some constraints." - ], - "metadata": { - "id": "d6aN2lyydSpa" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "##Semigroups" - ], "metadata": { "id": "7fJvxGbLd3Rp" - } + }, + "source": [ + "## Semigroups" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The simplest object we will consider is a **semigroup**. A semigroup adds one constraint to our binary operation, **associativity**. A binary operation is associative if for all i,j and k in S, R(i,R(j,k)) = R((R(i,j),k). This might look very abstract, but it is true of many binary operations, for example given integers i,j and k, (i+j)+k = i+(j+k), and (i * j) * k = i * (j * k)." - ], "metadata": { "id": "s7QuRhtUd52X" - } + }, + "source": [ + "The simplest object we will consider is a **semigroup**. A semigroup adds one constraint to our binary operation, **associativity**. A binary operation is associative if for all i,j and k in S, R(i,R(j,k)) = R((R(i,j),k). This might look very abstract, but it is true of many binary operations, for example given integers i,j and k, (i+j)+k = i+(j+k), and (i * j) * k = i * (j * k)." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We begin by saying we want to check `forAll i,j,k: S`. The strangest bit is all of the brackets seem doubled. Your vision isn’t failing, this is because `M` is a one argument function (and we use `M(x)` to apply `M` to `x`), but `M` takes a tuple as its argument (which we write as `(i,j)`), so to apply `M` to `i` and `j` we write `M((i,j))`." - ], "metadata": { "id": "0gWAIm26eGVv" - } + }, + "source": [ + "We begin by saying we want to check `forAll i,j,k: S`. The strangest bit is all of the brackets seem doubled. Your vision isn’t failing, this is because `M` is a one argument function (and we use `M(x)` to apply `M` to `x`), but `M` takes a tuple as its argument (which we write as `(i,j)`), so to apply `M` to `i` and `j` we write `M((i,j))`." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting S be domain int(1..n)\n", - "\n", - "find R : function(total) (S,S) --> S\n", - "\n", - "such that\n", - "\n", - "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k))" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -463,10 +236,8 @@ "id": "E5hy8Xe7ebsM", "outputId": "e878e0f2-d253-46eb-c723-7eed146e726d" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'R': [[[1, 1], 1],\n", @@ -487,56 +258,57 @@ " [[4, 4], 1]]}" ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function(total) (S,S) --> S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k))" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The first result is still the same, but there are fewer solutions to be found now - only 3,492. Is this correct? It’s always good to check. This number was first published in 1955, by George E. Forsythe, in his paper “SWAC Computes 126 Distinct Semigroups of Order 4”. Where does the number 126 come from? This small number comes from ignoring cases where the semigroup is the same except for rearranging the numbers 1,2,3,4. The number we found, 3,492, is found in the paper." - ], "metadata": { "id": "uQBnwZarenjL" - } + }, + "source": [ + "The first result is still the same, but there are fewer solutions to be found now - only 3,492. Is this correct? It’s always good to check. This number was first published in 1955, by George E. Forsythe, in his paper “SWAC Computes 126 Distinct Semigroups of Order 4”. Where does the number 126 come from? This small number comes from ignoring cases where the semigroup is the same except for rearranging the numbers 1,2,3,4. The number we found, 3,492, is found in the paper." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "##Monoids" - ], "metadata": { "id": "Kxr07DIuex8m" - } + }, + "source": [ + "## Monoids" + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "kHVypWgQe6Fr" + }, "source": [ "Let’s move further to monoids. A monoid is a semigroup with an extra condition, there has to exist some element of the semigroup, which we will call *e*, which acts as an **identity**. An **identity** is an element such that for all `i` in `S`, `R(e,i) = R(i,e) = e`.\n", "\n", "Firstly we will add a variable to store the value of this `e`, and then add the extra constraint which makes it an identity:" - ], - "metadata": { - "id": "kHVypWgQe6Fr" - } + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting S be domain int(1..n)\n", - "\n", - "find R : function (total) (S,S) --> S\n", - "\n", - "find e : S\n", - "\n", - "such that\n", - "\n", - "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", - "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -544,10 +316,8 @@ "id": "6d9Bng1hfpEm", "outputId": "e95c22bf-cd3f-4d3e-f37a-70ea909351b6" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'R': [[[1, 1], 1],\n", @@ -570,59 +340,61 @@ " 'inv': {'1': 1, '2': 2, '3': 3, '4': 4}}" ] }, + "execution_count": 12, "metadata": {}, - "execution_count": 12 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function (total) (S,S) --> S\n", + "\n", + "find e : S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", + "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We now have only 624 solutions! We can check this by looking at the amazing online encyclopedia of integer sequences https://oeis.org/A058153 , which tells us there are indeed 624 “labelled monoids” of order n." - ], "metadata": { "id": "8UUknSEagk34" - } + }, + "source": [ + "We now have only 624 solutions! We can check this by looking at the amazing online encyclopedia of integer sequences https://oeis.org/A058153 , which tells us there are indeed 624 “labelled monoids” of order n." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "##Groups" - ], "metadata": { "id": "2gudg9KYgp6R" - } + }, + "source": [ + "## Groups" + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "eWHVoUvPgrbh" + }, "source": [ "Finally, let us move to groups. Groups add one important requirement, the concept of an inverse. Given some `i` in `S`, `j` is an inverse of `i` if `R((i,j)) = R((j,i)) = e`, where `e` is our already existing identity.\n", "\n", "We will store the inverses as an extra array, and then add this final constraint:" - ], - "metadata": { - "id": "eWHVoUvPgrbh" - } + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting S be domain int(1..n)\n", - "\n", - "find R : function (total) (S,S) --> S\n", - "\n", - "find e : S\n", - "\n", - "find inv: function S --> S\n", - "\n", - "such that\n", - "\n", - "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", - "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i,\n", - "\n", - "forAll i : S. R((i,inv(i))) = e /\\ R((inv(i),i)) = e" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -630,10 +402,8 @@ "id": "kjnJufr6g7RP", "outputId": "d612e8b4-54a2-4c5a-8651-1dd386771596" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'R': [[[1, 1], 1],\n", @@ -656,24 +426,11 @@ " 'inv': {'1': 1, '2': 2, '3': 3, '4': 4}}" ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 9 + "output_type": "execute_result" } - ] - }, - { - "cell_type": "markdown", - "source": [ - "This solution has much more going on than our previous ones! For example, each row and column contains the numbers from `1` to `4`, in some order. This (and many, many other results) are true for all groups (but we won’t prove this here!). This problem only has 16 solutions, and once we removed the groups which are made by just swapping around 1,2,3 and 4, we would find there was only 2 groups! The extra structure means there are only a small number of groups for each size, compared to the number of semigroups and monoids.\n", - "\n", - "There are many special types of groups; we will consider just one here, abelian groups. A group is abelian if for all `i` and `j` in `S`, `R((i,j)) = R((j,i))`. Let’s add this condition!" ], - "metadata": { - "id": "HAdxspUohyta" - } - }, - { - "cell_type": "code", "source": [ "%%conjure\n", "letting S be domain int(1..n)\n", @@ -688,9 +445,25 @@ "\n", "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i,\n", - "forAll i : S. R((i,inv(i))) = e /\\ R((inv(i),i)) = e,\n", - "forAll i,j : S. R((i,j)) = R((j,i))" - ], + "\n", + "forAll i : S. R((i,inv(i))) = e /\\ R((inv(i),i)) = e" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "HAdxspUohyta" + }, + "source": [ + "This solution has much more going on than our previous ones! For example, each row and column contains the numbers from `1` to `4`, in some order. This (and many, many other results) are true for all groups (but we won’t prove this here!). This problem only has 16 solutions, and once we removed the groups which are made by just swapping around 1,2,3 and 4, we would find there was only 2 groups! The extra structure means there are only a small number of groups for each size, compared to the number of semigroups and monoids.\n", + "\n", + "There are many special types of groups; we will consider just one here, abelian groups. A group is abelian if for all `i` and `j` in `S`, `R((i,j)) = R((j,i))`. Let’s add this condition!" + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -698,10 +471,8 @@ "id": "Kunrbz0-iXhY", "outputId": "2a1b5af6-f56e-4ba4-fc1e-c6f55b8be553" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'R': [[[1, 1], 1],\n", @@ -724,19 +495,54 @@ " 'inv': {'1': 1, '2': 2, '3': 3, '4': 4}}" ] }, + "execution_count": 11, "metadata": {}, - "execution_count": 11 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting S be domain int(1..n)\n", + "\n", + "find R : function (total) (S,S) --> S\n", + "\n", + "find e : S\n", + "\n", + "find inv: function S --> S\n", + "\n", + "such that\n", + "\n", + "forAll i,j,k: S. R((i,R((j,k)))) = R((R((i,j)),k)),\n", + "forAll i : S. R((e,i)) = i /\\ R((i,e)) = i,\n", + "forAll i : S. R((i,inv(i))) = e /\\ R((inv(i),i)) = e,\n", + "forAll i,j : S. R((i,j)) = R((j,i))" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This gives us the same first solution. In fact, there is the same number of solutions (16) to this problem as the previous one, proving that all groups of size 4 are abelian! In fact, the smallest non-abelian group is size 60, and that is beyond the size of problems we can find all solutions to with our current, simple model." - ], "metadata": { "id": "yZDLJ0G6ifkn" - } + }, + "source": [ + "This gives us the same first solution. In fact, there is the same number of solutions (16) to this problem as the previous one, proving that all groups of size 4 are abelian! In fact, the smallest non-abelian group is size 60, and that is beyond the size of problems we can find all solutions to with our current, simple model." + ] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyNmwuGfH/vOYeP0Tj5vUcu/", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 266fb16694047aae2f923f9bd03c33f95d79a3e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 13 Jun 2023 20:24:42 +0100 Subject: [PATCH 265/378] Update URLs --- docs/tutorials/notebooks/Futoshiki.ipynb | 835 +++++++++--------- ...fting_Instance_Generators_in_Essence.ipynb | 571 ++++-------- .../tutorials/notebooks/KnapsackProblem.ipynb | 2 +- docs/tutorials/notebooks/NurseRostering.ipynb | 2 +- .../Semigroups,_Monoids_and_Groups.ipynb | 2 +- .../notebooks/SimplePermutations.ipynb | 683 +++++--------- 6 files changed, 832 insertions(+), 1263 deletions(-) diff --git a/docs/tutorials/notebooks/Futoshiki.ipynb b/docs/tutorials/notebooks/Futoshiki.ipynb index b44da9083f..c653322095 100644 --- a/docs/tutorials/notebooks/Futoshiki.ipynb +++ b/docs/tutorials/notebooks/Futoshiki.ipynb @@ -1,57 +1,40 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "toc_visible": true, - "authorship_tag": "ABX9TyPiKmAzSUQjsG0RgdhqpcSI", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "# Futoshiki\n", - "Original [Futoshiki](https://conjure.readthedocs.io/en/latest/tutorials.html#futoshiki) by Ruth Hoffmann and Gökberk Koçak. Adapted by Alex Gallagher." - ], "metadata": { "id": "Hb26fiIv_enr" - } + }, + "source": [ + "# Futoshiki\n", + "Original [Futoshiki](https://conjure.readthedocs.io/en/latest/tutorials/futoshiki/Futoshiki.html) by Ruth Hoffmann and Gökberk Koçak. Adapted by Alex Gallagher." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Problem" - ], "metadata": { "id": "U59hSFC__0c1" - } + }, + "source": [ + "## Problem" + ] }, { "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -60,11 +43,10 @@ "id": "dTKv5TR6_mTg", "outputId": "e33d73d0-1816-4b27-be6e-70b1c2cadef4" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Installing Conjure...\n", "Conjure: The Automated Constraint Modelling Tool\n", @@ -73,275 +55,65 @@ ] }, { - "output_type": "display_data", "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", "text/plain": [ "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure extension is loaded.\n", "For usage help run: %conjure_help\n" ] } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "2DOlv_Cl_7K3" + }, "source": [ "`n x n` board where each column and row is filled with the unique numbers from 1 to `n`, similar to a sudoku. In contrast to sudoku, there are less than and greater than symbols between cells indicating that one cell has to be filled with a number greater than (or less than) than the cell on the other side of the operator.\n", "\n", "\n", "![example.webp](data:image/webp;base64,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)" - ], - "metadata": { - "id": "2DOlv_Cl_7K3" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Instance" - ], "metadata": { "id": "7mIcMmujEkSQ" - } + }, + "source": [ + "## Instance" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The definition of the instance below contains the information about our starting board of a specific instance that we want to solve. See the picture at the beginning to see what it looks like." - ], "metadata": { "id": "Dz0uFOj3FI7r" - } + }, + "source": [ + "The definition of the instance below contains the information about our starting board of a specific instance that we want to solve. See the picture at the beginning to see what it looks like." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting n be 4" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -349,39 +121,37 @@ "id": "vUmoBT79QyAp", "outputId": "9cdb0b5b-3acf-4c15-cae5-f656fe57ea04" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting n be 4" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We are dealing with a 4 by 4 board." - ], "metadata": { "id": "yhJqZq7YFUyQ" - } + }, + "source": [ + "We are dealing with a 4 by 4 board." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting hints be function(\n", - " (1,1) --> 2,\n", - " (2,2) --> 2\n", - ")" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -389,41 +159,40 @@ "id": "hA8zsbcwQ2_6", "outputId": "314fcb78-a928-4482-86fc-32b9e03d9486" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 3, "metadata": {}, - "execution_count": 3 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting hints be function(\n", + " (1,1) --> 2,\n", + " (2,2) --> 2\n", + ")" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "There will be two `2` s on the board given as a hint. One in the top left corner `(1,1)` and the second number 2 in cell `(2,2)`." - ], "metadata": { "id": "FK76ksfWFdde" - } + }, + "source": [ + "There will be two `2` s on the board given as a hint. One in the top left corner `(1,1)` and the second number 2 in cell `(2,2)`." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting less_than be relation(\n", - " ((1,1) , (2,1)),\n", - " ((4,2) , (3,2)),\n", - " ((3,3) , (3,4)),\n", - " ((3,4) , (4,4))\n", - ")" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -431,54 +200,62 @@ "id": "tkpqtndrQ8bk", "outputId": "f17b9031-da6c-4114-fb20-2d1fa0e642e3" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting less_than be relation(\n", + " ((1,1) , (2,1)),\n", + " ((4,2) , (3,2)),\n", + " ((3,3) , (3,4)),\n", + " ((3,4) , (4,4))\n", + ")" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "There are 4 relation symbols on the board, between cells." - ], "metadata": { "id": "292rBj6cF4dy" - } + }, + "source": [ + "There are 4 relation symbols on the board, between cells." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Solving the problem step by step" - ], "metadata": { "id": "ePFid8u6AS2U" - } + }, + "source": [ + "## Solving the problem step by step" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The line by line explanation of the model starts here." - ], "metadata": { "id": "UjSa9brNBPo0" - } + }, + "source": [ + "The line by line explanation of the model starts here." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting DOMAIN be domain int(1..n)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -486,36 +263,37 @@ "id": "fCMtDamfSOSI", "outputId": "c30ef3df-0ae8-4b6a-e5bd-e3eef66b597c" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting DOMAIN be domain int(1..n)" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We start at 1 and go up to `n` (for both the elements of the cells and the cell locations)." - ], "metadata": { "id": "Vk22ri4YCBHQ" - } + }, + "source": [ + "We start at 1 and go up to `n` (for both the elements of the cells and the cell locations)." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -523,10 +301,8 @@ "id": "poiZlqPmSzYC", "outputId": "7ac19e77-b0d0-469e-9c30-bdd4d3b2b0ca" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 1, '2': 1, '3': 1, '4': 1},\n", @@ -535,37 +311,40 @@ " '4': {'1': 1, '2': 1, '3': 1, '4': 1}}}" ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We are now telling the solver that we are trying to find a `n x n` board with elements from 1 to `n` in each cell." - ], "metadata": { "id": "Awdg2ZmICVzt" - } + }, + "source": [ + "We are now telling the solver that we are trying to find a `n x n` board with elements from 1 to `n` in each cell." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`such that` indicates the beginning of the constraints block." - ], "metadata": { "id": "TO4WlU3ICc5e" - } + }, + "source": [ + "`such that` indicates the beginning of the constraints block." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll (hint,num) in hints .\n", - " board[hint[1], hint[2]] = num," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -573,10 +352,8 @@ "id": "h0CC7hO9V0ER", "outputId": "a79a13b7-bbd3-4174-9812-8e2c93f4ea94" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 1, '4': 1},\n", @@ -585,28 +362,31 @@ " '4': {'1': 1, '2': 1, '3': 1, '4': 1}}}" ] }, + "execution_count": 7, "metadata": {}, - "execution_count": 7 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll (hint,num) in hints .\n", + " board[hint[1], hint[2]] = num," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This constraint defines the hints, so the cells that are filled in when we get the puzzle." - ], "metadata": { "id": "fjaEYcrwCkcp" - } + }, + "source": [ + "This constraint defines the hints, so the cells that are filled in when we get the puzzle." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll i: DOMAIN .\n", - " allDiff(board[i,..])," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -614,10 +394,8 @@ "id": "3teSEg_oV_P3", "outputId": "2261633e-c9ca-4bb1-ee10-2175311d5241" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 3, '4': 4},\n", @@ -626,28 +404,31 @@ " '4': {'1': 1, '2': 2, '3': 3, '4': 4}}}" ] }, + "execution_count": 8, "metadata": {}, - "execution_count": 8 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll i: DOMAIN .\n", + " allDiff(board[i,..])," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This constraint defines that every cell in a row has to be a unique number between 1 and n." - ], "metadata": { "id": "235I1jCgEWrl" - } + }, + "source": [ + "This constraint defines that every cell in a row has to be a unique number between 1 and n." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll j: DOMAIN .\n", - " allDiff(board[..,j])," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -655,10 +436,8 @@ "id": "yW83rA4tWI1D", "outputId": "a5aea27a-eea5-4fdc-8e47-dd83232bbf74" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 3, '4': 4},\n", @@ -667,28 +446,31 @@ " '4': {'1': 4, '2': 3, '3': 2, '4': 1}}}" ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 9 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll j: DOMAIN .\n", + " allDiff(board[..,j])," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This constraint defines that every cell in a column has to be a unique number between 1 and n." - ], "metadata": { "id": "vC0XcQshEboo" - } + }, + "source": [ + "This constraint defines that every cell in a column has to be a unique number between 1 and n." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll (l,g) in less_than .\n", - " board[l[1],l[2]] < board[g[1],g[2]]" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -696,10 +478,8 @@ "id": "uuOgwJkoWRmi", "outputId": "d1bb4aef-de01-4739-d241-a6f306e29e88" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 4, '4': 3},\n", @@ -708,46 +488,51 @@ " '4': {'1': 1, '2': 3, '3': 2, '4': 4}}}" ] }, + "execution_count": 10, "metadata": {}, - "execution_count": 10 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll (l,g) in less_than .\n", + " board[l[1],l[2]] < board[g[1],g[2]]" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Finally this constraint enforces the less than relation. `l` is the number that is the cell that contains the number that is less than then the cell `g`." - ], "metadata": { "id": "hVtaESWqEhHp" - } + }, + "source": [ + "Finally this constraint enforces the less than relation. `l` is the number that is the cell that contains the number that is less than then the cell `g`." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Visualising the results" - ], "metadata": { "id": "fr_wb1LrF7cl" - } + }, + "source": [ + "## Visualising the results" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Printing the result gives us:" - ], "metadata": { "id": "aYpytpZZGU39" - } + }, + "source": [ + "Printing the result gives us:" + ] }, { "cell_type": "code", - "source": [ - "for row in board:\n", - " for square in board[row]:\n", - " print(board[row][square], end=\" \")\n", - " print(\"\")" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -755,11 +540,10 @@ "id": "B4eEEhuMGcCt", "outputId": "906f9c8e-87e2-4553-fd61-9de0417eff46" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "2 1 4 3 \n", "4 2 3 1 \n", @@ -767,19 +551,197 @@ "1 3 2 4 \n" ] } + ], + "source": [ + "for row in board:\n", + " for square in board[row]:\n", + " print(board[row][square], end=\" \")\n", + " print(\"\")" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This is represented in the following graph:" - ], "metadata": { "id": "LgUm0W-yzsxk" - } + }, + "source": [ + "This is represented in the following graph:" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 411 + }, + "id": "PLN54F5nxj9o", + "outputId": "1873f3e6-8352-494f-e702-72aba9fa69f2" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parent\n", + "\n", + "\n", + "cluster0\n", + "\n", + "\n", + "cluster1\n", + "\n", + "\n", + "cluster2\n", + "\n", + "\n", + "cluster3\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "7->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "8->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "14\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "10->14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "11\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "12->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "15\n", + "\n", + "1\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import graphviz\n", "\n", @@ -810,29 +772,24 @@ "p.edge('10','14', None, {'constraint':'False'})\n", "\n", "p\n" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 411 - }, - "id": "PLN54F5nxj9o", - "outputId": "1873f3e6-8352-494f-e702-72aba9fa69f2" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ], - "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster0\n\n\ncluster1\n\n\ncluster2\n\n\ncluster3\n\n\n\n0\n\n3\n\n\n\n4\n\n1\n\n\n\n\n1\n\n4\n\n\n\n2\n\n1\n\n\n\n3\n\n2\n\n\n\n8\n\n2\n\n\n\n\n5\n\n3\n\n\n\n6\n\n2\n\n\n\n7\n\n4\n\n\n\n7->3\n\n\n\n\n\n9\n\n1\n\n\n\n8->9\n\n\n\n\n\n12\n\n4\n\n\n\n\n10\n\n4\n\n\n\n14\n\n3\n\n\n\n10->14\n\n\n\n\n\n11\n\n3\n\n\n\n12->8\n\n\n\n\n\n13\n\n2\n\n\n\n15\n\n1\n\n\n\n" - }, - "metadata": {}, - "execution_count": 132 - } ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyPiKmAzSUQjsG0RgdhqpcSI", + "include_colab_link": true, + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb b/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb index caec2a30f6..327331ffaa 100644 --- a/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb +++ b/docs/tutorials/notebooks/Handcrafting_Instance_Generators_in_Essence.ipynb @@ -1,64 +1,49 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "authorship_tag": "ABX9TyOyOIxXu5LVVSWqJoksN5gj", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "# Handcrafting Instance Generators in Essence" - ], "metadata": { "id": "b_9MbyOpkR9A" - } + }, + "source": [ + "# Handcrafting Instance Generators in Essence" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Original [Handcrafting Instance Generators in Essence](https://conjure.readthedocs.io/en/latest/tutorials.html#semigroups-monoids-and-groups) by Joan Espasa Arxer and Christopher Stone. Adapted by Alex Gallagher." - ], "metadata": { "id": "ws4OTYvkkU4Z" - } + }, + "source": [ + "Original [Handcrafting Instance Generators in Essence](https://conjure.readthedocs.io/en/latest/tutorials/knapsack_generator/KnapGen.html) by Joan Espasa Arxer and Christopher Stone. Adapted by Alex Gallagher." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "In modelling it is common to create an abstract model that expects some input parameters (Also known as “instances”) which are required to run and test the model. In this tutorial we demonstrate how to use ESSENCE to handcraft a generator of instances that can be used to produce input parameters for a specific model." - ], "metadata": { "id": "Hyk7zGoUkiV8" - } + }, + "source": [ + "In modelling it is common to create an abstract model that expects some input parameters (Also known as “instances”) which are required to run and test the model. In this tutorial we demonstrate how to use ESSENCE to handcraft a generator of instances that can be used to produce input parameters for a specific model." + ] }, { "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -67,11 +52,10 @@ "id": "h8yaBmeymi1R", "outputId": "3da82d46-c6b8-4df8-b11a-e9faeba2b74a" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", @@ -83,249 +67,45 @@ ] }, { - "output_type": "display_data", "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", "text/plain": [ "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure extension is loaded.\n", "For usage help run: %conjure_help\n" ] } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Instances for the Knapsack problem" - ], "metadata": { "id": "7DlRahOslGIO" - } + }, + "source": [ + "## Instances for the Knapsack problem" + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "yByksQbYmFwO" + }, "source": [ "This model from the [Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials.html#the-knapsack-problem) has 4 different “given” statements :\n", "\n", @@ -339,19 +119,17 @@ "\n", "\n", "\n" - ], - "metadata": { - "id": "yByksQbYmFwO" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The first parameter is fairly simple and we can even write this parameter with some value by hand as seen below." - ], "metadata": { "id": "xXdYIQKvmXOv" - } + }, + "source": [ + "The first parameter is fairly simple and we can even write this parameter with some value by hand as seen below." + ] }, { "cell_type": "code", @@ -365,14 +143,14 @@ }, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } ], "source": [ @@ -381,23 +159,18 @@ ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The remaining 3 parameters are more complex and labourious to be defined (too much work to be done by hand!) so we are going to write an ESSENCE specification that will create them for us. The fundamental starting step is writing find statements for each variable we wish to generate and ensure that the names of the variable (identifiers) are left unchanged. We can do so by writing:" - ], "metadata": { "id": "_EiqQ1uAnht9" - } + }, + "source": [ + "The remaining 3 parameters are more complex and labourious to be defined (too much work to be done by hand!) so we are going to write an ESSENCE specification that will create them for us. The fundamental starting step is writing find statements for each variable we wish to generate and ensure that the names of the variable (identifiers) are left unchanged. We can do so by writing:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting items be domain int(1..number_items)\n", - "find weight: function (total) items --> int(1..1000)\n", - "find gain: function (total) items --> int(1..1000)\n", - "find capacity: int(1..5000)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -405,10 +178,8 @@ "id": "cDYM3WlAn0Lb", "outputId": "15308a29-c827-4f47-d71a-02bf82d93c64" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'capacity': 1,\n", @@ -454,37 +225,42 @@ " '9': 1}}" ] }, + "execution_count": 3, "metadata": {}, - "execution_count": 3 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting items be domain int(1..number_items)\n", + "find weight: function (total) items --> int(1..1000)\n", + "find gain: function (total) items --> int(1..1000)\n", + "find capacity: int(1..5000)" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Solving the above model (by running the cell above) will create a set of parameters for our knapsack model. However, these instances are not interesting enough yet." - ], "metadata": { "id": "L3_5bdbxn-_6" - } + }, + "source": [ + "Solving the above model (by running the cell above) will create a set of parameters for our knapsack model. However, these instances are not interesting enough yet." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We can make our instances more interesting by adding constraints into our generator’s model. The first thing we notice is that all values assigned are identical, a bit TOO symmetrical for our taste. One simple solution to this issue is ensuring that all weights and gains assignments are associated with distinct values. This can be done by imposing [injectivity](https://en.wikipedia.org/wiki/Injective_function) as a property of the function." - ], "metadata": { "id": "WqMwmD0OoGs4" - } + }, + "source": [ + "We can make our instances more interesting by adding constraints into our generator’s model. The first thing we notice is that all values assigned are identical, a bit TOO symmetrical for our taste. One simple solution to this issue is ensuring that all weights and gains assignments are associated with distinct values. This can be done by imposing [injectivity](https://en.wikipedia.org/wiki/Injective_function) as a property of the function." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "find weight: function (total, injective) items --> int(1..1000)\n", - "find gain: function (total, injective) items --> int(1..1000)\n", - "find capacity: int(1..5000)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -492,10 +268,8 @@ "id": "LGHHUkfXoZOg", "outputId": "bb95af51-7709-42f9-b4f8-82a0e0c0ca93" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'capacity': 1,\n", @@ -541,47 +315,51 @@ " '9': 1}}" ] }, + "execution_count": 12, "metadata": {}, - "execution_count": 12 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "find weight: function (total, injective) items --> int(1..1000)\n", + "find gain: function (total, injective) items --> int(1..1000)\n", + "find capacity: int(1..5000)" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Running this gives us a slighly more interesting parameters set but it is not there yet The specific order that appears in the results is solver dependent. The default solver used by conjure is Minion and we can use an optional flag to have the variables assigned in a random order. This can be done with this command:" - ], "metadata": { "id": "RqTcTMtuoitZ" - } + }, + "source": [ + "Running this gives us a slighly more interesting parameters set but it is not there yet The specific order that appears in the results is solver dependent. The default solver used by conjure is Minion and we can use an optional flag to have the variables assigned in a random order. This can be done with this command:" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`--solver-options=-randomiseorder`" - ], "metadata": { "id": "Zzg57cEHonBQ" - } + }, + "source": [ + "`--solver-options=-randomiseorder`" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Alternatively one can use another solver that uses randomness by default" - ], "metadata": { "id": "qTeTX8s-oqjp" - } + }, + "source": [ + "Alternatively one can use another solver that uses randomness by default" + ] }, { "cell_type": "code", - "source": [ - "%%conjure --solver=minion --solver-options='-randomiseorder'\n", - "\n", - "find weight: function (total, injective) items --> int(1..1000)\n", - "find gain: function (total, injective) items --> int(1..1000)\n", - "find capacity: int(1..5000)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -589,10 +367,8 @@ "id": "v1vnAK0kouNI", "outputId": "c81ad75f-51f0-4bb8-877c-75bd50d690a5" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'capacity': 4354,\n", @@ -638,25 +414,32 @@ " '9': 194}}" ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure --solver=minion --solver-options='-randomiseorder'\n", + "\n", + "find weight: function (total, injective) items --> int(1..1000)\n", + "find gain: function (total, injective) items --> int(1..1000)\n", + "find capacity: int(1..5000)" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Now it is starting to look more like a proper instance. At this point we can add some knowledge about the problem to formulate some constraints that will ensure that the instances are not trivial. ie when the sum of all the weights is smaller than the capacity so we can’t put all the objects in the knapsack or when all the objects are heavier than the capacity so that no object can be picked. Thefore we add constraints such as:" - ], "metadata": { "id": "Y3zFC4dTtn-s" - } + }, + "source": [ + "Now it is starting to look more like a proper instance. At this point we can add some knowledge about the problem to formulate some constraints that will ensure that the instances are not trivial. ie when the sum of all the weights is smaller than the capacity so we can’t put all the objects in the knapsack or when all the objects are heavier than the capacity so that no object can be picked. Thefore we add constraints such as:" + ] }, { "cell_type": "code", - "source": [ - "%conjure_clear" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -664,29 +447,22 @@ "id": "xtRJ0LK5ueb3", "outputId": "d277f389-ce6f-4070-e556-42d64da10989" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure model cleared\n" ] } + ], + "source": [ + "%conjure_clear" ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting number_items be 20\n", - "letting items be domain int(1..number_items)\n", - "find weight: function (total, injective) items --> int(1..1000)\n", - "find gain: function (total, injective) items --> int(1..1000)\n", - "find capacity: int(1..5000)\n", - "\n", - "such that (sum ([w | (_,w) <- weight]) > capacity*2)," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -694,10 +470,8 @@ "id": "st_At4HvuFtD", "outputId": "b809637a-5f87-4848-df0f-29c41cf34227" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'capacity': 43,\n", @@ -743,27 +517,35 @@ " '9': 9}}" ] }, + "execution_count": 26, "metadata": {}, - "execution_count": 26 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting number_items be 20\n", + "letting items be domain int(1..number_items)\n", + "find weight: function (total, injective) items --> int(1..1000)\n", + "find gain: function (total, injective) items --> int(1..1000)\n", + "find capacity: int(1..5000)\n", + "\n", + "such that (sum ([w | (_,w) <- weight]) > capacity*2)," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This means that the sum of all the weights should be greater than twice the capacity of the knapsack. From this we can expect that on average no more than half of the objects will fit in the knapsack. The expression `[w | (_,w) <- weight]` is a list [comprehension](https://en.wikipedia.org/wiki/List_comprehension) that extracts all right hand values of the `weight` function. The underscore character means we do not care about the left hand side values. To ensure that the solver does not take it too far we impose an upper bound using a similar constraint. We impose that the sum of the objects weights 5 times the capacity of the knapsack, so we can expect that only between 20% and 50% of the items will fit in the knapsack in each instance." - ], "metadata": { "id": "XH7Q2h2Qux0G" - } + }, + "source": [ + "This means that the sum of all the weights should be greater than twice the capacity of the knapsack. From this we can expect that on average no more than half of the objects will fit in the knapsack. The expression `[w | (_,w) <- weight]` is a list [comprehension](https://en.wikipedia.org/wiki/List_comprehension) that extracts all right hand values of the `weight` function. The underscore character means we do not care about the left hand side values. To ensure that the solver does not take it too far we impose an upper bound using a similar constraint. We impose that the sum of the objects weights 5 times the capacity of the knapsack, so we can expect that only between 20% and 50% of the items will fit in the knapsack in each instance." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that (sum ([w | (_,w) <- weight]) < capacity*5)," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -771,10 +553,8 @@ "id": "RGBsge0yu-LK", "outputId": "c7baf91c-74b5-4701-89a7-17a123492b5b" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'capacity': 43,\n", @@ -820,27 +600,30 @@ " '9': 9}}" ] }, + "execution_count": 27, "metadata": {}, - "execution_count": 27 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that (sum ([w | (_,w) <- weight]) < capacity*5)," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "At this point it will be harder to see specific properties of the instances just by eyeballing the parameters but we can be confident that the properties we have imposed are there. We can add some more constraints to refine the values of the instances for practice/exercise by enforcing that no object is heavier than a third of the knapsack capacity" - ], "metadata": { "id": "UAohhHG1vXFZ" - } + }, + "source": [ + "At this point it will be harder to see specific properties of the instances just by eyeballing the parameters but we can be confident that the properties we have imposed are there. We can add some more constraints to refine the values of the instances for practice/exercise by enforcing that no object is heavier than a third of the knapsack capacity" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll (_,w) in weight . w < capacity / 3," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -848,11 +631,10 @@ "id": "UPeiW9bOvZcJ", "outputId": "70de71bf-c701-4222-9547-fea521c33e47" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stderr", + "output_type": "stream", "text": [ "Exception: Error:\n", " Savile Row stdout: Created output file for domain filtering conjure-output/model000001.eprime-minion\n", @@ -868,24 +650,26 @@ "\n" ] } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll (_,w) in weight . w < capacity / 3," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "On top of that we can enfore a constraint on the density of the values in each object by limiting the ratio between the weight and gain of each specific object with:" - ], "metadata": { "id": "cEy6PLNavc_T" - } + }, + "source": [ + "On top of that we can enfore a constraint on the density of the values in each object by limiting the ratio between the weight and gain of each specific object with:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "such that forAll element : items .\n", - " gain(element) <= 3*weight(element)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -893,10 +677,8 @@ "id": "46OeSVrBvhOX", "outputId": "7ef012a2-d030-4dec-e3a8-2d5055042351" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'capacity': 16,\n", @@ -942,13 +724,23 @@ " '9': 3}}" ] }, + "execution_count": 29, "metadata": {}, - "execution_count": 29 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "such that forAll element : items .\n", + " gain(element) <= 3*weight(element)" ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "kr7LfH5Svrxx" + }, "source": [ "After running all cells, we can take the output solution and run the Knapsack Problem solution on it.\n", "\n", @@ -957,10 +749,23 @@ "If your computer is powerful enough you can try larger values in “letting number_items be 20” (40-50 items will already produce substantially harder instances) Like for other forms of modelling writing instance generators is in large part an art. If this is not your kind of thing and you would like a fully automated system that can produce instances you may check out this [method](https://link.springer.com/chapter/10.1007/978-3-030-30048-7_1)\n", "\n", "(code available [here](https://github.com/stacs-cp/CP2019-InstanceGen))" - ], - "metadata": { - "id": "kr7LfH5Svrxx" - } + ] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyOyOIxXu5LVVSWqJoksN5gj", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/tutorials/notebooks/KnapsackProblem.ipynb b/docs/tutorials/notebooks/KnapsackProblem.ipynb index f4610f9661..3a9ba80421 100644 --- a/docs/tutorials/notebooks/KnapsackProblem.ipynb +++ b/docs/tutorials/notebooks/KnapsackProblem.ipynb @@ -28,7 +28,7 @@ "id": "5I6cwwqhH19R" }, "source": [ - "Original [The Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials.html#the-knapsack-problem) by Saad Attieh and Christopher Stone. Adapted by Alex Gallagher." + "Original [The Knapsack Problem](https://conjure.readthedocs.io/en/latest/tutorials/knapsack.html) by Saad Attieh and Christopher Stone. Adapted by Alex Gallagher." ] }, { diff --git a/docs/tutorials/notebooks/NurseRostering.ipynb b/docs/tutorials/notebooks/NurseRostering.ipynb index 98d77c29fb..230366d1de 100644 --- a/docs/tutorials/notebooks/NurseRostering.ipynb +++ b/docs/tutorials/notebooks/NurseRostering.ipynb @@ -28,7 +28,7 @@ "id": "sT5HA7OR3a_f" }, "source": [ - "Original [Nurse Rostering](https://conjure.readthedocs.io/en/latest/tutorials.html#nurse-rostering) by András Salamon, Nguyen Dang and Saad Attieh. Adapted by Alex Gallagher." + "Original [Nurse Rostering](https://conjure.readthedocs.io/en/latest/tutorials/NurseRostering.html) by András Salamon, Nguyen Dang and Saad Attieh. Adapted by Alex Gallagher." ] }, { diff --git a/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb b/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb index 27b924269c..dcddcd7652 100644 --- a/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb +++ b/docs/tutorials/notebooks/Semigroups,_Monoids_and_Groups.ipynb @@ -28,7 +28,7 @@ "id": "3kKmC_37a2uo" }, "source": [ - "Original [Semigroups, Monoids and Groups](https://conjure.readthedocs.io/en/latest/tutorials.html#semigroups-monoids-and-groups) by Chris Jefferson and Alice Lynch. Adapted by Alex Gallagher." + "Original [Semigroups, Monoids and Groups](https://conjure.readthedocs.io/en/latest/tutorials/Groups.html) by Chris Jefferson and Alice Lynch. Adapted by Alex Gallagher." ] }, { diff --git a/docs/tutorials/notebooks/SimplePermutations.ipynb b/docs/tutorials/notebooks/SimplePermutations.ipynb index 51e4e878fc..3d4c740f0e 100644 --- a/docs/tutorials/notebooks/SimplePermutations.ipynb +++ b/docs/tutorials/notebooks/SimplePermutations.ipynb @@ -1,93 +1,81 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "authorship_tag": "ABX9TyPeoxDmDrpY9z9gXZGQBH/P", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ "\"Open" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "# Simple Permutations" - ], "metadata": { "id": "ui5YqwoFv7LV" - } + }, + "source": [ + "# Simple Permutations" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Original [Simple Permutations](https://conjure.readthedocs.io/en/latest/tutorials.html#simple-permutations) by Ruth Hoffmann and Gökberk Koçak, edited by András Salamon. Adapted by Alex Gallagher." - ], "metadata": { "id": "U-HzMB6vs1Zw" - } + }, + "source": [ + "Original [Simple Permutations](https://conjure.readthedocs.io/en/latest/tutorials/simple_perm/simple_perm.html) by Ruth Hoffmann and Gökberk Koçak, edited by András Salamon. Adapted by Alex Gallagher." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Problem" - ], "metadata": { "id": "2mcDxfXktRkP" - } + }, + "source": [ + "## Problem" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Let a permutation be a sequence of length ***n*** consisting of numbers between 1 and ***n***, in any order with each number occurring exactly once." - ], "metadata": { "id": "vD4QRyo5tVXd" - } + }, + "source": [ + "Let a permutation be a sequence of length ***n*** consisting of numbers between 1 and ***n***, in any order with each number occurring exactly once." + ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "0lb1eDuYtlM8" + }, "source": [ "An interval in a permutation **σ** is a factor of contiguous values of **σ** such that their indices are consecutive. For example, in the permutation **π=346978215**,\n", "**π(4)π(5)π(6)=978** is an interval, whereas **π(1)π(2)π(3)π(4)=3469** is not. It is easy to see that every permutation of length ***n*** has intervals of length 0, 1 and ***n***, at least. The permutations of length ***n*** that only contain intervals of length 0, 1 and ***n*** are said to be simple. So for example the permutation **π=346978215** is not simple as we have seen in the example above that it contains an interval, on the other hand \n", "**σ=526184937** is simple as there are no intervals of length strictly greater than 1, except the whole of **σ**. See [Hof15](https://conjure.readthedocs.io/en/latest/zreferences.html#id6) for more information on permutation patterns and simple permutations." - ], - "metadata": { - "id": "0lb1eDuYtlM8" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Parameter" - ], "metadata": { "id": "Xaie69Fh1n_M" - } + }, + "source": [ + "## Parameter" + ] }, { "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -96,11 +84,10 @@ "id": "Ez_RQBSQw0DV", "outputId": "a1408b64-36d6-44b0-fec2-962b8929e2a3" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Installing Conjure...\n", "Conjure: The Automated Constraint Modelling Tool\n", @@ -109,244 +96,32 @@ ] }, { - "output_type": "display_data", "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", "text/plain": [ "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure extension is loaded.\n", "For usage help run: %conjure_help\n" ] } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting n be 5" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -354,44 +129,46 @@ "id": "KwusJPeEwu1s", "outputId": "ec3d4168-2451-4a08-adc3-096d38d12fef" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting n be 5" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Enumeration/Generation Model" - ], "metadata": { "id": "Ita9c8GMvqB-" - } + }, + "source": [ + "## Enumeration/Generation Model" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We define the size of the permutation to be `n` and we are trying to find all the permutations `perm` to contain the integers 1 to `n`, by specifying that it is `bijective`." - ], "metadata": { "id": "uekUqin9xitZ" - } + }, + "source": [ + "We define the size of the permutation to be `n` and we are trying to find all the permutations `perm` to contain the integers 1 to `n`, by specifying that it is `bijective`." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "find perm : sequence (bijective, size n) of int(1..n)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -399,38 +176,39 @@ "id": "fS_FucWHxcQL", "outputId": "f71c97fb-e119-463b-c883-e0f1db1387f2" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'perm': [1, 2, 3, 4, 5]}" ] }, + "execution_count": 3, "metadata": {}, - "execution_count": 3 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "find perm : sequence (bijective, size n) of int(1..n)" ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "X4xBuOqPyGfP" + }, "source": [ "The idea of our approach is the property of an interval, where when sorted it creates a complete range. This can be translated to checking that the difference between the maximal and the minimal elements of the interval is not equal to the cardinality of the interval.\n", "\n", "\n", "We have one constraint to say that there are only intervals of length 0,1 and `n`. This constraint is defined as a matrix comprehension, which will build a matrix consisting of only boolean entries. We then check the matrix with an `and` constraint, to spot if there are any `false` entries, which would mean that we have an interval." - ], - "metadata": { - "id": "X4xBuOqPyGfP" - } + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting example be [ num | num : int(1..5), num != 3 ]" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -438,41 +216,36 @@ "id": "R68A-dhzysUM", "outputId": "b7f25d30-e6b8-4ec3-f33e-bc6cafd14161" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'perm': [1, 2, 3, 4, 5]}" ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting example be [ num | num : int(1..5), num != 3 ]" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This is an example which creates a 1-dimensional matrix of `num`s where none of the entries are `3`. We allow also for `letting` statements inside the matrix comprehensions, which allow us to define intermediary statements." - ], "metadata": { "id": "LKPdMqnQ7PCY" - } + }, + "source": [ + "This is an example which creates a 1-dimensional matrix of `num`s where none of the entries are `3`. We allow also for `letting` statements inside the matrix comprehensions, which allow us to define intermediary statements." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "such that\n", - " and([ max(subs) - min(subs) + 1 != |subs| |\n", - " i : int(1..n-1), j : int(2..n),\n", - " i < j,\n", - " !(i = 1 /\\ j = n),\n", - " letting subs be [perm(k) | k : int(i..j)]]\n", - " )" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -480,68 +253,72 @@ "id": "zu4FYxB7yUoW", "outputId": "878d5a91-9df7-481b-a4d0-18cd65b3bb49" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'perm': [2, 4, 1, 5, 3]}" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "such that\n", + " and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We extract `i` and `j` to be the beginning and the end of the interval, and we need to make sure that `i` is less than `j` to have the right order. As we do not want to include the whole permutation as an interval, we restrict that `i` and `j` cannot be simultaneously at the respective ends of the permutation. The final line of the comprehension sets up the continuous subsequences. On the left hand side of the matrix comprehension we use the interval property that when it is turned into a sorted set it is a complete range." - ], "metadata": { "id": "Cf1BEeDg1glo" - } + }, + "source": [ + "We extract `i` and `j` to be the beginning and the end of the interval, and we need to make sure that `i` is less than `j` to have the right order. As we do not want to include the whole permutation as an interval, we restrict that `i` and `j` cannot be simultaneously at the respective ends of the permutation. The final line of the comprehension sets up the continuous subsequences. On the left hand side of the matrix comprehension we use the interval property that when it is turned into a sorted set it is a complete range." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Solving" - ], "metadata": { "id": "tvH81f_y2I_X" - } + }, + "source": [ + "## Solving" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Using **n = 5**, the sample solution is `'perm': [2, 4, 1, 5, 3]`." - ], "metadata": { "id": "EL2YTOB52OPk" - } + }, + "source": [ + "Using **n = 5**, the sample solution is `'perm': [2, 4, 1, 5, 3]`." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "To find all solutions, type:" - ], "metadata": { "id": "S-m9cSca2kpn" - } + }, + "source": [ + "To find all solutions, type:" + ] }, { "cell_type": "code", - "source": [ - "%%conjure --number-of-solutions=all\n", - "such that\n", - " and([ max(subs) - min(subs) + 1 != |subs| |\n", - " i : int(1..n-1), j : int(2..n),\n", - " i < j,\n", - " !(i = 1 /\\ j = n),\n", - " letting subs be [perm(k) | k : int(i..j)]]\n", - " )" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -549,10 +326,8 @@ "id": "eWYFmqAD2qBk", "outputId": "4ca16f13-36fe-40af-e5f8-f149096b4f8d" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "[{'perm': [2, 4, 1, 5, 3]},\n", @@ -563,43 +338,55 @@ " {'perm': [4, 2, 5, 1, 3]}]" ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "such that\n", + " and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "For `n be 5` you should get 6 solutions." - ], "metadata": { "id": "LQwpDusy21y5" - } + }, + "source": [ + "For `n be 5` you should get 6 solutions." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Checking Model with Instances" - ], "metadata": { "id": "i1bwy9HI29f6" - } + }, + "source": [ + "## Checking Model with Instances" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "What the model will tell us is that the permutation is simple (true) or not." - ], "metadata": { "id": "GN0CK3Ch3dRW" - } + }, + "source": [ + "What the model will tell us is that the permutation is simple (true) or not." + ] }, { "cell_type": "code", - "source": [ - "%conjure_clear" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -607,24 +394,22 @@ "id": "ZM-TXupi4Crb", "outputId": "7db6ea45-864d-45e6-b2ff-cc0a9f37a6f9" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure model cleared\n" ] } + ], + "source": [ + "%conjure_clear" ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting n be 5\n", - "letting perm be sequence( 1, 4, 2, 5, 3)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -632,33 +417,27 @@ "id": "m--asAoP34hS", "outputId": "22e285f5-c529-4089-90ef-64de80414981" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 8, "metadata": {}, - "execution_count": 8 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting n be 5\n", + "letting perm be sequence( 1, 4, 2, 5, 3)" ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "find result : bool\n", - "such that\n", - " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", - " i : int(1..n-1), j : int(2..n),\n", - " i < j,\n", - " !(i = 1 /\\ j = n),\n", - " letting subs be [perm(k) | k : int(i..j)]]\n", - " )" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -666,34 +445,43 @@ "id": "sA6J8xfk3HE3", "outputId": "39c5de0c-d436-416f-bc11-67d2bed424ed" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'result': False}" ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 9 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "find result : bool\n", + "such that\n", + " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This is a non-simple permutation." - ], "metadata": { "id": "sFsXCCIl4Lbt" - } + }, + "source": [ + "This is a non-simple permutation." + ] }, { "cell_type": "code", - "source": [ - "%conjure_clear" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -701,24 +489,22 @@ "id": "8IOTBuUw4ctW", "outputId": "3fa5a06b-1c09-4868-dac2-081fd3f55e69" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure model cleared\n" ] } + ], + "source": [ + "%conjure_clear" ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "letting n be 5\n", - "letting perm be sequence(2, 4, 1, 5, 3)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -726,33 +512,27 @@ "id": "m392EGci4QrA", "outputId": "2add3fd7-b24d-4622-d4f7-df543d8b5ce9" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 11, "metadata": {}, - "execution_count": 11 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting n be 5\n", + "letting perm be sequence(2, 4, 1, 5, 3)" ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "find result : bool\n", - "such that\n", - " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", - " i : int(1..n-1), j : int(2..n),\n", - " i < j,\n", - " !(i = 1 /\\ j = n),\n", - " letting subs be [perm(k) | k : int(i..j)]]\n", - " )" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -760,35 +540,20 @@ "id": "iIJvB6FM4Zkj", "outputId": "f85d46dc-90c9-4bf4-ca96-da964a3792e3" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'result': True}" ] }, + "execution_count": 12, "metadata": {}, - "execution_count": 12 + "output_type": "execute_result" } - ] - }, - { - "cell_type": "markdown", - "source": [ - "It is important to clear the model between instances when redefining variables. If we attempt to run the test again without using `%conjure_clear`, the solutions will not reflect the instance provided in the cell." ], - "metadata": { - "id": "woAjLCyW4iUP" - } - }, - { - "cell_type": "code", "source": [ "%%conjure\n", - "letting n be 5\n", - "letting perm be sequence( 1, 4, 2, 5, 3)\n", "find result : bool\n", "such that\n", " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", @@ -797,7 +562,21 @@ " !(i = 1 /\\ j = n),\n", " letting subs be [perm(k) | k : int(i..j)]]\n", " )" - ], + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "id": "woAjLCyW4iUP" + }, + "source": [ + "It is important to clear the model between instances when redefining variables. If we attempt to run the test again without using `%conjure_clear`, the solutions will not reflect the instance provided in the cell." + ] + }, + { + "cell_type": "code", + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -805,22 +584,50 @@ "id": "ggmtQf6q5FKE", "outputId": "9cbe2ec0-9be3-47de-ec3d-8da0b4800bcb" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { - "text/plain": [ - "'No solution'" - ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" - } + }, + "text/plain": [ + "'No solution'" + ] }, + "execution_count": 13, "metadata": {}, - "execution_count": 13 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "letting n be 5\n", + "letting perm be sequence( 1, 4, 2, 5, 3)\n", + "find result : bool\n", + "such that\n", + " result = and([ max(subs) - min(subs) + 1 != |subs| |\n", + " i : int(1..n-1), j : int(2..n),\n", + " i < j,\n", + " !(i = 1 /\\ j = n),\n", + " letting subs be [perm(k) | k : int(i..j)]]\n", + " )" ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyPeoxDmDrpY9z9gXZGQBH/P", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From b21199377088f77e07e0d44e574849f7912209d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 14 Jun 2023 09:08:06 +0100 Subject: [PATCH 266/378] fix link to colab --- docs/tutorials/notebooks/Futoshiki.ipynb | 835 +++++++++++------------ 1 file changed, 396 insertions(+), 439 deletions(-) diff --git a/docs/tutorials/notebooks/Futoshiki.ipynb b/docs/tutorials/notebooks/Futoshiki.ipynb index b44da9083f..9b03f24c57 100644 --- a/docs/tutorials/notebooks/Futoshiki.ipynb +++ b/docs/tutorials/notebooks/Futoshiki.ipynb @@ -1,57 +1,40 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "toc_visible": true, - "authorship_tag": "ABX9TyPiKmAzSUQjsG0RgdhqpcSI", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { + "attachments": {}, "cell_type": "markdown", "metadata": { - "id": "view-in-github", - "colab_type": "text" + "colab_type": "text", + "id": "view-in-github" }, "source": [ - "\"Open" + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/conjure-cp/conjure/blob/main/docs/tutorials/notebooks/Futoshiki.ipynb)" ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "Hb26fiIv_enr" + }, "source": [ "# Futoshiki\n", "Original [Futoshiki](https://conjure.readthedocs.io/en/latest/tutorials.html#futoshiki) by Ruth Hoffmann and Gökberk Koçak. Adapted by Alex Gallagher." - ], - "metadata": { - "id": "Hb26fiIv_enr" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Problem" - ], "metadata": { "id": "U59hSFC__0c1" - } + }, + "source": [ + "## Problem" + ] }, { "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -60,11 +43,10 @@ "id": "dTKv5TR6_mTg", "outputId": "e33d73d0-1816-4b27-be6e-70b1c2cadef4" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Installing Conjure...\n", "Conjure: The Automated Constraint Modelling Tool\n", @@ -73,275 +55,65 @@ ] }, { - "output_type": "display_data", "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", "text/plain": [ "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" }, { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "Conjure extension is loaded.\n", "For usage help run: %conjure_help\n" ] } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" ] }, { + "attachments": {}, "cell_type": "markdown", + "metadata": { + "id": "2DOlv_Cl_7K3" + }, "source": [ "`n x n` board where each column and row is filled with the unique numbers from 1 to `n`, similar to a sudoku. In contrast to sudoku, there are less than and greater than symbols between cells indicating that one cell has to be filled with a number greater than (or less than) than the cell on the other side of the operator.\n", "\n", "\n", "![example.webp](data:image/webp;base64,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)" - ], - "metadata": { - "id": "2DOlv_Cl_7K3" - } + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Instance" - ], "metadata": { "id": "7mIcMmujEkSQ" - } + }, + "source": [ + "## Instance" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The definition of the instance below contains the information about our starting board of a specific instance that we want to solve. See the picture at the beginning to see what it looks like." - ], "metadata": { "id": "Dz0uFOj3FI7r" - } + }, + "source": [ + "The definition of the instance below contains the information about our starting board of a specific instance that we want to solve. See the picture at the beginning to see what it looks like." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting n be 4" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -349,39 +121,37 @@ "id": "vUmoBT79QyAp", "outputId": "9cdb0b5b-3acf-4c15-cae5-f656fe57ea04" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 2, "metadata": {}, - "execution_count": 2 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting n be 4" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We are dealing with a 4 by 4 board." - ], "metadata": { "id": "yhJqZq7YFUyQ" - } + }, + "source": [ + "We are dealing with a 4 by 4 board." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting hints be function(\n", - " (1,1) --> 2,\n", - " (2,2) --> 2\n", - ")" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -389,41 +159,40 @@ "id": "hA8zsbcwQ2_6", "outputId": "314fcb78-a928-4482-86fc-32b9e03d9486" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 3, "metadata": {}, - "execution_count": 3 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting hints be function(\n", + " (1,1) --> 2,\n", + " (2,2) --> 2\n", + ")" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "There will be two `2` s on the board given as a hint. One in the top left corner `(1,1)` and the second number 2 in cell `(2,2)`." - ], "metadata": { "id": "FK76ksfWFdde" - } + }, + "source": [ + "There will be two `2` s on the board given as a hint. One in the top left corner `(1,1)` and the second number 2 in cell `(2,2)`." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting less_than be relation(\n", - " ((1,1) , (2,1)),\n", - " ((4,2) , (3,2)),\n", - " ((3,3) , (3,4)),\n", - " ((3,4) , (4,4))\n", - ")" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -431,54 +200,62 @@ "id": "tkpqtndrQ8bk", "outputId": "f17b9031-da6c-4114-fb20-2d1fa0e642e3" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting less_than be relation(\n", + " ((1,1) , (2,1)),\n", + " ((4,2) , (3,2)),\n", + " ((3,3) , (3,4)),\n", + " ((3,4) , (4,4))\n", + ")" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "There are 4 relation symbols on the board, between cells." - ], "metadata": { "id": "292rBj6cF4dy" - } + }, + "source": [ + "There are 4 relation symbols on the board, between cells." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Solving the problem step by step" - ], "metadata": { "id": "ePFid8u6AS2U" - } + }, + "source": [ + "## Solving the problem step by step" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "The line by line explanation of the model starts here." - ], "metadata": { "id": "UjSa9brNBPo0" - } + }, + "source": [ + "The line by line explanation of the model starts here." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "letting DOMAIN be domain int(1..n)" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -486,36 +263,37 @@ "id": "fCMtDamfSOSI", "outputId": "c30ef3df-0ae8-4b6a-e5bd-e3eef66b597c" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{}" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "letting DOMAIN be domain int(1..n)" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We start at 1 and go up to `n` (for both the elements of the cells and the cell locations)." - ], "metadata": { "id": "Vk22ri4YCBHQ" - } + }, + "source": [ + "We start at 1 and go up to `n` (for both the elements of the cells and the cell locations)." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -523,10 +301,8 @@ "id": "poiZlqPmSzYC", "outputId": "7ac19e77-b0d0-469e-9c30-bdd4d3b2b0ca" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 1, '2': 1, '3': 1, '4': 1},\n", @@ -535,37 +311,40 @@ " '4': {'1': 1, '2': 1, '3': 1, '4': 1}}}" ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "We are now telling the solver that we are trying to find a `n x n` board with elements from 1 to `n` in each cell." - ], "metadata": { "id": "Awdg2ZmICVzt" - } + }, + "source": [ + "We are now telling the solver that we are trying to find a `n x n` board with elements from 1 to `n` in each cell." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "`such that` indicates the beginning of the constraints block." - ], "metadata": { "id": "TO4WlU3ICc5e" - } + }, + "source": [ + "`such that` indicates the beginning of the constraints block." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll (hint,num) in hints .\n", - " board[hint[1], hint[2]] = num," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -573,10 +352,8 @@ "id": "h0CC7hO9V0ER", "outputId": "a79a13b7-bbd3-4174-9812-8e2c93f4ea94" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 1, '4': 1},\n", @@ -585,28 +362,31 @@ " '4': {'1': 1, '2': 1, '3': 1, '4': 1}}}" ] }, + "execution_count": 7, "metadata": {}, - "execution_count": 7 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll (hint,num) in hints .\n", + " board[hint[1], hint[2]] = num," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This constraint defines the hints, so the cells that are filled in when we get the puzzle." - ], "metadata": { "id": "fjaEYcrwCkcp" - } + }, + "source": [ + "This constraint defines the hints, so the cells that are filled in when we get the puzzle." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll i: DOMAIN .\n", - " allDiff(board[i,..])," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -614,10 +394,8 @@ "id": "3teSEg_oV_P3", "outputId": "2261633e-c9ca-4bb1-ee10-2175311d5241" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 3, '4': 4},\n", @@ -626,28 +404,31 @@ " '4': {'1': 1, '2': 2, '3': 3, '4': 4}}}" ] }, + "execution_count": 8, "metadata": {}, - "execution_count": 8 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll i: DOMAIN .\n", + " allDiff(board[i,..])," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This constraint defines that every cell in a row has to be a unique number between 1 and n." - ], "metadata": { "id": "235I1jCgEWrl" - } + }, + "source": [ + "This constraint defines that every cell in a row has to be a unique number between 1 and n." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll j: DOMAIN .\n", - " allDiff(board[..,j])," - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -655,10 +436,8 @@ "id": "yW83rA4tWI1D", "outputId": "a5aea27a-eea5-4fdc-8e47-dd83232bbf74" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 3, '4': 4},\n", @@ -667,28 +446,31 @@ " '4': {'1': 4, '2': 3, '3': 2, '4': 1}}}" ] }, + "execution_count": 9, "metadata": {}, - "execution_count": 9 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll j: DOMAIN .\n", + " allDiff(board[..,j])," ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This constraint defines that every cell in a column has to be a unique number between 1 and n." - ], "metadata": { "id": "vC0XcQshEboo" - } + }, + "source": [ + "This constraint defines that every cell in a column has to be a unique number between 1 and n." + ] }, { "cell_type": "code", - "source": [ - "%%conjure\n", - "\n", - "such that forAll (l,g) in less_than .\n", - " board[l[1],l[2]] < board[g[1],g[2]]" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -696,10 +478,8 @@ "id": "uuOgwJkoWRmi", "outputId": "d1bb4aef-de01-4739-d241-a6f306e29e88" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "{'board': {'1': {'1': 2, '2': 1, '3': 4, '4': 3},\n", @@ -708,46 +488,51 @@ " '4': {'1': 1, '2': 3, '3': 2, '4': 4}}}" ] }, + "execution_count": 10, "metadata": {}, - "execution_count": 10 + "output_type": "execute_result" } + ], + "source": [ + "%%conjure\n", + "\n", + "such that forAll (l,g) in less_than .\n", + " board[l[1],l[2]] < board[g[1],g[2]]" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Finally this constraint enforces the less than relation. `l` is the number that is the cell that contains the number that is less than then the cell `g`." - ], "metadata": { "id": "hVtaESWqEhHp" - } + }, + "source": [ + "Finally this constraint enforces the less than relation. `l` is the number that is the cell that contains the number that is less than then the cell `g`." + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "## Visualising the results" - ], "metadata": { "id": "fr_wb1LrF7cl" - } + }, + "source": [ + "## Visualising the results" + ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "Printing the result gives us:" - ], "metadata": { "id": "aYpytpZZGU39" - } + }, + "source": [ + "Printing the result gives us:" + ] }, { "cell_type": "code", - "source": [ - "for row in board:\n", - " for square in board[row]:\n", - " print(board[row][square], end=\" \")\n", - " print(\"\")" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -755,11 +540,10 @@ "id": "B4eEEhuMGcCt", "outputId": "906f9c8e-87e2-4553-fd61-9de0417eff46" }, - "execution_count": null, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "2 1 4 3 \n", "4 2 3 1 \n", @@ -767,19 +551,197 @@ "1 3 2 4 \n" ] } + ], + "source": [ + "for row in board:\n", + " for square in board[row]:\n", + " print(board[row][square], end=\" \")\n", + " print(\"\")" ] }, { + "attachments": {}, "cell_type": "markdown", - "source": [ - "This is represented in the following graph:" - ], "metadata": { "id": "LgUm0W-yzsxk" - } + }, + "source": [ + "This is represented in the following graph:" + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 411 + }, + "id": "PLN54F5nxj9o", + "outputId": "1873f3e6-8352-494f-e702-72aba9fa69f2" + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "parent\n", + "\n", + "\n", + "cluster0\n", + "\n", + "\n", + "cluster1\n", + "\n", + "\n", + "cluster2\n", + "\n", + "\n", + "cluster3\n", + "\n", + "\n", + "\n", + "0\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "4\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "\n", + "1\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "2\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "3\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "8\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "\n", + "5\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "6\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "7\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "7->3\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "9\n", + "\n", + "1\n", + "\n", + "\n", + "\n", + "8->9\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "12\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "\n", + "10\n", + "\n", + "4\n", + "\n", + "\n", + "\n", + "14\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "10->14\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "11\n", + "\n", + "3\n", + "\n", + "\n", + "\n", + "12->8\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "13\n", + "\n", + "2\n", + "\n", + "\n", + "\n", + "15\n", + "\n", + "1\n", + "\n", + "\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import graphviz\n", "\n", @@ -810,29 +772,24 @@ "p.edge('10','14', None, {'constraint':'False'})\n", "\n", "p\n" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 411 - }, - "id": "PLN54F5nxj9o", - "outputId": "1873f3e6-8352-494f-e702-72aba9fa69f2" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ], - "image/svg+xml": "\n\n\n\n\n\nparent\n\n\ncluster0\n\n\ncluster1\n\n\ncluster2\n\n\ncluster3\n\n\n\n0\n\n3\n\n\n\n4\n\n1\n\n\n\n\n1\n\n4\n\n\n\n2\n\n1\n\n\n\n3\n\n2\n\n\n\n8\n\n2\n\n\n\n\n5\n\n3\n\n\n\n6\n\n2\n\n\n\n7\n\n4\n\n\n\n7->3\n\n\n\n\n\n9\n\n1\n\n\n\n8->9\n\n\n\n\n\n12\n\n4\n\n\n\n\n10\n\n4\n\n\n\n14\n\n3\n\n\n\n10->14\n\n\n\n\n\n11\n\n3\n\n\n\n12->8\n\n\n\n\n\n13\n\n2\n\n\n\n15\n\n1\n\n\n\n" - }, - "metadata": {}, - "execution_count": 132 - } ] } - ] -} \ No newline at end of file + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyPiKmAzSUQjsG0RgdhqpcSI", + "include_colab_link": true, + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From 5dc864b6daa2c9c1c6c53f7fcf68d07a4f44e66a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 30 Jun 2023 12:01:29 +0300 Subject: [PATCH 267/378] test case for #578 --- tests/custom/issues/578/d/p.param | 1 + tests/custom/issues/578/e.essence | 3 +++ tests/custom/issues/578/q.param | 1 + tests/custom/issues/578/run.sh | 5 +++++ 4 files changed, 10 insertions(+) create mode 100644 tests/custom/issues/578/d/p.param create mode 100644 tests/custom/issues/578/e.essence create mode 100644 tests/custom/issues/578/q.param create mode 100755 tests/custom/issues/578/run.sh diff --git a/tests/custom/issues/578/d/p.param b/tests/custom/issues/578/d/p.param new file mode 100644 index 0000000000..e009d74ff4 --- /dev/null +++ b/tests/custom/issues/578/d/p.param @@ -0,0 +1 @@ +letting a be 50 diff --git a/tests/custom/issues/578/e.essence b/tests/custom/issues/578/e.essence new file mode 100644 index 0000000000..7f9c4c4c7e --- /dev/null +++ b/tests/custom/issues/578/e.essence @@ -0,0 +1,3 @@ +given a : int(1..) +find b : bool +such that b = (a < 100) diff --git a/tests/custom/issues/578/q.param b/tests/custom/issues/578/q.param new file mode 100644 index 0000000000..e009d74ff4 --- /dev/null +++ b/tests/custom/issues/578/q.param @@ -0,0 +1 @@ +letting a be 50 diff --git a/tests/custom/issues/578/run.sh b/tests/custom/issues/578/run.sh new file mode 100755 index 0000000000..f91a28557b --- /dev/null +++ b/tests/custom/issues/578/run.sh @@ -0,0 +1,5 @@ +rm -rf conjure-output *.solution +conjure solve e.essence q.param +rm -rf conjure-output *.solution +conjure solve e.essence d/p.param +rm -rf conjure-output *.solution From 7a5e018cb35c8c13d918808b1b196ca4cf18224b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 30 Jun 2023 12:01:34 +0300 Subject: [PATCH 268/378] Fixing #578 - copying solutions when the parameter file is in a separate directory. --- src/Conjure/UI/MainHelper.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 92bac86bf4..68bed24005 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -407,7 +407,7 @@ mainWithArgs config@Solve{..} = do ] <.> ext -- parameterised, with solution numbers - (False, False, singleSolution, [_model, param, (stripPrefix "solution" -> Just solnum)]) | param `elem` params -> + (False, False, singleSolution, [_model, param, (stripPrefix "solution" -> Just solnum)]) | or [param `isSuffixOf` p | p <- params] -> if singleSolution then when (solnum == "000001") $ -- only copy the first solution copySolution file $ essenceDir From 18945f4fdb2c6ac1b42f02306bbc5ed06e2d4f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 30 Jun 2023 12:21:17 +0300 Subject: [PATCH 269/378] test passes fixes #578 --- tests/custom/issues/578/stdout.expected | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tests/custom/issues/578/stdout.expected diff --git a/tests/custom/issues/578/stdout.expected b/tests/custom/issues/578/stdout.expected new file mode 100644 index 0000000000..f4956ae929 --- /dev/null +++ b/tests/custom/issues/578/stdout.expected @@ -0,0 +1,14 @@ +Generating models for e.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime q.param +Running minion for domain filtering. +Running solver: minion +Copying solution to: e-q.solution +Generating models for e.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime d/p.param +Running minion for domain filtering. +Running solver: minion +Copying solution to: e-p.solution From 22516b816ebdef6feb1114fc00696cfc7942859d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 30 Jun 2023 16:47:03 +0300 Subject: [PATCH 270/378] being slightly more defensive --- src/Conjure/UI/MainHelper.hs | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/Conjure/UI/MainHelper.hs b/src/Conjure/UI/MainHelper.hs index 68bed24005..fd6beee8ef 100644 --- a/src/Conjure/UI/MainHelper.hs +++ b/src/Conjure/UI/MainHelper.hs @@ -407,20 +407,22 @@ mainWithArgs config@Solve{..} = do ] <.> ext -- parameterised, with solution numbers - (False, False, singleSolution, [_model, param, (stripPrefix "solution" -> Just solnum)]) | or [param `isSuffixOf` p | p <- params] -> - if singleSolution - then when (solnum == "000001") $ -- only copy the first solution - copySolution file $ essenceDir - intercalate "-" [ essenceBasename - , param - ] - <.> ext - else copySolution file $ essenceDir - intercalate "-" [ essenceBasename - , param - , solnum - ] - <.> ext + (False, False, singleSolution, [_model, param, (stripPrefix "solution" -> Just solnum)]) + | or [ param `elem` params + , or [('/' : param) `isSuffixOf` p | p <- params] ] -> + if singleSolution + then when (solnum == "000001") $ -- only copy the first solution + copySolution file $ essenceDir + intercalate "-" [ essenceBasename + , param + ] + <.> ext + else copySolution file $ essenceDir + intercalate "-" [ essenceBasename + , param + , solnum + ] + <.> ext _ -> return () -- ignore, we don't know how to handle this file liftIO stopGlobalPool From 797a305498b5b8fbeea140f1989dfc573901862f Mon Sep 17 00:00:00 2001 From: mfb22 Date: Mon, 17 Apr 2023 16:47:05 +0100 Subject: [PATCH 271/378] Adds filename to symbols --- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 2 +- src/Conjure/LSP/Handlers/Hover.hs | 2 +- src/Conjure/LSP/Util.hs | 7 ++++- src/Conjure/Language/Lexer.hs | 11 ++++--- src/Conjure/Language/Parser.hs | 7 +++-- src/Conjure/Language/Validator.hs | 35 +++++++++++++--------- src/Conjure/UI/ErrorDisplay.hs | 17 ++++++----- src/Conjure/UI/IO.hs | 2 +- 8 files changed, 51 insertions(+), 32 deletions(-) diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index 8da33744a2..141f8ff005 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -21,7 +21,7 @@ docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \req res -> do translate :: RegionInfo -> Maybe T.DocumentSymbol -translate reg@(RegionInfo r rSel ty cs) = +translate reg@(RegionInfo r rSel ty cs _) = (\x -> DocumentSymbol (getRegionName reg) (getRegionDetail reg) diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 9038f58bb4..5b8a3e67d2 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -25,7 +25,7 @@ hoverHandler = requestHandler STextDocumentHover $ \ req res -> do prettySymbol :: RegionInfo -> LspM () (Maybe MarkupContent) -prettySymbol (RegionInfo _ _ dt _) = case dt of +prettySymbol (RegionInfo _ _ dt _ _) = case dt of Definition nm ty -> return $ Just . snippet . pack.show $ hcat [pretty $ nm ," : ",pretty.show $ CPr.pretty ty] LiteralDecl{} -> return Nothing Ref nm k _ -> return . Just .snippet . pack.show $ hcat [pretty $ nm," : ",pretty.show $ CPr.pretty k] --pack.show $ vcat [hcat [text.unpack $ nm ,":",pretty ty]," Declared : "<> pretty (sourcePosToPosition sp)] diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 319daadbe8..2008cc82c0 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -28,7 +28,7 @@ data ProcessedFile = ProcessedFile { processFile :: Text -> Either PipelineError ProcessedFile processFile t = do parsed <- lexAndParse parseProgram t - let (m,d,s) = runValidator (validateModel parsed) (initialState parsed) + let (m,d,s) = runValidator (validateModel parsed) (initialState parsed Nothing) --TODO: wire up return $ ProcessedFile m d s @@ -124,9 +124,14 @@ sourcePosToPosition (SourcePos _ r c) = Position (fromInteger $ -1 + toInteger (unPos r)) (fromInteger $ -1 + toInteger (unPos c)) + regionToRange :: DiagnosticRegion -> L.Range regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (sourcePosToPosition ep) +regionToLocation :: DiagnosticRegion -> L.Location +regionToLocation reg@(DiagnosticRegion (SourcePos f _ _) _ _ _) = L.Location + (filePathToUri f) + (regionToRange reg) snippet :: Text -> MarkupContent snippet = markedUpContent "essence" diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 4ac447c5ed..985bb0307b 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -19,6 +19,7 @@ module Conjure.Language.Lexer eLex, reformList, tokenSourcePos, + sourcePosAfter, totalLength, trueLength, tokenStart, @@ -125,8 +126,9 @@ tokenStart (ETok{offsets = (Offsets _ s _ _)}) = s tokenSourcePos :: ETok -> SourcePos tokenSourcePos = oSourcePos . offsets --- sourcePosAfter :: ETok -> SourcePos --- sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) + +sourcePosAfter :: ETok -> SourcePos +sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok @@ -134,8 +136,8 @@ makeToken = ETok data LexerError = LexerError String deriving (Show) -runLexer :: Text -> Either LexerError ETokenStream -runLexer txt = case runParser eLex "Lexer" txt of +runLexer :: Text -> Maybe FilePath -> Either LexerError ETokenStream +runLexer txt fp = case runParser eLex (fromMaybe "Lexer" fp) txt of Left peb -> Left $ LexerError $ errorBundlePretty peb Right ets -> Right $ ETokenStream txt ets @@ -199,6 +201,7 @@ pIdentifier = do firstLetter <- takeWhile1P Nothing isIdentifierFirstLetter rest <- takeWhileP Nothing isIdentifierLetter let ident = T.append firstLetter rest + -- traceM $ T.unpack . T.pack $ map chr $ map ord $ T.unpack ident return ( LIdentifier ident, ident) "Identifier" diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 4dd99e75d6..43d4e49995 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -62,14 +62,15 @@ instance Pretty PipelineError where lexAndParse :: Flattenable a => P.Parser a -> Text -> Either PipelineError a lexAndParse parse t = do - lr <- either (Left . LexErr) Right $ L.runLexer t + lr <- either (Left . LexErr) Right $ L.runLexer t Nothing either (Left . ParserError ) Right $ runASTParser parse lr runPipeline :: Flattenable a =>Pipeline a b -> (Maybe FilePath,Text) -> Either PipelineError b runPipeline (parse,val,tc) (fp,txt) = do - lexResult <- either (Left . LexErr) Right $ L.runLexer txt + lexResult <- either (Left . LexErr) Right $ L.runLexer txt fp parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult - let x = V.runValidator (val parseResult) (V.initialState parseResult){V.typeChecking= tc} + let fileNameText = T.pack <$> fp + let x = V.runValidator (val parseResult) (V.initialState parseResult fileNameText){V.typeChecking= tc} case x of (m, ds,_) | not $ any V.isError ds -> Right m (_, ves,_) -> Left $ ValidatorError $ pretty (showDiagnosticsForConsole ves fp txt) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 9a32886477..cd8ebb6c2f 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -223,17 +223,18 @@ data RegionInfo = RegionInfo { rRegion :: DiagnosticRegion, rSubRegion :: Maybe DiagnosticRegion, rRegionType :: RegionType, - rChildren :: [RegionInfo] + rChildren :: [RegionInfo], + rTable :: SymbolTable } deriving Show mkDeclaration :: DiagnosticRegion -> Text -> Kind -> RegionInfo -mkDeclaration r n (t) = RegionInfo r (Just r) (Definition n t) [] +mkDeclaration r n (t) = RegionInfo r (Just r) (Definition n t) [] M.empty mkLiteral :: DiagnosticRegion -> Text -> Typed a -> RegionInfo -mkLiteral r _ (Typed t _) = RegionInfo r (Just r) (LiteralDecl (simple t)) [] +mkLiteral r _ (Typed t _) = RegionInfo r (Just r) (LiteralDecl (simple t)) [] M.empty putReference :: DiagnosticRegion -> Text -> Kind -> DiagnosticRegion -> ValidatorS () -putReference r n t ref = addRegion (RegionInfo r Nothing (Ref n t ref) []) +putReference r n t ref = addRegion (RegionInfo r Nothing (Ref n t ref) [] M.empty) holdDeclarations :: ValidatorS a -> ValidatorS (a,[RegionInfo]) holdDeclarations f = do @@ -251,15 +252,16 @@ wrapRegion' :: DiagnosticRegion -> DiagnosticRegion -> StructuralType -> Valida wrapRegion' regMain regSel ty f = do (res,ds) <- holdDeclarations f let rMain = regMain - let rSel = Just $ regSel - let new = RegionInfo rMain rSel (Structural ty) ds + let rSel = Just regSel + st <- gets (symbolTable) + let new = RegionInfo rMain rSel (Structural ty) ds st unless (null ds) $ addRegion new return res -- injectRegion :: DiagnosticRegion -> DiagnosticRegion -> () putDocs :: Flattenable a => DocType -> Text -> a -> ValidatorS () -putDocs t nm r = addRegion $ RegionInfo {rRegion=symbolRegion r,rSubRegion=Nothing, rRegionType=Documentation t nm,rChildren=[]} +putDocs t nm r = addRegion $ RegionInfo {rRegion=symbolRegion r,rSubRegion=Nothing, rRegionType=Documentation t nm,rChildren=[], rTable = M.empty} putKeywordDocs :: Flattenable a =>Text ->a -> ValidatorS () putKeywordDocs = putDocs KeywordD putTypeDoc :: Flattenable a =>Text ->a -> ValidatorS () @@ -310,7 +312,8 @@ data ValidatorState = ValidatorState { regionInfo :: [RegionInfo], symbolTable :: SymbolTable, symbolCategories ::Map ETok TaggedToken, - currentContext :: DiagnosticRegion + currentContext :: DiagnosticRegion, + filePath :: Maybe Text } deriving Show -- instance Default ValidatorState where @@ -321,15 +324,18 @@ data ValidatorState = ValidatorState { -- symbolTable=M.empty -- } -initialState :: Flattenable a => a -> ValidatorState -initialState r = ValidatorState { +initialState :: Flattenable a => a -> Maybe Text -> ValidatorState +initialState r path = ValidatorState { typeChecking = True, regionInfo=[], symbolCategories=M.empty, symbolTable=M.empty, - currentContext=symbolRegion r + currentContext=symbolRegion r, + filePath = path } -type SymbolTable = (Map Text SymbolTableValue) +type SymbolTable = (Map Text SymbolTableValue) + + type SymbolTableValue = (DiagnosticRegion,Bool,Kind) -- instance Show SymbolTableValue where -- show (SType t) = show $ pretty t @@ -396,7 +402,7 @@ runValidator :: (ValidatorT r w a) -> r -> (a,[w],r) runValidator (ValidatorT r) d = deState $ runWriter (runStateT r d) isSyntacticallyValid :: Flattenable a=> (a->ValidatorS b) -> a -> Bool -isSyntacticallyValid v s = case runValidator (v s) (initialState s){typeChecking=False} of +isSyntacticallyValid v s = case runValidator (v s) (initialState s Nothing){typeChecking=False} of (_,vds,_) -> not $ any isError vds todoTypeAny :: Maybe a -> Maybe (Typed a) @@ -1258,7 +1264,8 @@ validateOperatorExpression (BinaryOpNode lexp op rexp) = do rRegion=symbolRegion op, rSubRegion=Nothing, rRegionType=Documentation OperatorD (T.pack $ show op'), - rChildren=[]}) + rChildren=[], + rTable=M.empty}) return . Typed resultType $ mkBinOp ( pack $ lexemeFace op') (lExpr) (rExpr) validateOperatorExpression (PostfixOpNode expr pon) = do postFixOp <- validatePostfixOp pon diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index c08c0dd232..37812eda4a 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -71,7 +71,7 @@ printSymbolTable :: SymbolTable -> IO () printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs tab) where printEntry :: (Text ,SymbolTableValue) -> IO () - printEntry (a,(_,c,t)) = putStrLn $ show a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" + printEntry (a,(_,c,t)) = putStrLn $ T.unpack a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" captureErrors :: [ValidatorDiagnostic] -> Parser () captureErrors = (mapM_ captureError) . collapseSkipped . removeAmbiguousTypeWarning @@ -114,19 +114,22 @@ captureError (ValidatorDiagnostic area message) = do -val :: String -> IO () -val s = do +val :: String -> String -> IO () +val path s = do let str = s let other = [] let txt = Data.Text.pack str - let lexed = parseMaybe eLex txt - let stream = ETokenStream txt $ fromMaybe other lexed + let lexed = runLexer txt (Just path) + let stream = either (const $ ETokenStream txt other) id lexed + let (ETokenStream _ toks) = stream + putStrLn $ concat $ map (T.unpack . capture) toks + -- parseTest parseProgram stream let progStruct = runParser parseProgram "TEST" stream case progStruct of Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (initialState p){typeChecking=True} in + Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (initialState p (Just txt)){typeChecking=True} in case qpr of (model, vds,st) -> do print (show model) @@ -145,6 +148,6 @@ valFile p = do path <- readFileIfExists p case path of Nothing -> putStrLn "NO such file" - Just s -> val s + Just s -> val p s return () -- putStrLn validateFind diff --git a/src/Conjure/UI/IO.hs b/src/Conjure/UI/IO.hs index 6d5f9f9eee..8018d8fa85 100644 --- a/src/Conjure/UI/IO.hs +++ b/src/Conjure/UI/IO.hs @@ -52,7 +52,7 @@ readASTFromFile fp = do Right pt -> return pt case runValidator - (validateModel v) (initialState v) {typeChecking = False} + (validateModel v) (initialState v (Just $ T.pack fp)) {typeChecking = False} of (_, vds, _) | any isError vds -> pure v (_,vds,_) -> failDoc $ "Cannot pretty print a model with errors" <+> pretty (showDiagnosticsForConsole vds (Just fp) contents) From 7c204b261738d32a1998495c3506a967bc2edb2b Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 18 Apr 2023 15:57:12 +0100 Subject: [PATCH 272/378] Updates test to pass file path to lexer --- src/test/Conjure/ParserFuzz.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 15af7ee763..02a2c3b7f5 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -37,8 +37,8 @@ testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \s step "Lexing" let usableFileData = concat (take 1000 . lines $ fromMaybe [] fd) let fText = T.pack usableFileData - case runLexer $ fText of - Left _le -> assertFailure $ "Lexer failed in:" ++ fp + case runLexer fText (Just fp) of + Left le -> assertFailure $ "Lexer failed in:" ++ fp Right ets -> do step "parsing" case runASTParser parseProgram ets of From 252300c581a9175b46711675b39dab23b6b2581c Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 18 Apr 2023 15:59:16 +0100 Subject: [PATCH 273/378] Adds basic category checking --- src/Conjure/LSP/Handlers/DocumentSymbol.hs | 8 +- src/Conjure/Language/Validator.hs | 85 +- src/Conjure/UI/ErrorDisplay.hs | 1 + tests/custom/ide/basic/stdout.expected | 17 +- .../730~1439082038_16/model.expected.json | 1321 ----------------- .../autogen/730~1439082038_16/stderr.expected | 6 + .../autogen/730~1439082038_16/stdout.expected | 83 -- .../730~1439082038_16/typecheck.expected | 14 - .../autogen/731~final/model.expected.json | 76 - .../autogen/731~final/stderr.expected | 6 + .../autogen/731~final/stdout.expected | 8 - .../autogen/731~final/typecheck.expected | 14 - .../768~1439583525_36/model.expected.json | 412 ----- .../autogen/768~1439583525_36/stderr.expected | 6 + .../autogen/768~1439583525_36/stdout.expected | 24 - .../768~1439583525_36/typecheck.expected | 5 - .../autogen/769~final/model.expected.json | 67 - .../autogen/769~final/stderr.expected | 6 + .../autogen/769~final/stdout.expected | 4 - .../autogen/769~final/typecheck.expected | 5 - 20 files changed, 93 insertions(+), 2075 deletions(-) delete mode 100644 tests/parse_print/autogen/730~1439082038_16/model.expected.json create mode 100644 tests/parse_print/autogen/730~1439082038_16/stderr.expected delete mode 100644 tests/parse_print/autogen/730~1439082038_16/stdout.expected delete mode 100644 tests/parse_print/autogen/730~1439082038_16/typecheck.expected delete mode 100644 tests/parse_print/autogen/731~final/model.expected.json create mode 100644 tests/parse_print/autogen/731~final/stderr.expected delete mode 100644 tests/parse_print/autogen/731~final/stdout.expected delete mode 100644 tests/parse_print/autogen/731~final/typecheck.expected delete mode 100644 tests/parse_print/autogen/768~1439583525_36/model.expected.json create mode 100644 tests/parse_print/autogen/768~1439583525_36/stderr.expected delete mode 100644 tests/parse_print/autogen/768~1439583525_36/stdout.expected delete mode 100644 tests/parse_print/autogen/768~1439583525_36/typecheck.expected delete mode 100644 tests/parse_print/autogen/769~final/model.expected.json create mode 100644 tests/parse_print/autogen/769~final/stderr.expected delete mode 100644 tests/parse_print/autogen/769~final/stdout.expected delete mode 100644 tests/parse_print/autogen/769~final/typecheck.expected diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index 141f8ff005..de506e3dfa 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -78,10 +78,10 @@ getRegionDetail (RegionInfo{rRegionType=rType,rChildren=childDefs}) = getDefs rs = Data.Text.intercalate ", " [nm | Definition nm _ <- rRegionType <$> rs] symbolKindFromDeclaration :: RegionType -> Maybe T.SymbolKind symbolKindFromDeclaration (Definition _ t) = Just $ case t of - Kind ValueType (TypeInt TagEnum{}) -> SkEnumMember - Kind ValueType (TypeRecordMember{}) -> SkField - Kind ValueType (TypeVariantMember{}) -> SkField - Kind ValueType _ -> SkVariable + Kind ValueType{} (TypeInt TagEnum{}) -> SkEnumMember + Kind ValueType{} (TypeRecordMember{}) -> SkField + Kind ValueType{} (TypeVariantMember{}) -> SkField + Kind ValueType{} _ -> SkVariable Kind DomainType _ -> SkTypeParameter symbolKindFromDeclaration (LiteralDecl t) = Just $ case t of Kind _ ty -> case ty of diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index cd8ebb6c2f..6b3b0b89d8 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -57,6 +57,7 @@ import Control.Monad (mapAndUnzipM) import Conjure.Bug (bug) import Conjure.Language.Pretty import Data.List (splitAt) +import Conjure.Language.CategoryOf(Category (CatConstant, CatParameter, CatDecision)) data TagType =TtType @@ -108,11 +109,12 @@ data Typed a = Typed Type a instance Functor Typed where fmap f (Typed k a) = Typed k (f a) --- instance TypeOf (Typed a) where --- typeOf (Typed () _) = return t simple :: Type -> Kind -simple = Kind ValueType +simple = Kind $ ValueType CatConstant + +withCat :: Category -> Type -> Kind +withCat = Kind . ValueType data Kind = Kind Class Type deriving (Show,Eq,Ord) @@ -120,13 +122,13 @@ data Kind = Kind Class Type instance Pretty Kind where -- pretty (Kind MemberType t) = "Member of " <> pretty t pretty (Kind DomainType t) = "domain `" <> pretty t <> "`" - pretty (Kind ValueType t) = pretty t -data Class = DomainType | ValueType + pretty (Kind (ValueType _) t) = pretty t +data Class = DomainType | ValueType Category deriving (Show,Eq,Ord) instance Pretty Class where pretty c = case c of DomainType -> "Domain" - ValueType -> "Value" + ValueType _-> "Value" untype :: Typed a -> a untype (Typed _ a) = a @@ -174,6 +176,7 @@ data ErrorType | UnexpectedArg | TypeError Type Type -- Expected, got | ComplexTypeError Text Type -- Expected, got + | CategoryError Category Text | KindError Class Class | InternalError --Used to explicitly tag invalid pattern matches | InternalErrorS Text -- Used for giving detail to bug messages @@ -271,7 +274,7 @@ putAttrDoc = putDocs AttributeD --Infix symbol validation and tagging isA :: SToken -> TagType -> ValidatorS () -isA a b= flagSToken a b +isA a b = flagSToken a b isA' :: LToken -> TagType -> ValidatorS () isA' a b= validateSymbol a >> flagToken a b @@ -287,7 +290,7 @@ flagSToken (StrictToken _ t) c = modify (\x@ValidatorState{symbolCategories=sc}- tagWithType :: NameNode -> Kind -> ValidatorS () -tagWithType (NameNode (NameNodeS lt)) (Kind ValueType ty) = flagSToken lt $ case ty of +tagWithType (NameNode (NameNodeS lt)) (Kind (ValueType _) ty) = flagSToken lt $ case ty of TypeEnum _ -> TtEnum TypeInt (TagEnum _) -> TtEnumMember TypeInt (TagUnnamed _) -> TtEnumMember @@ -313,7 +316,8 @@ data ValidatorState = ValidatorState { symbolTable :: SymbolTable, symbolCategories ::Map ETok TaggedToken, currentContext :: DiagnosticRegion, - filePath :: Maybe Text + filePath :: Maybe Text, + categoryLimit :: (Category,Text) --Category,Context (e.g domain) } deriving Show -- instance Default ValidatorState where @@ -331,7 +335,8 @@ initialState r path = ValidatorState { symbolCategories=M.empty, symbolTable=M.empty, currentContext=symbolRegion r, - filePath = path + filePath = path, + categoryLimit = (CatDecision ,"root") } type SymbolTable = (Map Text SymbolTableValue) @@ -409,6 +414,19 @@ todoTypeAny :: Maybe a -> Maybe (Typed a) todoTypeAny = typeAs TypeAny +setCategoryLimit :: (Category ,Text) -> ValidatorS a -> ValidatorS a +setCategoryLimit c f= do + tmp <- gets categoryLimit + modify (\s -> s{categoryLimit=c}) + res <- f + modify (\s -> s{categoryLimit=tmp}) + return res + +checkCategory :: Kind -> ValidatorS () +checkCategory (Kind (ValueType category) _) = do + (refCat,context) <- gets categoryLimit + unless (refCat >= category ) $ contextTypeError $ CategoryError category context +checkCategory (Kind DomainType _) = return () validateModel :: ProgramTree -> ValidatorS Model validateModel model = do @@ -434,7 +452,7 @@ validateLanguageVersion (Just lv@(LangVersionNode l1 n v)) = do nums <- catMaybes <$> validateSequence_ getNum v return . pure $ LanguageVersion - (Name $ name) + (Name name) (if null nums then [1,3] else nums) where getNum :: SToken -> Validator Int @@ -469,7 +487,7 @@ validateHeuristicStatement lt exp = do return $ pure [SearchHeuristic (Name nm)] else invalid $ symbolRegion nn (SemanticError $ T.concat ["Invalid heuristic " , nm , " Expected one of: ", (pack $ show validHeuristics )]) - _ -> (invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics") + _ -> invalid $ symbolRegion exp SemanticError "Only identifiers are allowed as heuristics" return $ fromMaybe [] h @@ -487,7 +505,7 @@ validateWhereStatement w@(WhereStatementNode l1 exprs) = wrapRegion w w SWhere $ return [ws] validateObjectiveStatement :: ObjectiveStatementNode -> ValidatorS [Statement] -validateObjectiveStatement o@(ObjectiveMin lt en) = wrapRegion o o (SGoal "Minimising") $ do +validateObjectiveStatement o@(ObjectiveMin lt en) = wrapRegion o o (SGoal "Minimising") $ do lt `isA` TtKeyword exp <- validateExpression en return [Objective Minimising $ untype exp] @@ -542,9 +560,9 @@ validateGiven (GivenStatementNode idents l1 domain) = names <- validateSequence (validateNameAs TtVariable) idents (dType, dom) <- typeSplit <$> validateDomain domain let memberType = getDomainMembers dType - let declarations = [(mkDeclaration r n (simple memberType)) | (r, Name n) <- names] + let declarations = [(mkDeclaration r n (withCat CatParameter memberType)) | (r, Name n) <- names] mapM_ addRegion declarations - mapM_ (\(r,x) -> putSymbol (x,(r,False,simple memberType)) ) names + mapM_ (\(r,x) -> putSymbol (x,(r,False,withCat CatParameter memberType)) ) names return $ [ FindOrGiven Given nm dom|(_,nm) <- names ] validateGiven (GivenEnumNode se l1 l2 l3) = do @@ -561,8 +579,8 @@ validateFind (FindStatementNode names colon domain) = do names' <- validateSequence (validateNameAs TtVariable) names (dType, dom) <- typeSplit <$> validateDomain domain let memberType = getDomainMembers dType - mapM_ (\(r,x) -> putSymbol (x,(r,False,simple memberType) )) names' - mapM_ addRegion [mkDeclaration r n (simple memberType) | (r, Name n) <- names'] + mapM_ (\(r,x) -> putSymbol (x,(r,False,withCat CatDecision memberType) )) names' + mapM_ addRegion [mkDeclaration r n (withCat CatDecision memberType) | (r, Name n) <- names'] return $ [ FindOrGiven Find nm dom|(_,nm) <- names'] validateLetting :: LettingStatementNode -> ValidatorS [Declaration] @@ -647,9 +665,9 @@ validateSymbol s = -- [MissingTokenError ] getValueType :: Kind -> ValidatorS Type -getValueType (Kind ValueType t) = pure t +getValueType (Kind (ValueType _) t) = pure t getValueType (Kind k _) = do - contextTypeError $ KindError ValueType k + contextTypeError $ KindError (ValueType CatConstant) k return TypeAny getDomainType :: Kind -> ValidatorS Type @@ -667,8 +685,9 @@ validateDomainWithRepr dom = do (t,dom') <- typeSplit <$> validateDomain dom return . (Typed t) $ changeRepr NoRepresentation dom' + validateDomain :: DomainNode -> ValidatorS TypedDomain -validateDomain dm = case dm of +validateDomain dm = setCategoryLimit (CatParameter,"Domain") $ case dm of ParenDomainNode _ dom rt -> do checkSymbols [rt] ; validateDomain dom MetaVarDomain lt -> do mv <- validateMetaVar lt ; return . Typed TypeAny $ DomainMetaVar mv BoolDomainNode lt -> (lt `isA` TtType >> (return . Typed TypeBool) DomainBool) @@ -780,7 +799,7 @@ validateDomain dm = case dm of let lst' = mapMaybe (\(r,m)->(\x->(r,x))<$>m) lst let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' --push members - let t n = Kind ValueType $ TypeRecordMember n ts + let t n = Kind (ValueType CatConstant) $ TypeRecordMember n ts mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t a))) ds return $ Typed (TypeRecord ts) (DomainRecord (unregion <$> ds)) validateVariantDomain :: ListNode NamedDomainNode -> ValidatorS TypedDomain @@ -789,7 +808,7 @@ validateDomain dm = case dm of let lst' = mapMaybe (\(r,m)->(\x->(r,x))<$>m) lst let (ts,ds) = unzip $ map (\(r,(x,typeSplit->(t,d)))->((x,t),(r,(x,d)))) lst' --push members - let t n = Kind ValueType $ TypeVariantMember n ts + let t n = Kind (ValueType CatConstant) $ TypeVariantMember n ts mapM_ (\(r,(a,_))->putSymbol (a,(r,False,t a))) ds return $ Typed (TypeVariant ts) (DomainVariant (unregion <$> ds)) validateMatrixDomain :: ListNode DomainNode -> DomainNode -> ValidatorS TypedDomain @@ -1070,7 +1089,7 @@ validateExpression expr = do where typeCheckAbs :: Kind -> ValidatorS () typeCheckAbs (Kind DomainType _) = pure () - typeCheckAbs (Kind ValueType t) = case t of + typeCheckAbs (Kind ValueType{} t) = case t of TypeAny -> return () TypeInt _ -> return () TypeList{} -> return () @@ -1165,7 +1184,6 @@ validateQuantificationExpression q@(QuantificationExpressionNode name pats over let qBody = Comprehension body (over'++g') let result = Typed rType (mkOp (translateQnName name') [qBody]) putKeywordDocs (T.pack $ show name') name - wrapRegion q q (SQuantification (lexemeText name') (simple rType)) (mapM_ addRegion (gDec++genDec++bDecl)) return result where @@ -1235,6 +1253,7 @@ validateIdentifierExpr name = do n <- validateIdentifierS name setContextFrom name t <- resolveReference (symbolRegion name,Name n) + checkCategory t tagWithType (NameNode name) t t' <- getValueType t return . Typed t' $ Reference (Name n) Nothing @@ -2107,7 +2126,7 @@ instance Fallback Expression where instance (Fallback a) => Fallback (Typed a) where fallback = Typed TypeAny . fallback instance (Fallback a) => Fallback (Kind, a) where - fallback msg = (Kind ValueType TypeAny , fallback msg) + fallback msg = (Kind (ValueType CatConstant) TypeAny , fallback msg) instance Fallback (Maybe a) where fallback = const Nothing instance Fallback Name where @@ -2187,7 +2206,7 @@ functionOps l = case l of t2 <- getValueType k2 f (r1,Typed t1 e1) (r2,Typed t2 e2) typeOnly :: Maybe (Kind,Expression) -> Maybe Type - typeOnly (Just (Kind ValueType t,_)) = Just t + typeOnly (Just (Kind ValueType{} t,_)) = Just t typeOnly _ = Nothing unFuncV a t= unFunc (valueOnly a) (t . typeOnly) biFuncV :: (SArg -> SArg -> Validator ()) -> (Maybe Type-> Maybe Type -> Maybe Type) -> ([Expression] -> Expression) -> [Arg] -> ValidatorS (Typed Expression) @@ -2333,11 +2352,11 @@ functionOps l = case l of Just (Kind DomainType t) -> getDomainMembers t _ -> TypeAny from = case kv of - Just (Kind ValueType (TypeFunction fr _)) | typesUnifyS [dType,fr]-> mostDefinedS [dType,fr] - Just (Kind ValueType (TypeFunction fr _)) -> fr + Just (Kind ValueType{} (TypeFunction fr _)) | typesUnifyS [dType,fr]-> mostDefinedS [dType,fr] + Just (Kind ValueType{} (TypeFunction fr _)) -> fr _ -> mostDefinedS [TypeAny,dType] to = case kv of - Just (Kind ValueType (TypeFunction _ to')) -> to' + Just (Kind ValueType{} (TypeFunction _ to')) -> to' _ -> TypeAny @@ -2428,10 +2447,10 @@ functionOps l = case l of minMaxType :: Maybe (Kind,a) -> Maybe Type minMaxType (Just (Kind DomainType t@(TypeInt{}),_)) = Just t minMaxType (Just (Kind DomainType (TypeEnum (Name nm)),_)) = Just . TypeInt $ TagEnum nm - minMaxType (Just (Kind ValueType (TypeMatrix _ a),_)) = minMaxType (Just (Kind DomainType a,())) - minMaxType (Just (Kind ValueType (TypeList a) ,_)) = minMaxType (Just (Kind DomainType a,())) - minMaxType (Just (Kind ValueType (TypeSet a) ,_) )= minMaxType (Just (Kind DomainType a,())) - minMaxType (Just (Kind ValueType (TypeMSet a) ,_) )= minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType{} (TypeMatrix _ a),_)) = minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType{} (TypeList a) ,_)) = minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType{} (TypeSet a) ,_) )= minMaxType (Just (Kind DomainType a,())) + minMaxType (Just (Kind ValueType{} (TypeMSet a) ,_) )= minMaxType (Just (Kind DomainType a,())) minMaxType _ = Just TypeAny transformArgs :: SArg -> SArg -> Validator () diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 37812eda4a..c64e93eced 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -59,6 +59,7 @@ displayError x = case x of InternalErrorS txt -> "Something went wrong: " ++ T.unpack txt WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) KindError a b -> show $ "Tried to use a " <> pretty b <> " where " <> pretty a <> " was expected" + CategoryError categ reason -> show $ "Cannot use variable of category :" <+> pretty categ <+> "in the context of " <> pretty reason showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Maybe String -> Text -> String showDiagnosticsForConsole errs fileName text diff --git a/tests/custom/ide/basic/stdout.expected b/tests/custom/ide/basic/stdout.expected index d290ff424f..0731099939 100644 --- a/tests/custom/ide/basic/stdout.expected +++ b/tests/custom/ide/basic/stdout.expected @@ -58,11 +58,18 @@ Type error: == category.essence == Error: - Category checking failed. - The domain : int(x..y) - Its category : decision - In the definition of: t - + category.essence:7:14: + | +7 | find t : int(x..y) + | ^ +Cannot use variable of category : decision in the context of Domain + +category.essence:7:17: + | +7 | find t : int(x..y) + | ^ +Cannot use variable of category : decision in the context of Domain + == wellformed.essence == diff --git a/tests/parse_print/autogen/730~1439082038_16/model.expected.json b/tests/parse_print/autogen/730~1439082038_16/model.expected.json deleted file mode 100644 index 2648972b55..0000000000 --- a/tests/parse_print/autogen/730~1439082038_16/model.expected.json +++ /dev/null @@ -1,1321 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], - "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, - {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}]]}]}}, - {"SuchThat": - [{"Op": - {"MkOpEq": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}}]}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 7]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 12]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": true}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}]}}]}}}]]}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": - [{"TagInt": []}, 5]}]]}}]]}}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 3]}}}, - {"RangeBounded": - [{"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 4]}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": - [{"TagInt": []}, 3]}]]}}]]}}}]}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 13]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 14]}}]}]]}, - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 9]}, - {"ConstantInt": [{"TagInt": []}, 10]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 6]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 2]}]]}}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 7]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 10]}, - {"ConstantInt": [{"TagInt": []}, 11]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 6]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": - [{"TagInt": []}, 0]}]]}}]]}}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}]}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 5]}}}, - {"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 8]}}}, - {"RangeBounded": - [{"Constant": - {"ConstantInt": [{"TagInt": []}, 6]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 7]}}]}]]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]]}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": - [{"TagInt": []}, 1]}]]}}}]]}}]}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}]}]]}}, - {"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitSet": - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 9]}}}, - {"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 6]}}}, - {"RangeBounded": - [{"Constant": - {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]]}}]}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": false}]}}}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}]}}}]}}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 10]}, - {"ConstantInt": [{"TagInt": []}, 13]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 5]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 4]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": - [{"TagInt": []}, 0]}]]}}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 8]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}]}]]}, - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}]}}]}}}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 3]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": - [{"TagInt": []}, 4]}]]}}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 15]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 11]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": true}]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": true}]}}, - {"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": true}]}}]}}}]]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": [{"TagInt": []}, 3]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 2]}], - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 0]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 4]}]]}}]]}}, - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, - [{"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 2]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}], - [{"ConstantInt": [{"TagInt": []}, 5]}], - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 5]}]]}}, - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}], - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}], - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 3]}]]}}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 8]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}]}}]}}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}]}}}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}, - {"ConstantBool": true}]}}]}}}]]}}]]}}]}}, - {"Op": - {"MkOpApart": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}]}}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 2]}]}}]}}]}}]}}}, - {"AbstractLiteral": - {"AbsLitPartition": - [[{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}}]}, - {"AbstractLiteral": - {"AbsLitSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 3]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}]}}}]}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}]}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}]}}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 5]}]}}}]}}]}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}]}}]}}}]}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 2]}]}}}]}}]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}}]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 1]}]}}]}}]}}}], - [{"AbstractLiteral": - {"AbsLitSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}]}, - {"AbstractLiteral": - {"AbsLitMSet": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}]}}]]}}]}}, - {"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeSet": {"TypeMSet": {"TypeBool": []}}}]}]}, - {"Op": - {"MkOpTogether": - [{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 10]}}, - {"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 3]}}, - {"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 8]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 0]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - [{"ConstantInt": [{"TagInt": []}, 0]}, - {"ConstantInt": [{"TagInt": []}, 3]}, - {"ConstantInt": [{"TagInt": []}, 2]}, - {"ConstantInt": [{"TagInt": []}, 1]}]]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}]}]}]}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, - {"TypePartition": - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}]}}]}]}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 6]}, - {"ConstantInt": [{"TagInt": []}, 7]}]}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 4]}, - {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": true}, - {"ConstantBool": true}, - {"ConstantBool": true}]}}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": [{"ConstantBool": false}]}}, - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}]}}]}}]]}}}, - {"Op": - {"MkOpIndexing": - [{"Comprehension": - [{"Op": - {"MkOpNeq": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, {"DomainBool": []}]}}, - {"Condition": - {"Op": - {"MkOpIff": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": false}}]}}}]]}, - {"Op": - {"MkOpMin": - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}}}]}}], - [{"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeSet": {"TypeMSet": {"TypeBool": []}}}]}]}, - {"Op": - {"MkOpAnd": - {"Op": - {"MkOpFlatten": - [null, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}]]}, - [{"ConstantBool": false}, - {"ConstantBool": false}]]}}}]}}}}], - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 5]}, - {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}]}}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": false}]}}]}}]]}}}, - {"Op": - {"MkOpNot": - {"Op": - {"MkOpNot": - {"Op": - {"MkOpImply": - [{"Constant": {"ConstantBool": true}}, - {"Constant": {"ConstantBool": true}}]}}}}}}]]}}, - {"Comprehension": - [{"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, - {"TypeSet": {"TypeMSet": {"TypeBool": []}}}]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_2"}}, - {"DomainSet": - [[], {"SizeAttr_MinSize": {"Reference": [{"Name": "var1"}, null]}}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - {"OccurAttr_MinOccur": - {"Op": - {"MkOpPow": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}}], - {"DomainBool": []}]}]}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_3"}}, - {"DomainSet": - [[], {"SizeAttr_None": []}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, - {"OccurAttr_MaxOccur": - {"Op": - {"MkOpMod": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}}], - {"DomainBool": []}]}]}]}}, - {"Condition": - {"Op": - {"MkOpGeq": - [{"Op": - {"MkOpMax": - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 3]}]}}}}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, - {"Op": - {"MkOpNegate": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 0]}}}}]}}]}}]}}}]]}]}}]}, - {"Objective": ["Minimising", {"Reference": [{"Name": "var1"}, null]}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/730~1439082038_16/stderr.expected b/tests/parse_print/autogen/730~1439082038_16/stderr.expected new file mode 100644 index 0000000000..5d7d96e541 --- /dev/null +++ b/tests/parse_print/autogen/730~1439082038_16/stderr.expected @@ -0,0 +1,6 @@ +Error: + tests/parse_print/autogen/730~1439082038_16/spec.essence:115:37: + | +115 | | l_2 : set (minSize var1) of + | ^^^^ +Cannot use variable of category : decision in the context of Domain diff --git a/tests/parse_print/autogen/730~1439082038_16/stdout.expected b/tests/parse_print/autogen/730~1439082038_16/stdout.expected deleted file mode 100644 index 8117c551ce..0000000000 --- a/tests/parse_print/autogen/730~1439082038_16/stdout.expected +++ /dev/null @@ -1,83 +0,0 @@ -language Essence 1.3 - -find var1: int(0, 0) -such that - function(({} : `set of matrix indexed by [int] of partition from int`) - --> [mset(mset(true), (mset() : `mset of bool`)), (mset() : `mset of mset of bool`), - (mset() : `mset of mset of bool`), mset(mset(false, false), mset(false, true, true)); - int(7, 12, 9, 2)], - {[partition({4, 4, 4, 4, 1}, {4, 5}); int(1)], - [partition({5}, {2}, {2, 1, 3, 5}, {4}), (partition() : `partition from int`); int(3, 2)], - [partition({3, 1, 5, 4}, {3, 1, 4, 3, 5}, {5, 1, 1, 5, 0}, {2, 5, 5, 3}); int(1)]} - --> [(mset() : `mset of mset of bool`), (mset() : `mset of mset of bool`), - mset(mset(false, true, false), mset(false)), mset(mset(true, true, false), mset(false, true)), - (mset() : `mset of mset of bool`); - int(3..5, 13..14)], - {[partition({2, 4, 1, 3, 3}, {1, 4, 1, 2, 3}, {2, 2, 5, 5, 3}), - partition({2, 1, 0}, {0, 2, 5, 5}, {5, 5, 2, 2}, {2, 1}, {1, 0, 2, 4}), - partition({3, 4, 5, 2, 1}, {2}, {4, 1}, {3, 4}, {2}), partition({3, 5, 5}, {0, 5, 5, 5, 4}, {2}); - int(0, 9..10, 6)], - [partition({5, 1}, {2, 1}), partition({2}), partition({0, 4, 1, 0, 2}, {2, 2, 1, 3, 3}), - partition({2, 4, 4, 4, 5}); - int(6..7, 10..11)], - [partition({4, 3, 4, 4}, {4, 4, 4, 5}, {3, 0}, {3, 1, 2, 2, 0}), partition({2, 2}, {0}); int(6, 4)]} - --> ([] : `matrix indexed by [int] of mset of mset of bool`), - {[partition({4, 1, 5}, {4, 2, 4, 2, 5}, {0}, {2, 3, 2, 0}, {3, 5, 5}), partition({0, 0}, {0, 1}), - partition({0, 4, 1}, {0, 3, 5}, {2}, {0}, {4, 2, 1, 2, 2}), (partition() : `partition from int`); - int(5, 8, 6..7)], - [(partition() : `partition from int`), partition({1, 3, 3, 2}, {0, 0, 4}, {1}); int(1..2)]} - --> ([] : `matrix indexed by [int] of mset of mset of bool`)) - = - function({([] : `matrix indexed by [int] of partition from int`), - [partition({0, 1}, {3, 0, 0, 5, 3}, {0, 2}, {5, 5, 2, 3}), partition({2}), - partition({1, 3, 5}, {3}, {4, 3, 1, 2}), (partition() : `partition from int`); - int(9, 6, 1..2)]} - --> [mset((mset() : `mset of bool`), mset(false, true, true), mset(true, false, false)), - mset((mset() : `mset of bool`), mset(false, false)); - int(3..4)], - {[partition({3, 1}, {1, 3, 3, 2}), partition({1, 1}, {5}), - partition({4, 2, 3, 0}, {5, 0, 0, 4}, {4, 2, 2, 2}, {5, 0, 1, 4}), - partition({1, 2}, {5, 3}, {3, 3, 1, 1, 1}), partition({2, 3, 3, 5}, {4, 2, 4, 3, 5}, {5, 0, 1}, {0}); - int(0, 10..13)]} - --> [(mset() : `mset of mset of bool`), mset(mset(false), mset(false)), - mset(mset(false), mset(true, false, true), mset(false)), - mset(mset(true, true, false), mset(true), mset(true, false)); - int(2..3, 8..9)], - {[partition({2, 1}, {2, 2, 4}, {5, 4, 4, 0, 4}, {3, 0, 2, 5}, {5, 5}), - partition({3, 5, 0, 0}, {2, 0, 0}, {3, 1, 5, 0}, {5, 2, 0, 0}, {1, 3}), - partition({5, 4, 2, 2, 1}, {5, 1, 5, 4}); - int(1..3)]} - --> [mset((mset() : `mset of bool`), mset(false)), mset(mset(true), mset(false)), - mset((mset() : `mset of bool`), mset(true, false, true)), mset(mset(true)), - mset(mset(true), mset(false), mset(true, true)); - int(2..3, 15, 11, 9)], - {[partition({0}, {3, 2, 2}); int(2)], - [partition({4, 2}, {4, 4, 5}, {2}, {5, 3, 1}, {0}), partition({1}, {4}); int(3, 1)], - [partition({5, 1, 2}), partition({4, 5, 0}, {5}, {1, 1}, {5}), - partition({5, 4, 1, 1}, {0, 2, 0, 3}, {2, 3}); - int(0..2)]} - --> [mset(mset(false, false)), mset(mset(true, false), mset(false, true, true)), - mset(mset(true, false), (mset() : `mset of bool`), mset(false, false, true)), - mset(mset(false, false, true)); - int(8, 6, 3..4)]), - apart({{mset({1}, {2, 3})}, {mset({3}, {1, 0, 0}), mset({2})}}, - partition({({} : `set of mset of set of int`), - {mset({4, 2, 1}, {4}, {5, 1}), (mset() : `mset of set of int`), mset({4, 4, 3}, {4, 2, 4})}, - {mset(({} : `set of int`), {2}, ({} : `set of int`))}, - {mset({2, 1}, {3, 4}, {5, 2, 4}), mset({2}, {5, 0, 4}, ({} : `set of int`)), - mset(({} : `set of int`), {5, 1, 5})}}, - {{mset(({} : `set of int`), ({} : `set of int`)), mset({5})}, - {mset(({} : `set of int`)), mset(({} : `set of int`), {2})}, ({} : `set of mset of set of int`), - {mset({1})}}, - {{(mset() : `mset of set of int`), mset(({} : `set of int`))}})), - image(function(([] : `matrix indexed by [int] of set of mset of bool`) - --> together({[0, 3, 2, 1; int(10, 3, 8, 0)], ([] : `matrix indexed by [int] of int`)}, - (partition() : `partition from matrix indexed by [int] of int`)), - [{mset(true, true, true)}, {mset(false)}, {mset(false), mset(false, true, false)}; int(6..7, 4)] - --> [5 != 1 | l_1 : bool, true <-> false][min((mset() : `mset of int`))], - ([] : `matrix indexed by [int] of set of mset of bool`) --> and(flatten([false, false; int(1..2)])), - [{mset(false, false)}, {mset(false, true, false)}; int(0, 5)] --> !!(true -> true)), - [({} : `set of mset of bool`) - | l_2 : set (minSize var1) of mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool, - l_3 : set of mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool, max({3}) >= 3 ** 3 ** (-0)]) -minimising var1 diff --git a/tests/parse_print/autogen/730~1439082038_16/typecheck.expected b/tests/parse_print/autogen/730~1439082038_16/typecheck.expected deleted file mode 100644 index 147d15558c..0000000000 --- a/tests/parse_print/autogen/730~1439082038_16/typecheck.expected +++ /dev/null @@ -1,14 +0,0 @@ -Error: - Category checking failed. - The domain : set (minSize var1) of mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool - Its category : decision - - The domain : mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool - Its category : decision - - The domain : set of mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool - Its category : decision - - The domain : mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool - Its category : decision - \ No newline at end of file diff --git a/tests/parse_print/autogen/731~final/model.expected.json b/tests/parse_print/autogen/731~final/model.expected.json deleted file mode 100644 index e09b459fe0..0000000000 --- a/tests/parse_print/autogen/731~final/model.expected.json +++ /dev/null @@ -1,76 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], - "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": - {"FindOrGiven": - ["Find", {"Name": "var1"}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, - {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}]]}]}}, - {"SuchThat": - [{"Op": - {"MkOpImage": - [{"AbstractLiteral": - {"AbsLitFunction": - [[{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}]]}, - [{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMSet": - [{"ConstantBool": false}, - {"ConstantBool": false}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}]}}]]}}, - {"Constant": {"ConstantBool": false}}]]}}, - {"Comprehension": - [{"AbstractLiteral": - {"AbsLitSet": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}}, - {"Typed": - [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, - {"TypeMSet": {"TypeBool": []}}]}]}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_2"}}, - {"DomainSet": - [[], {"SizeAttr_MinSize": {"Reference": [{"Name": "var1"}, null]}}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, - {"OccurAttr_MinOccur": - {"Op": - {"MkOpPow": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}}], - {"DomainBool": []}]}]}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_3"}}, - {"DomainSet": - [[], {"SizeAttr_None": []}, - {"DomainMSet": - [[], - [{"SizeAttr_MinMaxSize": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, - {"OccurAttr_MaxOccur": - {"Op": - {"MkOpMod": - [{"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}]}}}], - {"DomainBool": []}]}]}]}}]]}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/731~final/stderr.expected b/tests/parse_print/autogen/731~final/stderr.expected new file mode 100644 index 0000000000..764dca7693 --- /dev/null +++ b/tests/parse_print/autogen/731~final/stderr.expected @@ -0,0 +1,6 @@ +Error: + tests/parse_print/autogen/731~final/spec.essence:8:37: + | +8 | | l_2 : set (minSize var1) of + | ^^^^ +Cannot use variable of category : decision in the context of Domain diff --git a/tests/parse_print/autogen/731~final/stdout.expected b/tests/parse_print/autogen/731~final/stdout.expected deleted file mode 100644 index c5d12c58ca..0000000000 --- a/tests/parse_print/autogen/731~final/stdout.expected +++ /dev/null @@ -1,8 +0,0 @@ -language Essence 1.3 - -find var1: int(0, 0) -such that - image(function([{mset(false, false), (mset() : `mset of bool`)}; int(1)] --> false), - [{mset(true), (mset() : `mset of bool`)} - | l_2 : set (minSize var1) of mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool, - l_3 : set of mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool]) diff --git a/tests/parse_print/autogen/731~final/typecheck.expected b/tests/parse_print/autogen/731~final/typecheck.expected deleted file mode 100644 index 147d15558c..0000000000 --- a/tests/parse_print/autogen/731~final/typecheck.expected +++ /dev/null @@ -1,14 +0,0 @@ -Error: - Category checking failed. - The domain : set (minSize var1) of mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool - Its category : decision - - The domain : mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool - Its category : decision - - The domain : set of mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool - Its category : decision - - The domain : mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool - Its category : decision - \ No newline at end of file diff --git a/tests/parse_print/autogen/768~1439583525_36/model.expected.json b/tests/parse_print/autogen/768~1439583525_36/model.expected.json deleted file mode 100644 index 738127a697..0000000000 --- a/tests/parse_print/autogen/768~1439583525_36/model.expected.json +++ /dev/null @@ -1,412 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], - "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Reference": [{"Name": "var1"}, null]}, {"Reference": [{"Name": "var1"}, null]}, - {"Reference": [{"Name": "var1"}, null]}, - {"Op": - {"MkOpIn": - [{"Comprehension": - [{"Reference": [{"Name": "l_1"}, null]}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, - {"DomainSet": - [[], - {"SizeAttr_MaxSize": - {"Op": - {"MkOpMinus": - [{"Op": - {"MkOpFreq": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Reference": - [{"Name": "var1"}, null]}]}}, - {"Reference": [{"Name": "var1"}, null]}]}}, - {"Op": - {"MkOpMod": - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 3]}}]}}, - {"Op": - {"MkOpPow": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}]}}]}}]}}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - {"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}]]}]}]}}, - {"Condition": - {"Op": - {"MkOpImply": - [{"Op": - {"MkOpApart": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantBool": true}], - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantBool": true}]]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantInt": - [{"TagInt": []}, 0]}, - {"ConstantBool": true}], - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantBool": true}], - [{"ConstantInt": - [{"TagInt": []}, 5]}, - {"ConstantBool": false}], - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantBool": true}], - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantBool": true}]]}}], - [{"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantBool": true}]]}}, - {"ConstantAbstract": - {"AbsLitFunction": - [[{"ConstantInt": - [{"TagInt": []}, 5]}, - {"ConstantBool": true}], - [{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantBool": - true}]]}}]]}}}]}}, - {"Op": - {"MkOpLeq": - [{"Op": - {"MkOpSum": - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, - 3]}}, - {"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, - 9]}}, - {"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, - 2]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, - 5]}, - {"ConstantInt": - [{"TagInt": []}, - 5]}]}]]}, - [{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 5]}]]}}}}}, - {"Op": - {"MkOpPow": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, - {"Op": - {"MkOpPow": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}, - {"Op": - {"MkOpFactorial": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}}}]}}]}}]}}]}}}, - {"Condition": - {"Op": - {"MkOpOr": - {"Comprehension": - [{"Op": - {"MkOpTogether": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantBool": false}, - {"ConstantBool": true}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitPartition": - [[{"ConstantBool": true}, - {"ConstantBool": false}, - {"ConstantBool": true}, - {"ConstantBool": true}]]}}}]}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_2"}}, {"DomainBool": []}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_3"}}, {"DomainBool": []}]}}, - {"Condition": {"Reference": [{"Name": "l_3"}, null]}}]]}}}}]]}, - {"Op": - {"MkOpIndexing": - [{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}, - {"RangeBounded": - [{"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}, - {"Constant": {"ConstantInt": [{"TagInt": []}, 7]}}]}]]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 4]}, - {"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 3]}]}}]]}}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 2]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, - 0]}]}}]]}}]}}}, - {"AbstractLiteral": - {"AbsLitSet": - [{"AbstractLiteral": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 5]}}]}]]}, - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 4]}, - {"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantInt": - [{"TagInt": []}, 4]}]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 2]}, - {"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 5]}]}}}, - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitSet": []}}}, - {"TypeSet": - {"TypeInt": {"TagInt": []}}}]}]]}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 7]}}, - {"RangeSingle": - {"ConstantInt": - [{"TagInt": []}, 4]}}, - {"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 6]}, - {"ConstantInt": - [{"TagInt": []}, 7]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 0]}, - {"ConstantInt": - [{"TagInt": []}, 1]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 3]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 4]}, - {"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}}, - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 0]}]}}]]}}}, - {"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": []}, 0]}, - {"ConstantInt": - [{"TagInt": []}, 0]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, 1]}, - {"ConstantInt": - [{"TagInt": []}, - 3]}]}}]]}}}]}}]]}}, - {"Op": - {"MkOpProduct": - {"Comprehension": - [{"Op": - {"MkOpFactorial": - {"Op": - {"MkOpNegate": - {"Reference": [{"Name": "l_4"}, null]}}}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_4"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}}, - {"RangeSingle": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 4]}}}]]}]}}, - {"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_5"}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 2]}}}, - {"RangeSingle": - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 0]}}}]]}]}}, - {"Condition": - {"Op": - {"MkOpAllDiff": - {"Typed": - [{"Constant": - {"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": - [{"TagInt": - []}, - 1]}, - {"ConstantInt": - [{"TagInt": - []}, - 0]}]}]]}, - []]}}}, - {"TypeMatrix": - [{"TypeInt": {"TagInt": []}}, - {"TypeInt": {"TagInt": []}}]}]}}}}, - {"Condition": - {"Op": - {"MkOpIff": - [{"Op": - {"MkOpLt": - [{"Reference": [{"Name": "l_5"}, null]}, - {"Reference": [{"Name": "l_5"}, null]}]}}, - {"Op": - {"MkOpNot": - {"Constant": - {"ConstantBool": - false}}}}]}}}]]}}}]}}]}}, - {"Reference": [{"Name": "var1"}, null]}, {"Reference": [{"Name": "var1"}, null]}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/768~1439583525_36/stderr.expected b/tests/parse_print/autogen/768~1439583525_36/stderr.expected new file mode 100644 index 0000000000..6d71980837 --- /dev/null +++ b/tests/parse_print/autogen/768~1439583525_36/stderr.expected @@ -0,0 +1,6 @@ +Error: + tests/parse_print/autogen/768~1439583525_36/spec.essence:8:41: + | +8 | [l_1 | l_1 : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of + | ^^^^ +Cannot use variable of category : decision in the context of Domain diff --git a/tests/parse_print/autogen/768~1439583525_36/stdout.expected b/tests/parse_print/autogen/768~1439583525_36/stdout.expected deleted file mode 100644 index e7aa56595f..0000000000 --- a/tests/parse_print/autogen/768~1439583525_36/stdout.expected +++ /dev/null @@ -1,24 +0,0 @@ -language Essence 1.3 - -find var1: bool -such that - var1, - var1, - var1, - [l_1 | l_1 : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of int(1, 4), - apart({function(3 --> true, 2 --> true)}, - partition({function(0 --> true, 2 --> true, 5 --> false, 1 --> true), - function(1 --> true, 2 --> true)}, - {function(1 --> true), function(5 --> true, 3 --> true)})) - -> sum([3, 2, 1, 5; int(3, 9, 2, 5)]) <= 0 ** 5 ** factorial(3), - or([together({false, true}, partition({true, false, true, true})) | l_2 : bool, l_3 : bool, l_3])] - in - [{[{4, 1, 3}; int(2)]}, {[{0}; int(2)]}, - {[{1, 2, 0}, {1, 0}, {4, 3, 4}, {2, 1, 5}, ({} : `set of int`); int(1..5)], - [{0, 1}, {3, 0}, {4, 1, 0}, {0}; int(7, 4, 6..7)], [{1, 1, 3}; int(0)]}; - int(2, 6..7)] - [product([factorial(-l_4) - | l_4 : int(2, 4), l_5 : int(2, 0), allDiff(([] : `matrix indexed by [int] of int`)), - l_5 < l_5 <-> !false])], - var1, - var1 diff --git a/tests/parse_print/autogen/768~1439583525_36/typecheck.expected b/tests/parse_print/autogen/768~1439583525_36/typecheck.expected deleted file mode 100644 index ceb0e13ff5..0000000000 --- a/tests/parse_print/autogen/768~1439583525_36/typecheck.expected +++ /dev/null @@ -1,5 +0,0 @@ -Error: - Category checking failed. - The domain : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of int(1, 4) - Its category : decision - \ No newline at end of file diff --git a/tests/parse_print/autogen/769~final/model.expected.json b/tests/parse_print/autogen/769~final/model.expected.json deleted file mode 100644 index 733477c240..0000000000 --- a/tests/parse_print/autogen/769~final/model.expected.json +++ /dev/null @@ -1,67 +0,0 @@ -{"mInfo": - {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], - "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], - "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], - "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, - "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, - "mStatements": - [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, - {"SuchThat": - [{"Op": - {"MkOpIn": - [{"Comprehension": - [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, - [{"Generator": - {"GenDomainNoRepr": - [{"Single": {"Name": "l_1"}}, - {"DomainSet": - [[], - {"SizeAttr_MaxSize": - {"Op": - {"MkOpMinus": - [{"Op": - {"MkOpFreq": - [{"AbstractLiteral": - {"AbsLitMSet": - [{"Reference": - [{"Name": "var1"}, null]}]}}, - {"Reference": [{"Name": "var1"}, null]}]}}, - {"Op": - {"MkOpMod": - [{"Op": - {"MkOpMinus": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, 3]}}]}}, - {"Op": - {"MkOpPow": - [{"Constant": - {"ConstantInt": - [{"TagInt": []}, 1]}}, - {"Constant": - {"ConstantInt": - [{"TagInt": []}, - 3]}}]}}]}}]}}}, - {"DomainInt": - [{"TagInt": []}, - [{"RangeSingle": - {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, - {"RangeSingle": - {"Constant": - {"ConstantInt": [{"TagInt": []}, 4]}}}]]}]}]}}]]}, - {"Constant": - {"ConstantAbstract": - {"AbsLitSet": - [{"ConstantAbstract": - {"AbsLitMatrix": - [{"DomainInt": - [{"TagInt": []}, - [{"RangeBounded": - [{"ConstantInt": [{"TagInt": []}, 1]}, - {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, - [{"ConstantAbstract": - {"AbsLitSet": - [{"ConstantInt": [{"TagInt": []}, 5]}]}}]]}}]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/769~final/stderr.expected b/tests/parse_print/autogen/769~final/stderr.expected new file mode 100644 index 0000000000..9c0ff5b906 --- /dev/null +++ b/tests/parse_print/autogen/769~final/stderr.expected @@ -0,0 +1,6 @@ +Error: + tests/parse_print/autogen/769~final/spec.essence:5:41: + | +5 | [{2} | l_1 : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of + | ^^^^ +Cannot use variable of category : decision in the context of Domain diff --git a/tests/parse_print/autogen/769~final/stdout.expected b/tests/parse_print/autogen/769~final/stdout.expected deleted file mode 100644 index 6ac3923d6a..0000000000 --- a/tests/parse_print/autogen/769~final/stdout.expected +++ /dev/null @@ -1,4 +0,0 @@ -language Essence 1.3 - -find var1: bool -such that [{2} | l_1 : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of int(1, 4)] in {[{5}; int(1)]} diff --git a/tests/parse_print/autogen/769~final/typecheck.expected b/tests/parse_print/autogen/769~final/typecheck.expected deleted file mode 100644 index ceb0e13ff5..0000000000 --- a/tests/parse_print/autogen/769~final/typecheck.expected +++ /dev/null @@ -1,5 +0,0 @@ -Error: - Category checking failed. - The domain : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of int(1, 4) - Its category : decision - \ No newline at end of file From 1e1959d2989c3ec932a8b82edf48170f01047894 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 18 Apr 2023 17:08:53 +0100 Subject: [PATCH 274/378] adds a test case --- .../category_check/decision_domain/decisionIndomain.essence | 3 +++ .../category_check/decision_domain/stderr.expected | 6 ++++++ 2 files changed, 9 insertions(+) create mode 100644 tests/parse_print/syntax_test/expressions/category_check/decision_domain/decisionIndomain.essence create mode 100644 tests/parse_print/syntax_test/expressions/category_check/decision_domain/stderr.expected diff --git a/tests/parse_print/syntax_test/expressions/category_check/decision_domain/decisionIndomain.essence b/tests/parse_print/syntax_test/expressions/category_check/decision_domain/decisionIndomain.essence new file mode 100644 index 0000000000..48323e3cfc --- /dev/null +++ b/tests/parse_print/syntax_test/expressions/category_check/decision_domain/decisionIndomain.essence @@ -0,0 +1,3 @@ +language Essence 1.3 +find x : int(1..4) +find y : int(1..x) \ No newline at end of file diff --git a/tests/parse_print/syntax_test/expressions/category_check/decision_domain/stderr.expected b/tests/parse_print/syntax_test/expressions/category_check/decision_domain/stderr.expected new file mode 100644 index 0000000000..56c0943757 --- /dev/null +++ b/tests/parse_print/syntax_test/expressions/category_check/decision_domain/stderr.expected @@ -0,0 +1,6 @@ +Error: + tests/parse_print/syntax_test/expressions/category_check/decision_domain/decisionIndomain.essence:3:17: + | +3 | find y : int(1..x) + | ^ +Cannot use variable of category : decision in the context of Domain From b95c3cfb26bd97ccb1a25175f848a790a485837e Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 19 Apr 2023 17:14:46 +0100 Subject: [PATCH 275/378] Adds basic category checking --- conjure-cp.cabal | 1 + src/Conjure/LSP/Handlers/DocumentSymbol.hs | 2 +- src/Conjure/LSP/Handlers/Hover.hs | 2 +- src/Conjure/LSP/Handlers/SemanticTokens.hs | 2 +- src/Conjure/LSP/Handlers/Suggestions.hs | 99 ++++++++++++++++++++++ src/Conjure/LSP/LanguageServer.hs | 2 + src/Conjure/LSP/Util.hs | 25 +++++- src/Conjure/Language/Lexer.hs | 6 +- 8 files changed, 130 insertions(+), 9 deletions(-) create mode 100644 src/Conjure/LSP/Handlers/Suggestions.hs diff --git a/conjure-cp.cabal b/conjure-cp.cabal index ca23dc5999..5b02ea76a8 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -259,6 +259,7 @@ Library , Conjure.LSP.Handlers.DocumentSymbol , Conjure.LSP.Handlers.SemanticTokens , Conjure.LSP.Handlers.Format + , Conjure.LSP.Handlers.Suggestions , Conjure.LSP.Util build-depends : base >= 4.12.0 diff --git a/src/Conjure/LSP/Handlers/DocumentSymbol.hs b/src/Conjure/LSP/Handlers/DocumentSymbol.hs index de506e3dfa..99bdc38c20 100644 --- a/src/Conjure/LSP/Handlers/DocumentSymbol.hs +++ b/src/Conjure/LSP/Handlers/DocumentSymbol.hs @@ -16,7 +16,7 @@ import Conjure.Language.Pretty (prettyT) docSymbolHandler :: Handlers (LspM ()) docSymbolHandler = requestHandler STextDocumentDocumentSymbol $ \req res -> do let ps = req ^. params . textDocument - withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo -> ri)) -> do + withProcessedDoc ps $ \(ProcessedFile _ _ (regionInfo -> ri) _) -> do res $ Right $ InL . T.List $ mapMaybe translate ri diff --git a/src/Conjure/LSP/Handlers/Hover.hs b/src/Conjure/LSP/Handlers/Hover.hs index 5b8a3e67d2..bfc3b6cd05 100644 --- a/src/Conjure/LSP/Handlers/Hover.hs +++ b/src/Conjure/LSP/Handlers/Hover.hs @@ -15,7 +15,7 @@ hoverHandler :: Handlers (LspM ()) hoverHandler = requestHandler STextDocumentHover $ \ req res -> do let RequestMessage _ _ _ (HoverParams _doc pos _workDone) = req let Position _l _c' = pos - withProcessedDoc _doc $ \(ProcessedFile _ _ st) -> do + withProcessedDoc _doc $ \(ProcessedFile _ _ st _) -> do let ranges = getRelevantRegions st pos texts <- mapM prettySymbol ranges let ms = HoverContents $ mconcat (catMaybes texts) diff --git a/src/Conjure/LSP/Handlers/SemanticTokens.hs b/src/Conjure/LSP/Handlers/SemanticTokens.hs index 57a73d9330..0ae9b2ea1d 100644 --- a/src/Conjure/LSP/Handlers/SemanticTokens.hs +++ b/src/Conjure/LSP/Handlers/SemanticTokens.hs @@ -17,7 +17,7 @@ semanticTokensHandler = semanticTokensHandlerFull semanticTokensHandlerFull :: Handlers (LspM ()) semanticTokensHandlerFull = requestHandler T.STextDocumentSemanticTokensFull $ \ req res -> do let ps = req^.params . textDocument - withProcessedDoc ps $ \(ProcessedFile _ _ (symbolCategories->ts)) -> do + withProcessedDoc ps $ \(ProcessedFile _ _ (symbolCategories->ts) _) -> do let toks = mapMaybe createSemanticToken (sortOn (\(TaggedToken _ (oTrueStart . offsets->e)) -> e) $ M.elems ts) -- sendInfoMessage . pack $ "Got semantic tokens req : " ++ show toks let sToks = T.makeSemanticTokens def toks diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs new file mode 100644 index 0000000000..085f7cf072 --- /dev/null +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -0,0 +1,99 @@ +module Conjure.LSP.Handlers.Suggestions where + +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), regionToRange, withProcessedDoc,getNextTokenStart,sourcePosToPosition) +import Conjure.Language (Type (..)) +import Conjure.Language.AST.Reformer +import Conjure.Language.Type (IntTag (..)) +import Conjure.Language.Lexer +import Conjure.Language.Lexemes +import Conjure.Language.Validator --(Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) +import Conjure.Prelude +import Control.Lens +import Data.Text (intercalate,pack) +import Language.LSP.Server (Handlers, LspM, requestHandler) +import Language.LSP.Types (SymbolKind(..),SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..), Position(..)) +import qualified Language.LSP.Types as T +import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position)) +import Conjure.Language.Pretty (prettyT) +import qualified Data.Map.Strict as Map +import Conjure.Language.Validator (ErrorType(TokenError), DiagnosticRegion (drSourcePos)) +import Conjure.Language.AST.Syntax (LToken(MissingToken)) + +suggestionHandler :: Handlers (LspM ()) +suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do + let ps = req ^. params . textDocument + let context = req ^. params . position + withProcessedDoc ps $ \(ProcessedFile _ diags (regionInfo -> ri) pt) -> do + let symbols = Map.toList $ rTable $ head ri + let nextTStart = getNextTokenStart context pt + let errors = [(r,d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags ] + let contextTokens = take 1 [ lexeme w | (r,MissingToken w) <- errors,isInRange nextTStart r] + let missingTokenBasedHint = case contextTokens of + [l] -> makeMissingTokenHint l + _ -> [] + where + makeMissingTokenHint (L_Missing s) = [pack s] + makeMissingTokenHint (LMissingIdentifier) = ["newIdentifier1"] + makeMissingTokenHint l = [lexemeText l] + res $ Right $ InL . T.List $ (map defaultCompletion missingTokenBasedHint) ++ makeSuggestionsFromSymbolTable symbols + +isInRange :: T.Position -> DiagnosticRegion -> Bool +isInRange p reg = sourcePosToPosition (drSourcePos reg) == p + + +makeSuggestionsFromSymbolTable :: [(Text,SymbolTableValue)] -> [CompletionItem] +makeSuggestionsFromSymbolTable = map symbolToHint + +symbolToHint :: (Text,SymbolTableValue) -> CompletionItem +symbolToHint (name,(_,_,k)) = let + typeName = prettyT k + in (defaultCompletion name){_detail = Just typeName ,_kind=pure $ getCIKind k} + +getCIKind :: Kind -> CompletionItemKind +getCIKind (Kind DomainType _) = CiClass +getCIKind (Kind ValueType{} t) = case t of + TypeAny -> CiVariable + TypeBool -> CiVariable + TypeInt _ -> CiVariable + TypeEnum _ -> CiEnum + TypeUnnamed _ -> CiVariable + TypeTuple _ -> CiVariable + TypeRecord _ -> CiVariable + TypeRecordMember _ _ -> CiEnumMember + TypeVariant _ -> CiVariable + TypeVariantMember _ _ -> CiEnumMember + TypeList _ -> CiVariable + TypeMatrix _ _ -> CiVariable + TypeSet _ -> CiVariable + TypeMSet _ -> CiVariable + TypeFunction _ _ -> CiVariable + TypeSequence _ -> CiVariable + TypeRelation _ -> CiVariable + TypePartition _ -> CiVariable + + +defaultCompletion :: Text -> CompletionItem +defaultCompletion n = CompletionItem + n + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + Nothing + +missingToSuggestion :: [CompletionItem] +missingToSuggestion = [] + +keywordCompletions :: [CompletionItem] +keywordCompletions = [] \ No newline at end of file diff --git a/src/Conjure/LSP/LanguageServer.hs b/src/Conjure/LSP/LanguageServer.hs index eb42536e08..1905d6723b 100644 --- a/src/Conjure/LSP/LanguageServer.hs +++ b/src/Conjure/LSP/LanguageServer.hs @@ -12,6 +12,7 @@ import Conjure.LSP.Handlers.Hover (hoverHandler) import Conjure.LSP.Handlers.DocumentSymbol (docSymbolHandler) import Conjure.LSP.Handlers.SemanticTokens (semanticTokensHandler) import Conjure.LSP.Handlers.Format (formatHandler) +import Conjure.LSP.Handlers.Suggestions (suggestionHandler) data LSPConfig = LSPConfig {} @@ -42,6 +43,7 @@ handlers = , docSymbolHandler , semanticTokensHandler , formatHandler + , suggestionHandler ] diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 2008cc82c0..18eb5cb9ad 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -11,25 +11,32 @@ import Conjure.Language.Parser (PipelineError(..), lexAndParse) import Language.LSP.VFS (virtualFileText, VirtualFile) import Text.Megaparsec (SourcePos(..), unPos) import Data.Text (pack) +import Data.Foldable (find) import Language.LSP.Types as L import Conjure.Language.Validator (DiagnosticRegion(..), ValidatorState (ValidatorState, regionInfo), runValidator, ValidatorDiagnostic, RegionInfo (..), initialState, validateModel) import Conjure.UI.ErrorDisplay (displayError, displayWarning) import Conjure.Language.AST.ASTParser (parseProgram) import Language.LSP.Types.Lens (HasUri (uri)) import Control.Lens ((^.)) +import Conjure.Language.AST.Syntax (ProgramTree) +import Conjure.Language.Lexer +import Conjure.Language.AST.Reformer +import qualified Data.Sequence as Seq +import Conjure.Language.Lexer (Offsets(oSourcePos)) data ProcessedFile = ProcessedFile { model:: Model, diagnostics::[ValidatorDiagnostic], - state:: ValidatorState + state:: ValidatorState, + parseTree :: ProgramTree } processFile :: Text -> Either PipelineError ProcessedFile processFile t = do parsed <- lexAndParse parseProgram t let (m,d,s) = runValidator (validateModel parsed) (initialState parsed Nothing) --TODO: wire up - return $ ProcessedFile m d s + return $ ProcessedFile m d s parsed getErrorsForURI :: NormalizedUri -> LspM () (Either Text ProcessedFile) @@ -42,7 +49,7 @@ getErrorsFromText :: Text -> LspM () (Either Text ProcessedFile) getErrorsFromText t = return $ either (Left . pack.show) Right $ processFile t getDiagnostics :: ProcessedFile -> [Diagnostic] -getDiagnostics (ProcessedFile _ ds _) = mapMaybe valErrToDiagnostic ds +getDiagnostics (ProcessedFile{diagnostics=ds}) = mapMaybe valErrToDiagnostic ds valErrToDiagnostic :: V.ValidatorDiagnostic -> Maybe Diagnostic valErrToDiagnostic (V.ValidatorDiagnostic region message) = do @@ -139,3 +146,15 @@ snippet = markedUpContent "essence" prettyPos :: Position -> Doc prettyPos (Position (pretty . show->r) (pretty . show->c)) = r <> ":" <> c +getNextTokenStart :: Position -> ProgramTree -> Position +getNextTokenStart ref tree = let + toks = flatten tree + tokSp = map (sourcePosToPosition . oSourcePos . offsets) (toList toks) + in fromMaybe posInf $ find (ref <=) tokSp + +posInf :: Position +posInf = Position (negate 1) (negate 1) +tokensAtPosition :: Position -> Seq.Seq ETok -> [ETok] +tokensAtPosition p s = maybeToList (find (posAfter p ) s) + where + posAfter p t = p < sourcePosToPosition (oSourcePos $ offsets t) diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 985bb0307b..24468b2772 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -106,7 +106,7 @@ data ETok = ETok , lexeme :: Lexeme , capture :: Text } - deriving (Eq, Ord) + deriving (Eq, Ord,Show) instance Pr.Pretty ETok where pretty = Pr.unAnnotate . uncurry (Pr.<>) . prettySplitComments @@ -328,8 +328,8 @@ pxy = Proxy -instance Show ETok where - show (ETok _ _ _ q) = show q +-- instance Show ETok where +-- show (ETok _ _ _ q) = show q From 6b6d7560a5bd21e8592d9922371b21db53c51c87 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 20 Apr 2023 11:47:58 +0100 Subject: [PATCH 276/378] Removes string from missing lexeme --- src/Conjure/LSP/Handlers/Suggestions.hs | 10 +++++----- src/Conjure/Language/AST/ASTParser.hs | 8 ++++---- src/Conjure/Language/AST/Helpers.hs | 2 +- src/Conjure/Language/Lexemes.hs | 6 +++++- src/Conjure/UI/ErrorDisplay.hs | 2 +- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index 085f7cf072..f3ceffcdcb 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -29,13 +29,13 @@ suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do let errors = [(r,d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags ] let contextTokens = take 1 [ lexeme w | (r,MissingToken w) <- errors,isInRange nextTStart r] let missingTokenBasedHint = case contextTokens of - [l] -> makeMissingTokenHint l - _ -> [] + [l] -> map defaultCompletion $ makeMissingTokenHint l + _ -> makeSuggestionsFromSymbolTable symbols where - makeMissingTokenHint (L_Missing s) = [pack s] - makeMissingTokenHint (LMissingIdentifier) = ["newIdentifier1"] + makeMissingTokenHint (L_Missing s) = [pack $ show s] + makeMissingTokenHint LMissingIdentifier = ["newIdentifier1"] makeMissingTokenHint l = [lexemeText l] - res $ Right $ InL . T.List $ (map defaultCompletion missingTokenBasedHint) ++ makeSuggestionsFromSymbolTable symbols + res $ Right $ InL . T.List $ missingTokenBasedHint isInRange :: T.Position -> DiagnosticRegion -> Bool isInRange p reg = sourcePosToPosition (drSourcePos reg) == p diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 4db8e25881..1569b7051e 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -18,7 +18,7 @@ import Conjure.Prelude hiding (many,some) import Conjure.Language.AST.Helpers import Conjure.Language.AST.Syntax import Conjure.Language.Lexer - +import Conjure.Language.Lexemes import Text.Megaparsec @@ -203,7 +203,7 @@ parseExpression :: Parser ExpressionNode parseExpression = try $ do parseOperator <|> parseAtomicExpression - <|> (MissingExpressionNode <$> makeMissing (L_Missing "expression")) + <|> (MissingExpressionNode <$> makeMissing (L_Missing MissingExpression)) parseExpressionStrict :: Parser ExpressionNode -- can fail parseExpressionStrict = try $ do @@ -227,7 +227,7 @@ parseAtomicExpression = do , AbsExpression <$> parseAbsExpression , QuantificationExpr <$> parseQuantificationStatement , DomainExpression <$> parseDomainExpression - , MissingExpressionNode <$> makeMissing (L_Missing "Expr") + , MissingExpressionNode <$> makeMissing (L_Missing MissingExpression) ] @@ -794,7 +794,7 @@ parseAttribute = do parseMissingDomain :: Parser DomainNode parseMissingDomain = do - m <- makeMissing (L_Missing "Domain") + m <- makeMissing (L_Missing MissingDomain) return $ MissingDomainNode m "Anything" diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 372db19993..7e76bfc2b3 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -162,7 +162,7 @@ parseSequence1 divider pElem = do parseSequence :: (Null a, Show a) => Lexeme -> Parser a -> Parser (Sequence a) parseSequence divider pElem = try $ do - missingPlaceholder <- makeMissing $ L_Missing "SequenceElem" + missingPlaceholder <- makeMissing $ L_Missing MissingUnknown sElem <- optional pElem sep <- want divider case (sElem, isMissing sep) of diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index a29425c5aa..48defa27b4 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -286,7 +286,7 @@ data Lexeme | L_transform -- helper - | L_Missing String + | L_Missing MissingStructuralElements | L_EOF | L_SpecialCase @@ -294,6 +294,10 @@ data Lexeme instance Hashable Lexeme +data MissingStructuralElements = MissingExpression | MissingDomain | MissingUnknown + deriving (Eq, Ord, Show,Generic) --Generic +instance Hashable MissingStructuralElements + lexemes :: [(T.Text, Lexeme)] lexemes = sortBy (flip (comparing (T.length . fst))) $ map swap [ ( L_be , "be" ) diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index c64e93eced..d2ec6259cb 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -36,7 +36,7 @@ tokenErrorToDisplay :: LToken -> String tokenErrorToDisplay (RealToken _ ) = error "tokenError with valid token" tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ (lexemeFace $ lexeme t) tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of - L_Missing s -> s + L_Missing s -> show s LMissingIdentifier -> "" _ -> T.unpack $ lexemeText l From 21ef20a248a41ae3248587b5481f64f5304c73eb Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 17 May 2023 14:47:21 +0100 Subject: [PATCH 277/378] rearranges tokens to be more useful --- conjure-cp.cabal | 4 +- src/Conjure/LSP/Util.hs | 12 +- src/Conjure/Language/AST/ASTParser.hs | 6 +- src/Conjure/Language/AST/Helpers.hs | 9 +- src/Conjure/Language/AST/Reformer.hs | 641 +++++++++++++++----------- src/Conjure/Language/AST/Syntax.hs | 110 ++--- src/Conjure/Language/Lexemes.hs | 5 +- src/Conjure/Language/Lexer.hs | 51 +- src/Conjure/Language/Parser.hs | 12 +- src/Conjure/Language/Validator.hs | 52 +-- src/Conjure/UI/ErrorDisplay.hs | 16 + src/test/Conjure/ParserFuzz.hs | 4 +- 12 files changed, 544 insertions(+), 378 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 5b02ea76a8..86c8efa75d 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -334,7 +334,7 @@ Library TypeOperators ViewPatterns ghc-options: - -O2 + -O1 -fwarn-incomplete-patterns -fwarn-incomplete-uni-patterns -fwarn-missing-signatures @@ -371,7 +371,7 @@ Executable conjure TypeOperators ViewPatterns ghc-options: - -O2 + -O1 -fwarn-incomplete-patterns -fwarn-incomplete-uni-patterns -fwarn-missing-signatures diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 18eb5cb9ad..559f51a3bf 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -9,7 +9,7 @@ import Language.LSP.Server import Conjure.Language.Parser (PipelineError(..), lexAndParse) import Language.LSP.VFS (virtualFileText, VirtualFile) -import Text.Megaparsec (SourcePos(..), unPos) +import Text.Megaparsec (SourcePos(..), unPos, mkPos) import Data.Text (pack) import Data.Foldable (find) import Language.LSP.Types as L @@ -131,6 +131,15 @@ sourcePosToPosition (SourcePos _ r c) = Position (fromInteger $ -1 + toInteger (unPos r)) (fromInteger $ -1 + toInteger (unPos c)) +positionToSourcePos :: Position -> SourcePos +positionToSourcePos (Position r c) = SourcePos + "" + (mkPos ri) + ( mkPos ci) + where + ri = fromIntegral r + 1 + ci = fromIntegral c + 1 + regionToRange :: DiagnosticRegion -> L.Range regionToRange (DiagnosticRegion sp ep _ _) = L.Range (sourcePosToPosition sp) (sourcePosToPosition ep) @@ -154,6 +163,7 @@ getNextTokenStart ref tree = let posInf :: Position posInf = Position (negate 1) (negate 1) + tokensAtPosition :: Position -> Seq.Seq ETok -> [ETok] tokensAtPosition p s = maybeToList (find (posAfter p ) s) where diff --git a/src/Conjure/Language/AST/ASTParser.hs b/src/Conjure/Language/AST/ASTParser.hs index 1569b7051e..8a7a20737b 100644 --- a/src/Conjure/Language/AST/ASTParser.hs +++ b/src/Conjure/Language/AST/ASTParser.hs @@ -22,7 +22,7 @@ import Conjure.Language.Lexemes import Text.Megaparsec -import Conjure.Language.AST.Reformer (Flattenable(..)) +import Conjure.Language.AST.Reformer (HighLevelTree(..),flattenSeq) import Conjure.Language.Expression.Op.Internal.Common import Control.Monad.Combinators.Expr import qualified Data.Text.Lazy as L @@ -32,7 +32,7 @@ newtype ParserError = ParserError (Doc) deriving (Show) -runASTParser ::Flattenable a => Parser a -> ETokenStream -> Either ParserError a +runASTParser ::HighLevelTree a => Parser a -> ETokenStream -> Either ParserError a runASTParser p str = case runParser p "parser" str of Left peb -> Left $ ParserError . pretty $ errorBundlePretty peb @@ -821,7 +821,7 @@ example s = do Right pt -> do print $ show pt putStrLn "Reforming" - print $ reformList (flatten pt) == L.fromStrict txt + print $ reformList (flattenSeq pt) == L.fromStrict txt putStrLn "Pretty:" let pp = renderAST 80 pt diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 7e76bfc2b3..4b6c633144 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -69,9 +69,10 @@ intLiteral = token test Set.empty "Int Literal" makeMissing :: Lexeme -> Parser LToken makeMissing l = do - ETok (Offsets st _ _ _) _ _ _ <- lookAhead anySingle + dummyToken <- lookAhead anySingle + let st = oStart . offsets $ dummyToken spos <- getSourcePos - return (MissingToken (ETok (Offsets st st 0 spos) [] l "")) + return (MissingToken (ETok (Offsets st 0 0 spos spos spos) [] l "")) makeUnexpected :: Parser LToken makeUnexpected = SkippedToken <$> anySingle @@ -82,12 +83,12 @@ want (LIdentifier _) = do (ETok o t lex _) <- lookAhead anySingle case lex of (LIdentifier _) -> makeStrict <$> anySingle - _ -> return $ MissingToken $ ETok o{oTLength = 0} t LMissingIdentifier "" + _ -> return $ MissingToken $ ETok o{oTotalLength = 0} t LMissingIdentifier "" want a = do (ETok o t lex _) <- lookAhead anySingle if lex == a then makeStrict <$> anySingle - else return $ MissingToken $ ETok o{oTLength = 0} t a "" + else return $ MissingToken $ ETok o{oTotalLength = 0} t a "" -- get a symbol from the stream with no fallback need :: Lexeme -> Parser SToken diff --git a/src/Conjure/Language/AST/Reformer.hs b/src/Conjure/Language/AST/Reformer.hs index d9d2cbb8fe..6490c9112b 100644 --- a/src/Conjure/Language/AST/Reformer.hs +++ b/src/Conjure/Language/AST/Reformer.hs @@ -1,275 +1,392 @@ -module Conjure.Language.AST.Reformer (Flattenable(..)) where +{-# LANGUAGE DeriveDataTypeable #-} +module Conjure.Language.AST.Reformer (HighLevelTree(..),HLTree(..),flatten,flattenSeq,contains,filterContaining,TreeItemLinks(..),ListItemClasses(..)) where import Conjure.Language.AST.Syntax -import Conjure.Language.Lexer (ETok (..)) +import Conjure.Language.Lexer (ETok (..), trueStart, sourcePosAfter) import Conjure.Prelude -import Data.Sequence ((><)) + + +import Data.Semigroup ((<>)) import qualified Data.Sequence as S +import Text.Megaparsec (SourcePos (SourcePos)) -class Flattenable a where - flatten :: Flattenable a => a -> S.Seq ETok - -instance Flattenable (S.Seq ETok) where - flatten = id -instance Flattenable ProgramTree where - flatten (ProgramTree lv sts end) = mconcat [flatten lv , mconcat $ map flatten sts , flatten end] - -instance Flattenable LangVersionNode where - flatten (LangVersionNode l1 l2 l3) = flatten l1 >< flatten l2 >< flatten l3 -instance Flattenable StatementNode where - flatten x = case x of - DeclarationStatement dsn -> flatten dsn - BranchingStatement bsn -> flatten bsn - SuchThatStatement stsn -> flatten stsn - WhereStatement wsn -> flatten wsn - ObjectiveStatement osn -> flatten osn - HeuristicStatement l1 ex -> flatten l1 >< flatten ex - UnexpectedToken tok -> flatten tok - -instance Flattenable DeclarationStatementNode where - flatten x = case x of - FindStatement f fsn -> flatten f >< flatten fsn - GivenStatement g gsn -> flatten g >< flatten gsn - LettingStatement t lsn -> flatten t >< flatten lsn - - -instance Flattenable LettingStatementNode where - flatten (LettingStatementNode a b c) = mconcat[ flatten a, flatten b, flatten c] - -instance Flattenable LettingAssignmentNode where - flatten x = case x of - LettingExpr d -> flatten d - LettingDomain d e -> flatten d >< flatten e - LettingEnum d e f g -> mconcat [flatten d, flatten e, flatten f, flatten g] - LettingAnon d e f g h -> mconcat [flatten d, flatten e, flatten f, flatten g, flatten h] - -instance Flattenable FindStatementNode where - flatten (FindStatementNode a b c) = mconcat [flatten a, flatten b, flatten c] - -instance Flattenable GivenStatementNode where - flatten x = case x of - GivenStatementNode a b c -> mconcat [flatten a, flatten b, flatten c] - GivenEnumNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - - - -instance Flattenable BranchingStatementNode where - flatten (BranchingStatementNode lt lt' ln) = mconcat [flatten lt, flatten lt', flatten ln] - - -instance Flattenable SuchThatStatementNode where - flatten (SuchThatStatementNode l1 l2 l3) = flatten l1 >< flatten l2 >< flatten l3 -instance Flattenable WhereStatementNode where - flatten (WhereStatementNode l1 l2) = flatten l1 >< flatten l2 -instance Flattenable ObjectiveStatementNode where - flatten x = case x of - ObjectiveMin lt en -> flatten lt >< flatten en - ObjectiveMax lt en -> flatten lt >< flatten en - -instance Flattenable LToken where - flatten x = case x of - RealToken st -> flatten st - MissingToken et -> flatten et - SkippedToken et -> flatten et - -instance Flattenable SToken where - flatten (StrictToken xs e) = flatten xs >< flatten e -instance Flattenable ETok where - flatten = pure - -instance Flattenable ExpressionNode where - flatten x = case x of - Literal ln -> flatten ln - IdentifierNode nn -> flatten nn - MetaVarExpr tk -> flatten tk - QuantificationExpr qen -> flatten qen - OperatorExpressionNode oen -> flatten oen - ParenExpression pen ->flatten pen - AbsExpression pen -> flatten pen - DomainExpression dex -> flatten dex - FunctionalApplicationNode lt ln -> flatten lt >< flatten ln - SpecialCase nd -> flatten nd - AttributeAsConstriant l1 exprs -> flatten l1 >< flatten exprs - MissingExpressionNode e -> flatten e - -instance Flattenable SpecialCaseNode where - flatten x = case x of - ExprWithDecls l1 en l2 sns l3 -> mconcat [flatten l1,flatten en,flatten l2, flatten sns , flatten l3] - -instance Flattenable DomainExpressionNode where - flatten (DomainExpressionNode a b c) = flatten a >< flatten b >< flatten c -instance Flattenable QuantificationExpressionNode where - flatten (QuantificationExpressionNode a b c d e f) = mconcat [ - flatten a, flatten b, flatten c, flatten d, flatten e, flatten f] -instance Flattenable QuantificationOverNode where - flatten x = case x of - QuantifiedSubsetOfNode a b -> flatten a >< flatten b - QuantifiedMemberOfNode a b -> flatten a >< flatten b - QuantifiedDomainNode a -> flatten a - -instance Flattenable OverDomainNode where - flatten (OverDomainNode a b) = flatten a >< flatten b - -instance Flattenable QuanticationGuard where - flatten (QuanticationGuard a b ) = flatten a >< flatten b - -instance Flattenable AbstractPatternNode where - flatten x = case x of - AbstractIdentifier nn -> flatten nn - AbstractMetaVar lt -> flatten lt - AbstractPatternTuple a b -> flatten a >< flatten b - AbstractPatternMatrix ln -> flatten ln - AbstractPatternSet ln -> flatten ln -instance Flattenable QuantificationPattern where - flatten (QuantificationPattern en) = flatten en - -instance Flattenable LiteralNode where - flatten x = case x of - IntLiteral lt -> flatten lt - BoolLiteral lt -> flatten lt - MatrixLiteral mln -> flatten mln - TupleLiteralNode lt -> flatten lt - TupleLiteralNodeShort st -> flatten st - RecordLiteral lt ln -> flatten lt >< flatten ln - VariantLiteral lt ln -> flatten lt >< flatten ln - SetLiteral ln -> flatten ln - MSetLiteral lt ln -> flatten lt >< flatten ln - FunctionLiteral lt ln -> flatten lt >< flatten ln - SequenceLiteral lt ln -> flatten lt >< flatten ln - RelationLiteral lt ln -> flatten lt >< flatten ln - PartitionLiteral lt ln -> flatten lt >< flatten ln - -instance Flattenable PartitionElemNode where - flatten (PartitionElemNode ln) = flatten ln - -instance Flattenable RelationElemNode where - flatten x = case x of - RelationElemNodeLabeled lt -> flatten lt - RelationElemNodeShort st -> flatten st - -instance Flattenable ArrowPairNode where - flatten (ArrowPairNode a b c) = mconcat [flatten a, flatten b, flatten c] - -instance Flattenable RecordMemberNode where - flatten (RecordMemberNode nn lt en) = mconcat [flatten nn, flatten lt, flatten en] -instance Flattenable LongTuple where - flatten (LongTuple a b) = flatten a >< flatten b - -instance Flattenable ShortTuple where - flatten (ShortTuple a) = flatten a - -instance Flattenable MatrixLiteralNode where - flatten ( MatrixLiteralNode a b c d e) = mconcat - [ flatten a - , flatten b - , flatten c - , flatten d - , flatten e +-- class HighLevelTree a where +-- makeTree :: HighLevelTree a => a -> S.Seq ETok +flatten :: HighLevelTree a => a -> [ETok] +flatten x = case makeTree x of + HLNone -> [] + HLTagged _ xs -> concatMap flatten xs + HLLeaf t -> [t] +flattenSeq :: HighLevelTree a => a -> S.Seq ETok +flattenSeq = S.fromList . flatten + +instance HighLevelTree HLTree where + makeTree = id + +instance HighLevelTree StatementNode where + makeTree x = case x of + DeclarationStatement dsn -> makeTree dsn + BranchingStatement bsn -> makeTree bsn + SuchThatStatement stsn -> makeTree stsn + WhereStatement wsn -> makeTree wsn + ObjectiveStatement osn -> makeTree osn + HeuristicStatement l1 ex -> makeTree l1 <> makeTree ex + UnexpectedToken tok -> makeTree tok + +instance HighLevelTree DeclarationStatementNode where + makeTree x = case x of + FindStatement f fsn -> makeTree f <> makeTree fsn + GivenStatement g gsn -> makeTree g <> makeTree gsn + LettingStatement t lsn -> makeTree t <> makeTree lsn + + +instance HighLevelTree LettingStatementNode where + makeTree (LettingStatementNode a b c) = mconcat[ makeTree a, makeTree b, makeTree c] + +instance HighLevelTree LettingAssignmentNode where + makeTree x = case x of + LettingExpr d -> makeTree d + LettingDomain d e -> makeTree d <> makeTree e + LettingEnum d e f g -> mconcat [makeTree d, makeTree e, makeTree f, makeTree g] + LettingAnon d e f g h -> mconcat [makeTree d, makeTree e, makeTree f, makeTree g, makeTree h] + +instance HighLevelTree FindStatementNode where + makeTree (FindStatementNode a b c) = mconcat [makeTree a, makeTree b, makeTree c] + +instance HighLevelTree GivenStatementNode where + makeTree x = case x of + GivenStatementNode a b c -> mconcat [makeTree a, makeTree b, makeTree c] + GivenEnumNode a b c d -> mconcat [makeTree a, makeTree b, makeTree c, makeTree d] + + + +instance HighLevelTree BranchingStatementNode where + makeTree (BranchingStatementNode lt lt' ln) = mconcat [makeTree lt, makeTree lt', makeTree ln] + + +instance HighLevelTree SuchThatStatementNode where + makeTree (SuchThatStatementNode l1 l2 l3) = makeTree l1 <> makeTree l2 <> makeTree l3 +instance HighLevelTree WhereStatementNode where + makeTree (WhereStatementNode l1 l2) = makeTree l1 <> makeTree l2 +instance HighLevelTree ObjectiveStatementNode where + makeTree x = case x of + ObjectiveMin lt en -> makeTree lt <> makeTree en + ObjectiveMax lt en -> makeTree lt <> makeTree en + + + + +instance HighLevelTree ExpressionNode where + makeTree x = HLTagged (TIExpression x) $ case x of + Literal ln -> [makeTree ln] + IdentifierNode nn -> [makeTree nn] + MetaVarExpr tk -> [makeTree tk] + QuantificationExpr qen -> [makeTree qen] + OperatorExpressionNode oen -> [makeTree oen] + ParenExpression pen ->[makeTree pen] + AbsExpression pen -> [makeTree pen] + DomainExpression dex -> [makeTree dex] + FunctionalApplicationNode lt ln -> [makeTree lt ,makeTree ln] + SpecialCase nd -> [makeTree nd] + AttributeAsConstriant l1 exprs -> [makeTree l1 , makeTree exprs] + MissingExpressionNode e -> [makeTree e] + +instance HighLevelTree SpecialCaseNode where + makeTree x = case x of + ExprWithDecls l1 en l2 sns l3 -> mconcat [makeTree l1,makeTree en,makeTree l2, makeTree sns , makeTree l3] + + +instance HighLevelTree DomainExpressionNode where + makeTree (DomainExpressionNode a b c) = makeTree a <> makeTree b <> makeTree c +instance HighLevelTree QuantificationExpressionNode where + makeTree (QuantificationExpressionNode a b c d e f) = mconcat [ + makeTree a, makeTree b, makeTree c, makeTree d, makeTree e, makeTree f] + +instance HighLevelTree QuantificationOverNode where + makeTree x = case x of + QuantifiedSubsetOfNode a b -> makeTree a <> makeTree b + QuantifiedMemberOfNode a b -> makeTree a <> makeTree b + QuantifiedDomainNode a -> makeTree a + +instance HighLevelTree OverDomainNode where + makeTree (OverDomainNode a b) = makeTree a <> makeTree b + +instance HighLevelTree QuanticationGuard where + makeTree (QuanticationGuard a b ) = makeTree a <> makeTree b + +instance HighLevelTree AbstractPatternNode where + makeTree x = case x of + AbstractIdentifier nn -> makeTree nn + AbstractMetaVar lt -> makeTree lt + AbstractPatternTuple a b -> makeTree a <> makeTree b + AbstractPatternMatrix ln -> makeTree ln + AbstractPatternSet ln -> makeTree ln +instance HighLevelTree QuantificationPattern where + makeTree (QuantificationPattern en) = makeTree en + +instance HighLevelTree LiteralNode where + makeTree x = case x of + IntLiteral lt -> makeTree lt + BoolLiteral lt -> makeTree lt + MatrixLiteral mln -> makeTree mln + TupleLiteralNode lt -> makeTree lt + TupleLiteralNodeShort st -> makeTree st + RecordLiteral lt ln -> makeTree lt <> makeTree ln + VariantLiteral lt ln -> makeTree lt <> makeTree ln + SetLiteral ln -> makeTree ln + MSetLiteral lt ln -> makeTree lt <> makeTree ln + FunctionLiteral lt ln -> makeTree lt <> makeTree ln + SequenceLiteral lt ln -> makeTree lt <> makeTree ln + RelationLiteral lt ln -> makeTree lt <> makeTree ln + PartitionLiteral lt ln -> makeTree lt <> makeTree ln + +instance HighLevelTree PartitionElemNode where + makeTree (PartitionElemNode ln) = makeTree ln + +instance HighLevelTree RelationElemNode where + makeTree x = case x of + RelationElemNodeLabeled lt -> makeTree lt + RelationElemNodeShort st -> makeTree st + +instance HighLevelTree ArrowPairNode where + makeTree (ArrowPairNode a b c) = mconcat [makeTree a, makeTree b, makeTree c] + +instance HighLevelTree RecordMemberNode where + makeTree (RecordMemberNode nn lt en) = mconcat [makeTree nn, makeTree lt, makeTree en] +instance HighLevelTree LongTuple where + makeTree (LongTuple a b) = makeTree a <> makeTree b + +instance HighLevelTree ShortTuple where + makeTree (ShortTuple a) = makeTree a + +instance HighLevelTree MatrixLiteralNode where + makeTree ( MatrixLiteralNode a b c d e) = mconcat + [ makeTree a + , makeTree b + , makeTree c + , makeTree d + , makeTree e ] -instance Flattenable ComprehensionNode where - flatten (ComprehensionNode a b) = flatten a >< flatten b -instance Flattenable ComprehensionExpressionNode where - flatten (ComprehensionExpressionNode a b c d e) = +instance HighLevelTree ComprehensionNode where + makeTree (ComprehensionNode a b) = makeTree a <> makeTree b +instance HighLevelTree ComprehensionExpressionNode where + makeTree (ComprehensionExpressionNode a b c d e) = mconcat - [ flatten a - , flatten b - , flatten c - , flatten d - , flatten e + [ makeTree a + , makeTree b + , makeTree c + , makeTree d + , makeTree e ] -instance Flattenable ComprehensionBodyNode where - flatten x = case x of - CompBodyCondition en -> flatten en - CompBodyDomain a b c -> flatten a >< flatten b >< flatten c - CompBodyGenExpr a b c -> flatten a >< flatten b >< flatten c - CompBodyLettingNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - -instance Flattenable OperatorExpressionNode where - flatten x = case x of - PostfixOpNode en pon -> flatten en >< flatten pon - PrefixOpNode lt en -> flatten lt >< flatten en - BinaryOpNode en lt en' -> mconcat [flatten en, flatten lt, flatten en'] - -instance Flattenable PostfixOpNode where - flatten x = case x of - IndexedNode l -> flatten l - OpFactorial lt -> flatten lt - ApplicationNode ln -> flatten ln - ExplicitDomain l1 l2 dom l3 -> mconcat [flatten l1,flatten l2,flatten dom,flatten l3] - -instance Flattenable DomainNode where - flatten x = case x of - ParenDomainNode a b c -> mconcat [flatten a, flatten b, flatten c] - BoolDomainNode lt -> flatten lt - RangedIntDomainNode lt ln -> flatten lt >< flatten ln - MetaVarDomain a -> flatten a - RangedEnumNode nn ln -> flatten nn >< flatten ln - -- EnumDomainNode nn -> flatten nn - ShortTupleDomainNode ln -> flatten ln - TupleDomainNode lt ln -> flatten lt >< flatten ln - RecordDomainNode lt ln -> flatten lt >< flatten ln - VariantDomainNode lt ln -> flatten lt >< flatten ln - MatrixDomainNode a m_ib b c d -> mconcat [flatten a, flatten m_ib, flatten b, flatten c, flatten d] - SetDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - MSetDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - FunctionDomainNode a b c d e -> mconcat [flatten a, flatten b, flatten c, flatten d, flatten e] - SequenceDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - RelationDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - PartitionDomainNode a b c d -> mconcat [flatten a, flatten b, flatten c, flatten d] - MissingDomainNode m -> flatten m - -instance Flattenable IndexedByNode where - flatten (IndexedByNode a b ) = flatten a >< flatten b - -instance (Flattenable a) => Flattenable (Maybe a) where - flatten (Just x) = flatten x - flatten Nothing = S.empty -instance Flattenable AttributeNode where - flatten x = case x of - NamedAttributeNode nn m_e -> flatten nn >< flatten m_e - -- NamedExpressionAttribute nn en -> flatten nn >< flatten en - -instance Flattenable RangeNode where - flatten x = case x of - SingleRangeNode en -> flatten en - OpenRangeNode ddn -> flatten ddn - RightUnboundedRangeNode en ddn -> flatten en >< flatten ddn - LeftUnboundedRangeNode ddn en -> flatten ddn >< flatten en - BoundedRangeNode en ddn en' -> mconcat [flatten en, flatten ddn, flatten en'] - --- instance Flattenable DoubleDotNode where --- flatten (DoubleDotNode a b) = flatten a >< flatten b - -instance Flattenable NamedDomainNode where - flatten (NameDomainNode a Nothing) = flatten a - flatten (NameDomainNode a (Just (b,c))) = mconcat [flatten a,flatten b,flatten c] - -instance Flattenable NameNode where - flatten (NameNode n) = flatten n - flatten (MissingNameNode n) = flatten n -instance Flattenable NameNodeS where - flatten (NameNodeS n) = flatten n - -instance Flattenable ParenExpressionNode where - flatten (ParenExpressionNode a b c) = flatten a >< flatten b >< flatten c - -instance Flattenable b => Flattenable (ListNode b) where - flatten (ListNode l1 seq l2) = mconcat [flatten l1, flatten seq, flatten l2] - -instance Flattenable b => Flattenable (Sequence b) where - flatten (Seq es) = mconcat $ map flatten es - -instance Flattenable b => Flattenable (SeqElem b) where - flatten (SeqElem v s) = flatten v >< flatten s - flatten (MissingSeqElem v s) = flatten v >< flatten s -instance Flattenable b => Flattenable [b] where - flatten = mconcat . map flatten - - - - +instance HighLevelTree ComprehensionBodyNode where + makeTree x = case x of + CompBodyCondition en -> makeTree en + CompBodyDomain a b c -> makeTree a <> makeTree b <> makeTree c + CompBodyGenExpr a b c -> makeTree a <> makeTree b <> makeTree c + CompBodyLettingNode a b c d -> mconcat [makeTree a, makeTree b, makeTree c, makeTree d] + +instance HighLevelTree OperatorExpressionNode where + makeTree x = case x of + PostfixOpNode en pon -> makeTree en <> makeTree pon + PrefixOpNode lt en -> makeTree lt <> makeTree en + BinaryOpNode en lt en' -> mconcat [makeTree en, makeTree lt, makeTree en'] + +instance HighLevelTree PostfixOpNode where + makeTree x = case x of + IndexedNode l -> makeTree l + OpFactorial lt -> makeTree lt + ApplicationNode ln -> makeTree ln + ExplicitDomain l1 l2 dom l3 -> mconcat [makeTree l1,makeTree l2,makeTree dom,makeTree l3] + + + + +instance HighLevelTree DomainNode where + makeTree x = HLTagged (TIDomain x) $ case x of + ParenDomainNode a b c -> [makeTree a, makeTree b, makeTree c] + BoolDomainNode lt -> [makeTree lt] + RangedIntDomainNode lt ln -> [makeTree lt,makeTree ln] + MetaVarDomain a -> [makeTree a] + RangedEnumNode nn ln -> [makeTree nn , makeTree ln] + -- EnumDomainNode nn -> makeTree nn + ShortTupleDomainNode ln -> [makeTree ln] + TupleDomainNode lt ln -> [makeTree lt , makeTree ln] + RecordDomainNode lt ln -> [makeTree lt , makeTree ln] + VariantDomainNode lt ln -> [makeTree lt , makeTree ln] + MatrixDomainNode a m_ib b c d -> [makeTree a ,makeTree m_ib, makeTree b , makeTree c , makeTree d] + SetDomainNode a b c d -> [makeTree a , makeTree b , makeTree c , makeTree d] + MSetDomainNode a b c d -> [makeTree a , makeTree b, makeTree c , makeTree d] + FunctionDomainNode a b c d e -> [makeTree a , makeTree b , makeTree c , makeTree d,makeTree e] + SequenceDomainNode a b c d -> [makeTree a , makeTree b , makeTree c , makeTree d] + RelationDomainNode a b c d -> [makeTree a , makeTree b , makeTree c , makeTree d] + PartitionDomainNode a b c d -> [makeTree a , makeTree b , makeTree c , makeTree d] + MissingDomainNode m -> [makeTree m] + +instance HighLevelTree IndexedByNode where + makeTree (IndexedByNode a b ) = makeTree a <> makeTree b + + +instance HighLevelTree a => HighLevelTree (Maybe a) where + makeTree = maybe mempty makeTree + +instance HighLevelTree AttributeNode where + makeTree x = case x of + NamedAttributeNode nn m_e -> makeTree nn <> makeTree m_e + -- NamedExpressionAttribute nn en -> makeTree nn <> makeTree en + +instance HighLevelTree RangeNode where + makeTree x = case x of + SingleRangeNode en -> makeTree en + OpenRangeNode ddn -> makeTree ddn + RightUnboundedRangeNode en ddn -> makeTree en <> makeTree ddn + LeftUnboundedRangeNode ddn en -> makeTree ddn <> makeTree en + BoundedRangeNode en ddn en' -> mconcat [makeTree en, makeTree ddn, makeTree en'] + +-- instance HighLevelTree DoubleDotNode where +-- makeTree (DoubleDotNode a b) = makeTree a <> makeTree b + +instance HighLevelTree NamedDomainNode where + makeTree (NameDomainNode a Nothing) = makeTree a + makeTree (NameDomainNode a (Just (b,c))) = mconcat [makeTree a,makeTree b,makeTree c] + +instance HighLevelTree NameNode where + makeTree (NameNode n) = makeTree n + makeTree (MissingNameNode n) = makeTree n + +instance HighLevelTree NameNodeS where + makeTree (NameNodeS n) = makeTree n +instance HighLevelTree ParenExpressionNode where + makeTree (ParenExpressionNode a b c) = makeTree a <> makeTree b <> makeTree c + + + + + +instance HighLevelTree b => HighLevelTree (Sequence b) where + makeTree (Seq es) = mconcat $ map makeTree es + +instance HighLevelTree b => HighLevelTree (SeqElem b) where + makeTree (SeqElem v s) = makeTree v <> makeTree s + makeTree (MissingSeqElem v s) = makeTree v <> makeTree s +instance HighLevelTree b => HighLevelTree [b] where + makeTree = HLTagged TIGeneral . map makeTree + +type TreeTag = ListItemClasses +data HLTree + = HLTagged TreeItemLinks [HLTree] + | HLLeaf ETok + | HLNone + deriving (Show,Data,Typeable) + +instance Semigroup HLTree where + HLNone <> a = a + a <> HLNone = a + HLTagged TIGeneral xs <> a = HLTagged TIGeneral (xs++[a]) + a <> HLTagged TIGeneral xs = HLTagged TIGeneral $ a:xs + a <> b = HLTagged TIGeneral [a,b] + +instance Monoid HLTree where + mempty = HLNone + +taggedSeq :: HighLevelTree a => TreeTag -> Sequence a -> HLTree +taggedSeq s (Seq els) = HLTagged (TIList s) $ makeTree <$> els +taggedList :: HighLevelTree a => TreeTag -> ListNode a -> HLTree +taggedList s (ListNode a b c) = HLTagged TIGeneral $ makeTree a : taggedSeq s b : [makeTree c] + +-- Tag types for nodes, mainly used to guide completions +data ListItemClasses + = ICAttribute + | ICExpression + | ICDomain + | ICRange + | ICIdentifier + | ICStatement + deriving (Show,Data,Ord,Eq) + +-- Embed the actual syntax portion into the tree, in case needed +data TreeItemLinks + = TIExpression ExpressionNode + | TIDomain DomainNode + | TIList ListItemClasses + | TIGeneral + deriving (Show,Data) +instance Eq TreeItemLinks where + TIGeneral == TIGeneral = True + _ == _ = False +instance HighLevelTree (ListNode ExpressionNode) where + makeTree = taggedList ICExpression +instance HighLevelTree (ListNode NameNode) where + makeTree = taggedList ICIdentifier +instance HighLevelTree (ListNode DomainNode) where + makeTree = taggedList ICDomain + +instance HighLevelTree (ListNode RangeNode) where + makeTree = taggedList ICRange + +instance HighLevelTree (ListNode AttributeNode) where + makeTree = taggedList ICAttribute +instance HighLevelTree (ListNode RecordMemberNode) where + makeTree = taggedList ICIdentifier +instance HighLevelTree (ListNode ArrowPairNode) where + makeTree = taggedList ICIdentifier +instance HighLevelTree (ListNode RelationElemNode) where + makeTree = taggedList ICIdentifier +instance HighLevelTree (ListNode PartitionElemNode) where + makeTree = taggedList ICIdentifier +instance HighLevelTree (ListNode NamedDomainNode) where + makeTree = taggedList ICIdentifier + +instance HighLevelTree (ListNode AbstractPatternNode) where + makeTree = taggedList ICIdentifier +class HighLevelTree a where + makeTree :: a -> HLTree + +instance HighLevelTree LToken where + makeTree (RealToken a) = makeTree a + makeTree (SkippedToken t) = HLLeaf t + makeTree (MissingToken m) = HLLeaf m +instance HighLevelTree SToken where + makeTree (StrictToken ts t) = HLTagged TIGeneral $ (HLLeaf <$> ts) ++ [HLLeaf t] + +instance HighLevelTree ProgramTree where + makeTree (ProgramTree Nothing sts cln) = HLTagged TIGeneral $ (HLTagged (TIList ICStatement) $ makeTree <$> sts) : [makeTree cln] + makeTree (ProgramTree (Just lv) sts cln) = HLTagged TIGeneral $ [makeTree lv] ++ (makeTree <$> sts) ++ [makeTree cln] + +instance HighLevelTree LangVersionNode where + makeTree (LangVersionNode a b c) = HLTagged TIGeneral $ makeTree a : makeTree b : [makeTree c] + + +-- getContainers :: HLTree -> Int -> Int -> HLTree +-- getContainers HLNone r c = HLNone + + +bounds :: ETok -> SourcePos -> Bool +bounds t (SourcePos _ r c)= let + (SourcePos _ rl cl,SourcePos _ rr cr) = (trueStart t,sourcePosAfter t) + in r >= rl && c >= cl && r <= rr && c <= cr + +-- inBounds :: SourcePos -> HLTree -> Bool +-- inBounds (SourcePos _ r c) t +-- | null $ flatten t = False +-- | otherwise = let +-- (SourcePos _ rl cl,SourcePos _ rr cr) = bounds t +-- in r >= rl && c >= cl && r <= rr && c <= cr + +contains :: SourcePos -> HLTree -> Bool +contains p t = case t of + HLNone -> False + HLLeaf e -> bounds e p + HLTagged _ xs -> any (contains p) xs + -- HLGeneral xs -> any (contains p) xs + -- HLList _ xs -> any (contains p ) xs + +filterContaining :: SourcePos -> HLTree -> [HLTree] +filterContaining _ HLNone = [] +filterContaining p n@(HLLeaf _) = [n |contains p n] +filterContaining p (HLTagged t xs) = let cs = [x | x <-xs,contains p x] + in HLTagged t cs : concatMap (filterContaining p) cs \ No newline at end of file diff --git a/src/Conjure/Language/AST/Syntax.hs b/src/Conjure/Language/AST/Syntax.hs index 27356a99a9..2c39b53e1c 100644 --- a/src/Conjure/Language/AST/Syntax.hs +++ b/src/Conjure/Language/AST/Syntax.hs @@ -1,21 +1,23 @@ +{-# LANGUAGE DeriveDataTypeable #-} module Conjure.Language.AST.Syntax where - +import Data.Data import Conjure.Language.Lexer (ETok(..), prettySplitComments) -import Conjure.Prelude hiding (Doc, group) +import Conjure.Prelude hiding (Doc, group,Data,Typeable) import Prettyprinter import Prettyprinter.Render.Text (renderStrict) + data LToken = RealToken SToken | MissingToken ETok | SkippedToken ETok - deriving (Eq, Ord, Show) + deriving (Eq, Ord, Show, Data) data SToken = StrictToken [ETok] ETok - deriving (Eq , Ord, Show) + deriving (Eq , Ord, Show, Data) instance Null SToken where isMissing = const False instance Pretty SToken where @@ -37,7 +39,7 @@ data ProgramTree = ProgramTree , statements :: [StatementNode] , eofToken :: SToken } - deriving (Show) + deriving (Show, Data ,Typeable) instance Pretty ProgramTree where pretty (ProgramTree l s e) = @@ -48,7 +50,7 @@ instance Pretty ProgramTree where ] data LangVersionNode = LangVersionNode SToken NameNode (Sequence SToken) - deriving (Show) + deriving (Show, Data) instance Pretty LangVersionNode where pretty (LangVersionNode t n ns) = pretty t <+> pretty n <+> pretty ns @@ -60,7 +62,7 @@ data StatementNode | ObjectiveStatement ObjectiveStatementNode | HeuristicStatement SToken ExpressionNode | UnexpectedToken LToken - deriving (Show) + deriving (Show, Data , Typeable) instance Pretty StatementNode where pretty x = case x of DeclarationStatement dsn -> pretty dsn @@ -76,7 +78,7 @@ data SuchThatStatementNode SToken -- Such LToken -- That (Sequence ExpressionNode) -- constraints - deriving (Show) + deriving (Show, Data) instance Pretty SuchThatStatementNode where pretty (SuchThatStatementNode l1 l2 es) = topLevelPretty [RealToken l1, l2] (pretty es) @@ -85,7 +87,7 @@ data WhereStatementNode = WhereStatementNode SToken -- where (Sequence ExpressionNode) -- expresssions - deriving (Show) + deriving (Show, Data) instance Pretty WhereStatementNode where pretty (WhereStatementNode w se) = topLevelPretty [RealToken w] (pretty se) @@ -93,7 +95,7 @@ instance Pretty WhereStatementNode where data ObjectiveStatementNode = ObjectiveMin SToken ExpressionNode | ObjectiveMax SToken ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty ObjectiveStatementNode where pretty x = case x of ObjectiveMin lt en -> pretty lt <+> pretty en @@ -104,7 +106,7 @@ data DeclarationStatementNode = FindStatement SToken (Sequence FindStatementNode) | GivenStatement SToken (Sequence GivenStatementNode) | LettingStatement SToken (Sequence LettingStatementNode) - deriving (Show) + deriving (Show, Data, Typeable) instance Pretty DeclarationStatementNode where pretty x = case x of @@ -116,7 +118,7 @@ data FindStatementNode (Sequence NameNode) -- names LToken -- colon DomainNode -- domain - deriving (Show) + deriving (Show, Data) instance Pretty FindStatementNode where pretty (FindStatementNode names col dom) = pretty names <+> pretty col <+> pretty dom instance Null FindStatementNode where @@ -131,7 +133,7 @@ data GivenStatementNode LToken -- new LToken -- type LToken -- enum - deriving (Show) + deriving (Show, Data) instance Pretty GivenStatementNode where pretty g = case g of GivenStatementNode se lt dn -> pretty se <+> pretty lt <+> pretty dn @@ -146,7 +148,7 @@ data LettingStatementNode (Sequence NameNode) LToken -- LettingAssignmentNode - deriving (Show) + deriving (Show, Data) instance Pretty LettingStatementNode where pretty (LettingStatementNode ns be assign) = pretty ns <+> pretty be <+> pretty assign @@ -169,7 +171,7 @@ data LettingAssignmentNode LToken -- lOf LToken -- lSize ExpressionNode -- expr - deriving (Show) + deriving (Show, Data) instance Pretty LettingAssignmentNode where pretty a = case a of @@ -191,7 +193,7 @@ data BranchingStatementNode SToken LToken (ListNode ExpressionNode) - deriving (Show) + deriving (Show, Data) instance Pretty BranchingStatementNode where pretty (BranchingStatementNode br o exs) = pretty br <+> pretty o <+> pretty exs @@ -218,7 +220,7 @@ data DomainNode | RelationDomainNode SToken MAttributes LToken (ListNode DomainNode) | PartitionDomainNode SToken MAttributes LToken DomainNode | MissingDomainNode LToken - deriving (Show) + deriving (Show, Data) instance Pretty DomainNode where pretty x = case x of @@ -249,7 +251,7 @@ instance Null DomainNode where isMissing _ = False data IndexedByNode = IndexedByNode LToken LToken - deriving (Show) + deriving (Show, Data) instance Pretty IndexedByNode where pretty (IndexedByNode a b) = pretty a <+> pretty b data RangeNode @@ -258,7 +260,7 @@ data RangeNode | RightUnboundedRangeNode ExpressionNode DoubleDotNode | LeftUnboundedRangeNode DoubleDotNode ExpressionNode | BoundedRangeNode ExpressionNode DoubleDotNode ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty RangeNode where pretty x = case x of @@ -273,11 +275,11 @@ instance Null RangeNode where type DoubleDotNode = SToken --- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show) +-- data DoubleDotNode = DoubleDotNode LToken LToken deriving (Show, Data) data AttributeNode = NamedAttributeNode SToken (Maybe ExpressionNode) - deriving (Show) + deriving (Show, Data) instance Pretty AttributeNode where pretty (NamedAttributeNode a m_e) = pretty a <+> pretty m_e @@ -286,7 +288,7 @@ instance Null AttributeNode where data NamedDomainNode = NameDomainNode NameNode (Maybe (LToken, DomainNode)) - deriving (Show) + deriving (Show, Data) instance Pretty NamedDomainNode where pretty (NameDomainNode nn Nothing) = pretty nn pretty (NameDomainNode nn (Just (e, d))) = pretty nn <> pretty e <> pretty d @@ -297,14 +299,14 @@ instance Null NamedDomainNode where -- Common Statements data NameNodeS = NameNodeS SToken - deriving (Show) + deriving (Show, Data) instance Pretty NameNodeS where pretty (NameNodeS n) = pretty n instance Null NameNodeS where isMissing = const False data NameNode = NameNode NameNodeS | MissingNameNode LToken - deriving (Show) + deriving (Show, Data) instance Pretty NameNode where @@ -329,7 +331,7 @@ data ExpressionNode | AttributeAsConstriant SToken (ListNode ExpressionNode) | MissingExpressionNode LToken | SpecialCase SpecialCaseNode - deriving (Show) + deriving (Show, Data) instance Pretty ExpressionNode where pretty x = case x of @@ -350,26 +352,26 @@ instance Null ExpressionNode where isMissing _ = False data SpecialCaseNode = ExprWithDecls SToken ExpressionNode SToken [StatementNode] SToken - deriving (Show) + deriving (Show, Data) instance Pretty SpecialCaseNode where pretty x = case x of ExprWithDecls lt en lt' sns lt2 -> group $ cat [pretty lt, pretty en, pretty lt', pretty sns, pretty lt2] data DomainExpressionNode = DomainExpressionNode LToken DomainNode LToken - deriving (Show) + deriving (Show, Data) instance Pretty DomainExpressionNode where pretty (DomainExpressionNode l d r) = pretty l <> pretty d <> pretty r data ParenExpressionNode = ParenExpressionNode LToken ExpressionNode LToken - deriving (Show) + deriving (Show, Data) -newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show) +newtype ShortTuple = ShortTuple (ListNode ExpressionNode) deriving (Show, Data) instance Pretty ShortTuple where pretty (ShortTuple exps) = pretty exps instance Null ShortTuple where isMissing (ShortTuple ls) = isMissing ls -data LongTuple = LongTuple SToken (ListNode ExpressionNode) deriving (Show) +data LongTuple = LongTuple SToken (ListNode ExpressionNode) deriving (Show, Data) instance Pretty LongTuple where pretty (LongTuple t exps) = pretty t <> pretty exps @@ -391,7 +393,7 @@ data LiteralNode | SequenceLiteral SToken (ListNode ExpressionNode) | RelationLiteral SToken (ListNode RelationElemNode) | PartitionLiteral SToken (ListNode PartitionElemNode) - deriving (Show) + deriving (Show, Data) instance Pretty LiteralNode where pretty l = case l of @@ -416,7 +418,7 @@ data MatrixLiteralNode (Maybe OverDomainNode) -- explicitDomain (Maybe ComprehensionNode) -- compBody LToken -- close - deriving (Show) + deriving (Show, Data) instance Pretty MatrixLiteralNode where pretty (MatrixLiteralNode bl es d c br) = @@ -431,13 +433,13 @@ data ComprehensionNode = ComprehensionNode SToken (Sequence ComprehensionBodyNode) - deriving (Show) + deriving (Show, Data) instance Pretty ComprehensionNode where pretty (ComprehensionNode bar es) = align $ pretty bar <+> pretty es data RecordMemberNode = RecordMemberNode NameNode LToken ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty RecordMemberNode where pretty (RecordMemberNode n t e) = pretty n <> pretty t <> pretty e @@ -445,7 +447,7 @@ instance Null RecordMemberNode where isMissing (RecordMemberNode n t e) = isMissing n && isMissing t && isMissing e data ArrowPairNode = ArrowPairNode ExpressionNode LToken ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty ArrowPairNode where pretty (ArrowPairNode l a r) = pretty l <> pretty a <> pretty r instance Null ArrowPairNode where @@ -454,7 +456,7 @@ instance Null ArrowPairNode where data RelationElemNode = RelationElemNodeLabeled LongTuple | RelationElemNodeShort ShortTuple - deriving (Show) + deriving (Show, Data) instance Pretty RelationElemNode where pretty x = case x of RelationElemNodeLabeled lt -> pretty lt @@ -464,7 +466,7 @@ instance Null RelationElemNode where isMissing (RelationElemNodeShort st) = isMissing st newtype PartitionElemNode = PartitionElemNode (ListNode ExpressionNode) - deriving (Show) + deriving (Show, Data) instance Pretty PartitionElemNode where pretty (PartitionElemNode l) = pretty l instance Null PartitionElemNode where @@ -478,7 +480,7 @@ data QuantificationExpressionNode (Maybe QuanticationGuard) LToken -- dot ExpressionNode - deriving (Show) -- MAYBE? + deriving (Show, Data) -- MAYBE? instance Pretty QuantificationExpressionNode where pretty (QuantificationExpressionNode q pats over m_guard lDot body) = @@ -489,7 +491,7 @@ data QuantificationOverNode = QuantifiedSubsetOfNode SToken ExpressionNode | QuantifiedMemberOfNode SToken ExpressionNode | QuantifiedDomainNode OverDomainNode - deriving (Show) + deriving (Show, Data) instance Pretty QuantificationOverNode where pretty q = case q of QuantifiedSubsetOfNode lt en -> pretty lt <+> pretty en @@ -497,7 +499,7 @@ instance Pretty QuantificationOverNode where QuantifiedDomainNode odn -> pretty odn data OverDomainNode = OverDomainNode LToken DomainNode - deriving (Show) + deriving (Show, Data) instance Pretty OverDomainNode where pretty (OverDomainNode a b) = pretty a <+> pretty b data AbstractPatternNode @@ -506,7 +508,7 @@ data AbstractPatternNode | AbstractPatternTuple (Maybe LToken) (ListNode AbstractPatternNode) | AbstractPatternMatrix (ListNode AbstractPatternNode) | AbstractPatternSet (ListNode AbstractPatternNode) - deriving (Show) + deriving (Show, Data) instance Pretty AbstractPatternNode where pretty a = case a of AbstractIdentifier nn -> pretty nn @@ -518,12 +520,12 @@ instance Pretty AbstractPatternNode where instance Null AbstractPatternNode where isMissing (_) = False data QuanticationGuard = QuanticationGuard SToken ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty QuanticationGuard where pretty (QuanticationGuard a e) = pretty a <+> pretty e data QuantificationPattern = QuantificationPattern ExpressionNode - deriving (Show) + deriving (Show, Data) data ComprehensionExpressionNode = ComprehensionExpressionNode @@ -532,14 +534,14 @@ data ComprehensionExpressionNode LToken (Sequence ComprehensionBodyNode) LToken - deriving (Show) + deriving (Show, Data) data ComprehensionBodyNode = CompBodyCondition ExpressionNode | CompBodyDomain (Sequence AbstractPatternNode) SToken DomainNode | CompBodyGenExpr (Sequence AbstractPatternNode) SToken ExpressionNode | CompBodyLettingNode SToken AbstractPatternNode LToken ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty ComprehensionBodyNode where pretty x = case x of @@ -557,7 +559,7 @@ data OperatorExpressionNode = PostfixOpNode ExpressionNode PostfixOpNode | PrefixOpNode SToken ExpressionNode | BinaryOpNode ExpressionNode SToken ExpressionNode - deriving (Show) + deriving (Show, Data) instance Pretty OperatorExpressionNode where pretty x = case x of @@ -570,7 +572,7 @@ data PostfixOpNode | OpFactorial SToken | ExplicitDomain SToken SToken DomainNode LToken | ApplicationNode (ListNode ExpressionNode) - deriving (Show) + deriving (Show, Data) instance Pretty PostfixOpNode where pretty o = case o of @@ -584,13 +586,13 @@ instance Pretty PostfixOpNode where data IndexerNode = Indexer - deriving (Show) + deriving (Show, Data) data ListNode itemType = ListNode { lOpBracket :: LToken , items :: Sequence itemType , lClBracket :: LToken } - deriving (Show) + deriving (Show, Data) -- prettyList :: Pretty a => ListNode a > Doc -- prettyList (ListNode start es end) = group $ align $ cat $ @@ -614,7 +616,7 @@ instance (Null a) => Null (ListNode a) where newtype Sequence itemType = Seq { elems :: [SeqElem itemType] } - deriving (Show) + deriving (Show, Data) instance Pretty a => Pretty (Sequence a) where pretty (Seq xs) = align $ sep $ map pretty xs @@ -632,7 +634,7 @@ instance (Null a) => Null (Sequence a) where isMissing (Seq [a]) = isMissing a isMissing (Seq _) = False --- deriving (Show) +-- deriving (Show, Data) -- instance (Show a) => Show (Sequence a) where -- show (Seq e) = "Seq:\n" ++ intercalate "\n\t" (map show e) ++ "\n" @@ -642,7 +644,7 @@ data SeqElem itemType , separator :: Maybe LToken } | MissingSeqElem LToken LToken - deriving (Show) + deriving (Show, Data) instance Pretty a => Pretty (SeqElem a) where pretty (SeqElem i s) = pretty i <> pretty s pretty _ = emptyDoc @@ -669,4 +671,6 @@ flatIndent :: Int -> Doc ann -> Doc ann flatIndent amt d = flatAlt (line <> indent amt d) d renderAST :: Int -> ProgramTree -> Text -renderAST n = renderStrict . layoutSmart (LayoutOptions $ AvailablePerLine n 0.8) . pretty \ No newline at end of file +renderAST n = renderStrict . layoutSmart (LayoutOptions $ AvailablePerLine n 0.8) . pretty + + diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index 48defa27b4..c8fbb1c792 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -1,4 +1,5 @@ {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DeriveDataTypeable #-} {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {-# HLINT ignore "Use camelCase" #-} @@ -290,12 +291,12 @@ data Lexeme | L_EOF | L_SpecialCase - deriving (Eq, Ord, Show,Generic) --Generic + deriving (Eq, Ord, Show,Data,Generic) --Generic instance Hashable Lexeme data MissingStructuralElements = MissingExpression | MissingDomain | MissingUnknown - deriving (Eq, Ord, Show,Generic) --Generic + deriving (Eq, Ord, Show,Data,Generic) --Generic instance Hashable MissingStructuralElements lexemes :: [(T.Text, Lexeme)] diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 24468b2772..45a2db7570 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -3,6 +3,7 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} @@ -22,7 +23,8 @@ module Conjure.Language.Lexer sourcePosAfter, totalLength, trueLength, - tokenStart, + trueStart, + tokenOffset, sourcePos0, LexerError(..), runLexer, @@ -64,7 +66,7 @@ class Reformable a where reform :: a -> L.Text instance Reformable ETok where - reform e | oTLength (offsets e) == 0 = "" + reform e | trueLength e == 0 = "" reform (ETok{capture=cap,trivia=triv}) = L.append (L.concat $ map showTrivia triv) (L.fromStrict cap) where showTrivia :: Trivia -> L.Text @@ -91,14 +93,20 @@ isIdentifierFirstLetter ch = isAlpha ch || ch `elem` ("_" :: String) || ch `elem isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis -data Offsets =Offsets {oStart::Int,oTrueStart :: Int,oTLength::Int,oSourcePos::SourcePos} - deriving (Show, Eq, Ord) +data Offsets = Offsets { + oStart::Int, + oTotalLength::Int, + oTokenLength::Int, + oTrueStart :: SourcePos, + oSourcePos::SourcePos, + oEndPos::SourcePos} + deriving (Show, Eq, Ord , Data) type Lexer = Parsec Void Text -- type Lexer = Parsec Void Text ETokenStream data Trivia = WhiteSpace Text | LineComment Text | BlockComment Text - deriving (Show, Eq, Ord) + deriving (Show, Eq, Ord , Data) data ETok = ETok { offsets :: Offsets @@ -106,7 +114,7 @@ data ETok = ETok , lexeme :: Lexeme , capture :: Text } - deriving (Eq, Ord,Show) + deriving (Eq, Ord,Show , Data) instance Pr.Pretty ETok where pretty = Pr.unAnnotate . uncurry (Pr.<>) . prettySplitComments @@ -116,19 +124,24 @@ prettySplitComments (ETok _ tr _ capture) = (Pr.hcat [Pr.pretty t Pr.<> Pr.hardl totalLength :: ETok -> Int -totalLength = oTLength . offsets +totalLength = oTotalLength . offsets trueLength :: ETok -> Int -trueLength (ETok{offsets = (Offsets o d l _)}) = max 0 (l + (o-d)) +trueLength = oTokenLength . offsets -tokenStart :: ETok -> Int -tokenStart (ETok{offsets = (Offsets _ s _ _)}) = s +-- tokenStart :: ETok -> Int +-- tokenStart (ETok{offsets = (Offsets _ s _ _ _)}) = s +tokenOffset :: ETok -> Int +tokenOffset = oStart . offsets + +trueStart :: ETok -> SourcePos +trueStart = oTrueStart . offsets tokenSourcePos :: ETok -> SourcePos tokenSourcePos = oSourcePos . offsets sourcePosAfter :: ETok -> SourcePos -sourcePosAfter ETok {offsets=(Offsets _ _ l (SourcePos a b (unPos->c)))} = SourcePos a b (mkPos (c + l)) +sourcePosAfter = oEndPos . offsets makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok @@ -152,22 +165,26 @@ eLex = aToken :: Lexer ETok aToken = do start <- getOffset + startPos <- getSourcePos whitespace <- pTrivia - wse <- getOffset - spos <- getSourcePos + tokenOffset <- getOffset + tokenStart <- getSourcePos (tok,cap) <- aLexeme tokenEnd <- getOffset - return $ makeToken (Offsets start wse (tokenEnd - start) spos) whitespace tok cap + endPos <- getSourcePos + return $ makeToken (Offsets start (tokenEnd - start) (tokenEnd - tokenOffset) startPos tokenStart endPos) whitespace tok cap pEOF :: Lexer ETok pEOF = do start <- getOffset + startPos <- getSourcePos whitespace <- pTrivia wse <- getOffset - spos <- getSourcePos + tokenStart <- getSourcePos eof tokenEnd <- getOffset - return $ makeToken (Offsets start wse (tokenEnd - start) spos) whitespace L_EOF "" + endPos <- getSourcePos + return $ makeToken (Offsets start (tokenEnd - start) (tokenEnd - wse) startPos tokenStart endPos) whitespace L_EOF "" aLexeme :: Lexer (Lexeme,Text) @@ -294,7 +311,7 @@ buildStream xs = case NE.nonEmpty xs of instance VisualStream ETokenStream where showTokens _ = L.unpack . reformList - tokensLength _ = sum . fmap ( oTLength . offsets ) + tokensLength _ = sum . fmap trueLength -- https://markkarpov.com/tutorial/megaparsec.html#working-with-custom-input-streams instance TraversableStream ETokenStream where diff --git a/src/Conjure/Language/Parser.hs b/src/Conjure/Language/Parser.hs index 43d4e49995..129330058a 100644 --- a/src/Conjure/Language/Parser.hs +++ b/src/Conjure/Language/Parser.hs @@ -43,7 +43,7 @@ import Conjure.UI.ErrorDisplay (showDiagnosticsForConsole) import Conjure.Language.Type (Type(..)) -- import Conjure.Language.AST.Helpers (ParserState) import qualified Conjure.Language.AST.Helpers as P -import Conjure.Language.AST.Reformer (Flattenable (flatten)) +import Conjure.Language.AST.Reformer (HighLevelTree(..),flatten) import Conjure.Language.Pretty import qualified Prettyprinter as Pr @@ -60,12 +60,12 @@ instance Pretty PipelineError where -lexAndParse :: Flattenable a => P.Parser a -> Text -> Either PipelineError a +lexAndParse :: HighLevelTree a => P.Parser a -> Text -> Either PipelineError a lexAndParse parse t = do lr <- either (Left . LexErr) Right $ L.runLexer t Nothing either (Left . ParserError ) Right $ runASTParser parse lr -runPipeline :: Flattenable a =>Pipeline a b -> (Maybe FilePath,Text) -> Either PipelineError b +runPipeline :: HighLevelTree a =>Pipeline a b -> (Maybe FilePath,Text) -> Either PipelineError b runPipeline (parse,val,tc) (fp,txt) = do lexResult <- either (Left . LexErr) Right $ L.runLexer txt fp parseResult <- either (Left . ParserError ) Right $ runASTParser parse lexResult @@ -81,7 +81,7 @@ parseModel = (parseProgram, V.validateModel,True) -parseIO :: (MonadFailDoc m, Flattenable i) => Pipeline i a -> String -> m a +parseIO :: (MonadFailDoc m, HighLevelTree i) => Pipeline i a -> String -> m a parseIO p s = do case runPipeline p $ (Just "IO",T.pack s) of Left err -> failDoc $ pretty $ show err @@ -112,7 +112,7 @@ parseExpr :: Pipeline S.ExpressionNode Expression parseExpr = (P.parseExpression,\x -> V.validateExpression x ?=> V.exactly TypeAny,True) -runLexerAndParser :: Flattenable n => Pipeline n a -> String -> T.Text -> Either Doc a +runLexerAndParser :: HighLevelTree n => Pipeline n a -> String -> T.Text -> Either Doc a runLexerAndParser p file inp = case runPipeline p (Just file,inp) of Left pe -> Left $ pretty pe Right a -> Right a @@ -135,6 +135,6 @@ partialPretty (S.ProgramTree lv sns lt) = Pr.vcat [ langVer = case lv of Nothing -> "language Essence 1.3" Just _ -> if V.isSyntacticallyValid V.validateLanguageVersion lv then Pr.pretty lv else fallback lv - fallback :: Flattenable a => a -> Pr.Doc ann + fallback :: HighLevelTree a => a -> Pr.Doc ann fallback v = Pr.pretty $ L.reformList $ flatten v pTopLevel st = if V.isSyntacticallyValid V.validateStatement st then Pr.pretty st else fallback st \ No newline at end of file diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 6b3b0b89d8..746e245ede 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -23,7 +23,7 @@ import qualified Conjure.Language.Expression as D ( Expression(Typed) ) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.Lexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, tokenStart, trueLength, sourcePos0) +import Conjure.Language.Lexer (ETok (ETok, lexeme),tokenOffset, tokenSourcePos, totalLength, trueLength, sourcePos0, sourcePosAfter) import Conjure.Language.Attributes import Conjure.Prelude @@ -50,7 +50,7 @@ import Conjure.Language.Expression.Op OpIndexing(OpIndexing), OpType (..), OpAttributeAsConstraint (OpAttributeAsConstraint), ) import Conjure.Language.Domain.AddAttributes (allSupportedAttributes) -import Conjure.Language.AST.Reformer (Flattenable (flatten)) +import Conjure.Language.AST.Reformer (flattenSeq,makeTree, HighLevelTree) import Text.Megaparsec.Pos (SourcePos(..)) import Data.Sequence (Seq (..), viewr, ViewR (..)) import Control.Monad (mapAndUnzipM) @@ -248,7 +248,7 @@ holdDeclarations f = do modify (\s->s{regionInfo=prev}) return (res,decls) -wrapRegion :: (Flattenable a,Flattenable b) => a -> b -> StructuralType -> ValidatorS n -> ValidatorS n +wrapRegion :: (HighLevelTree a,HighLevelTree b) => a -> b -> StructuralType -> ValidatorS n -> ValidatorS n wrapRegion regMain regSel = wrapRegion' (symbolRegion regMain) (symbolRegion regSel) wrapRegion' :: DiagnosticRegion -> DiagnosticRegion -> StructuralType -> ValidatorS n -> ValidatorS n @@ -263,13 +263,13 @@ wrapRegion' regMain regSel ty f = do -- injectRegion :: DiagnosticRegion -> DiagnosticRegion -> () -putDocs :: Flattenable a => DocType -> Text -> a -> ValidatorS () +putDocs :: HighLevelTree a => DocType -> Text -> a -> ValidatorS () putDocs t nm r = addRegion $ RegionInfo {rRegion=symbolRegion r,rSubRegion=Nothing, rRegionType=Documentation t nm,rChildren=[], rTable = M.empty} -putKeywordDocs :: Flattenable a =>Text ->a -> ValidatorS () +putKeywordDocs :: HighLevelTree a => Text -> a -> ValidatorS () putKeywordDocs = putDocs KeywordD -putTypeDoc :: Flattenable a =>Text ->a -> ValidatorS () +putTypeDoc :: HighLevelTree a =>Text ->a -> ValidatorS () putTypeDoc = putDocs TypeD -putAttrDoc :: Flattenable a =>Text ->a -> ValidatorS () +putAttrDoc :: HighLevelTree a =>Text ->a -> ValidatorS () putAttrDoc = putDocs AttributeD --Infix symbol validation and tagging @@ -328,7 +328,7 @@ data ValidatorState = ValidatorState { -- symbolTable=M.empty -- } -initialState :: Flattenable a => a -> Maybe Text -> ValidatorState +initialState :: HighLevelTree a => a -> Maybe Text -> ValidatorState initialState r path = ValidatorState { typeChecking = True, regionInfo=[], @@ -394,7 +394,7 @@ getContext = currentContext <$> get setContext :: DiagnosticRegion -> ValidatorS () setContext r = modify (\p -> p{currentContext = r}) -setContextFrom :: Flattenable a => a -> ValidatorS () +setContextFrom :: HighLevelTree a => a -> ValidatorS () setContextFrom a = setContext $ symbolRegion a -- strict :: Validator a -> ValidatorS a @@ -406,7 +406,7 @@ deState ((a,r),n) = (a,n,r) runValidator :: (ValidatorT r w a) -> r -> (a,[w],r) runValidator (ValidatorT r) d = deState $ runWriter (runStateT r d) -isSyntacticallyValid :: Flattenable a=> (a->ValidatorS b) -> a -> Bool +isSyntacticallyValid :: HighLevelTree a=> (a->ValidatorS b) -> a -> Bool isSyntacticallyValid v s = case runValidator (v s) (initialState s Nothing){typeChecking=False} of (_,vds,_) -> not $ any isError vds @@ -518,7 +518,7 @@ validateSuchThatStatement :: SuchThatStatementNode -> ValidatorS [Statement] validateSuchThatStatement s@(SuchThatStatementNode l1 l2 exprs) = wrapRegion s s SSuchThat $ do l1 `isA` TtKeyword l2 `isA'` TtKeyword - putKeywordDocs "such_that" [flatten l1,flatten l2] + putKeywordDocs "such_that" ((makeTree l1) `mappend` makeTree l2) exprs' <- validateSequence validateExpression exprs bools <- mapM (\(a,b)->do setContext a; return b ?=> tCondition) exprs' let bool_exprs = bools @@ -528,7 +528,7 @@ validateBranchingStatement :: BranchingStatementNode -> ValidatorS [Statement] validateBranchingStatement b@(BranchingStatementNode l1 l2 sts) = wrapRegion b b SBranching $ do l1 `isA` TtKeyword l2 `isA'` TtKeyword - putKeywordDocs "branchin_on" [flatten l1,flatten l2] + putKeywordDocs "branchin_on" ((makeTree l1) `mappend` makeTree l2) branchings <-catMaybes <$> validateList_ (f2n validateBranchingParts) sts return [SearchOrder branchings] where @@ -1749,10 +1749,10 @@ listToSeq :: ListNode a -> ValidatorS (Sequence a) listToSeq (ListNode l1 s l2) = checkSymbols [l1,l2] >> return s --visit a sequence, return a list of elements, nothing if missing -sequenceElems :: (Flattenable a) => Sequence a -> ValidatorS [Maybe a] +sequenceElems :: (HighLevelTree a) => Sequence a -> ValidatorS [Maybe a] sequenceElems (Seq els) = mapM (validateSequenceElem_ validateIdentity) els -listElems :: Flattenable a => ListNode a -> ValidatorS [Maybe a] +listElems :: HighLevelTree a => ListNode a -> ValidatorS [Maybe a] listElems = sequenceElems <=< listToSeq @@ -1762,13 +1762,13 @@ validateIdentity = return . pure validateArray :: (a -> ValidatorS b) -> [a] -> ValidatorS [b] validateArray f l = mapM f l -validateList :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> ListNode a -> ValidatorS [RegionTagged b] +validateList :: (HighLevelTree a,Fallback b) =>(a -> ValidatorS b) -> ListNode a -> ValidatorS [RegionTagged b] validateList validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end validateSequence validator seq -validateList_ :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> ListNode a -> ValidatorS [b] +validateList_ :: (HighLevelTree a,Fallback b) =>(a -> ValidatorS b) -> ListNode a -> ValidatorS [b] validateList_ validator (ListNode st seq end) = do _ <- validateSymbol st _ <- validateSymbol end @@ -1780,14 +1780,14 @@ validateList_ validator (ListNode st seq end) = do -- L_ExclamationMark -> "not" -- _ -> pack $ lexemeFace x -validateSequence :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> Sequence a -> ValidatorS [RegionTagged b] +validateSequence :: (HighLevelTree a,Fallback b) =>(a -> ValidatorS b) -> Sequence a -> ValidatorS [RegionTagged b] validateSequence f (Seq vals) = validateArray (validateSequenceElem f) vals -validateSequence_ :: (Flattenable a,Fallback b) =>(a -> ValidatorS b) -> Sequence a -> ValidatorS [b] +validateSequence_ :: (HighLevelTree a,Fallback b) =>(a -> ValidatorS b) -> Sequence a -> ValidatorS [b] validateSequence_ f s = do q <- validateSequence f s return . map snd $ q -validateSequenceElem :: (Flattenable a,Fallback b) => (a -> ValidatorS b) -> SeqElem a -> ValidatorS (RegionTagged b) +validateSequenceElem :: (HighLevelTree a,Fallback b) => (a -> ValidatorS b) -> SeqElem a -> ValidatorS (RegionTagged b) validateSequenceElem f (SeqElem i s) = do case s of Nothing -> pure () @@ -1800,7 +1800,7 @@ validateSequenceElem _ (MissingSeqElem plc sepr) = do return $ (symbolRegion plc , fallback "Missing elem") -validateSequenceElem_ :: (Flattenable a,Fallback b) => (a -> ValidatorS b) -> SeqElem a -> ValidatorS (b) +validateSequenceElem_ :: (HighLevelTree a,Fallback b) => (a -> ValidatorS b) -> SeqElem a -> ValidatorS (b) validateSequenceElem_ f (SeqElem i s) = do case s of Nothing -> pure () @@ -1843,19 +1843,19 @@ global =DiagnosticRegion sourcePos0 sourcePos0 0 0 -- SkippedToken _ -> trueLength h -- DiagnosticRegion start (offsetPositionBy tLength start) offset tLength -symbolRegion :: Flattenable a => a -> DiagnosticRegion +symbolRegion :: HighLevelTree a => a -> DiagnosticRegion symbolRegion a = case range of (h :<| rst) -> do let end =case viewr rst of EmptyR -> h _ :> et -> et - let start = tokenSourcePos h - let offset = tokenStart h + let start = tokenSourcePos $ h + let offset = tokenOffset h let tLength = sum (totalLength <$> rst) + trueLength h - let en = tokenSourcePos end - DiagnosticRegion start (offsetPositionBy (trueLength end) en) offset tLength + let en = sourcePosAfter end + DiagnosticRegion start en offset tLength _ -> global - where range :: Seq ETok = flatten a + where range :: Seq ETok = flattenSeq a () :: WithRegion a => a -> ErrorType -> ValidatorDiagnostic diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index d2ec6259cb..450cb0d70c 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -3,6 +3,8 @@ import Conjure.Prelude import Conjure.Language.Validator import Text.Megaparsec +import Data.Generics.Uniplate.Data as U + import qualified Data.Set as Set import Conjure.Language.AST.Syntax import Conjure.Language.AST.ASTParser @@ -13,6 +15,8 @@ import qualified Data.Text as T import Data.Map.Strict (assocs) import Conjure.Language.Pretty import Conjure.Language.AST.Reformer +import Data.Data +import Data.Traversable (traverse) type Parser t = Parsec DiagnosticForPrint Text t @@ -152,3 +156,15 @@ valFile p = do Just s -> val p s return () -- putStrLn validateFind + +withParseTree :: String -> (ProgramTree -> IO ()) -> IO() +withParseTree pa f = do + fil <- readFileIfExists pa + case runParser parseProgram "TEST" (either (const $ error "bad") id $ runLexer (maybe "" T.pack fil) Nothing) of + Left _ -> error "bad" + Right pt -> void $ f pt + +listBounds :: Int -> Int -> ProgramTree -> IO () +listBounds a b t = do + let hlt = makeTree t + sequence_ [print $ toConstr t | x@(HLTagged t _) <- universe hlt,contains (SourcePos "" (mkPos a) (mkPos b)) x] \ No newline at end of file diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index 02a2c3b7f5..c532908329 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -17,7 +17,7 @@ import Conjure.Language.Lexer (runLexer, reformList) import qualified Data.Text as T (pack, unpack) import qualified Data.Text.Lazy as L import Data.ByteString.Char8(hPutStrLn, pack) -import Conjure.Language.AST.Reformer (Flattenable(flatten)) +import Conjure.Language.AST.Reformer (flattenSeq) import Data.Algorithm.Diff (getGroupedDiff) import Data.Algorithm.DiffOutput (ppDiff) import GHC.IO.Handle.FD (stderr) @@ -45,7 +45,7 @@ testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \s Left _pe -> assertFailure $ "Parser failed in:" ++ fp Right pt -> do step "RoundTripping" - let roundTrip = L.unpack $ reformList $ flatten pt + let roundTrip = L.unpack $ reformList $ flattenSeq pt unless (roundTrip == usableFileData) $ do let diff = getGroupedDiff (lines roundTrip) (lines usableFileData) Data.ByteString.Char8.hPutStrLn stderr $ Data.ByteString.Char8.pack $ "===DIFF: " ++ fp From 8f62a19e99bc9f3d4b9b9cb5c065d414d82dd672 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Wed, 17 May 2023 14:47:32 +0100 Subject: [PATCH 278/378] further work on suggestions --- src/Conjure/LSP/Handlers/Suggestions.hs | 80 ++++++++++++++++++++++--- 1 file changed, 72 insertions(+), 8 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index f3ceffcdcb..b36c4d00c4 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -1,6 +1,6 @@ module Conjure.LSP.Handlers.Suggestions where -import Conjure.LSP.Util (ProcessedFile (ProcessedFile), regionToRange, withProcessedDoc,getNextTokenStart,sourcePosToPosition) +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), regionToRange, withProcessedDoc,getNextTokenStart,sourcePosToPosition, positionToSourcePos, sendInfoMessage) import Conjure.Language (Type (..)) import Conjure.Language.AST.Reformer import Conjure.Language.Type (IntTag (..)) @@ -13,11 +13,13 @@ import Data.Text (intercalate,pack) import Language.LSP.Server (Handlers, LspM, requestHandler) import Language.LSP.Types (SymbolKind(..),SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..), Position(..)) import qualified Language.LSP.Types as T -import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position)) +import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position), HasCompletionItemKind (completionItemKind)) import Conjure.Language.Pretty (prettyT) import qualified Data.Map.Strict as Map import Conjure.Language.Validator (ErrorType(TokenError), DiagnosticRegion (drSourcePos)) import Conjure.Language.AST.Syntax (LToken(MissingToken)) +import Conjure.Language.AST.Reformer (HLTree (HLNone), TreeItemLinks (TIList),ListItemClasses(..)) +import Text.Megaparsec (SourcePos) suggestionHandler :: Handlers (LspM ()) suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do @@ -26,24 +28,67 @@ suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do withProcessedDoc ps $ \(ProcessedFile _ diags (regionInfo -> ri) pt) -> do let symbols = Map.toList $ rTable $ head ri let nextTStart = getNextTokenStart context pt + let innermostSymbolTable = symbols let errors = [(r,d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags ] let contextTokens = take 1 [ lexeme w | (r,MissingToken w) <- errors,isInRange nextTStart r] let missingTokenBasedHint = case contextTokens of - [l] -> map defaultCompletion $ makeMissingTokenHint l + [l] -> makeMissingTokenHint l _ -> makeSuggestionsFromSymbolTable symbols where - makeMissingTokenHint (L_Missing s) = [pack $ show s] - makeMissingTokenHint LMissingIdentifier = ["newIdentifier1"] - makeMissingTokenHint l = [lexemeText l] - res $ Right $ InL . T.List $ missingTokenBasedHint + makeMissingTokenHint (L_Missing s) = case s of + MissingExpression -> makeExpressionSuggestions innermostSymbolTable + MissingDomain -> makeDomainSuggestions innermostSymbolTable + MissingUnknown -> [] + + makeMissingTokenHint LMissingIdentifier = freeIdentifierSuggestion innermostSymbolTable + makeMissingTokenHint l = [defaultCompletion $ lexemeText l] + sendInfoMessage $ pack . show $ context + let tlSymbol = getLowestLevelTaggedRegion (positionToSourcePos context) $ makeTree pt + let tlSymbolSuggestion = case tlSymbol of + Just (TIDomain _) -> makeDomainSuggestions innermostSymbolTable + Just (TIExpression _) -> makeExpressionSuggestions innermostSymbolTable + Just (TIList t) -> makeTagSuggestions innermostSymbolTable t + q -> [defaultCompletion $ pack . show $ q] + res $ Right $ InL . T.List $ tlSymbolSuggestion ++ missingTokenBasedHint isInRange :: T.Position -> DiagnosticRegion -> Bool isInRange p reg = sourcePosToPosition (drSourcePos reg) == p +prettyNodeType :: TreeItemLinks -> Text +prettyNodeType (TIExpression _) = "Expression" +prettyNodeType (TIDomain _) = "Domain" +prettyNodeType TIGeneral = "General" +prettyNodeType (TIList t) = pack ("[ " ++ (show t) ++ "]") makeSuggestionsFromSymbolTable :: [(Text,SymbolTableValue)] -> [CompletionItem] makeSuggestionsFromSymbolTable = map symbolToHint + + +makeDomainSuggestions :: [(Text,SymbolTableValue)] -> [CompletionItem] +makeDomainSuggestions table = stDomains ++ newDomainPlaceholders + where stDomains = map symbolToHint $ [x | x@(_,(_,_,Kind DomainType t)) <- table, typesUnifyS [t,TypeAny]] + newDomainPlaceholders = uncurry snippetCompletion <$> [ + ("int","int"), + ("int","bool"), + ("matrix","matrix indexed by ${1:[index_domains]} of ${2:type}"), + ("set","set of $1"), + ("mset","mset of $1") + ] +makeExpressionSuggestions :: [(Text,SymbolTableValue)] -> [CompletionItem] +makeExpressionSuggestions table = stExprs ++ newExpressionPlaceholders + where stExprs = map symbolToHint $ [x | x@(_,(_,_,Kind ValueType{} t)) <- table,typesUnifyS [t,TypeAny]] + newExpressionPlaceholders = [] +makeTagSuggestions :: [(Text,SymbolTableValue)] -> ListItemClasses -> [CompletionItem] +makeTagSuggestions table tag = case tag of + ICAttribute -> defaultCompletion <$> ["size"] + ICExpression -> makeExpressionSuggestions table + ICDomain -> makeDomainSuggestions table + ICRange -> uncurry snippetCompletion <$> [("openL","..$1"),("closed","$1..$2"),("openR","$1..")] + ICIdentifier -> freeIdentifierSuggestion table + ICStatement -> topLevelSuggestions + + symbolToHint :: (Text,SymbolTableValue) -> CompletionItem symbolToHint (name,(_,_,k)) = let typeName = prettyT k @@ -71,6 +116,8 @@ getCIKind (Kind ValueType{} t) = case t of TypeRelation _ -> CiVariable TypePartition _ -> CiVariable +snippetCompletion :: Text -> Text -> CompletionItem +snippetCompletion label snippet = (defaultCompletion label){_kind=pure CiSnippet,_insertText=pure snippet,_insertTextFormat=pure T.Snippet} defaultCompletion :: Text -> CompletionItem defaultCompletion n = CompletionItem @@ -96,4 +143,21 @@ missingToSuggestion :: [CompletionItem] missingToSuggestion = [] keywordCompletions :: [CompletionItem] -keywordCompletions = [] \ No newline at end of file +keywordCompletions = [] + +getLowestLevelTaggedRegion :: SourcePos -> HLTree -> Maybe TreeItemLinks +getLowestLevelTaggedRegion p tr = + let regs = filterContaining p tr + in case [t | HLTagged t _ <- regs, t /= TIGeneral] of + [] -> Nothing + (ins) -> Just $ last ins + +topLevelSuggestions :: [CompletionItem] +topLevelSuggestions = defaultCompletion <$> [ + "find $1 : $2", + "such that $0", + "given $1 : $2" + ] + +freeIdentifierSuggestion :: a -> [CompletionItem] +freeIdentifierSuggestion _ = [defaultCompletion "identifier"] \ No newline at end of file From fec13cda3d2f70a8e65180af301ebed353ff2bba Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 18 May 2023 14:45:05 +0100 Subject: [PATCH 279/378] more snippets --- src/Conjure/LSP/Handlers/Suggestions.hs | 26 ++++++++++++------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index b36c4d00c4..c2b0441003 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -3,7 +3,6 @@ module Conjure.LSP.Handlers.Suggestions where import Conjure.LSP.Util (ProcessedFile (ProcessedFile), regionToRange, withProcessedDoc,getNextTokenStart,sourcePosToPosition, positionToSourcePos, sendInfoMessage) import Conjure.Language (Type (..)) import Conjure.Language.AST.Reformer -import Conjure.Language.Type (IntTag (..)) import Conjure.Language.Lexer import Conjure.Language.Lexemes import Conjure.Language.Validator --(Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) @@ -12,13 +11,12 @@ import Control.Lens import Data.Text (intercalate,pack) import Language.LSP.Server (Handlers, LspM, requestHandler) import Language.LSP.Types (SymbolKind(..),SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..), Position(..)) -import qualified Language.LSP.Types as T +import qualified Language.LSP.Types as T import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position), HasCompletionItemKind (completionItemKind)) import Conjure.Language.Pretty (prettyT) import qualified Data.Map.Strict as Map import Conjure.Language.Validator (ErrorType(TokenError), DiagnosticRegion (drSourcePos)) import Conjure.Language.AST.Syntax (LToken(MissingToken)) -import Conjure.Language.AST.Reformer (HLTree (HLNone), TreeItemLinks (TIList),ListItemClasses(..)) import Text.Megaparsec (SourcePos) suggestionHandler :: Handlers (LspM ()) @@ -29,12 +27,12 @@ suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do let symbols = Map.toList $ rTable $ head ri let nextTStart = getNextTokenStart context pt let innermostSymbolTable = symbols - let errors = [(r,d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags ] - let contextTokens = take 1 [ lexeme w | (r,MissingToken w) <- errors,isInRange nextTStart r] - let missingTokenBasedHint = case contextTokens of + let errors = [(r,d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags ] + let contextTokens = take 1 [ lexeme w | (r,MissingToken w) <- errors,isInRange nextTStart r] + let missingTokenBasedHint = case contextTokens of [l] -> makeMissingTokenHint l _ -> makeSuggestionsFromSymbolTable symbols - where + where makeMissingTokenHint (L_Missing s) = case s of MissingExpression -> makeExpressionSuggestions innermostSymbolTable MissingDomain -> makeDomainSuggestions innermostSymbolTable @@ -44,11 +42,11 @@ suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do makeMissingTokenHint l = [defaultCompletion $ lexemeText l] sendInfoMessage $ pack . show $ context let tlSymbol = getLowestLevelTaggedRegion (positionToSourcePos context) $ makeTree pt - let tlSymbolSuggestion = case tlSymbol of + let tlSymbolSuggestion = case tlSymbol of Just (TIDomain _) -> makeDomainSuggestions innermostSymbolTable Just (TIExpression _) -> makeExpressionSuggestions innermostSymbolTable Just (TIList t) -> makeTagSuggestions innermostSymbolTable t - q -> [defaultCompletion $ pack . show $ q] + q -> [defaultCompletion $ pack . show $ q] res $ Right $ InL . T.List $ tlSymbolSuggestion ++ missingTokenBasedHint isInRange :: T.Position -> DiagnosticRegion -> Bool @@ -146,17 +144,17 @@ keywordCompletions :: [CompletionItem] keywordCompletions = [] getLowestLevelTaggedRegion :: SourcePos -> HLTree -> Maybe TreeItemLinks -getLowestLevelTaggedRegion p tr = +getLowestLevelTaggedRegion p tr = let regs = filterContaining p tr in case [t | HLTagged t _ <- regs, t /= TIGeneral] of [] -> Nothing (ins) -> Just $ last ins topLevelSuggestions :: [CompletionItem] -topLevelSuggestions = defaultCompletion <$> [ - "find $1 : $2", - "such that $0", - "given $1 : $2" +topLevelSuggestions = uncurry snippetCompletion <$> [ + ("find","find $1 : $2"), + ("given","such that $0"), + ("such that","given $1 : $2") ] freeIdentifierSuggestion :: a -> [CompletionItem] From 5777aa89a6350cedc5741a6fb27ac880aee98571 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 23 May 2023 16:21:48 +0100 Subject: [PATCH 280/378] cleanup --- src/Conjure/LSP/Handlers/Suggestions.hs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index c2b0441003..c82e104c7f 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -8,14 +8,13 @@ import Conjure.Language.Lexemes import Conjure.Language.Validator --(Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) import Conjure.Prelude import Control.Lens -import Data.Text (intercalate,pack) +import Data.Text (pack) import Language.LSP.Server (Handlers, LspM, requestHandler) -import Language.LSP.Types (SymbolKind(..),SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..), Position(..)) +import Language.LSP.Types (SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..)) import qualified Language.LSP.Types as T -import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position), HasCompletionItemKind (completionItemKind)) +import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position)) import Conjure.Language.Pretty (prettyT) import qualified Data.Map.Strict as Map -import Conjure.Language.Validator (ErrorType(TokenError), DiagnosticRegion (drSourcePos)) import Conjure.Language.AST.Syntax (LToken(MissingToken)) import Text.Megaparsec (SourcePos) @@ -47,7 +46,7 @@ suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do Just (TIExpression _) -> makeExpressionSuggestions innermostSymbolTable Just (TIList t) -> makeTagSuggestions innermostSymbolTable t q -> [defaultCompletion $ pack . show $ q] - res $ Right $ InL . T.List $ tlSymbolSuggestion ++ missingTokenBasedHint + res $ Right $ InL . T.List $ missingTokenBasedHint ++ tlSymbolSuggestion isInRange :: T.Position -> DiagnosticRegion -> Bool isInRange p reg = sourcePosToPosition (drSourcePos reg) == p @@ -56,7 +55,7 @@ prettyNodeType :: TreeItemLinks -> Text prettyNodeType (TIExpression _) = "Expression" prettyNodeType (TIDomain _) = "Domain" prettyNodeType TIGeneral = "General" -prettyNodeType (TIList t) = pack ("[ " ++ (show t) ++ "]") +prettyNodeType (TIList t) = pack ("[ " ++ show t ++ "]") makeSuggestionsFromSymbolTable :: [(Text,SymbolTableValue)] -> [CompletionItem] makeSuggestionsFromSymbolTable = map symbolToHint @@ -73,10 +72,12 @@ makeDomainSuggestions table = stDomains ++ newDomainPlaceholders ("set","set of $1"), ("mset","mset of $1") ] + makeExpressionSuggestions :: [(Text,SymbolTableValue)] -> [CompletionItem] makeExpressionSuggestions table = stExprs ++ newExpressionPlaceholders where stExprs = map symbolToHint $ [x | x@(_,(_,_,Kind ValueType{} t)) <- table,typesUnifyS [t,TypeAny]] newExpressionPlaceholders = [] + makeTagSuggestions :: [(Text,SymbolTableValue)] -> ListItemClasses -> [CompletionItem] makeTagSuggestions table tag = case tag of ICAttribute -> defaultCompletion <$> ["size"] From 877fb2dbf0873a5d26c1b00a960f1281fed94410 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Tue, 23 May 2023 16:44:44 +0100 Subject: [PATCH 281/378] small restructure --- src/Conjure/LSP/Handlers/Suggestions.hs | 201 ++++++++++++------------ 1 file changed, 103 insertions(+), 98 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index c82e104c7f..fb643ee454 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -1,11 +1,15 @@ -module Conjure.LSP.Handlers.Suggestions where +module Conjure.LSP.Handlers.Suggestions (suggestionHandler) where -import Conjure.LSP.Util (ProcessedFile (ProcessedFile), regionToRange, withProcessedDoc,getNextTokenStart,sourcePosToPosition, positionToSourcePos, sendInfoMessage) +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getNextTokenStart, positionToSourcePos, regionToRange, sendInfoMessage, sourcePosToPosition, withProcessedDoc) import Conjure.Language (Type (..)) import Conjure.Language.AST.Reformer -import Conjure.Language.Lexer +-- (Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) + +import Conjure.Language.AST.Syntax (LToken (MissingToken)) import Conjure.Language.Lexemes -import Conjure.Language.Validator --(Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) +import Conjure.Language.Lexer +import Conjure.Language.Pretty (prettyT) +import Conjure.Language.Validator import Conjure.Prelude import Control.Lens import Data.Text (pack) @@ -13,113 +17,104 @@ import Language.LSP.Server (Handlers, LspM, requestHandler) import Language.LSP.Types (SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..)) import qualified Language.LSP.Types as T import Language.LSP.Types.Lens (HasParams (..), HasTextDocument (textDocument), HasPosition (position)) -import Conjure.Language.Pretty (prettyT) import qualified Data.Map.Strict as Map -import Conjure.Language.AST.Syntax (LToken(MissingToken)) import Text.Megaparsec (SourcePos) suggestionHandler :: Handlers (LspM ()) suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do - let ps = req ^. params . textDocument - let context = req ^. params . position - withProcessedDoc ps $ \(ProcessedFile _ diags (regionInfo -> ri) pt) -> do - let symbols = Map.toList $ rTable $ head ri - let nextTStart = getNextTokenStart context pt - let innermostSymbolTable = symbols - let errors = [(r,d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags ] - let contextTokens = take 1 [ lexeme w | (r,MissingToken w) <- errors,isInRange nextTStart r] - let missingTokenBasedHint = case contextTokens of - [l] -> makeMissingTokenHint l - _ -> makeSuggestionsFromSymbolTable symbols - where - makeMissingTokenHint (L_Missing s) = case s of - MissingExpression -> makeExpressionSuggestions innermostSymbolTable - MissingDomain -> makeDomainSuggestions innermostSymbolTable - MissingUnknown -> [] - - makeMissingTokenHint LMissingIdentifier = freeIdentifierSuggestion innermostSymbolTable - makeMissingTokenHint l = [defaultCompletion $ lexemeText l] - sendInfoMessage $ pack . show $ context - let tlSymbol = getLowestLevelTaggedRegion (positionToSourcePos context) $ makeTree pt - let tlSymbolSuggestion = case tlSymbol of - Just (TIDomain _) -> makeDomainSuggestions innermostSymbolTable - Just (TIExpression _) -> makeExpressionSuggestions innermostSymbolTable - Just (TIList t) -> makeTagSuggestions innermostSymbolTable t - q -> [defaultCompletion $ pack . show $ q] - res $ Right $ InL . T.List $ missingTokenBasedHint ++ tlSymbolSuggestion + let ps = req ^. params . textDocument + let context = req ^. params . position + withProcessedDoc ps $ \(ProcessedFile _ diags (regionInfo -> ri) pt) -> do + let symbols = Map.toList $ rTable $ head ri + let nextTStart = getNextTokenStart context pt + let innermostSymbolTable = symbols -- update this so that it uses closest enclosing scope + let errors = [(r, d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags] + let contextTokens = take 1 [lexeme w | (r, MissingToken w) <- errors, isInRange nextTStart r] + let missingTokenBasedHint = missingToSuggestion innermostSymbolTable contextTokens + sendInfoMessage $ pack . show $ context + let tlSymbol = getLowestLevelTaggedRegion (positionToSourcePos context) $ makeTree pt + let tlSymbolSuggestion = case tlSymbol of + Just (TIDomain _) -> makeDomainSuggestions innermostSymbolTable + Just (TIExpression _) -> makeExpressionSuggestions innermostSymbolTable + Just (TIList t) -> makeTagSuggestions innermostSymbolTable t + q -> [defaultCompletion $ pack . show $ q] + res $ + Right $ + InL . T.List $ + concat + [ missingTokenBasedHint, + tlSymbolSuggestion, + keywordCompletions, + missingTokenBasedHint + ] isInRange :: T.Position -> DiagnosticRegion -> Bool isInRange p reg = sourcePosToPosition (drSourcePos reg) == p -prettyNodeType :: TreeItemLinks -> Text -prettyNodeType (TIExpression _) = "Expression" -prettyNodeType (TIDomain _) = "Domain" -prettyNodeType TIGeneral = "General" -prettyNodeType (TIList t) = pack ("[ " ++ show t ++ "]") - -makeSuggestionsFromSymbolTable :: [(Text,SymbolTableValue)] -> [CompletionItem] +makeSuggestionsFromSymbolTable :: [(Text, SymbolTableValue)] -> [CompletionItem] makeSuggestionsFromSymbolTable = map symbolToHint - - -makeDomainSuggestions :: [(Text,SymbolTableValue)] -> [CompletionItem] +makeDomainSuggestions :: [(Text, SymbolTableValue)] -> [CompletionItem] makeDomainSuggestions table = stDomains ++ newDomainPlaceholders - where stDomains = map symbolToHint $ [x | x@(_,(_,_,Kind DomainType t)) <- table, typesUnifyS [t,TypeAny]] - newDomainPlaceholders = uncurry snippetCompletion <$> [ - ("int","int"), - ("int","bool"), - ("matrix","matrix indexed by ${1:[index_domains]} of ${2:type}"), - ("set","set of $1"), - ("mset","mset of $1") + where + stDomains = map symbolToHint $ [x | x@(_, (_, _, Kind DomainType t)) <- table, typesUnifyS [t, TypeAny]] + newDomainPlaceholders = + uncurry snippetCompletion + <$> [ ("int", "int"), + ("int", "bool"), + ("matrix", "matrix indexed by ${1:[index_domains]} of ${2:type}"), + ("set", "set of $1"), + ("mset", "mset of $1") ] -makeExpressionSuggestions :: [(Text,SymbolTableValue)] -> [CompletionItem] +makeExpressionSuggestions :: [(Text, SymbolTableValue)] -> [CompletionItem] makeExpressionSuggestions table = stExprs ++ newExpressionPlaceholders - where stExprs = map symbolToHint $ [x | x@(_,(_,_,Kind ValueType{} t)) <- table,typesUnifyS [t,TypeAny]] - newExpressionPlaceholders = [] + where + stExprs = map symbolToHint $ [x | x@(_, (_, _, Kind ValueType {} t)) <- table, typesUnifyS [t, TypeAny]] + newExpressionPlaceholders = [] -makeTagSuggestions :: [(Text,SymbolTableValue)] -> ListItemClasses -> [CompletionItem] +makeTagSuggestions :: [(Text, SymbolTableValue)] -> ListItemClasses -> [CompletionItem] makeTagSuggestions table tag = case tag of - ICAttribute -> defaultCompletion <$> ["size"] - ICExpression -> makeExpressionSuggestions table - ICDomain -> makeDomainSuggestions table - ICRange -> uncurry snippetCompletion <$> [("openL","..$1"),("closed","$1..$2"),("openR","$1..")] - ICIdentifier -> freeIdentifierSuggestion table - ICStatement -> topLevelSuggestions - - -symbolToHint :: (Text,SymbolTableValue) -> CompletionItem -symbolToHint (name,(_,_,k)) = let - typeName = prettyT k - in (defaultCompletion name){_detail = Just typeName ,_kind=pure $ getCIKind k} + ICAttribute -> defaultCompletion <$> ["size"] + ICExpression -> makeExpressionSuggestions table + ICDomain -> makeDomainSuggestions table + ICRange -> uncurry snippetCompletion <$> [("openL", "..$1"), ("closed", "$1..$2"), ("openR", "$1..")] + ICIdentifier -> freeIdentifierSuggestion table + ICStatement -> topLevelSuggestions + +symbolToHint :: (Text, SymbolTableValue) -> CompletionItem +symbolToHint (name, (_, _, k)) = + let typeName = prettyT k + in (defaultCompletion name) {_detail = Just typeName, _kind = pure $ getCIKind k} getCIKind :: Kind -> CompletionItemKind getCIKind (Kind DomainType _) = CiClass -getCIKind (Kind ValueType{} t) = case t of - TypeAny -> CiVariable - TypeBool -> CiVariable - TypeInt _ -> CiVariable - TypeEnum _ -> CiEnum - TypeUnnamed _ -> CiVariable - TypeTuple _ -> CiVariable - TypeRecord _ -> CiVariable - TypeRecordMember _ _ -> CiEnumMember - TypeVariant _ -> CiVariable - TypeVariantMember _ _ -> CiEnumMember - TypeList _ -> CiVariable - TypeMatrix _ _ -> CiVariable - TypeSet _ -> CiVariable - TypeMSet _ -> CiVariable - TypeFunction _ _ -> CiVariable - TypeSequence _ -> CiVariable - TypeRelation _ -> CiVariable - TypePartition _ -> CiVariable +getCIKind (Kind ValueType {} t) = case t of + TypeAny -> CiVariable + TypeBool -> CiVariable + TypeInt _ -> CiVariable + TypeEnum _ -> CiEnum + TypeUnnamed _ -> CiVariable + TypeTuple _ -> CiVariable + TypeRecord _ -> CiVariable + TypeRecordMember _ _ -> CiEnumMember + TypeVariant _ -> CiVariable + TypeVariantMember _ _ -> CiEnumMember + TypeList _ -> CiVariable + TypeMatrix _ _ -> CiVariable + TypeSet _ -> CiVariable + TypeMSet _ -> CiVariable + TypeFunction _ _ -> CiVariable + TypeSequence _ -> CiVariable + TypeRelation _ -> CiVariable + TypePartition _ -> CiVariable snippetCompletion :: Text -> Text -> CompletionItem -snippetCompletion label snippet = (defaultCompletion label){_kind=pure CiSnippet,_insertText=pure snippet,_insertTextFormat=pure T.Snippet} +snippetCompletion label snippet = (defaultCompletion label) {_kind = pure CiSnippet, _insertText = pure snippet, _insertTextFormat = pure T.Snippet} defaultCompletion :: Text -> CompletionItem -defaultCompletion n = CompletionItem +defaultCompletion n = + CompletionItem n Nothing Nothing @@ -138,25 +133,35 @@ defaultCompletion n = CompletionItem Nothing Nothing -missingToSuggestion :: [CompletionItem] -missingToSuggestion = [] +-- +missingToSuggestion :: [(Text, SymbolTableValue)] -> [Lexeme] -> [CompletionItem] +missingToSuggestion table (x : _) = makeMissingTokenHint x + where + makeMissingTokenHint (L_Missing s) = case s of + MissingExpression -> makeExpressionSuggestions table + MissingDomain -> makeDomainSuggestions table + MissingUnknown -> [] + makeMissingTokenHint LMissingIdentifier = freeIdentifierSuggestion table + makeMissingTokenHint l = [defaultCompletion $ lexemeText l] +missingToSuggestion table _ = makeSuggestionsFromSymbolTable table keywordCompletions :: [CompletionItem] keywordCompletions = [] -getLowestLevelTaggedRegion :: SourcePos -> HLTree -> Maybe TreeItemLinks +getLowestLevelTaggedRegion :: SourcePos -> HLTree -> Maybe TreeItemLinks getLowestLevelTaggedRegion p tr = - let regs = filterContaining p tr - in case [t | HLTagged t _ <- regs, t /= TIGeneral] of + let regs = filterContaining p tr + in case [t | HLTagged t _ <- regs, t /= TIGeneral] of [] -> Nothing - (ins) -> Just $ last ins + ins -> Just $ last ins topLevelSuggestions :: [CompletionItem] -topLevelSuggestions = uncurry snippetCompletion <$> [ - ("find","find $1 : $2"), - ("given","such that $0"), - ("such that","given $1 : $2") - ] +topLevelSuggestions = + uncurry snippetCompletion + <$> [ ("find", "find $1 : $2"), + ("given", "such that $0"), + ("such that", "given $1 : $2") + ] freeIdentifierSuggestion :: a -> [CompletionItem] freeIdentifierSuggestion _ = [defaultCompletion "identifier"] \ No newline at end of file From 69698350b437fda0635899a33b028b138e5f588d Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 6 Jul 2023 13:56:22 +0100 Subject: [PATCH 282/378] scoped suggestions working --- src/Conjure/LSP/Handlers/Suggestions.hs | 19 ++++++++++--------- src/Conjure/LSP/Util.hs | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index fb643ee454..42ef316430 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -1,6 +1,6 @@ module Conjure.LSP.Handlers.Suggestions (suggestionHandler) where -import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getNextTokenStart, positionToSourcePos, regionToRange, sendInfoMessage, sourcePosToPosition, withProcessedDoc) +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getNextTokenStart, positionToSourcePos, sendInfoMessage, sourcePosToPosition, withProcessedDoc, getRelevantRegions) import Conjure.Language (Type (..)) import Conjure.Language.AST.Reformer -- (Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) @@ -24,29 +24,30 @@ suggestionHandler :: Handlers (LspM ()) suggestionHandler = requestHandler STextDocumentCompletion $ \req res -> do let ps = req ^. params . textDocument let context = req ^. params . position - withProcessedDoc ps $ \(ProcessedFile _ diags (regionInfo -> ri) pt) -> do - let symbols = Map.toList $ rTable $ head ri + withProcessedDoc ps $ \(ProcessedFile _ diags valState pt) -> do let nextTStart = getNextTokenStart context pt - let innermostSymbolTable = symbols -- update this so that it uses closest enclosing scope + let roi = getRelevantRegions valState nextTStart + let innermostSymbolTable = if null roi then [] else Map.toList . rTable $ last roi let errors = [(r, d) | (ValidatorDiagnostic r (Error (TokenError d))) <- diags] let contextTokens = take 1 [lexeme w | (r, MissingToken w) <- errors, isInRange nextTStart r] let missingTokenBasedHint = missingToSuggestion innermostSymbolTable contextTokens - sendInfoMessage $ pack . show $ context + -- sendInfoMessage $ pack . show $ context let tlSymbol = getLowestLevelTaggedRegion (positionToSourcePos context) $ makeTree pt let tlSymbolSuggestion = case tlSymbol of Just (TIDomain _) -> makeDomainSuggestions innermostSymbolTable Just (TIExpression _) -> makeExpressionSuggestions innermostSymbolTable Just (TIList t) -> makeTagSuggestions innermostSymbolTable t - q -> [defaultCompletion $ pack . show $ q] + _ -> [] -- or for debugging -> [defaultCompletion $ pack . show $ tlSymbol] res $ Right $ - InL . T.List $ + InL . T.List $ nubBy isSameInsertion $ concat [ missingTokenBasedHint, tlSymbolSuggestion, - keywordCompletions, - missingTokenBasedHint + keywordCompletions ] +isSameInsertion :: CompletionItem -> CompletionItem -> Bool +isSameInsertion CompletionItem{_label=a} CompletionItem{_label=b} = a == b isInRange :: T.Position -> DiagnosticRegion -> Bool isInRange p reg = sourcePosToPosition (drSourcePos reg) == p diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 559f51a3bf..3ad051cd4f 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -114,7 +114,7 @@ withProcessedDoc d f = do getRelevantRegions :: ValidatorState -> Position -> [RegionInfo] -getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn (rRegion) $ concatMap filteredFlatten info +getRelevantRegions (ValidatorState {regionInfo=info}) pos = sortOn rRegion $ concatMap filteredFlatten info where p::RegionInfo -> Bool p (RegionInfo {rRegion=reg}) = case reg of From f278aac32f415fff5b0f5bd79a2f9b92d9f1ff91 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Thu, 6 Jul 2023 15:48:58 +0100 Subject: [PATCH 283/378] Fixes some broken outputs --- src/Conjure/Language/Lexemes.hs | 7 ++++++- src/Conjure/Language/Lexer.hs | 5 ++++- src/Conjure/Language/Validator.hs | 6 +++--- src/Conjure/UI/ErrorDisplay.hs | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Conjure/Language/Lexemes.hs b/src/Conjure/Language/Lexemes.hs index c8fbb1c792..cfb68d3024 100644 --- a/src/Conjure/Language/Lexemes.hs +++ b/src/Conjure/Language/Lexemes.hs @@ -296,7 +296,12 @@ data Lexeme instance Hashable Lexeme data MissingStructuralElements = MissingExpression | MissingDomain | MissingUnknown - deriving (Eq, Ord, Show,Data,Generic) --Generic + deriving (Eq, Ord, Data,Generic) --Generic +instance Show MissingStructuralElements where + show MissingExpression = "Expression" + show MissingDomain = "Domain" + show MissingUnknown = "Unknown" + instance Hashable MissingStructuralElements lexemes :: [(T.Text, Lexeme)] diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 45a2db7570..98b1fd4ddd 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -25,6 +25,7 @@ module Conjure.Language.Lexer trueLength, trueStart, tokenOffset, + tokenStartOffset, sourcePos0, LexerError(..), runLexer, @@ -66,7 +67,7 @@ class Reformable a where reform :: a -> L.Text instance Reformable ETok where - reform e | trueLength e == 0 = "" + reform e | totalLength e == 0 = "" reform (ETok{capture=cap,trivia=triv}) = L.append (L.concat $ map showTrivia triv) (L.fromStrict cap) where showTrivia :: Trivia -> L.Text @@ -133,6 +134,8 @@ trueLength = oTokenLength . offsets -- tokenStart (ETok{offsets = (Offsets _ s _ _ _)}) = s tokenOffset :: ETok -> Int tokenOffset = oStart . offsets +tokenStartOffset t = oStart o + (oTotalLength o - oTokenLength o) + where o = offsets t trueStart :: ETok -> SourcePos trueStart = oTrueStart . offsets diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index 746e245ede..d4cae81e33 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -23,7 +23,7 @@ import qualified Conjure.Language.Expression as D ( Expression(Typed) ) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.Lexer (ETok (ETok, lexeme),tokenOffset, tokenSourcePos, totalLength, trueLength, sourcePos0, sourcePosAfter) +import Conjure.Language.Lexer (ETok (ETok, lexeme),tokenOffset, tokenSourcePos, totalLength, trueLength, sourcePos0, sourcePosAfter, trueStart, Offsets (..), tokenStartOffset) import Conjure.Language.Attributes import Conjure.Prelude @@ -1849,8 +1849,8 @@ symbolRegion a = case range of let end =case viewr rst of EmptyR -> h _ :> et -> et - let start = tokenSourcePos $ h - let offset = tokenOffset h + let start = tokenSourcePos h + let offset = tokenStartOffset h let tLength = sum (totalLength <$> rst) + trueLength h let en = sourcePosAfter end DiagnosticRegion start en offset tLength diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 450cb0d70c..38fa4647cc 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -38,7 +38,7 @@ instance ShowErrorComponent DiagnosticForPrint where tokenErrorToDisplay :: LToken -> String tokenErrorToDisplay (RealToken _ ) = error "tokenError with valid token" -tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ (lexemeFace $ lexeme t) +tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ lexemeFace (lexeme t) tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of L_Missing s -> show s LMissingIdentifier -> "" From 27f36855814359b94908d1642b5dd7298ccf6ad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 13 Jul 2023 12:42:16 +0300 Subject: [PATCH 284/378] Improve make solvers 1) autoconf is also listed as a dependecy. 2) use a more specialised naming scheme for the stderr and stdout files so they can be safely deleted. --- Makefile | 7 ++++--- etc/build/silent-wrapper.sh | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 5ea92d7773..e280fea3b9 100644 --- a/Makefile +++ b/Makefile @@ -121,10 +121,11 @@ solvers: @echo "" @echo "Set the environment variable PROCESSES to specify the number of cores to use. Default is 1." @echo "" - @echo "Dependencies: cmake and gmp." - @if [ `uname` == "Darwin" ]; then echo "You can run: 'brew install cmake gmp' to install them."; fi + @echo "Dependencies: autoconf, cmake and gmp." + @if [ `uname` == "Darwin" ]; then echo "You can run: 'brew install autoconf cmake gmp' to install them."; fi @echo "" @mkdir -p ${BIN_DIR} + @rm -f make-solvers-*.stderr make-solvers-*.stdout > /dev/null 2> /dev/null @etc/build/silent-wrapper.sh etc/build/install-bc_minisat_all.sh @etc/build/silent-wrapper.sh etc/build/install-boolector.sh @etc/build/silent-wrapper.sh etc/build/install-cadical.sh @@ -138,4 +139,4 @@ solvers: @etc/build/silent-wrapper.sh etc/build/install-open-wbo.sh @etc/build/silent-wrapper.sh etc/build/install-yices.sh @etc/build/silent-wrapper.sh etc/build/install-z3.sh - @if ls *.stderr *.stdout > /dev/null 2> /dev/null; then echo "At least one solver didn't build successfully."; exit 1; fi + @if ls make-solvers-*.stderr make-solvers-*.stdout > /dev/null 2> /dev/null; then echo "At least one solver didn't build successfully."; exit 1; fi diff --git a/etc/build/silent-wrapper.sh b/etc/build/silent-wrapper.sh index 894c82b6d3..2cb14d3e3f 100755 --- a/etc/build/silent-wrapper.sh +++ b/etc/build/silent-wrapper.sh @@ -12,23 +12,23 @@ echo "Running $1" PID=$$ export STARTTIME=$(date +%s) -bash $1 > ${PID}.stdout 2> ${PID}.stderr +bash $1 > make-solvers-${PID}.stdout 2> make-solvers-${PID}.stderr EXITCODE=$? export ELAPSED=$(($(date +%s) - ${STARTTIME})) if [ ${EXITCODE} -eq 0 ] ; then echo " Done (took ${ELAPSED} seconds)" - rm -f ${PID}.stdout ${PID}.stderr + rm -f make-solvers-${PID}.stdout make-solvers-${PID}.stderr else echo " Failed (took ${ELAPSED} seconds)" echo " Exit code: ${EXITCODE}" - echo " Outputs saved to: ${PID}.stdout and ${PID}.stderr" + echo " Outputs saved to: make-solvers-${PID}.stdout and make-solvers-${PID}.stderr" echo "" echo "Last 10 lines of the stdout was:" - tail -n10 ${PID}.stdout + tail -n10 make-solvers-${PID}.stdout echo "" echo "Last 10 lines of the stderr was:" - tail -n10 ${PID}.stderr + tail -n10 make-solvers-${PID}.stderr echo "" echo "" echo "" From 3f1307186d11ddb63e075775e2ab186fdeaaf9bc Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 14 Jul 2023 16:25:21 +0100 Subject: [PATCH 285/378] missing token error higligh improvement --- src/Conjure/Language/AST/Helpers.hs | 12 +++++------- src/Conjure/Language/Lexer.hs | 20 ++++++++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index 4b6c633144..aaefe9ccc3 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -70,9 +70,7 @@ intLiteral = token test Set.empty "Int Literal" makeMissing :: Lexeme -> Parser LToken makeMissing l = do dummyToken <- lookAhead anySingle - let st = oStart . offsets $ dummyToken - spos <- getSourcePos - return (MissingToken (ETok (Offsets st 0 0 spos spos spos) [] l "")) + return . MissingToken $ nullBefore l dummyToken makeUnexpected :: Parser LToken makeUnexpected = SkippedToken <$> anySingle @@ -80,15 +78,15 @@ makeUnexpected = SkippedToken <$> anySingle -- try to get a token from the stream but allow failiure want :: Lexeme -> Parser LToken want (LIdentifier _) = do - (ETok o t lex _) <- lookAhead anySingle + tok@(ETok _ _ lex _) <- lookAhead anySingle case lex of (LIdentifier _) -> makeStrict <$> anySingle - _ -> return $ MissingToken $ ETok o{oTotalLength = 0} t LMissingIdentifier "" + _ -> return $ MissingToken $ nullBefore LMissingIdentifier tok want a = do - (ETok o t lex _) <- lookAhead anySingle + tok@(ETok _ _ lex _) <- lookAhead anySingle if lex == a then makeStrict <$> anySingle - else return $ MissingToken $ ETok o{oTotalLength = 0} t a "" + else return $ MissingToken $ nullBefore lex tok -- get a symbol from the stream with no fallback need :: Lexeme -> Parser SToken diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 98b1fd4ddd..52d5f07e6d 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -27,6 +27,7 @@ module Conjure.Language.Lexer tokenOffset, tokenStartOffset, sourcePos0, + nullBefore, LexerError(..), runLexer, ETokenStream(..) @@ -95,11 +96,11 @@ isIdentifierLetter :: Char -> Bool isIdentifierLetter ch = isAlphaNum ch || ch `elem` ("_'" :: String) || ch `elem` emojis data Offsets = Offsets { - oStart::Int, - oTotalLength::Int, - oTokenLength::Int, - oTrueStart :: SourcePos, - oSourcePos::SourcePos, + oStart::Int, -- the starting offset of the token (including whitespace) + oTotalLength::Int, -- (the total length of the the token) + oTokenLength::Int, -- (the length of the token excluding trivia) + oTrueStart :: SourcePos, -- start pos of the token + oSourcePos::SourcePos, -- start pos of the lexeme oEndPos::SourcePos} deriving (Show, Eq, Ord , Data) type Lexer = Parsec Void Text @@ -134,6 +135,7 @@ trueLength = oTokenLength . offsets -- tokenStart (ETok{offsets = (Offsets _ s _ _ _)}) = s tokenOffset :: ETok -> Int tokenOffset = oStart . offsets +tokenStartOffset :: ETok -> Int tokenStartOffset t = oStart o + (oTotalLength o - oTokenLength o) where o = offsets t @@ -149,7 +151,13 @@ sourcePosAfter = oEndPos . offsets makeToken :: Offsets -> [Trivia] -> Lexeme -> Text -> ETok makeToken = ETok -data LexerError = LexerError String +--make an empty token that precedes the given token with the given lexeme +nullBefore :: Lexeme -> ETok -> ETok +nullBefore lex tok = ETok offs [] lex "" + where + sp = tokenSourcePos tok + offs = Offsets (tokenStartOffset tok) 0 0 sp sp sp +newtype LexerError = LexerError String deriving (Show) runLexer :: Text -> Maybe FilePath -> Either LexerError ETokenStream From 15745194af0e051768ebaeb7e1384d4798f42ca3 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 14 Jul 2023 16:29:20 +0100 Subject: [PATCH 286/378] Test output updates --- .../stderr.expected | 80 +++++++++---------- .../stderr.expected | 56 ++++++------- .../stderr.expected | 40 +++++----- .../stderr.expected | 32 ++++---- .../stderr.expected | 48 +++++------ .../stderr.expected | 50 ++++++------ .../stderr.expected | 32 ++++---- .../stderr.expected | 80 +++++++++---------- .../parse_print/issues/133/1/stderr.expected | 12 +-- .../parse_print/issues/133/2/stderr.expected | 2 +- .../parse_print/issues/133/3/stderr.expected | 2 +- .../parse_print/issues/361/2/stderr.expected | 18 ++--- .../parse_print/issues/425/1/stderr.expected | 2 +- .../parse_print/issues/425/2/stderr.expected | 2 +- tests/parse_print/parsing01/stderr.expected | 2 +- .../parsing03_nonassoc/stderr.expected | 8 +- .../enum_liberated/change-03/stderr.expected | 2 +- .../enum_liberated/change-06/stderr.expected | 12 +-- .../enum_liberated/change-10/stderr.expected | 4 +- .../enum_liberated/delete-03/stderr.expected | 2 +- .../enum_liberated/delete-06/stderr.expected | 8 +- .../enum_liberated/delete-07/stderr.expected | 10 +-- .../enum_liberated/delete-10/stderr.expected | 10 +-- .../set01/change-07/stderr.expected | 4 +- .../set01/delete-02/stderr.expected | 4 +- .../set01/delete-03/stderr.expected | 4 +- .../set01/delete-08/stderr.expected | 6 +- 27 files changed, 266 insertions(+), 266 deletions(-) diff --git a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected index b965ee5933..c3909d52ef 100644 --- a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected @@ -5,12 +5,6 @@ Error: | ^^^^^^^^^^^^^^^^^^^^^ Warning: Essence prime file detected, type checking is off -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:53: - | -4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) - | ^ -Missing Domain - tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) @@ -21,25 +15,25 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing ) +Missing Domain tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing of +Missing by -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:53: +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: | -6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, - | ^ -Missing Domain +4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) + | ^ +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: | @@ -51,19 +45,25 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, | ^ -Missing ) +Missing Domain + +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: + | +6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, + | ^ +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:7:87: | @@ -71,65 +71,65 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | ^^^^^ Skipped tokens -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:53: +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool | ^ -Missing of +Missing by -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:53: +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:12:87: | @@ -137,35 +137,35 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | ^^^^^ Skipped tokens -tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:53: +tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:15:87: | diff --git a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected index f1d94d77ab..2f10746720 100644 --- a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: | @@ -21,31 +21,31 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:38: +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:39: | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:39: | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) - | ^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:52: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | @@ -63,43 +63,43 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:57: +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:58: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:58: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:52: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | @@ -117,37 +117,37 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:57: +tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:58: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:58: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:9:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected index 7e99d5fb3e..37006b39e7 100644 --- a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | @@ -27,43 +27,43 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:57: +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:58: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:58: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool - | ^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:52: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | @@ -81,34 +81,34 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:57: +tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:58: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:58: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool - | ^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain diff --git a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected index 431b84168b..71dc6af811 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected @@ -5,12 +5,6 @@ Error: | ^^^^^^^^^^^^^^^^^^^^^ Warning: Essence prime file detected, type checking is off -tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:53: - | -10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) - | ^ -Missing Domain - tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) @@ -21,25 +15,25 @@ tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8 | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) | ^ -Missing ) +Missing Domain tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) | ^ -Missing of +Missing by -tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:53: +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: | -12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool - | ^ -Missing Domain +10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) + | ^ +Missing by tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: | @@ -51,16 +45,22 @@ tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8 | 12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool | ^ -Missing ) +Missing Domain + +tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: + | +12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool + | ^ +Missing by tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool | ^ -Missing of +Missing by diff --git a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected index 48993f1ab3..1752910fe5 100644 --- a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected @@ -5,12 +5,6 @@ Error: | ^^^^^^^^^^^^^^^^^^^^^ Warning: Essence prime file detected, type checking is off -tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:53: - | -20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) - | ^ -Missing Domain - tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) @@ -21,25 +15,25 @@ tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03 | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) | ^ -Missing ) +Missing Domain tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) | ^ -Missing of +Missing by -tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:53: +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: | -22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), - | ^ -Missing Domain +20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) + | ^ +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: | @@ -51,19 +45,25 @@ tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03 | 22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing ) +Missing Domain + +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: + | +22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), + | ^ +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: | 22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: | 22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:23:28: | @@ -71,35 +71,35 @@ tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03 | ^^^^^^^^^^^^^^^^^^^^^^^ Skipped tokens -tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:53: +tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), - | ^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:26:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected index d4b25f1e85..80c8a6d7a5 100644 --- a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected @@ -15,37 +15,37 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | 4 | int(0..undefined(division by zero: 2 / 0 : `int`)) | ^ -Missing ) +Missing by -tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:53: +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), - | ^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:7:28: | @@ -53,35 +53,35 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | ^^^^^^^^^^^^^^^^^^ Skipped tokens -tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:53: +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), - | ^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:10:28: | @@ -89,35 +89,35 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | ^^^^^^^^^^^^^^^^^^^^^^^ Skipped tokens -tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:53: +tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), - | ^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:13:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected index 838fb7b422..129af91f4d 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected @@ -5,65 +5,65 @@ Error: | ^^^^^^^^^^^^^^^^^^^^^ Warning: Essence prime file detected, type checking is off -tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:53: +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing of +Missing by -tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:53: +tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, | ^ -Missing ) +Missing by tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, | ^ -Missing ] +Missing by tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, | ^ -Missing of +Missing by tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:11:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected index e4d33ccf0c..80fd0962ac 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | @@ -27,43 +27,43 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:57: +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:58: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:58: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:52: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | @@ -81,43 +81,43 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:57: +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:58: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:58: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool - | ^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:52: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | @@ -135,43 +135,43 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:57: +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:58: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:58: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool - | ^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:52: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing , +Missing zero tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | @@ -189,34 +189,34 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing ) +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing ] +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing of +Missing : tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing , +Missing : -tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:57: +tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:58: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool - | ^ -Missing Domain + | ^^^^^^^^^^^^^^^^^^^^^^^^ +Skipped tokens tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:58: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool - | ^^^^^^^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain diff --git a/tests/parse_print/issues/133/1/stderr.expected b/tests/parse_print/issues/133/1/stderr.expected index c749bec1b7..b15973df23 100644 --- a/tests/parse_print/issues/133/1/stderr.expected +++ b/tests/parse_print/issues/133/1/stderr.expected @@ -1,18 +1,18 @@ Error: - tests/parse_print/issues/133/1/133_1.essence:3:7: + tests/parse_print/issues/133/1/133_1.essence:3:8: | 3 | find a be int(1..9) - | ^ -Missing Domain + | ^^^^^^^^^^^^ +Skipped tokens tests/parse_print/issues/133/1/133_1.essence:3:8: | 3 | find a be int(1..9) - | ^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Domain tests/parse_print/issues/133/1/133_1.essence:3:8: | 3 | find a be int(1..9) | ^ -Missing : +Missing be diff --git a/tests/parse_print/issues/133/2/stderr.expected b/tests/parse_print/issues/133/2/stderr.expected index cf5ff14904..871f00b0ed 100644 --- a/tests/parse_print/issues/133/2/stderr.expected +++ b/tests/parse_print/issues/133/2/stderr.expected @@ -2,4 +2,4 @@ Error: tests/parse_print/issues/133/2/133_2.essence:6:6: | 6 | int(1,3) | ^ -Missing , +Missing int diff --git a/tests/parse_print/issues/133/3/stderr.expected b/tests/parse_print/issues/133/3/stderr.expected index 18ad31c29c..ef46606144 100644 --- a/tests/parse_print/issues/133/3/stderr.expected +++ b/tests/parse_print/issues/133/3/stderr.expected @@ -2,4 +2,4 @@ Error: tests/parse_print/issues/133/3/133_3.essence:7:10: | 7 | m = [1,2 3] | ^ -Missing , +Missing LIntLiteral 3 diff --git a/tests/parse_print/issues/361/2/stderr.expected b/tests/parse_print/issues/361/2/stderr.expected index 1f89319c7f..f85dd952d7 100644 --- a/tests/parse_print/issues/361/2/stderr.expected +++ b/tests/parse_print/issues/361/2/stderr.expected @@ -1,24 +1,24 @@ Error: - tests/parse_print/issues/361/2/361_2.essence:2:41: + tests/parse_print/issues/361/2/361_2.essence:2:42: | 2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j - | ^ -Missing Expr + | ^^^^^^^^^^^^^^^^^^ +Skipped tokens -tests/parse_print/issues/361/2/361_2.essence:2:41: +tests/parse_print/issues/361/2/361_2.essence:2:42: | 2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j - | ^ -Missing Expr + | ^ +Missing Expression tests/parse_print/issues/361/2/361_2.essence:2:42: | 2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j - | ^^^^^^^^^^^^^^^^^^ -Skipped tokens + | ^ +Missing Expression tests/parse_print/issues/361/2/361_2.essence:2:42: | 2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j | ^ -Missing . +Missing int diff --git a/tests/parse_print/issues/425/1/stderr.expected b/tests/parse_print/issues/425/1/stderr.expected index 8c657fa80d..5409b7a504 100644 --- a/tests/parse_print/issues/425/1/stderr.expected +++ b/tests/parse_print/issues/425/1/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/issues/425/1/425.essence:1:15: | 1 | letting s be {:} | ^ -Missing } +Missing : diff --git a/tests/parse_print/issues/425/2/stderr.expected b/tests/parse_print/issues/425/2/stderr.expected index e4c9854327..3ad2a77d4f 100644 --- a/tests/parse_print/issues/425/2/stderr.expected +++ b/tests/parse_print/issues/425/2/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/issues/425/2/425.essence:2:15: | 2 | letting s be {:} | ^ -Missing } +Missing : diff --git a/tests/parse_print/parsing01/stderr.expected b/tests/parse_print/parsing01/stderr.expected index a9512e586e..f5c21e3c0b 100644 --- a/tests/parse_print/parsing01/stderr.expected +++ b/tests/parse_print/parsing01/stderr.expected @@ -2,4 +2,4 @@ Error: tests/parse_print/parsing01/parsing01.essence:4:1: | 4 | | ^ -Missing ) +Missing L_EOF diff --git a/tests/parse_print/parsing03_nonassoc/stderr.expected b/tests/parse_print/parsing03_nonassoc/stderr.expected index 95b6c0393d..baeb9f07e0 100644 --- a/tests/parse_print/parsing03_nonassoc/stderr.expected +++ b/tests/parse_print/parsing03_nonassoc/stderr.expected @@ -1,12 +1,12 @@ Error: - tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:16: + tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:17: | 2 | such that x = y = z - | ^ -Missing Expr + | ^ +Missing Expression tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:17: | 2 | such that x = y = z | ^ -Missing , +Missing = diff --git a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected index 5501475926..a51d1d4f2a 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected @@ -3,7 +3,7 @@ Error: | 6 | letting E2 be new type enum ma, b, c, d, "hoh hoh hooo"} | ^ -Missing { +Missing ma tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:8:13: | diff --git a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected index ab75efdd62..3bf7f5be6f 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected @@ -3,22 +3,22 @@ Error: | 3 | given E1 new type Knum | ^ -Missing enum +Missing Knum tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: | 3 | given E1 new type Knum | ^ -Missing , +Missing Knum -tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:23: +tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:4:1: | -3 | given E1 new type Knum - | ^ +4 | find x : E1 + | ^ Missing Domain tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:4:1: | 4 | find x : E1 | ^ -Missing : +Missing find diff --git a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected index 1bbccc381b..2ce9ab80ab 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected @@ -3,7 +3,7 @@ Error: | 6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} | ^ -Missing , +Missing l tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: | @@ -21,7 +21,7 @@ tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: | 6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} | ^ -Missing : +Missing + tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:7:10: | diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected index 778f84ba4b..3c891fceeb 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence:6:42 | 6 | letting E2 be new type enum {a, b, c, d, "hoh hoh hooo} | ^ -Missing } +Missing LUnexpected "\"" diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected index 4461109a8d..f295abe058 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-06/stderr.expected @@ -1,12 +1,12 @@ Error: - tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:9: + tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:10: | 13 | find k : 2 - | ^ -Missing Domain + | ^ +Unexpected 2 tests/parse_print/random_perturb/enum_liberated/delete-06/delete-06.essence:13:10: | 13 | find k : 2 | ^ -Unexpected 2 +Missing Domain diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected index c7f9662455..9fd78cd078 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected @@ -3,28 +3,28 @@ Error: | 3 | given E1 new tpe enum | ^ -Missing enum +Missing tpe tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: | 3 | given E1 new tpe enum | ^ -Missing type +Missing tpe tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: | 3 | given E1 new tpe enum | ^ -Missing , +Missing tpe tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:18: | 3 | given E1 new tpe enum | ^ -Missing type +Missing enum tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:18: | 3 | given E1 new tpe enum | ^ -Missing new +Missing enum diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected index f30582fc28..aa669a8129 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected @@ -3,19 +3,19 @@ Error: | 7 | find y E2 | ^ -Missing , +Missing E2 -tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:7:11: +tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:1: | -7 | find y E2 - | ^ +8 | find z : E2(a..c) + | ^ Missing Domain tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:1: | 8 | find z : E2(a..c) | ^ -Missing : +Missing find tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:10: | diff --git a/tests/parse_print/random_perturb/set01/change-07/stderr.expected b/tests/parse_print/random_perturb/set01/change-07/stderr.expected index 3c46bb5530..6bdf9403e2 100644 --- a/tests/parse_print/random_perturb/set01/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-07/stderr.expected @@ -3,7 +3,7 @@ Error: | 3 | find x : set (sizo 2) of int(1..3) | ^ -Missing of +Missing ( tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:15: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: | 3 | find x : set (sizo 2) of int(1..3) | ^ -Missing ) +Missing LIntLiteral 2 diff --git a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected index 5f8e4ffbdc..da5a439097 100644 --- a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected @@ -3,7 +3,7 @@ Error: | 3 | find x : set (siz 2) of int(1..3) | ^ -Missing of +Missing ( tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:15: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: | 3 | find x : set (siz 2) of int(1..3) | ^ -Missing ) +Missing LIntLiteral 2 diff --git a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected index 32ed8efb12..fb4bf3fd5d 100644 --- a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected @@ -3,7 +3,7 @@ Error: | 3 | find x : set (sze 2) of int(1..3) | ^ -Missing of +Missing ( tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:15: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: | 3 | find x : set (sze 2) of int(1..3) | ^ -Missing ) +Missing LIntLiteral 2 diff --git a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected index 4b307bb3fc..4cd521d8e3 100644 --- a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: | 3 | find x : set (size 2) o int(1..3) | ^ -Missing of +Missing o tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: | @@ -21,10 +21,10 @@ tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: | 3 | find x : set (size 2) o int(1..3) | ^ -Missing : +Missing int tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: | 3 | find x : set (size 2) o int(1..3) | ^ -Missing , +Missing int From c4315f1498ccd5c1b220573d1398d2d7bd936126 Mon Sep 17 00:00:00 2001 From: mfb22 Date: Fri, 14 Jul 2023 17:03:15 +0100 Subject: [PATCH 287/378] Bug fix + tests --- src/Conjure/Language/AST/Helpers.hs | 2 +- tests/custom/ide/basic/stdout.expected | 12 +++--- tests/custom/issues/365/stderr.expected | 2 +- tests/custom/issues/431/stderr.expected | 10 ++--- .../stderr.expected | 30 +++++++------- .../stderr.expected | 26 ++++++------ .../stderr.expected | 20 +++++----- .../stderr.expected | 12 +++--- .../stderr.expected | 18 ++++----- .../stderr.expected | 20 +++++----- .../stderr.expected | 12 +++--- .../stderr.expected | 40 +++++++++---------- .../parse_print/issues/133/1/stderr.expected | 2 +- .../parse_print/issues/133/2/stderr.expected | 2 +- .../parse_print/issues/133/3/stderr.expected | 2 +- .../parse_print/issues/361/2/stderr.expected | 2 +- .../parse_print/issues/425/1/stderr.expected | 2 +- .../parse_print/issues/425/2/stderr.expected | 2 +- tests/parse_print/parsing01/stderr.expected | 2 +- .../parsing03_nonassoc/stderr.expected | 2 +- .../enum_liberated/change-03/stderr.expected | 2 +- .../enum_liberated/change-06/stderr.expected | 6 +-- .../enum_liberated/change-10/stderr.expected | 4 +- .../enum_liberated/delete-03/stderr.expected | 2 +- .../enum_liberated/delete-07/stderr.expected | 10 ++--- .../enum_liberated/delete-10/stderr.expected | 4 +- .../set01/change-07/stderr.expected | 4 +- .../set01/delete-02/stderr.expected | 4 +- .../set01/delete-03/stderr.expected | 4 +- .../set01/delete-08/stderr.expected | 6 +-- 30 files changed, 133 insertions(+), 133 deletions(-) diff --git a/src/Conjure/Language/AST/Helpers.hs b/src/Conjure/Language/AST/Helpers.hs index aaefe9ccc3..bc21c63739 100644 --- a/src/Conjure/Language/AST/Helpers.hs +++ b/src/Conjure/Language/AST/Helpers.hs @@ -86,7 +86,7 @@ want a = do tok@(ETok _ _ lex _) <- lookAhead anySingle if lex == a then makeStrict <$> anySingle - else return $ MissingToken $ nullBefore lex tok + else return $ MissingToken $ nullBefore a tok -- get a symbol from the stream with no fallback need :: Lexeme -> Parser SToken diff --git a/tests/custom/ide/basic/stdout.expected b/tests/custom/ide/basic/stdout.expected index 0731099939..9e6c3863c0 100644 --- a/tests/custom/ide/basic/stdout.expected +++ b/tests/custom/ide/basic/stdout.expected @@ -10,11 +10,11 @@ Skipped tokens == parser.essence == Error: - parser.essence:7:27: + parser.essence:7:28: | 7 | such that x + y = z, x = 1 = y = 2 - | ^ -Missing Expr + | ^ +Missing Expression parser.essence:7:28: | @@ -22,11 +22,11 @@ parser.essence:7:28: | ^ Missing , -parser.essence:7:31: +parser.essence:7:32: | 7 | such that x + y = z, x = 1 = y = 2 - | ^ -Missing Expr + | ^ +Missing Expression parser.essence:7:32: | diff --git a/tests/custom/issues/365/stderr.expected b/tests/custom/issues/365/stderr.expected index 625b8abb28..530a2fd4d7 100644 --- a/tests/custom/issues/365/stderr.expected +++ b/tests/custom/issues/365/stderr.expected @@ -3,7 +3,7 @@ Error: | 2 | find i : int(0..9) such that forAll j : int(0..9) . j <> i | ^ -Missing Expr +Missing Expression 365.essence:2:58: | diff --git a/tests/custom/issues/431/stderr.expected b/tests/custom/issues/431/stderr.expected index cb187f15d9..0263a368d5 100644 --- a/tests/custom/issues/431/stderr.expected +++ b/tests/custom/issues/431/stderr.expected @@ -1,15 +1,15 @@ Error: - 431.essence:2:13: + 431.essence:2:14: | 2 | find s : set {x,y} - | ^ -Missing Domain + | ^^^^^ +Skipped tokens 431.essence:2:14: | 2 | find s : set {x,y} - | ^^^^^ -Skipped tokens + | ^ +Missing Domain 431.essence:2:14: | diff --git a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected index c3909d52ef..5fcd720315 100644 --- a/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/stderr.expected @@ -21,19 +21,19 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:4:54: | 4 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: | @@ -51,19 +51,19 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3, | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:7:87: | @@ -87,19 +87,19 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of bool | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | @@ -117,19 +117,19 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:11:54: | 11 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(3..3, | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:12:87: | @@ -153,19 +153,19 @@ tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:14:54: | 14 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(2..3, | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/1427d21b2cf2d582721ba5c391fdeb3e/1427d21b2cf2d582721ba5c391fdeb3e.eprime.essence:15:87: | diff --git a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected index 2f10746720..1302a7d925 100644 --- a/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: | @@ -21,13 +21,13 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:37: | 4 | int(0..undefined(modulo zero: 0 % 0 : `int`)) | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:4:39: | @@ -45,7 +45,7 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | @@ -63,25 +63,25 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`))] of int(0..5) | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:6:58: | @@ -99,7 +99,7 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | @@ -117,25 +117,25 @@ tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e1 | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 0 % 0 : `int`)), int(1..5), | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/282fe3e111717af84f27689693c94ac4/282fe3e111717af84f27689693c94ac4.eprime.essence:8:58: | diff --git a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected index 37006b39e7..afa3217a82 100644 --- a/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | @@ -27,25 +27,25 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:56: | 22 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:22:58: | @@ -63,7 +63,7 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | @@ -81,25 +81,25 @@ tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb48 | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:56: | 24 | matrix indexed by [int(1..undefined(modulo zero: 2 % 0 : `int`))] of bool | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/8089eb489848ed165fbe9a1af7e6cd47/8089eb489848ed165fbe9a1af7e6cd47.eprime.essence:24:58: | diff --git a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected index 71dc6af811..5e132a4daf 100644 --- a/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/stderr.expected @@ -21,19 +21,19 @@ tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8 | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of int(0..undefined(division by zero: 3 / 0 : `int`)) | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: | @@ -51,16 +51,16 @@ tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8 | 12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/8d9aeec8a4cae4f6527e31d510e8df23/8d9aeec8a4cae4f6527e31d510e8df23.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 5 / 0 : `int`))] of bool | ^ -Missing by +Missing of diff --git a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected index 1752910fe5..5009e48fd7 100644 --- a/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/stderr.expected @@ -21,19 +21,19 @@ tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03 | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:20:54: | 20 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`))] of int(0..3) | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: | @@ -51,19 +51,19 @@ tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03 | 22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: | 22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:22:54: | 22 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:23:28: | @@ -87,19 +87,19 @@ tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03 | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:25:54: | 25 | matrix indexed by [int(1..undefined(division by zero: 3 / 0 : `int`)), | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/961d1c03df4f6fdf5a4b8bfa8fb85d14/961d1c03df4f6fdf5a4b8bfa8fb85d14.eprime.essence:26:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected index 80c8a6d7a5..1e173c1ae9 100644 --- a/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/stderr.expected @@ -15,7 +15,7 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | 4 | int(0..undefined(division by zero: 2 / 0 : `int`)) | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | @@ -33,19 +33,19 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:6:54: | 6 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:7:28: | @@ -69,19 +69,19 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:9:54: | 9 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:10:28: | @@ -105,19 +105,19 @@ tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc31989 | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:12:54: | 12 | matrix indexed by [int(1..undefined(division by zero: 2 / 0 : `int`)), | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/9cc3198933cb09006cb5dbb960f49f95/9cc3198933cb09006cb5dbb960f49f95.eprime.essence:13:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected index 129af91f4d..359a54d5fd 100644 --- a/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/stderr.expected @@ -21,19 +21,19 @@ tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae6 | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:8:54: | 8 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`))] of int(0..undefined(division by zero: 0 / 0 : `int`)) | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | @@ -51,19 +51,19 @@ tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae6 | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, | ^ -Missing by +Missing ) tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, | ^ -Missing by +Missing ] tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:10:54: | 10 | matrix indexed by [int(1..undefined(division by zero: 0 / 0 : `int`)), bool, | ^ -Missing by +Missing of tests/parse_print/autogen-bilals-fixed/ac72aae66b512a833a3ec00755c2084d/ac72aae66b512a833a3ec00755c2084d.eprime.essence:11:28: | diff --git a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected index 80fd0962ac..be5b64ad8c 100644 --- a/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected +++ b/tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | @@ -27,25 +27,25 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:56: | 4 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of int(0..undefined(modulo zero: 3 % 0 : `int`)) | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:4:58: | @@ -63,7 +63,7 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | @@ -81,25 +81,25 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:56: | 6 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:6:58: | @@ -117,7 +117,7 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | @@ -135,25 +135,25 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:56: | 8 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:8:58: | @@ -171,7 +171,7 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing zero +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | @@ -189,25 +189,25 @@ tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670 | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing ) tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing ] tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing of tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:56: | 10 | matrix indexed by [int(1..undefined(modulo zero: 3 % 0 : `int`))] of bool | ^ -Missing : +Missing , tests/parse_print/autogen-bilals-fixed/f2d8a670b4c34d59079378000ca2e898/f2d8a670b4c34d59079378000ca2e898.eprime.essence:10:58: | diff --git a/tests/parse_print/issues/133/1/stderr.expected b/tests/parse_print/issues/133/1/stderr.expected index b15973df23..915ce3ad48 100644 --- a/tests/parse_print/issues/133/1/stderr.expected +++ b/tests/parse_print/issues/133/1/stderr.expected @@ -15,4 +15,4 @@ tests/parse_print/issues/133/1/133_1.essence:3:8: | 3 | find a be int(1..9) | ^ -Missing be +Missing : diff --git a/tests/parse_print/issues/133/2/stderr.expected b/tests/parse_print/issues/133/2/stderr.expected index 871f00b0ed..cf5ff14904 100644 --- a/tests/parse_print/issues/133/2/stderr.expected +++ b/tests/parse_print/issues/133/2/stderr.expected @@ -2,4 +2,4 @@ Error: tests/parse_print/issues/133/2/133_2.essence:6:6: | 6 | int(1,3) | ^ -Missing int +Missing , diff --git a/tests/parse_print/issues/133/3/stderr.expected b/tests/parse_print/issues/133/3/stderr.expected index ef46606144..18ad31c29c 100644 --- a/tests/parse_print/issues/133/3/stderr.expected +++ b/tests/parse_print/issues/133/3/stderr.expected @@ -2,4 +2,4 @@ Error: tests/parse_print/issues/133/3/133_3.essence:7:10: | 7 | m = [1,2 3] | ^ -Missing LIntLiteral 3 +Missing , diff --git a/tests/parse_print/issues/361/2/stderr.expected b/tests/parse_print/issues/361/2/stderr.expected index f85dd952d7..7f95795112 100644 --- a/tests/parse_print/issues/361/2/stderr.expected +++ b/tests/parse_print/issues/361/2/stderr.expected @@ -21,4 +21,4 @@ tests/parse_print/issues/361/2/361_2.essence:2:42: | 2 | find x : int(1..2) such that forAll j in int(1..2) . x <= j | ^ -Missing int +Missing . diff --git a/tests/parse_print/issues/425/1/stderr.expected b/tests/parse_print/issues/425/1/stderr.expected index 5409b7a504..8c657fa80d 100644 --- a/tests/parse_print/issues/425/1/stderr.expected +++ b/tests/parse_print/issues/425/1/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/issues/425/1/425.essence:1:15: | 1 | letting s be {:} | ^ -Missing : +Missing } diff --git a/tests/parse_print/issues/425/2/stderr.expected b/tests/parse_print/issues/425/2/stderr.expected index 3ad2a77d4f..e4c9854327 100644 --- a/tests/parse_print/issues/425/2/stderr.expected +++ b/tests/parse_print/issues/425/2/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/issues/425/2/425.essence:2:15: | 2 | letting s be {:} | ^ -Missing : +Missing } diff --git a/tests/parse_print/parsing01/stderr.expected b/tests/parse_print/parsing01/stderr.expected index f5c21e3c0b..a9512e586e 100644 --- a/tests/parse_print/parsing01/stderr.expected +++ b/tests/parse_print/parsing01/stderr.expected @@ -2,4 +2,4 @@ Error: tests/parse_print/parsing01/parsing01.essence:4:1: | 4 | | ^ -Missing L_EOF +Missing ) diff --git a/tests/parse_print/parsing03_nonassoc/stderr.expected b/tests/parse_print/parsing03_nonassoc/stderr.expected index baeb9f07e0..5ca335580f 100644 --- a/tests/parse_print/parsing03_nonassoc/stderr.expected +++ b/tests/parse_print/parsing03_nonassoc/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/parsing03_nonassoc/nonassoc.essence:2:17: | 2 | such that x = y = z | ^ -Missing = +Missing , diff --git a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected index a51d1d4f2a..5501475926 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-03/stderr.expected @@ -3,7 +3,7 @@ Error: | 6 | letting E2 be new type enum ma, b, c, d, "hoh hoh hooo"} | ^ -Missing ma +Missing { tests/parse_print/random_perturb/enum_liberated/change-03/change-03.essence:8:13: | diff --git a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected index 3bf7f5be6f..20b99b0c38 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-06/stderr.expected @@ -3,13 +3,13 @@ Error: | 3 | given E1 new type Knum | ^ -Missing Knum +Missing enum tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:3:19: | 3 | given E1 new type Knum | ^ -Missing Knum +Missing , tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:4:1: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/enum_liberated/change-06/change-06.essence:4:1: | 4 | find x : E1 | ^ -Missing find +Missing : diff --git a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected index 2ce9ab80ab..1bbccc381b 100644 --- a/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/change-10/stderr.expected @@ -3,7 +3,7 @@ Error: | 6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} | ^ -Missing l +Missing , tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: | @@ -21,7 +21,7 @@ tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:6:2: | 6 | l+tting E2 be new type enum {a, b, c, d, "hoh hoh hooo"} | ^ -Missing + +Missing : tests/parse_print/random_perturb/enum_liberated/change-10/change-10.essence:7:10: | diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected index 3c891fceeb..778f84ba4b 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-03/stderr.expected @@ -9,4 +9,4 @@ tests/parse_print/random_perturb/enum_liberated/delete-03/delete-03.essence:6:42 | 6 | letting E2 be new type enum {a, b, c, d, "hoh hoh hooo} | ^ -Missing LUnexpected "\"" +Missing } diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected index 9fd78cd078..c7f9662455 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-07/stderr.expected @@ -3,28 +3,28 @@ Error: | 3 | given E1 new tpe enum | ^ -Missing tpe +Missing enum tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: | 3 | given E1 new tpe enum | ^ -Missing tpe +Missing type tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:14: | 3 | given E1 new tpe enum | ^ -Missing tpe +Missing , tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:18: | 3 | given E1 new tpe enum | ^ -Missing enum +Missing type tests/parse_print/random_perturb/enum_liberated/delete-07/delete-07.essence:3:18: | 3 | given E1 new tpe enum | ^ -Missing enum +Missing new diff --git a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected index aa669a8129..5421a1f403 100644 --- a/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected +++ b/tests/parse_print/random_perturb/enum_liberated/delete-10/stderr.expected @@ -3,7 +3,7 @@ Error: | 7 | find y E2 | ^ -Missing E2 +Missing , tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:1: | @@ -15,7 +15,7 @@ tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:1: | 8 | find z : E2(a..c) | ^ -Missing find +Missing : tests/parse_print/random_perturb/enum_liberated/delete-10/delete-10.essence:8:10: | diff --git a/tests/parse_print/random_perturb/set01/change-07/stderr.expected b/tests/parse_print/random_perturb/set01/change-07/stderr.expected index 6bdf9403e2..3c46bb5530 100644 --- a/tests/parse_print/random_perturb/set01/change-07/stderr.expected +++ b/tests/parse_print/random_perturb/set01/change-07/stderr.expected @@ -3,7 +3,7 @@ Error: | 3 | find x : set (sizo 2) of int(1..3) | ^ -Missing ( +Missing of tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:15: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/set01/change-07/change-07.essence:3:20: | 3 | find x : set (sizo 2) of int(1..3) | ^ -Missing LIntLiteral 2 +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected index da5a439097..5f8e4ffbdc 100644 --- a/tests/parse_print/random_perturb/set01/delete-02/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-02/stderr.expected @@ -3,7 +3,7 @@ Error: | 3 | find x : set (siz 2) of int(1..3) | ^ -Missing ( +Missing of tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:15: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/set01/delete-02/delete-02.essence:3:19: | 3 | find x : set (siz 2) of int(1..3) | ^ -Missing LIntLiteral 2 +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected index fb4bf3fd5d..32ed8efb12 100644 --- a/tests/parse_print/random_perturb/set01/delete-03/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-03/stderr.expected @@ -3,7 +3,7 @@ Error: | 3 | find x : set (sze 2) of int(1..3) | ^ -Missing ( +Missing of tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:15: | @@ -21,4 +21,4 @@ tests/parse_print/random_perturb/set01/delete-03/delete-03.essence:3:19: | 3 | find x : set (sze 2) of int(1..3) | ^ -Missing LIntLiteral 2 +Missing ) diff --git a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected index 4cd521d8e3..4b307bb3fc 100644 --- a/tests/parse_print/random_perturb/set01/delete-08/stderr.expected +++ b/tests/parse_print/random_perturb/set01/delete-08/stderr.expected @@ -9,7 +9,7 @@ tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:23: | 3 | find x : set (size 2) o int(1..3) | ^ -Missing o +Missing of tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: | @@ -21,10 +21,10 @@ tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: | 3 | find x : set (size 2) o int(1..3) | ^ -Missing int +Missing : tests/parse_print/random_perturb/set01/delete-08/delete-08.essence:3:25: | 3 | find x : set (size 2) o int(1..3) | ^ -Missing int +Missing , From 4acc879e2dc70eb893162485fcd47b56d49332b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 23 Aug 2023 11:08:04 +0100 Subject: [PATCH 288/378] adding ghc-9.4 support --- etc/hs-deps/stack-9.2.yaml | 2 +- etc/hs-deps/stack-9.4.yaml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 etc/hs-deps/stack-9.4.yaml diff --git a/etc/hs-deps/stack-9.2.yaml b/etc/hs-deps/stack-9.2.yaml index 97de451bc1..41cf72db57 100644 --- a/etc/hs-deps/stack-9.2.yaml +++ b/etc/hs-deps/stack-9.2.yaml @@ -1,4 +1,4 @@ -resolver: lts-20.23 +resolver: lts-20.26 packages: - '.' system-ghc: true diff --git a/etc/hs-deps/stack-9.4.yaml b/etc/hs-deps/stack-9.4.yaml new file mode 100644 index 0000000000..f0610ef2ab --- /dev/null +++ b/etc/hs-deps/stack-9.4.yaml @@ -0,0 +1,8 @@ +resolver: lts-21.8 +packages: +- '.' +system-ghc: true +install-ghc: true +extra-deps: +- lsp-1.6.0.0 +- lsp-types-1.6.0.0 From 56bf61ce5485cbcb116487467c35d45fb54bff72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 23 Aug 2023 11:11:07 +0100 Subject: [PATCH 289/378] add 9.4 to the makefile&CI, and make it the default --- .github/workflows/build.yml | 2 +- .github/workflows/test-coverage.yml | 2 +- .github/workflows/test.yml | 2 +- Makefile | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73b8095c7a..9a9813a9a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.2] + GHC_VERSION: [9.0, 9.2, 9.4] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index b61e7a5ab9..d29951b80c 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -19,7 +19,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.2] + GHC_VERSION: [9.4] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c328b6908b..30a2893a1f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.2] + GHC_VERSION: [9.4] os: [ubuntu-latest] runs-on: ${{ matrix.os }} diff --git a/Makefile b/Makefile index 5ea92d7773..805ffd6bbb 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ SHELL := /bin/bash # these are default values # override by calling the makefile like so: "GHC_VERSION=9.2 make" -export GHC_VERSION?=9.2 +export GHC_VERSION?=9.4 export BIN_DIR?=${HOME}/.local/bin export PATH := $(BIN_DIR):$(PATH) export CI?=false @@ -15,8 +15,8 @@ export LIMIT_TIME?=10 install: @echo "Using GHC version ${GHC_VERSION} (major version)" @echo "Set the environment variable GHC_VERSION to change this location." - @echo "For example: \"GHC_VERSION=9.2 make install\"" - @echo "Supported versions: 9.0, 9.2" + @echo "For example: \"GHC_VERSION=9.4 make install\"" + @echo "Supported versions: 9.0, 9.2, 9.4" @echo "" @echo "Installing executables to ${BIN_DIR}" @echo "Add this directory to your PATH." From c757c98bce8021f3cd5e92d324599f6dd578cd33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 23 Aug 2023 11:14:01 +0100 Subject: [PATCH 290/378] using strings so 9.0 does not get simplified to just 9 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9a9813a9a1..e5ca1d192c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: strategy: matrix: - GHC_VERSION: [9.0, 9.2, 9.4] + GHC_VERSION: ["9.0", "9.2", "9.4"] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} From a9196991e1295d3cdab5f7705efc369b9f469d88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 23 Aug 2023 14:29:31 +0100 Subject: [PATCH 291/378] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 05fec711a8..533b1e712c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This repository contains the development version of the tool. - For release versions please see the [releases](https://github.com/conjure-cp/conjure/releases) section. - If you want to cite Conjure, use the instructions on Zenodo [![DOI](https://zenodo.org/badge/57966170.svg)](https://zenodo.org/badge/latestdoi/57966170) - Conjure's license is BSD3 [![License BSD3](https://img.shields.io/badge/license-BSD3-brightgreen.svg)](http://opensource.org/licenses/BSD-3-Clause) -- Documentation is hosted on Read the Docs [![Documentation Status](https://readthedocs.org/projects/conjure/badge/?version=latest)](https://conjure.readthedocs.io) +- [Documentation](https://conjure.readthedocs.io) is hosted on Read the Docs [![Documentation Status](https://readthedocs.org/projects/conjure/badge/?version=latest)](https://conjure.readthedocs.io) - Continuous testing on Github actions - [![Building on all platforms](https://github.com/conjure-cp/conjure/actions/workflows/build.yml/badge.svg)](https://github.com/conjure-cp/conjure/actions/workflows/build.yml) - [![Running all tests](https://github.com/conjure-cp/conjure/actions/workflows/test.yml/badge.svg)](https://github.com/conjure-cp/conjure/actions/workflows/test.yml) @@ -24,6 +24,10 @@ The documentation also contains information on how to [install](http://conjure.readthedocs.io/en/latest/installation.html) Conjure and how to [contact](http://conjure.readthedocs.io/en/latest/contact.html) the developers. +## Demos + +We host a few demo applications: See [https://conjure-cp.github.io/demos](https://conjure-cp.github.io/demos) + ## Repository Conjure's source code, issue tracker and releases are hosted on the [conjure-cp/conjure](http://www.github.com/conjure-cp/conjure) Github repository. From 2b4e4381f46d87194d19251cb6e2327ec98f4737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 23 Aug 2023 14:32:49 +0100 Subject: [PATCH 292/378] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 533b1e712c..4e42842c9a 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,13 @@ how to [contact](http://conjure.readthedocs.io/en/latest/contact.html) the devel We host a few demo applications: See [https://conjure-cp.github.io/demos](https://conjure-cp.github.io/demos) +## Conjure Notebook + +Conjure can be used inside a Jupyter notebook, with seamless Python integration. Using this extension, parameters are automatically passed from Python to Conjure and solutions are automatically made available in Python. + +See the [conjure-cp/conjure-notebook](https://github.com/conjure-cp/conjure-notebook) repository for details. + + ## Repository Conjure's source code, issue tracker and releases are hosted on the [conjure-cp/conjure](http://www.github.com/conjure-cp/conjure) Github repository. From eebff2f8a1e8314df0633698191ec6eb98b274c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 24 Aug 2023 21:55:39 +0100 Subject: [PATCH 293/378] remove name shadoing --- src/Conjure/Language/Lexer.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Conjure/Language/Lexer.hs b/src/Conjure/Language/Lexer.hs index 52d5f07e6d..73c86b4764 100644 --- a/src/Conjure/Language/Lexer.hs +++ b/src/Conjure/Language/Lexer.hs @@ -178,12 +178,12 @@ aToken = do start <- getOffset startPos <- getSourcePos whitespace <- pTrivia - tokenOffset <- getOffset + tokenOffset_ <- getOffset tokenStart <- getSourcePos (tok,cap) <- aLexeme tokenEnd <- getOffset endPos <- getSourcePos - return $ makeToken (Offsets start (tokenEnd - start) (tokenEnd - tokenOffset) startPos tokenStart endPos) whitespace tok cap + return $ makeToken (Offsets start (tokenEnd - start) (tokenEnd - tokenOffset_) startPos tokenStart endPos) whitespace tok cap pEOF :: Lexer ETok pEOF = do From eb9f63c77facf02d3a0410c22e31f9e11d855382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 24 Aug 2023 22:00:36 +0100 Subject: [PATCH 294/378] deal with a bunch more warnings --- src/Conjure/LSP/Handlers/Suggestions.hs | 3 +-- src/Conjure/LSP/Util.hs | 5 ++--- src/Conjure/Language/Validator.hs | 2 +- src/Conjure/UI/ErrorDisplay.hs | 5 +---- src/test/Conjure/ParserFuzz.hs | 2 +- 5 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/Conjure/LSP/Handlers/Suggestions.hs b/src/Conjure/LSP/Handlers/Suggestions.hs index 42ef316430..da02b64140 100644 --- a/src/Conjure/LSP/Handlers/Suggestions.hs +++ b/src/Conjure/LSP/Handlers/Suggestions.hs @@ -1,6 +1,6 @@ module Conjure.LSP.Handlers.Suggestions (suggestionHandler) where -import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getNextTokenStart, positionToSourcePos, sendInfoMessage, sourcePosToPosition, withProcessedDoc, getRelevantRegions) +import Conjure.LSP.Util (ProcessedFile (ProcessedFile), getNextTokenStart, positionToSourcePos, sourcePosToPosition, withProcessedDoc, getRelevantRegions) import Conjure.Language (Type (..)) import Conjure.Language.AST.Reformer -- (Class (..), Kind (..), RegionInfo (..), ValidatorState (regionInfo), RegionType (..), StructuralType (..),symbolTable) @@ -12,7 +12,6 @@ import Conjure.Language.Pretty (prettyT) import Conjure.Language.Validator import Conjure.Prelude import Control.Lens -import Data.Text (pack) import Language.LSP.Server (Handlers, LspM, requestHandler) import Language.LSP.Types (SMethod(STextDocumentCompletion),type (|?) (..), CompletionItem (..), CompletionItemKind (..)) import qualified Language.LSP.Types as T diff --git a/src/Conjure/LSP/Util.hs b/src/Conjure/LSP/Util.hs index 3ad051cd4f..0ec5113ce3 100644 --- a/src/Conjure/LSP/Util.hs +++ b/src/Conjure/LSP/Util.hs @@ -22,7 +22,6 @@ import Conjure.Language.AST.Syntax (ProgramTree) import Conjure.Language.Lexer import Conjure.Language.AST.Reformer import qualified Data.Sequence as Seq -import Conjure.Language.Lexer (Offsets(oSourcePos)) data ProcessedFile = ProcessedFile { @@ -165,6 +164,6 @@ posInf :: Position posInf = Position (negate 1) (negate 1) tokensAtPosition :: Position -> Seq.Seq ETok -> [ETok] -tokensAtPosition p s = maybeToList (find (posAfter p ) s) +tokensAtPosition p s = maybeToList (find (posAfter p) s) where - posAfter p t = p < sourcePosToPosition (oSourcePos $ offsets t) + posAfter q t = q < sourcePosToPosition (oSourcePos $ offsets t) diff --git a/src/Conjure/Language/Validator.hs b/src/Conjure/Language/Validator.hs index d4cae81e33..7de36e16ce 100644 --- a/src/Conjure/Language/Validator.hs +++ b/src/Conjure/Language/Validator.hs @@ -23,7 +23,7 @@ import qualified Conjure.Language.Expression as D ( Expression(Typed) ) import Conjure.Language.Domain import Conjure.Language.Lexemes -import Conjure.Language.Lexer (ETok (ETok, lexeme),tokenOffset, tokenSourcePos, totalLength, trueLength, sourcePos0, sourcePosAfter, trueStart, Offsets (..), tokenStartOffset) +import Conjure.Language.Lexer (ETok (ETok, lexeme), tokenSourcePos, totalLength, trueLength, sourcePos0, sourcePosAfter, tokenStartOffset) import Conjure.Language.Attributes import Conjure.Prelude diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 38fa4647cc..4fc8756149 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -3,8 +3,6 @@ import Conjure.Prelude import Conjure.Language.Validator import Text.Megaparsec -import Data.Generics.Uniplate.Data as U - import qualified Data.Set as Set import Conjure.Language.AST.Syntax import Conjure.Language.AST.ASTParser @@ -16,7 +14,6 @@ import Data.Map.Strict (assocs) import Conjure.Language.Pretty import Conjure.Language.AST.Reformer import Data.Data -import Data.Traversable (traverse) type Parser t = Parsec DiagnosticForPrint Text t @@ -167,4 +164,4 @@ withParseTree pa f = do listBounds :: Int -> Int -> ProgramTree -> IO () listBounds a b t = do let hlt = makeTree t - sequence_ [print $ toConstr t | x@(HLTagged t _) <- universe hlt,contains (SourcePos "" (mkPos a) (mkPos b)) x] \ No newline at end of file + sequence_ [print $ toConstr t' | x@(HLTagged t' _) <- universe hlt,contains (SourcePos "" (mkPos a) (mkPos b)) x] \ No newline at end of file diff --git a/src/test/Conjure/ParserFuzz.hs b/src/test/Conjure/ParserFuzz.hs index c532908329..165a3e2f4e 100644 --- a/src/test/Conjure/ParserFuzz.hs +++ b/src/test/Conjure/ParserFuzz.hs @@ -38,7 +38,7 @@ testFile fp = testCaseSteps (map (\ch -> if ch == '/' then '.' else ch) fp) $ \s let usableFileData = concat (take 1000 . lines $ fromMaybe [] fd) let fText = T.pack usableFileData case runLexer fText (Just fp) of - Left le -> assertFailure $ "Lexer failed in:" ++ fp + Left _le -> assertFailure $ "Lexer failed in:" ++ fp Right ets -> do step "parsing" case runASTParser parseProgram ets of From 0955541f32a119c992cfa325bc12f681e32ce81e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 24 Aug 2023 22:02:18 +0100 Subject: [PATCH 295/378] removing unnecessary files --- src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs | 13 --------- src/test-lsp/Conjure/LSP/Util.hs | 30 --------------------- src/test-lsp/LSPTestsMain.hs | 1 - 3 files changed, 44 deletions(-) delete mode 100644 src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs delete mode 100644 src/test-lsp/Conjure/LSP/Util.hs delete mode 100644 src/test-lsp/LSPTestsMain.hs diff --git a/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs b/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs deleted file mode 100644 index 8cec42a813..0000000000 --- a/src/test-lsp/Conjure/LSP/Basic/BasicSpec.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Conjure.LSP.Basic.BasicSpec where -import Conjure.Prelude -import Test.Hspec -import Conjure.LSP.Util (withDummyServer, doWithSession) --- spec :: Spec --- spec = around withDummyServer $ do --- describe "Basic connection" $ do --- it "connects" $ doWithSession $ do --- return () - - - - diff --git a/src/test-lsp/Conjure/LSP/Util.hs b/src/test-lsp/Conjure/LSP/Util.hs deleted file mode 100644 index 3f0c4c758d..0000000000 --- a/src/test-lsp/Conjure/LSP/Util.hs +++ /dev/null @@ -1,30 +0,0 @@ -module Conjure.LSP.Util where -import System.IO (Handle) - -import Language.LSP.Test -import Language.LSP.Server -import UnliftIO.Async -import Language.LSP.Types -import Conjure.Prelude -import Conjure.LSP.LanguageServer -import GHC.Conc (forkIO) -import Control.Concurrent (killThread) -import Control.Exception (bracket) -import UnliftIO.Process (createPipe) - --- -- Adapted rom https://github.com/haskell/lsp/blob/master/lsp-test/test/DummyServer.hs --- withDummyServer :: ((Handle, Handle) -> IO ()) -> IO () --- withDummyServer f = do --- (hinRead, hinWrite) <- createPipe --- (houtRead, houtWrite) <- createPipe --- bracket --- (forkIO $ void $ runServerWithHandles mempty mempty hinRead houtWrite conjureLanguageServer) --- killThread --- (const $ f (hinWrite, houtRead)) - - - - - --- doWithSession :: Session () -> (Handle,Handle) -> IO () --- doWithSession session (hin,hout) = runSessionWithHandles hin hout def fullCaps "." session \ No newline at end of file diff --git a/src/test-lsp/LSPTestsMain.hs b/src/test-lsp/LSPTestsMain.hs deleted file mode 100644 index 91fb208e86..0000000000 --- a/src/test-lsp/LSPTestsMain.hs +++ /dev/null @@ -1 +0,0 @@ --- {-# OPTIONS_GHC -F -pgmF hspec-discover #-} \ No newline at end of file From 2e2ccd863e2a2c7d8237b0ae53677bd128c1af47 Mon Sep 17 00:00:00 2001 From: sasha704 <100995903+sasha704@users.noreply.github.com> Date: Sun, 27 Aug 2023 15:49:45 +0100 Subject: [PATCH 296/378] Updated outputs --- docs/tutorials/notebooks/BIBD.ipynb | 96 ++++++++++++++--------------- 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/docs/tutorials/notebooks/BIBD.ipynb b/docs/tutorials/notebooks/BIBD.ipynb index a20c934b3c..5e3b6e7bc8 100644 --- a/docs/tutorials/notebooks/BIBD.ipynb +++ b/docs/tutorials/notebooks/BIBD.ipynb @@ -23,7 +23,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -54,20 +54,17 @@ "metadata": { "colab": { "base_uri": "https://localhost:8080/", - "height": 173 + "height": 121 }, "id": "mbhQ1aHNJsYf", - "outputId": "0746aaae-6254-4b04-c3a2-b7b9006b8652" + "outputId": "0d40ed49-ca26-4b1d-ad04-e1c26532a930" }, - "execution_count": null, + "execution_count": 1, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ - " % Total % Received % Xferd Average Speed Time Time Time Current\n", - " Dload Upload Total Spent Left Speed\n", - "100 697 100 697 0 0 4148 0 --:--:-- --:--:-- --:--:-- 4148\n", "Installing Conjure...\n", "Conjure: The Automated Constraint Modelling Tool\n", "Release version 2.4.0\n", @@ -381,13 +378,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "_X4PB87CIyz4", - "outputId": "80c19416-ac53-4898-93a7-a61e68c02aea" + "outputId": "859470c5-ed64-402f-e644-d94c61b6c757" }, "outputs": [ { @@ -398,7 +395,7 @@ ] }, "metadata": {}, - "execution_count": 3 + "execution_count": 2 } ], "source": [ @@ -463,9 +460,9 @@ "base_uri": "https://localhost:8080/" }, "id": "kG-nX4l8KzPt", - "outputId": "f5f874d0-88f6-401e-8ccb-6c2e0eaaf0ad" + "outputId": "1a3419de-5ce5-414a-bdd2-1aac2f76f6c9" }, - "execution_count": null, + "execution_count": 3, "outputs": [ { "output_type": "execute_result", @@ -475,7 +472,7 @@ ] }, "metadata": {}, - "execution_count": 4 + "execution_count": 3 } ] }, @@ -510,22 +507,19 @@ "base_uri": "https://localhost:8080/" }, "id": "pC0XyFeNMKH-", - "outputId": "9f612734-60d2-481d-973e-d014cdc18259" + "outputId": "b77e3ebf-7441-414a-c899-65b0157cb156" }, - "execution_count": null, + "execution_count": 4, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", - " ['🥔', '🥕', '🥒'],\n", - " ['🌽', '🥦', '🥒'],\n", - " ['🌽', '🥕', '🍅']]}" + "{'crop_assignment': [[], ['🥒'], ['🥒', '🍅'], ['🍅']]}" ] }, "metadata": {}, - "execution_count": 12 + "execution_count": 4 } ] }, @@ -559,22 +553,22 @@ "base_uri": "https://localhost:8080/" }, "id": "vfCF_EMYMYfK", - "outputId": "21d67b3d-3b66-4802-9a65-e51e5ef1b13e" + "outputId": "9cc86473-6829-4e37-b5bb-1b07bcbc767f" }, - "execution_count": null, + "execution_count": 5, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", - " ['🥔', '🥕', '🥒'],\n", - " ['🌽', '🥦', '🥒'],\n", - " ['🌽', '🥕', '🍅']]}" + "{'crop_assignment': [['🥦', '🥕', '🥒'],\n", + " ['🥦', '🥕', '🍅'],\n", + " ['🥦', '🥒', '🍅'],\n", + " ['🥕', '🥒', '🍅']]}" ] }, "metadata": {}, - "execution_count": 13 + "execution_count": 5 } ] }, @@ -617,22 +611,22 @@ "base_uri": "https://localhost:8080/" }, "id": "WXmz_3MRM6qS", - "outputId": "59f9f14b-6650-4b3f-b366-e9904383fddb" + "outputId": "47bccb98-6ac7-4c8c-f68a-50b45b085140" }, - "execution_count": null, + "execution_count": 6, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "{'crop_assignment': [['🥔', '🥦', '🍅'],\n", - " ['🥔', '🥕', '🥒'],\n", - " ['🌽', '🥦', '🥒'],\n", - " ['🌽', '🥕', '🍅']]}" + "{'crop_assignment': [['🥔', '🥕', '🍅'],\n", + " ['🥔', '🥒', '🍅'],\n", + " ['🌽', '🥦', '🥕'],\n", + " ['🌽', '🥦', '🥒']]}" ] }, "metadata": {}, - "execution_count": 14 + "execution_count": 6 } ] }, @@ -684,9 +678,9 @@ "base_uri": "https://localhost:8080/" }, "id": "pLhCp7ybNXXw", - "outputId": "c13cbcac-e7eb-4e9b-8927-6a8d66025b13" + "outputId": "d4a2878c-9840-44e1-c10d-dd763dc241c6" }, - "execution_count": null, + "execution_count": 7, "outputs": [ { "output_type": "execute_result", @@ -699,7 +693,7 @@ ] }, "metadata": {}, - "execution_count": 15 + "execution_count": 7 } ] }, @@ -749,9 +743,9 @@ "base_uri": "https://localhost:8080/" }, "id": "_VcoVlLR0T9f", - "outputId": "113fe4cf-06de-4ec6-ec08-b6c932b8657c" + "outputId": "58f5f72b-b962-47b6-d87d-473398a67e66" }, - "execution_count": null, + "execution_count": 8, "outputs": [ { "output_type": "stream", @@ -783,9 +777,9 @@ "base_uri": "https://localhost:8080/" }, "id": "roYiXvK5NpoH", - "outputId": "f3fa780f-3731-4f43-d08d-d788dd2980ee" + "outputId": "398d6532-d9dd-4c8b-e117-1ef7605b97be" }, - "execution_count": null, + "execution_count": 9, "outputs": [ { "output_type": "execute_result", @@ -798,7 +792,7 @@ ] }, "metadata": {}, - "execution_count": 17 + "execution_count": 9 } ] }, @@ -821,9 +815,9 @@ "base_uri": "https://localhost:8080/" }, "id": "16M5KTOt02GL", - "outputId": "f8c2c8c0-0e88-418e-e45e-449bdae7f5c1" + "outputId": "2b58a44c-83a5-49af-d800-a12e3ff46d55" }, - "execution_count": null, + "execution_count": 10, "outputs": [ { "output_type": "stream", @@ -855,12 +849,12 @@ ], "metadata": { "id": "WySmDV4c06uq", - "outputId": "6233f913-e7db-42f6-f1c3-c80d6bb66b3a", + "outputId": "8f1ab8ad-fe17-4956-8b7a-336fee136e4a", "colab": { "base_uri": "https://localhost:8080/" } }, - "execution_count": null, + "execution_count": 11, "outputs": [ { "output_type": "execute_result", @@ -870,7 +864,7 @@ ] }, "metadata": {}, - "execution_count": 19 + "execution_count": 11 } ] }, @@ -889,9 +883,9 @@ "base_uri": "https://localhost:8080/" }, "id": "1KPdRVh9N0l8", - "outputId": "1c23ad2b-66a8-4dd4-a50f-585a988a3086" + "outputId": "0377e5e7-1171-4721-edf3-eb6c6dfa8bb6" }, - "execution_count": null, + "execution_count": 12, "outputs": [ { "output_type": "execute_result", @@ -904,9 +898,9 @@ ] }, "metadata": {}, - "execution_count": 20 + "execution_count": 12 } ] } ] -} +} \ No newline at end of file From f56823859dcf1414ff0993f87dd45316a68cd2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 20 Sep 2023 12:03:03 +0100 Subject: [PATCH 297/378] update to LTS 21.12 which comes with GHC 9.4.7 --- etc/hs-deps/stack-9.4.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/hs-deps/stack-9.4.yaml b/etc/hs-deps/stack-9.4.yaml index f0610ef2ab..5aab728052 100644 --- a/etc/hs-deps/stack-9.4.yaml +++ b/etc/hs-deps/stack-9.4.yaml @@ -1,4 +1,4 @@ -resolver: lts-21.8 +resolver: lts-21.12 packages: - '.' system-ghc: true From 42f37aba2919bef010cf96f743294e4e7dc691e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 5 Oct 2023 13:08:33 +0100 Subject: [PATCH 298/378] Create L_Div.md --- docs/bits/operator/L_Div.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/bits/operator/L_Div.md diff --git a/docs/bits/operator/L_Div.md b/docs/bits/operator/L_Div.md new file mode 100644 index 0000000000..bbcf244438 --- /dev/null +++ b/docs/bits/operator/L_Div.md @@ -0,0 +1,8 @@ + +This is the integer division operator. + +The result is rounded down to the nearest integer. + +See a worked example [here](....) + +And a slightly more complex example using an instance of the n-fractions puzzle [here](...) From 5f830a4a7932614636ea19adb23746af4f089388 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Thu, 5 Oct 2023 17:53:45 +0100 Subject: [PATCH 299/378] added n-fractions notebook --- docs/bits/operator/L_Div.md | 2 +- docs/notebooks/division_n_fractions.ipynb | 254 ++++++++++++++++++ ...division_n_fractions.ipynb:Zone.Identifier | 3 + 3 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 docs/notebooks/division_n_fractions.ipynb create mode 100644 docs/notebooks/division_n_fractions.ipynb:Zone.Identifier diff --git a/docs/bits/operator/L_Div.md b/docs/bits/operator/L_Div.md index bbcf244438..a85cf68937 100644 --- a/docs/bits/operator/L_Div.md +++ b/docs/bits/operator/L_Div.md @@ -5,4 +5,4 @@ The result is rounded down to the nearest integer. See a worked example [here](....) -And a slightly more complex example using an instance of the n-fractions puzzle [here](...) +And a slightly more complex example using an instance of the n-fractions puzzle [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/division_n_fractions.ipynb) diff --git a/docs/notebooks/division_n_fractions.ipynb b/docs/notebooks/division_n_fractions.ipynb new file mode 100644 index 0000000000..72161c8185 --- /dev/null +++ b/docs/notebooks/division_n_fractions.ipynb @@ -0,0 +1,254 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Division" + ], + "metadata": { + "id": "a_TUIK1urOYq" + } + }, + { + "cell_type": "markdown", + "source": [ + "In Essence, division is performed using the / operator" + ], + "metadata": { + "id": "XPmO6LvUrVIZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "This performs **integer** division such that for integers `x`and `y` , with ` y!=0`\n", + "\n", + "```\n", + "(x % y) + y * (x / y) = x\n", + "```\n", + "\n" + ], + "metadata": { + "id": "FgSmzdvtrizI" + } + }, + { + "cell_type": "markdown", + "source": [ + "For example, for the n-fractions problem as defined for n = 3. described [here.](https://www.csplib.org/Problems/prob041/). Using a solution inspired by [Number Puzzle.](https://github.com/conjure-cp/conjure/blob/main/docs/tutorials/NumberPuzzle.rst)" + ], + "metadata": { + "id": "107u7-orsSlo" + } + }, + { + "cell_type": "markdown", + "source": [ + "We need to find 9 distinct non-zero digits such that\n", + "\n", + "```\n", + "A D G\n", + "-- + -- + -- == 1\n", + "BC EF HI\n", + "```\n", + "```\n", + "where BC = 10*B + C, EF = 10*E + F and HI = 10*H + I\n", + "```\n", + "\n" + ], + "metadata": { + "id": "-bBvxiw0sr8T" + } + }, + { + "cell_type": "markdown", + "source": [ + "Your first instinct to solve this problem might be like this:" + ], + "metadata": { + "id": "o89vv4RhtSi2" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qrA8mhVNtXCw", + "outputId": "ff4dab80-f1a2-44b7-c10a-015b18518946" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Conjure is already installed.\n", + "Conjure notebook is already installed.\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n", + "The conjure extension is already loaded. To reload it, use:\n", + " %reload_ext conjure\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + " letting variables be new type enum {A, B, C, D, E, F, G, H, I}\n", + " find f : function (injective) variables --> int(1..9)\n", + " such that\n", + " (( f(A) /( (10*f(B)) + f(C) )) + ( f(D) /( (10*f(E)) + f(F) )) + ( f(G) /( (10*f(H)) + f(I) ))) = 1" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 64 + }, + "id": "itpqwHZotZ85", + "outputId": "67de9d6a-854b-40ba-be4a-1ab27a8da8ce" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "No solution" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": []}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "However, if you run the cell, you see that there are no solutions. This is incorrect, likely caused due to using integer division, instead of typical float division" + ], + "metadata": { + "id": "6Jon3hl8u7WX" + } + }, + { + "cell_type": "markdown", + "source": [ + "However, if you manipulate equation to use multiplication instead of division" + ], + "metadata": { + "id": "e8ZO7oSnvLrL" + } + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "prepare to add the fractions:\n", + "```\n", + "A(EF)(HI) D(BC)(HI) G(BC)(EF)\n", + "------------- + -------------- + -------------- == 1\n", + "(BC)(EF)(HI) (BC)(EF)(HI) (BC)(EF)(HI)\n", + "```\n", + "add the fractions\n", + "```\n", + " A(EF)(HI) + D(BC)(HI) + G(BC)(EF)\n", + "---------------------------------------- == 1\n", + " (BC)(EF)(HI) \n", + "\n", + "```\n", + "multiply out the denomiator\n", + "```\n", + "A(EF)(HI) + D(BC)(HI) + G(BC)(EF) = (BC)(EF)(HI) \n", + "```" + ], + "metadata": { + "id": "KxsRxD7xyluF" + } + }, + { + "cell_type": "markdown", + "source": [ + "Use minion instead of default chuffed (unsure why chuffed is producing errors for this)" + ], + "metadata": { + "id": "XxxHmoxEL8U8" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --solver=minion --number-of-solutions=all\n", + "\n", + "letting variables be new type enum {A, B, C, D, E, F, G, H, I}\n", + "find f : function (injective) variables --> int(1..9)\n", + "such that\n", + " ( f(A) * ( (10 * f(E)) + f(F)) * ( (10 * f(H)) + f(I)) ) + ( f(D) * ((10 * f(B)) + f(C)) * ( (10*f(H)) + f(I) ) ) + ( f(G) * ( (10*f(B)) + f(C) ) * ( (10*f(E)) + f(F) )) =\n", + " ( ((10*f(B))+f(C)) * ((10*f(E))+f(F)) * ((10*f(H))+f(I)) )\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "dsWLEcCsveV0", + "outputId": "5355c257-fcee-4780-e25a-b1da324e3333" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"f\": {\"A\": 5, \"B\": 3, \"C\": 4, \"D\": 7, \"E\": 6, \"F\": 8, \"G\": 9, \"H\": 1, \"I\": 2}}, {\"f\": {\"A\": 5, \"B\": 3, \"C\": 4, \"D\": 9, \"E\": 1, \"F\": 2, \"G\": 7, \"H\": 6, \"I\": 8}}, {\"f\": {\"A\": 7, \"B\": 6, \"C\": 8, \"D\": 5, \"E\": 3, \"F\": 4, \"G\": 9, \"H\": 1, \"I\": 2}}, {\"f\": {\"A\": 7, \"B\": 6, \"C\": 8, \"D\": 9, \"E\": 1, \"F\": 2, \"G\": 5, \"H\": 3, \"I\": 4}}, {\"f\": {\"A\": 9, \"B\": 1, \"C\": 2, \"D\": 5, \"E\": 3, \"F\": 4, \"G\": 7, \"H\": 6, \"I\": 8}}, {\"f\": {\"A\": 9, \"B\": 1, \"C\": 2, \"D\": 7, \"E\": 6, \"F\": 8, \"G\": 5, \"H\": 3, \"I\": 4}}]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "You get results similar to expected. You may get multiple solutions, bu they are just different variations of the same 3 fractions." + ], + "metadata": { + "id": "hmRkViGqvg2l" + } + } + ] +} \ No newline at end of file diff --git a/docs/notebooks/division_n_fractions.ipynb:Zone.Identifier b/docs/notebooks/division_n_fractions.ipynb:Zone.Identifier new file mode 100644 index 0000000000..053d1127c2 --- /dev/null +++ b/docs/notebooks/division_n_fractions.ipynb:Zone.Identifier @@ -0,0 +1,3 @@ +[ZoneTransfer] +ZoneId=3 +HostUrl=about:internet From cc7c7655398940bcaae938eeba5e789faf9602b1 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Mon, 9 Oct 2023 14:16:36 +0100 Subject: [PATCH 300/378] finished L-div.md and short div and mod example --- docs/bits/operator/L_Div.md | 7 +- .../division_and_mod_demonstration.ipynb | 408 ++++++++++++++++++ ...division_n_fractions.ipynb:Zone.Identifier | 3 - 3 files changed, 414 insertions(+), 4 deletions(-) create mode 100644 docs/notebooks/division_and_mod_demonstration.ipynb delete mode 100644 docs/notebooks/division_n_fractions.ipynb:Zone.Identifier diff --git a/docs/bits/operator/L_Div.md b/docs/bits/operator/L_Div.md index a85cf68937..1a6e4e2c6e 100644 --- a/docs/bits/operator/L_Div.md +++ b/docs/bits/operator/L_Div.md @@ -2,7 +2,12 @@ This is the integer division operator. The result is rounded down to the nearest integer. +This is meant to ensure that for integers x and y, y!=0 +``` +(x % y) + y * (x / y) = x +``` +holds -See a worked example [here](....) +See a worked example [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/division_and_mod_demonstration.ipynb) And a slightly more complex example using an instance of the n-fractions puzzle [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/division_n_fractions.ipynb) diff --git a/docs/notebooks/division_and_mod_demonstration.ipynb b/docs/notebooks/division_and_mod_demonstration.ipynb new file mode 100644 index 0000000000..5810e128a5 --- /dev/null +++ b/docs/notebooks/division_and_mod_demonstration.ipynb @@ -0,0 +1,408 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "#Division and Mod Demonstration" + ], + "metadata": { + "id": "lXgnuThVh9Gv" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 156 + }, + "id": "qrA8mhVNtXCw", + "outputId": "2452b88c-61c6-4f34-a15b-618d7887ad9d" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Conjure is already installed.\n", + "Conjure notebook is already installed.\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This shows that the / operator will tend to round down using -5 <= x, y <= 5 as an example" + ], + "metadata": { + "id": "oF-0P-yiiLv9" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y, z: int(-5..5) such that (x / y) = z\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "IvGYS8ZYoiek", + "outputId": "4383424b-5fab-43ab-9a1f-1585f0280153" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"x\": -5, \"y\": -5, \"z\": 1}, {\"x\": -5, \"y\": -4, \"z\": 1}, {\"x\": -5, \"y\": -3, \"z\": 1}, {\"x\": -5, \"y\": -2, \"z\": 2}, {\"x\": -5, \"y\": -1, \"z\": 5}, {\"x\": -5, \"y\": 1, \"z\": -5}, {\"x\": -5, \"y\": 2, \"z\": -3}, {\"x\": -5, \"y\": 3, \"z\": -2}, {\"x\": -5, \"y\": 4, \"z\": -2}, {\"x\": -5, \"y\": 5, \"z\": -1}, {\"x\": -4, \"y\": -5, \"z\": 0}, {\"x\": -4, \"y\": -4, \"z\": 1}, {\"x\": -4, \"y\": -3, \"z\": 1}, {\"x\": -4, \"y\": -2, \"z\": 2}, {\"x\": -4, \"y\": -1, \"z\": 4}, {\"x\": -4, \"y\": 1, \"z\": -4}, {\"x\": -4, \"y\": 2, \"z\": -2}, {\"x\": -4, \"y\": 3, \"z\": -2}, {\"x\": -4, \"y\": 4, \"z\": -1}, {\"x\": -4, \"y\": 5, \"z\": -1}, {\"x\": -3, \"y\": -5, \"z\": 0}, {\"x\": -3, \"y\": -4, \"z\": 0}, {\"x\": -3, \"y\": -3, \"z\": 1}, {\"x\": -3, \"y\": -2, \"z\": 1}, {\"x\": -3, \"y\": -1, \"z\": 3}, {\"x\": -3, \"y\": 1, \"z\": -3}, {\"x\": -3, \"y\": 2, \"z\": -2}, {\"x\": -3, \"y\": 3, \"z\": -1}, {\"x\": -3, \"y\": 4, \"z\": -1}, {\"x\": -3, \"y\": 5, \"z\": -1}, {\"x\": -2, \"y\": -5, \"z\": 0}, {\"x\": -2, \"y\": -4, \"z\": 0}, {\"x\": -2, \"y\": -3, \"z\": 0}, {\"x\": -2, \"y\": -2, \"z\": 1}, {\"x\": -2, \"y\": -1, \"z\": 2}, {\"x\": -2, \"y\": 1, \"z\": -2}, {\"x\": -2, \"y\": 2, \"z\": -1}, {\"x\": -2, \"y\": 3, \"z\": -1}, {\"x\": -2, \"y\": 4, \"z\": -1}, {\"x\": -2, \"y\": 5, \"z\": -1}, {\"x\": -1, \"y\": -5, \"z\": 0}, {\"x\": -1, \"y\": -4, \"z\": 0}, {\"x\": -1, \"y\": -3, \"z\": 0}, {\"x\": -1, \"y\": -2, \"z\": 0}, {\"x\": -1, \"y\": -1, \"z\": 1}, {\"x\": -1, \"y\": 1, \"z\": -1}, {\"x\": -1, \"y\": 2, \"z\": -1}, {\"x\": -1, \"y\": 3, \"z\": -1}, {\"x\": -1, \"y\": 4, \"z\": -1}, {\"x\": -1, \"y\": 5, \"z\": -1}, {\"x\": 0, \"y\": -5, \"z\": 0}, {\"x\": 0, \"y\": -4, \"z\": 0}, {\"x\": 0, \"y\": -3, \"z\": 0}, {\"x\": 0, \"y\": -2, \"z\": 0}, {\"x\": 0, \"y\": -1, \"z\": 0}, {\"x\": 0, \"y\": 1, \"z\": 0}, {\"x\": 0, \"y\": 2, \"z\": 0}, {\"x\": 0, \"y\": 3, \"z\": 0}, {\"x\": 0, \"y\": 4, \"z\": 0}, {\"x\": 0, \"y\": 5, \"z\": 0}, {\"x\": 1, \"y\": -5, \"z\": -1}, {\"x\": 1, \"y\": -4, \"z\": -1}, {\"x\": 1, \"y\": -3, \"z\": -1}, {\"x\": 1, \"y\": -2, \"z\": -1}, {\"x\": 1, \"y\": -1, \"z\": -1}, {\"x\": 1, \"y\": 1, \"z\": 1}, {\"x\": 1, \"y\": 2, \"z\": 0}, {\"x\": 1, \"y\": 3, \"z\": 0}, {\"x\": 1, \"y\": 4, \"z\": 0}, {\"x\": 1, \"y\": 5, \"z\": 0}, {\"x\": 2, \"y\": -5, \"z\": -1}, {\"x\": 2, \"y\": -4, \"z\": -1}, {\"x\": 2, \"y\": -3, \"z\": -1}, {\"x\": 2, \"y\": -2, \"z\": -1}, {\"x\": 2, \"y\": -1, \"z\": -2}, {\"x\": 2, \"y\": 1, \"z\": 2}, {\"x\": 2, \"y\": 2, \"z\": 1}, {\"x\": 2, \"y\": 3, \"z\": 0}, {\"x\": 2, \"y\": 4, \"z\": 0}, {\"x\": 2, \"y\": 5, \"z\": 0}, {\"x\": 3, \"y\": -5, \"z\": -1}, {\"x\": 3, \"y\": -4, \"z\": -1}, {\"x\": 3, \"y\": -3, \"z\": -1}, {\"x\": 3, \"y\": -2, \"z\": -2}, {\"x\": 3, \"y\": -1, \"z\": -3}, {\"x\": 3, \"y\": 1, \"z\": 3}, {\"x\": 3, \"y\": 2, \"z\": 1}, {\"x\": 3, \"y\": 3, \"z\": 1}, {\"x\": 3, \"y\": 4, \"z\": 0}, {\"x\": 3, \"y\": 5, \"z\": 0}, {\"x\": 4, \"y\": -5, \"z\": -1}, {\"x\": 4, \"y\": -4, \"z\": -1}, {\"x\": 4, \"y\": -3, \"z\": -2}, {\"x\": 4, \"y\": -2, \"z\": -2}, {\"x\": 4, \"y\": -1, \"z\": -4}, {\"x\": 4, \"y\": 1, \"z\": 4}, {\"x\": 4, \"y\": 2, \"z\": 2}, {\"x\": 4, \"y\": 3, \"z\": 1}, {\"x\": 4, \"y\": 4, \"z\": 1}, {\"x\": 4, \"y\": 5, \"z\": 0}, {\"x\": 5, \"y\": -5, \"z\": -1}, {\"x\": 5, \"y\": -4, \"z\": -2}, {\"x\": 5, \"y\": -3, \"z\": -2}, {\"x\": 5, \"y\": -2, \"z\": -3}, {\"x\": 5, \"y\": -1, \"z\": -5}, {\"x\": 5, \"y\": 1, \"z\": 5}, {\"x\": 5, \"y\": 2, \"z\": 2}, {\"x\": 5, \"y\": 3, \"z\": 1}, {\"x\": 5, \"y\": 4, \"z\": 1}, {\"x\": 5, \"y\": 5, \"z\": 1}]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The results to x % y are harder to predict once you start to use negative values" + ], + "metadata": { + "id": "k_Sd_jLdja0E" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y, z : int(-5..5) such that (x % y) = z" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "g8peGg7ainZl", + "outputId": "740046fe-367b-4cac-ce59-4532ed460afb" + }, + "execution_count": 11, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"x\": -5, \"y\": -5, \"z\": 0}, {\"x\": -5, \"y\": -4, \"z\": -1}, {\"x\": -5, \"y\": -3, \"z\": -2}, {\"x\": -5, \"y\": -2, \"z\": -1}, {\"x\": -5, \"y\": -1, \"z\": 0}, {\"x\": -5, \"y\": 1, \"z\": 0}, {\"x\": -5, \"y\": 2, \"z\": 1}, {\"x\": -5, \"y\": 3, \"z\": 1}, {\"x\": -5, \"y\": 4, \"z\": 3}, {\"x\": -5, \"y\": 5, \"z\": 0}, {\"x\": -4, \"y\": -5, \"z\": -4}, {\"x\": -4, \"y\": -4, \"z\": 0}, {\"x\": -4, \"y\": -3, \"z\": -1}, {\"x\": -4, \"y\": -2, \"z\": 0}, {\"x\": -4, \"y\": -1, \"z\": 0}, {\"x\": -4, \"y\": 1, \"z\": 0}, {\"x\": -4, \"y\": 2, \"z\": 0}, {\"x\": -4, \"y\": 3, \"z\": 2}, {\"x\": -4, \"y\": 4, \"z\": 0}, {\"x\": -4, \"y\": 5, \"z\": 1}, {\"x\": -3, \"y\": -5, \"z\": -3}, {\"x\": -3, \"y\": -4, \"z\": -3}, {\"x\": -3, \"y\": -3, \"z\": 0}, {\"x\": -3, \"y\": -2, \"z\": -1}, {\"x\": -3, \"y\": -1, \"z\": 0}, {\"x\": -3, \"y\": 1, \"z\": 0}, {\"x\": -3, \"y\": 2, \"z\": 1}, {\"x\": -3, \"y\": 3, \"z\": 0}, {\"x\": -3, \"y\": 4, \"z\": 1}, {\"x\": -3, \"y\": 5, \"z\": 2}, {\"x\": -2, \"y\": -5, \"z\": -2}, {\"x\": -2, \"y\": -4, \"z\": -2}, {\"x\": -2, \"y\": -3, \"z\": -2}, {\"x\": -2, \"y\": -2, \"z\": 0}, {\"x\": -2, \"y\": -1, \"z\": 0}, {\"x\": -2, \"y\": 1, \"z\": 0}, {\"x\": -2, \"y\": 2, \"z\": 0}, {\"x\": -2, \"y\": 3, \"z\": 1}, {\"x\": -2, \"y\": 4, \"z\": 2}, {\"x\": -2, \"y\": 5, \"z\": 3}, {\"x\": -1, \"y\": -5, \"z\": -1}, {\"x\": -1, \"y\": -4, \"z\": -1}, {\"x\": -1, \"y\": -3, \"z\": -1}, {\"x\": -1, \"y\": -2, \"z\": -1}, {\"x\": -1, \"y\": -1, \"z\": 0}, {\"x\": -1, \"y\": 1, \"z\": 0}, {\"x\": -1, \"y\": 2, \"z\": 1}, {\"x\": -1, \"y\": 3, \"z\": 2}, {\"x\": -1, \"y\": 4, \"z\": 3}, {\"x\": -1, \"y\": 5, \"z\": 4}, {\"x\": 0, \"y\": -5, \"z\": 0}, {\"x\": 0, \"y\": -4, \"z\": 0}, {\"x\": 0, \"y\": -3, \"z\": 0}, {\"x\": 0, \"y\": -2, \"z\": 0}, {\"x\": 0, \"y\": -1, \"z\": 0}, {\"x\": 0, \"y\": 1, \"z\": 0}, {\"x\": 0, \"y\": 2, \"z\": 0}, {\"x\": 0, \"y\": 3, \"z\": 0}, {\"x\": 0, \"y\": 4, \"z\": 0}, {\"x\": 0, \"y\": 5, \"z\": 0}, {\"x\": 1, \"y\": -5, \"z\": -4}, {\"x\": 1, \"y\": -4, \"z\": -3}, {\"x\": 1, \"y\": -3, \"z\": -2}, {\"x\": 1, \"y\": -2, \"z\": -1}, {\"x\": 1, \"y\": -1, \"z\": 0}, {\"x\": 1, \"y\": 1, \"z\": 0}, {\"x\": 1, \"y\": 2, \"z\": 1}, {\"x\": 1, \"y\": 3, \"z\": 1}, {\"x\": 1, \"y\": 4, \"z\": 1}, {\"x\": 1, \"y\": 5, \"z\": 1}, {\"x\": 2, \"y\": -5, \"z\": -3}, {\"x\": 2, \"y\": -4, \"z\": -2}, {\"x\": 2, \"y\": -3, \"z\": -1}, {\"x\": 2, \"y\": -2, \"z\": 0}, {\"x\": 2, \"y\": -1, \"z\": 0}, {\"x\": 2, \"y\": 1, \"z\": 0}, {\"x\": 2, \"y\": 2, \"z\": 0}, {\"x\": 2, \"y\": 3, \"z\": 2}, {\"x\": 2, \"y\": 4, \"z\": 2}, {\"x\": 2, \"y\": 5, \"z\": 2}, {\"x\": 3, \"y\": -5, \"z\": -2}, {\"x\": 3, \"y\": -4, \"z\": -1}, {\"x\": 3, \"y\": -3, \"z\": 0}, {\"x\": 3, \"y\": -2, \"z\": -1}, {\"x\": 3, \"y\": -1, \"z\": 0}, {\"x\": 3, \"y\": 1, \"z\": 0}, {\"x\": 3, \"y\": 2, \"z\": 1}, {\"x\": 3, \"y\": 3, \"z\": 0}, {\"x\": 3, \"y\": 4, \"z\": 3}, {\"x\": 3, \"y\": 5, \"z\": 3}, {\"x\": 4, \"y\": -5, \"z\": -1}, {\"x\": 4, \"y\": -4, \"z\": 0}, {\"x\": 4, \"y\": -3, \"z\": -2}, {\"x\": 4, \"y\": -2, \"z\": 0}, {\"x\": 4, \"y\": -1, \"z\": 0}, {\"x\": 4, \"y\": 1, \"z\": 0}, {\"x\": 4, \"y\": 2, \"z\": 0}, {\"x\": 4, \"y\": 3, \"z\": 1}, {\"x\": 4, \"y\": 4, \"z\": 0}, {\"x\": 4, \"y\": 5, \"z\": 4}, {\"x\": 5, \"y\": -5, \"z\": 0}, {\"x\": 5, \"y\": -4, \"z\": -3}, {\"x\": 5, \"y\": -3, \"z\": -1}, {\"x\": 5, \"y\": -2, \"z\": -1}, {\"x\": 5, \"y\": -1, \"z\": 0}, {\"x\": 5, \"y\": 1, \"z\": 0}, {\"x\": 5, \"y\": 2, \"z\": 1}, {\"x\": 5, \"y\": 3, \"z\": 2}, {\"x\": 5, \"y\": 4, \"z\": 1}, {\"x\": 5, \"y\": 5, \"z\": 0}]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "This is to ensure\n", + "```\n", + "(x % y) + y * (x / y) = x``` holds" + ], + "metadata": { + "id": "7URyPeT_jmg2" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y, a, b : int(-5..5) such that a = (x % y) /\\ b = (x / y) /\\ a + y * b = x" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "EIr4l-BCj1cd", + "outputId": "f4153189-8c2c-4f6f-9584-00bd33bc313f" + }, + "execution_count": 13, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"a\": 0, \"b\": 1, \"x\": -5, \"y\": -5}, {\"a\": -1, \"b\": 1, \"x\": -5, \"y\": -4}, {\"a\": -2, \"b\": 1, \"x\": -5, \"y\": -3}, {\"a\": -1, \"b\": 2, \"x\": -5, \"y\": -2}, {\"a\": 0, \"b\": 5, \"x\": -5, \"y\": -1}, {\"a\": 0, \"b\": -5, \"x\": -5, \"y\": 1}, {\"a\": 1, \"b\": -3, \"x\": -5, \"y\": 2}, {\"a\": 1, \"b\": -2, \"x\": -5, \"y\": 3}, {\"a\": 3, \"b\": -2, \"x\": -5, \"y\": 4}, {\"a\": 0, \"b\": -1, \"x\": -5, \"y\": 5}, {\"a\": -4, \"b\": 0, \"x\": -4, \"y\": -5}, {\"a\": 0, \"b\": 1, \"x\": -4, \"y\": -4}, {\"a\": -1, \"b\": 1, \"x\": -4, \"y\": -3}, {\"a\": 0, \"b\": 2, \"x\": -4, \"y\": -2}, {\"a\": 0, \"b\": 4, \"x\": -4, \"y\": -1}, {\"a\": 0, \"b\": -4, \"x\": -4, \"y\": 1}, {\"a\": 0, \"b\": -2, \"x\": -4, \"y\": 2}, {\"a\": 2, \"b\": -2, \"x\": -4, \"y\": 3}, {\"a\": 0, \"b\": -1, \"x\": -4, \"y\": 4}, {\"a\": 1, \"b\": -1, \"x\": -4, \"y\": 5}, {\"a\": -3, \"b\": 0, \"x\": -3, \"y\": -5}, {\"a\": -3, \"b\": 0, \"x\": -3, \"y\": -4}, {\"a\": 0, \"b\": 1, \"x\": -3, \"y\": -3}, {\"a\": -1, \"b\": 1, \"x\": -3, \"y\": -2}, {\"a\": 0, \"b\": 3, \"x\": -3, \"y\": -1}, {\"a\": 0, \"b\": -3, \"x\": -3, \"y\": 1}, {\"a\": 1, \"b\": -2, \"x\": -3, \"y\": 2}, {\"a\": 0, \"b\": -1, \"x\": -3, \"y\": 3}, {\"a\": 1, \"b\": -1, \"x\": -3, \"y\": 4}, {\"a\": 2, \"b\": -1, \"x\": -3, \"y\": 5}, {\"a\": -2, \"b\": 0, \"x\": -2, \"y\": -5}, {\"a\": -2, \"b\": 0, \"x\": -2, \"y\": -4}, {\"a\": -2, \"b\": 0, \"x\": -2, \"y\": -3}, {\"a\": 0, \"b\": 1, \"x\": -2, \"y\": -2}, {\"a\": 0, \"b\": 2, \"x\": -2, \"y\": -1}, {\"a\": 0, \"b\": -2, \"x\": -2, \"y\": 1}, {\"a\": 0, \"b\": -1, \"x\": -2, \"y\": 2}, {\"a\": 1, \"b\": -1, \"x\": -2, \"y\": 3}, {\"a\": 2, \"b\": -1, \"x\": -2, \"y\": 4}, {\"a\": 3, \"b\": -1, \"x\": -2, \"y\": 5}, {\"a\": -1, \"b\": 0, \"x\": -1, \"y\": -5}, {\"a\": -1, \"b\": 0, \"x\": -1, \"y\": -4}, {\"a\": -1, \"b\": 0, \"x\": -1, \"y\": -3}, {\"a\": -1, \"b\": 0, \"x\": -1, \"y\": -2}, {\"a\": 0, \"b\": 1, \"x\": -1, \"y\": -1}, {\"a\": 0, \"b\": -1, \"x\": -1, \"y\": 1}, {\"a\": 1, \"b\": -1, \"x\": -1, \"y\": 2}, {\"a\": 2, \"b\": -1, \"x\": -1, \"y\": 3}, {\"a\": 3, \"b\": -1, \"x\": -1, \"y\": 4}, {\"a\": 4, \"b\": -1, \"x\": -1, \"y\": 5}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": -5}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": -4}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": -3}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": -2}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": -1}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": 1}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": 2}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": 3}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": 4}, {\"a\": 0, \"b\": 0, \"x\": 0, \"y\": 5}, {\"a\": -4, \"b\": -1, \"x\": 1, \"y\": -5}, {\"a\": -3, \"b\": -1, \"x\": 1, \"y\": -4}, {\"a\": -2, \"b\": -1, \"x\": 1, \"y\": -3}, {\"a\": -1, \"b\": -1, \"x\": 1, \"y\": -2}, {\"a\": 0, \"b\": -1, \"x\": 1, \"y\": -1}, {\"a\": 0, \"b\": 1, \"x\": 1, \"y\": 1}, {\"a\": 1, \"b\": 0, \"x\": 1, \"y\": 2}, {\"a\": 1, \"b\": 0, \"x\": 1, \"y\": 3}, {\"a\": 1, \"b\": 0, \"x\": 1, \"y\": 4}, {\"a\": 1, \"b\": 0, \"x\": 1, \"y\": 5}, {\"a\": -3, \"b\": -1, \"x\": 2, \"y\": -5}, {\"a\": -2, \"b\": -1, \"x\": 2, \"y\": -4}, {\"a\": -1, \"b\": -1, \"x\": 2, \"y\": -3}, {\"a\": 0, \"b\": -1, \"x\": 2, \"y\": -2}, {\"a\": 0, \"b\": -2, \"x\": 2, \"y\": -1}, {\"a\": 0, \"b\": 2, \"x\": 2, \"y\": 1}, {\"a\": 0, \"b\": 1, \"x\": 2, \"y\": 2}, {\"a\": 2, \"b\": 0, \"x\": 2, \"y\": 3}, {\"a\": 2, \"b\": 0, \"x\": 2, \"y\": 4}, {\"a\": 2, \"b\": 0, \"x\": 2, \"y\": 5}, {\"a\": -2, \"b\": -1, \"x\": 3, \"y\": -5}, {\"a\": -1, \"b\": -1, \"x\": 3, \"y\": -4}, {\"a\": 0, \"b\": -1, \"x\": 3, \"y\": -3}, {\"a\": -1, \"b\": -2, \"x\": 3, \"y\": -2}, {\"a\": 0, \"b\": -3, \"x\": 3, \"y\": -1}, {\"a\": 0, \"b\": 3, \"x\": 3, \"y\": 1}, {\"a\": 1, \"b\": 1, \"x\": 3, \"y\": 2}, {\"a\": 0, \"b\": 1, \"x\": 3, \"y\": 3}, {\"a\": 3, \"b\": 0, \"x\": 3, \"y\": 4}, {\"a\": 3, \"b\": 0, \"x\": 3, \"y\": 5}, {\"a\": -1, \"b\": -1, \"x\": 4, \"y\": -5}, {\"a\": 0, \"b\": -1, \"x\": 4, \"y\": -4}, {\"a\": -2, \"b\": -2, \"x\": 4, \"y\": -3}, {\"a\": 0, \"b\": -2, \"x\": 4, \"y\": -2}, {\"a\": 0, \"b\": -4, \"x\": 4, \"y\": -1}, {\"a\": 0, \"b\": 4, \"x\": 4, \"y\": 1}, {\"a\": 0, \"b\": 2, \"x\": 4, \"y\": 2}, {\"a\": 1, \"b\": 1, \"x\": 4, \"y\": 3}, {\"a\": 0, \"b\": 1, \"x\": 4, \"y\": 4}, {\"a\": 4, \"b\": 0, \"x\": 4, \"y\": 5}, {\"a\": 0, \"b\": -1, \"x\": 5, \"y\": -5}, {\"a\": -3, \"b\": -2, \"x\": 5, \"y\": -4}, {\"a\": -1, \"b\": -2, \"x\": 5, \"y\": -3}, {\"a\": -1, \"b\": -3, \"x\": 5, \"y\": -2}, {\"a\": 0, \"b\": -5, \"x\": 5, \"y\": -1}, {\"a\": 0, \"b\": 5, \"x\": 5, \"y\": 1}, {\"a\": 1, \"b\": 2, \"x\": 5, \"y\": 2}, {\"a\": 2, \"b\": 1, \"x\": 5, \"y\": 3}, {\"a\": 1, \"b\": 1, \"x\": 5, \"y\": 4}, {\"a\": 0, \"b\": 1, \"x\": 5, \"y\": 5}]}\n```" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/notebooks/division_n_fractions.ipynb:Zone.Identifier b/docs/notebooks/division_n_fractions.ipynb:Zone.Identifier deleted file mode 100644 index 053d1127c2..0000000000 --- a/docs/notebooks/division_n_fractions.ipynb:Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -HostUrl=about:internet From 9f855151c14978dd5de994e91efe77250bd39b21 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 12:59:41 +0100 Subject: [PATCH 301/378] put in division_and_mod_demonstration using colaboratory --- .../division_and_mod_demonstration.ipynb | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/notebooks/division_and_mod_demonstration.ipynb b/docs/notebooks/division_and_mod_demonstration.ipynb index 5810e128a5..0fabebf68d 100644 --- a/docs/notebooks/division_and_mod_demonstration.ipynb +++ b/docs/notebooks/division_and_mod_demonstration.ipynb @@ -3,7 +3,8 @@ "nbformat_minor": 0, "metadata": { "colab": { - "provenance": [] + "provenance": [], + "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -14,6 +15,16 @@ } }, "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, { "cell_type": "markdown", "source": [ @@ -37,7 +48,7 @@ "id": "qrA8mhVNtXCw", "outputId": "2452b88c-61c6-4f34-a15b-618d7887ad9d" }, - "execution_count": 1, + "execution_count": null, "outputs": [ { "output_type": "stream", @@ -314,7 +325,7 @@ "id": "IvGYS8ZYoiek", "outputId": "4383424b-5fab-43ab-9a1f-1585f0280153" }, - "execution_count": 10, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -351,7 +362,7 @@ "id": "g8peGg7ainZl", "outputId": "740046fe-367b-4cac-ce59-4532ed460afb" }, - "execution_count": 11, + "execution_count": null, "outputs": [ { "output_type": "display_data", @@ -390,7 +401,7 @@ "id": "EIr4l-BCj1cd", "outputId": "f4153189-8c2c-4f6f-9584-00bd33bc313f" }, - "execution_count": 13, + "execution_count": null, "outputs": [ { "output_type": "display_data", From 204eefab132e587eaa20e274e90dc4c5cf74be17 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:02:20 +0100 Subject: [PATCH 302/378] Put in division_n-fractionsusing colaboratory --- division_n_fractions.ipynb | 266 +++++++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 division_n_fractions.ipynb diff --git a/division_n_fractions.ipynb b/division_n_fractions.ipynb new file mode 100644 index 0000000000..bd33ef41de --- /dev/null +++ b/division_n_fractions.ipynb @@ -0,0 +1,266 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMnXI7ubXaHTFJqKHwJiHKm", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Division" + ], + "metadata": { + "id": "a_TUIK1urOYq" + } + }, + { + "cell_type": "markdown", + "source": [ + "In Essence, division is performed using the / operator" + ], + "metadata": { + "id": "XPmO6LvUrVIZ" + } + }, + { + "cell_type": "markdown", + "source": [ + "This performs **integer** division such that for integers `x`and `y` , with ` y!=0`\n", + "\n", + "```\n", + "(x % y) + y * (x / y) = x\n", + "```\n", + "\n" + ], + "metadata": { + "id": "FgSmzdvtrizI" + } + }, + { + "cell_type": "markdown", + "source": [ + "For example, for the n-fractions problem as defined for n = 3. described [here.](https://www.csplib.org/Problems/prob041/). Using a solution inspired by [Number Puzzle.](https://github.com/conjure-cp/conjure/blob/main/docs/tutorials/NumberPuzzle.rst)" + ], + "metadata": { + "id": "107u7-orsSlo" + } + }, + { + "cell_type": "markdown", + "source": [ + "We need to find 9 distinct non-zero digits such that\n", + "\n", + "```\n", + "A D G\n", + "-- + -- + -- == 1\n", + "BC EF HI\n", + "```\n", + "```\n", + "where BC = 10*B + C, EF = 10*E + F and HI = 10*H + I\n", + "```\n", + "\n" + ], + "metadata": { + "id": "-bBvxiw0sr8T" + } + }, + { + "cell_type": "markdown", + "source": [ + "Your first instinct to solve this problem might be like this:" + ], + "metadata": { + "id": "o89vv4RhtSi2" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qrA8mhVNtXCw", + "outputId": "ff4dab80-f1a2-44b7-c10a-015b18518946" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Conjure is already installed.\n", + "Conjure notebook is already installed.\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n", + "The conjure extension is already loaded. To reload it, use:\n", + " %reload_ext conjure\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + " letting variables be new type enum {A, B, C, D, E, F, G, H, I}\n", + " find f : function (injective) variables --> int(1..9)\n", + " such that\n", + " (( f(A) /( (10*f(B)) + f(C) )) + ( f(D) /( (10*f(E)) + f(F) )) + ( f(G) /( (10*f(H)) + f(I) ))) = 1" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 64 + }, + "id": "itpqwHZotZ85", + "outputId": "67de9d6a-854b-40ba-be4a-1ab27a8da8ce" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "No solution" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": []}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "However, if you run the cell, you see that there are no solutions. This is incorrect, likely caused due to using integer division, instead of typical float division" + ], + "metadata": { + "id": "6Jon3hl8u7WX" + } + }, + { + "cell_type": "markdown", + "source": [ + "However, if you manipulate equation to use multiplication instead of division" + ], + "metadata": { + "id": "e8ZO7oSnvLrL" + } + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "prepare to add the fractions:\n", + "```\n", + "A(EF)(HI) D(BC)(HI) G(BC)(EF)\n", + "------------- + -------------- + -------------- == 1\n", + "(BC)(EF)(HI) (BC)(EF)(HI) (BC)(EF)(HI)\n", + "```\n", + "add the fractions\n", + "```\n", + " A(EF)(HI) + D(BC)(HI) + G(BC)(EF)\n", + "---------------------------------------- == 1\n", + " (BC)(EF)(HI) \n", + "\n", + "```\n", + "multiply out the denomiator\n", + "```\n", + "A(EF)(HI) + D(BC)(HI) + G(BC)(EF) = (BC)(EF)(HI) \n", + "```" + ], + "metadata": { + "id": "KxsRxD7xyluF" + } + }, + { + "cell_type": "markdown", + "source": [ + "Use minion instead of default chuffed (unsure why chuffed is producing errors for this)" + ], + "metadata": { + "id": "XxxHmoxEL8U8" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --solver=minion --number-of-solutions=all\n", + "\n", + "letting variables be new type enum {A, B, C, D, E, F, G, H, I}\n", + "find f : function (injective) variables --> int(1..9)\n", + "such that\n", + " ( f(A) * ( (10 * f(E)) + f(F)) * ( (10 * f(H)) + f(I)) ) + ( f(D) * ((10 * f(B)) + f(C)) * ( (10*f(H)) + f(I) ) ) + ( f(G) * ( (10*f(B)) + f(C) ) * ( (10*f(E)) + f(F) )) =\n", + " ( ((10*f(B))+f(C)) * ((10*f(E))+f(F)) * ((10*f(H))+f(I)) )\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "dsWLEcCsveV0", + "outputId": "5355c257-fcee-4780-e25a-b1da324e3333" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"f\": {\"A\": 5, \"B\": 3, \"C\": 4, \"D\": 7, \"E\": 6, \"F\": 8, \"G\": 9, \"H\": 1, \"I\": 2}}, {\"f\": {\"A\": 5, \"B\": 3, \"C\": 4, \"D\": 9, \"E\": 1, \"F\": 2, \"G\": 7, \"H\": 6, \"I\": 8}}, {\"f\": {\"A\": 7, \"B\": 6, \"C\": 8, \"D\": 5, \"E\": 3, \"F\": 4, \"G\": 9, \"H\": 1, \"I\": 2}}, {\"f\": {\"A\": 7, \"B\": 6, \"C\": 8, \"D\": 9, \"E\": 1, \"F\": 2, \"G\": 5, \"H\": 3, \"I\": 4}}, {\"f\": {\"A\": 9, \"B\": 1, \"C\": 2, \"D\": 5, \"E\": 3, \"F\": 4, \"G\": 7, \"H\": 6, \"I\": 8}}, {\"f\": {\"A\": 9, \"B\": 1, \"C\": 2, \"D\": 7, \"E\": 6, \"F\": 8, \"G\": 5, \"H\": 3, \"I\": 4}}]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "You get results similar to expected. You may get multiple solutions, bu they are just different variations of the same 3 fractions." + ], + "metadata": { + "id": "hmRkViGqvg2l" + } + } + ] +} \ No newline at end of file From bf25837c6b3ffe677a9ece4792944883c3061eb2 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 10 Oct 2023 13:08:12 +0100 Subject: [PATCH 303/378] Moved division_n_fractions notebook to correct place --- docs/notebooks/division_n_fractions.ipynb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/notebooks/division_n_fractions.ipynb b/docs/notebooks/division_n_fractions.ipynb index 72161c8185..bd33ef41de 100644 --- a/docs/notebooks/division_n_fractions.ipynb +++ b/docs/notebooks/division_n_fractions.ipynb @@ -3,7 +3,9 @@ "nbformat_minor": 0, "metadata": { "colab": { - "provenance": [] + "provenance": [], + "authorship_tag": "ABX9TyMnXI7ubXaHTFJqKHwJiHKm", + "include_colab_link": true }, "kernelspec": { "name": "python3", @@ -14,6 +16,16 @@ } }, "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, { "cell_type": "markdown", "source": [ From 805033d80ed5d594303eb1f5bd178fcfd347df32 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 10 Oct 2023 13:13:10 +0100 Subject: [PATCH 304/378] removed extra division_n_fractions notebook --- division_n_fractions.ipynb | 266 ------------------------------------- 1 file changed, 266 deletions(-) delete mode 100644 division_n_fractions.ipynb diff --git a/division_n_fractions.ipynb b/division_n_fractions.ipynb deleted file mode 100644 index bd33ef41de..0000000000 --- a/division_n_fractions.ipynb +++ /dev/null @@ -1,266 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "authorship_tag": "ABX9TyMnXI7ubXaHTFJqKHwJiHKm", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "view-in-github", - "colab_type": "text" - }, - "source": [ - "\"Open" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Division" - ], - "metadata": { - "id": "a_TUIK1urOYq" - } - }, - { - "cell_type": "markdown", - "source": [ - "In Essence, division is performed using the / operator" - ], - "metadata": { - "id": "XPmO6LvUrVIZ" - } - }, - { - "cell_type": "markdown", - "source": [ - "This performs **integer** division such that for integers `x`and `y` , with ` y!=0`\n", - "\n", - "```\n", - "(x % y) + y * (x / y) = x\n", - "```\n", - "\n" - ], - "metadata": { - "id": "FgSmzdvtrizI" - } - }, - { - "cell_type": "markdown", - "source": [ - "For example, for the n-fractions problem as defined for n = 3. described [here.](https://www.csplib.org/Problems/prob041/). Using a solution inspired by [Number Puzzle.](https://github.com/conjure-cp/conjure/blob/main/docs/tutorials/NumberPuzzle.rst)" - ], - "metadata": { - "id": "107u7-orsSlo" - } - }, - { - "cell_type": "markdown", - "source": [ - "We need to find 9 distinct non-zero digits such that\n", - "\n", - "```\n", - "A D G\n", - "-- + -- + -- == 1\n", - "BC EF HI\n", - "```\n", - "```\n", - "where BC = 10*B + C, EF = 10*E + F and HI = 10*H + I\n", - "```\n", - "\n" - ], - "metadata": { - "id": "-bBvxiw0sr8T" - } - }, - { - "cell_type": "markdown", - "source": [ - "Your first instinct to solve this problem might be like this:" - ], - "metadata": { - "id": "o89vv4RhtSi2" - } - }, - { - "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "qrA8mhVNtXCw", - "outputId": "ff4dab80-f1a2-44b7-c10a-015b18518946" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", - "Conjure is already installed.\n", - "Conjure notebook is already installed.\n", - "Conjure: The Automated Constraint Modelling Tool\n", - "Release version 2.5.0\n", - "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n", - "The conjure extension is already loaded. To reload it, use:\n", - " %reload_ext conjure\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "%%conjure\n", - " letting variables be new type enum {A, B, C, D, E, F, G, H, I}\n", - " find f : function (injective) variables --> int(1..9)\n", - " such that\n", - " (( f(A) /( (10*f(B)) + f(C) )) + ( f(D) /( (10*f(E)) + f(F) )) + ( f(G) /( (10*f(H)) + f(I) ))) = 1" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 64 - }, - "id": "itpqwHZotZ85", - "outputId": "67de9d6a-854b-40ba-be4a-1ab27a8da8ce" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "" - ], - "text/markdown": "No solution" - }, - "metadata": {} - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "" - ], - "text/markdown": "```json\n{\"conjure_solutions\": []}\n```" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "However, if you run the cell, you see that there are no solutions. This is incorrect, likely caused due to using integer division, instead of typical float division" - ], - "metadata": { - "id": "6Jon3hl8u7WX" - } - }, - { - "cell_type": "markdown", - "source": [ - "However, if you manipulate equation to use multiplication instead of division" - ], - "metadata": { - "id": "e8ZO7oSnvLrL" - } - }, - { - "cell_type": "markdown", - "source": [ - "\n", - "prepare to add the fractions:\n", - "```\n", - "A(EF)(HI) D(BC)(HI) G(BC)(EF)\n", - "------------- + -------------- + -------------- == 1\n", - "(BC)(EF)(HI) (BC)(EF)(HI) (BC)(EF)(HI)\n", - "```\n", - "add the fractions\n", - "```\n", - " A(EF)(HI) + D(BC)(HI) + G(BC)(EF)\n", - "---------------------------------------- == 1\n", - " (BC)(EF)(HI) \n", - "\n", - "```\n", - "multiply out the denomiator\n", - "```\n", - "A(EF)(HI) + D(BC)(HI) + G(BC)(EF) = (BC)(EF)(HI) \n", - "```" - ], - "metadata": { - "id": "KxsRxD7xyluF" - } - }, - { - "cell_type": "markdown", - "source": [ - "Use minion instead of default chuffed (unsure why chuffed is producing errors for this)" - ], - "metadata": { - "id": "XxxHmoxEL8U8" - } - }, - { - "cell_type": "code", - "source": [ - "%%conjure --solver=minion --number-of-solutions=all\n", - "\n", - "letting variables be new type enum {A, B, C, D, E, F, G, H, I}\n", - "find f : function (injective) variables --> int(1..9)\n", - "such that\n", - " ( f(A) * ( (10 * f(E)) + f(F)) * ( (10 * f(H)) + f(I)) ) + ( f(D) * ((10 * f(B)) + f(C)) * ( (10*f(H)) + f(I) ) ) + ( f(G) * ( (10*f(B)) + f(C) ) * ( (10*f(E)) + f(F) )) =\n", - " ( ((10*f(B))+f(C)) * ((10*f(E))+f(F)) * ((10*f(H))+f(I)) )\n" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 54 - }, - "id": "dsWLEcCsveV0", - "outputId": "5355c257-fcee-4780-e25a-b1da324e3333" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "" - ], - "text/markdown": "```json\n{\"conjure_solutions\": [{\"f\": {\"A\": 5, \"B\": 3, \"C\": 4, \"D\": 7, \"E\": 6, \"F\": 8, \"G\": 9, \"H\": 1, \"I\": 2}}, {\"f\": {\"A\": 5, \"B\": 3, \"C\": 4, \"D\": 9, \"E\": 1, \"F\": 2, \"G\": 7, \"H\": 6, \"I\": 8}}, {\"f\": {\"A\": 7, \"B\": 6, \"C\": 8, \"D\": 5, \"E\": 3, \"F\": 4, \"G\": 9, \"H\": 1, \"I\": 2}}, {\"f\": {\"A\": 7, \"B\": 6, \"C\": 8, \"D\": 9, \"E\": 1, \"F\": 2, \"G\": 5, \"H\": 3, \"I\": 4}}, {\"f\": {\"A\": 9, \"B\": 1, \"C\": 2, \"D\": 5, \"E\": 3, \"F\": 4, \"G\": 7, \"H\": 6, \"I\": 8}}, {\"f\": {\"A\": 9, \"B\": 1, \"C\": 2, \"D\": 7, \"E\": 6, \"F\": 8, \"G\": 5, \"H\": 3, \"I\": 4}}]}\n```" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "You get results similar to expected. You may get multiple solutions, bu they are just different variations of the same 3 fractions." - ], - "metadata": { - "id": "hmRkViGqvg2l" - } - } - ] -} \ No newline at end of file From e0fb03760b4e3b712bb2febabd2b86e7557de37d Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:27:20 +0100 Subject: [PATCH 305/378] Create L_Mod.md --- docs/bits/operator/L_Mod.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 docs/bits/operator/L_Mod.md diff --git a/docs/bits/operator/L_Mod.md b/docs/bits/operator/L_Mod.md new file mode 100644 index 0000000000..4d4267f715 --- /dev/null +++ b/docs/bits/operator/L_Mod.md @@ -0,0 +1,9 @@ +#Operator mod +``` +% +``` +Finds the remainder of the division between two integers, x and y, such that +``` +(x % y) + y * (x / y) = x +``` +See how a demonstration of how this operator and [division](https://github.com/conjure-cp/conjure/tree/main/docs/bits/operator/L_Div.md) [here.](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/division_and_mod_demonstration.ipynb) From 78d43e2c06b2cba75bd53d2046a4fba16695e904 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:30:59 +0100 Subject: [PATCH 306/378] fixed L_Mod.md style --- docs/bits/operator/L_Mod.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/operator/L_Mod.md b/docs/bits/operator/L_Mod.md index 4d4267f715..09b2ee3023 100644 --- a/docs/bits/operator/L_Mod.md +++ b/docs/bits/operator/L_Mod.md @@ -1,4 +1,4 @@ -#Operator mod +**Mod operator** ``` % ``` From f6c274d888b552caf4678194a15840be511bba1d Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 14:05:41 +0100 Subject: [PATCH 307/378] Create function.md draft does not have links to examples --- docs/bits/type/function.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 docs/bits/type/function.md diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md new file mode 100644 index 0000000000..d3e7840547 --- /dev/null +++ b/docs/bits/type/function.md @@ -0,0 +1,23 @@ +**function domains** + +Takes 2 ```domains```(this page yet to be written) as arguments: the ```defined``` set and the ```range``` set of the function. +The ```defined```set is the domain of the function - the set of inputs for the function +the ```range``` set is the codomain of the function - the set of possible outputs for the function + +```essence +**function** < comma separated attributes(optional)> --> +``` +There are 3 groups of function attributes + ~ related to cardinality = ```size```, ```minSize```, and ```maxSize```. They take arguments + ~ related to function properties = ```injective```, ```subjective```, ```bijective``` + ~ related to partiality = ```total``` + + Functions are partial by default + + You can also explicity define a function as seen [here.](...) + See demonstrations of the function attributes [here]() + Or see functions used to solve the Magic Hexagon Problem here [here](...) + + Much of the informatin about functions lifted from [the readthedocs](https://conjure.readthedocs.io/en/latest/essence.html) + + From 498a6a917375096ff7f19a83ba3e2ab041365cac Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 14:08:42 +0100 Subject: [PATCH 308/378] add magixHexagon colab --- magicHexagon.ipynb | 422 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 422 insertions(+) create mode 100644 magicHexagon.ipynb diff --git a/magicHexagon.ipynb b/magicHexagon.ipynb new file mode 100644 index 0000000000..1bb3d42509 --- /dev/null +++ b/magicHexagon.ipynb @@ -0,0 +1,422 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMBv+lESkT6OlOjFtXIIgWl", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Magic Hexagon" + ], + "metadata": { + "id": "srcaE1j-RzBh" + } + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "BAX_woTySqBz" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "https://www.csplib.org/Problems/prob023/" + ], + "metadata": { + "id": "yMVsDbCbSYQT" + } + }, + { + "cell_type": "markdown", + "source": [ + "Try to find an arrangement oof the numbers 1 to 19 in a hexagon shape so that all the diagonals sum to 38" + ], + "metadata": { + "id": "U-1h22D0SPqx" + } + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "\n", + "```\n", + " A, B, C\n", + " D, E, F, G\n", + " H, I, J, K, L\n", + " M, N, O P\n", + " Q, R, S\n", + "```\n", + "\n", + "\n", + " such that\n", + "\n", + " ```\n", + "A+B+C = D+E+F+G = ... = Q+R+S = 38,\n", + "A+D+H = B+E+I+M = ... = L+P+S = 38,\n", + "C+G+L = B+F+K+P = ... = H+M+Q = 38.\n", + " ```" + ], + "metadata": { + "id": "b2IbpCrGSgwS" + } + }, + { + "cell_type": "markdown", + "source": [ + "This is very similar to the NumberPuzzle solution" + ], + "metadata": { + "id": "HCq_dM7FTbFr" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "qrA8mhVNtXCw", + "outputId": "8e641e21-aa3c-419e-cf70-080ab7dee043" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting letters be new type enum {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P ,Q, R, S}\n", + "find f : function (injective) letters --> int(1..19)\n", + "such that\n", + " f(A) + f(B) + f(C) = 38,\n", + " f(D) + f(E) + f(F) + f(G) = 38,\n", + " f(H) + f(I) + f(J) + f(K) + f(L) = 38,\n", + " f(M) + f(N) + f(O) + f(P) = 38,\n", + " f(Q) + f(R) + f(S) = 38,\n", + " f(A) + f(D) + f(H) = 38,\n", + " f(B) + f(E) + f(I) + f(M) = 38,\n", + " f(C) + f(F) + f(J) + f(N) + f(Q) = 38,\n", + " f(G) + f(K) + f(O) + f(R) = 38,\n", + " f(L) + f(P) + f(S) = 38,\n", + " f(C) + f(G) + f(L) = 38,\n", + " f(B) + f(F) + f(K) + f(P) = 38,\n", + " f(A) + f(E) + f(J) + f(O) + f(S) = 38,\n", + " f(D) + f(I) + f(N) + f(R) = 38,\n", + " f(H) + f(M) + f(Q) = 38\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3KYc7-nsTr4q", + "outputId": "c01c7748-87ed-478c-9763-2dddd7f93df4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'f': {'A': 3,\n", + " 'B': 17,\n", + " 'C': 18,\n", + " 'D': 19,\n", + " 'E': 7,\n", + " 'F': 1,\n", + " 'G': 11,\n", + " 'H': 16,\n", + " 'I': 2,\n", + " 'J': 5,\n", + " 'K': 6,\n", + " 'L': 9,\n", + " 'M': 12,\n", + " 'N': 4,\n", + " 'O': 8,\n", + " 'P': 14,\n", + " 'Q': 10,\n", + " 'R': 13,\n", + " 'S': 15}}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + } + ] +} \ No newline at end of file From d8773f086bd5c885863d2190cfe407aa33b9c30d Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 10 Oct 2023 14:14:09 +0100 Subject: [PATCH 309/378] Adding magicHexagon.ipynb to the repo. Needs updating and clearer explanation --- docs/bits/type/function.md | 2 +- magicHexagon.ipynb => docs/notebooks/magicHexagon.ipynb | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename magicHexagon.ipynb => docs/notebooks/magicHexagon.ipynb (100%) diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md index d3e7840547..1b1fb62e75 100644 --- a/docs/bits/type/function.md +++ b/docs/bits/type/function.md @@ -16,7 +16,7 @@ There are 3 groups of function attributes You can also explicity define a function as seen [here.](...) See demonstrations of the function attributes [here]() - Or see functions used to solve the Magic Hexagon Problem here [here](...) + Or see functions used to solve the Magic Hexagon Problem here [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/magicHexagon.ipynb) Much of the informatin about functions lifted from [the readthedocs](https://conjure.readthedocs.io/en/latest/essence.html) diff --git a/magicHexagon.ipynb b/docs/notebooks/magicHexagon.ipynb similarity index 100% rename from magicHexagon.ipynb rename to docs/notebooks/magicHexagon.ipynb From 780a99488f1bbd2b63c17ba902093b18a972c40c Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 15:12:04 +0100 Subject: [PATCH 310/378] fix division_n_fractions.ipynb colab link (take 2) --- docs/notebooks/division_n_fractions.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notebooks/division_n_fractions.ipynb b/docs/notebooks/division_n_fractions.ipynb index bd33ef41de..f8ee993507 100644 --- a/docs/notebooks/division_n_fractions.ipynb +++ b/docs/notebooks/division_n_fractions.ipynb @@ -23,7 +23,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -263,4 +263,4 @@ } } ] -} \ No newline at end of file +} From 2ccfd3a5e3fbb1ad60e2e92fdf32298aed72daa8 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 15:13:05 +0100 Subject: [PATCH 311/378] fix division_and_mod_demonstration.ipynb colab link take 2 --- docs/notebooks/division_and_mod_demonstration.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notebooks/division_and_mod_demonstration.ipynb b/docs/notebooks/division_and_mod_demonstration.ipynb index 0fabebf68d..80bf50117b 100644 --- a/docs/notebooks/division_and_mod_demonstration.ipynb +++ b/docs/notebooks/division_and_mod_demonstration.ipynb @@ -22,7 +22,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -416,4 +416,4 @@ ] } ] -} \ No newline at end of file +} From e5056847818a7704e3c6c0cab6419d3dc8f37dcc Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Tue, 10 Oct 2023 18:44:44 +0100 Subject: [PATCH 312/378] improved magicHexagon --- magicHexagon.ipynb | 442 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 442 insertions(+) create mode 100644 magicHexagon.ipynb diff --git a/magicHexagon.ipynb b/magicHexagon.ipynb new file mode 100644 index 0000000000..5932c714d0 --- /dev/null +++ b/magicHexagon.ipynb @@ -0,0 +1,442 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyPPu7u5eTnEZUwSBEXHkApl", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "# Magic Hexagon" + ], + "metadata": { + "id": "srcaE1j-RzBh" + } + }, + { + "cell_type": "markdown", + "source": [ + "A description of a solution to a problem from [CSPlib](https://www.csplib.org/Problems/prob023/)\n", + "\n" + ], + "metadata": { + "id": "yMVsDbCbSYQT" + } + }, + { + "cell_type": "markdown", + "source": [ + "### The Problem" + ], + "metadata": { + "id": "ZOC8Sgugq41u" + } + }, + { + "cell_type": "markdown", + "source": [ + "Try to find an arrangement of the numbers 1 to 19 in a hexagon shape so that all the diagonals sum to 38." + ], + "metadata": { + "id": "U-1h22D0SPqx" + } + }, + { + "cell_type": "markdown", + "source": [ + "i.e: find A-S from 1-19 as" + ], + "metadata": { + "id": "Wv4EHWojrNuw" + } + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "\n", + "```\n", + " A, B, C\n", + " D, E, F, G\n", + " H, I, J, K, L\n", + " M, N, O P\n", + " Q, R, S\n", + "```\n", + "\n", + "\n", + " such that\n", + "\n", + " ```\n", + "A+B+C = D+E+F+G = ... = Q+R+S = 38,\n", + "A+D+H = B+E+I+M = ... = L+P+S = 38,\n", + "C+G+L = B+F+K+P = ... = H+M+Q = 38.\n", + " ```" + ], + "metadata": { + "id": "b2IbpCrGSgwS" + } + }, + { + "cell_type": "markdown", + "source": [ + "This is was inspired by the [NumberPuzzle solution ](https://github.com/conjure-cp/conjure/blob/main/docs/tutorials/NumberPuzzle.rst)" + ], + "metadata": { + "id": "HCq_dM7FTbFr" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121 + }, + "id": "qrA8mhVNtXCw", + "outputId": "8e641e21-aa3c-419e-cf70-080ab7dee043" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.4.0\n", + "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "I created a new enum type to store all the letters.\n", + "Then asked the solver to define a function that would convert the letter representations into the number 1 to 19 so that all the diagonals sum to 38 (the constraints under the such as expression below)" + ], + "metadata": { + "id": "mzSiN1Nxrug9" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure\n", + "letting letters be new type enum {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P ,Q, R, S}\n", + "find f : function (injective) letters --> int(1..19)\n", + "such that\n", + " f(A) + f(B) + f(C) = 38,\n", + " f(D) + f(E) + f(F) + f(G) = 38,\n", + " f(H) + f(I) + f(J) + f(K) + f(L) = 38,\n", + " f(M) + f(N) + f(O) + f(P) = 38,\n", + " f(Q) + f(R) + f(S) = 38,\n", + " f(A) + f(D) + f(H) = 38,\n", + " f(B) + f(E) + f(I) + f(M) = 38,\n", + " f(C) + f(F) + f(J) + f(N) + f(Q) = 38,\n", + " f(G) + f(K) + f(O) + f(R) = 38,\n", + " f(L) + f(P) + f(S) = 38,\n", + " f(C) + f(G) + f(L) = 38,\n", + " f(B) + f(F) + f(K) + f(P) = 38,\n", + " f(A) + f(E) + f(J) + f(O) + f(S) = 38,\n", + " f(D) + f(I) + f(N) + f(R) = 38,\n", + " f(H) + f(M) + f(Q) = 38\n" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3KYc7-nsTr4q", + "outputId": "c01c7748-87ed-478c-9763-2dddd7f93df4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'f': {'A': 3,\n", + " 'B': 17,\n", + " 'C': 18,\n", + " 'D': 19,\n", + " 'E': 7,\n", + " 'F': 1,\n", + " 'G': 11,\n", + " 'H': 16,\n", + " 'I': 2,\n", + " 'J': 5,\n", + " 'K': 6,\n", + " 'L': 9,\n", + " 'M': 12,\n", + " 'N': 4,\n", + " 'O': 8,\n", + " 'P': 14,\n", + " 'Q': 10,\n", + " 'R': 13,\n", + " 'S': 15}}" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ] + } + ] +} \ No newline at end of file From ef2cb2fd9f3acc9f433bcf6a8b06f4c0f4bcb442 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 10 Oct 2023 18:47:14 +0100 Subject: [PATCH 313/378] moed magicHexagon again to replace old one --- docs/notebooks/magicHexagon.ipynb | 42 ++- magicHexagon.ipynb | 442 ------------------------------ 2 files changed, 31 insertions(+), 453 deletions(-) delete mode 100644 magicHexagon.ipynb diff --git a/docs/notebooks/magicHexagon.ipynb b/docs/notebooks/magicHexagon.ipynb index 1bb3d42509..5932c714d0 100644 --- a/docs/notebooks/magicHexagon.ipynb +++ b/docs/notebooks/magicHexagon.ipynb @@ -4,7 +4,7 @@ "metadata": { "colab": { "provenance": [], - "authorship_tag": "ABX9TyMBv+lESkT6OlOjFtXIIgWl", + "authorship_tag": "ABX9TyPPu7u5eTnEZUwSBEXHkApl", "include_colab_link": true }, "kernelspec": { @@ -36,32 +36,42 @@ } }, { - "cell_type": "code", - "source": [], + "cell_type": "markdown", + "source": [ + "A description of a solution to a problem from [CSPlib](https://www.csplib.org/Problems/prob023/)\n", + "\n" + ], "metadata": { - "id": "BAX_woTySqBz" - }, - "execution_count": null, - "outputs": [] + "id": "yMVsDbCbSYQT" + } }, { "cell_type": "markdown", "source": [ - "https://www.csplib.org/Problems/prob023/" + "### The Problem" ], "metadata": { - "id": "yMVsDbCbSYQT" + "id": "ZOC8Sgugq41u" } }, { "cell_type": "markdown", "source": [ - "Try to find an arrangement oof the numbers 1 to 19 in a hexagon shape so that all the diagonals sum to 38" + "Try to find an arrangement of the numbers 1 to 19 in a hexagon shape so that all the diagonals sum to 38." ], "metadata": { "id": "U-1h22D0SPqx" } }, + { + "cell_type": "markdown", + "source": [ + "i.e: find A-S from 1-19 as" + ], + "metadata": { + "id": "Wv4EHWojrNuw" + } + }, { "cell_type": "markdown", "source": [ @@ -91,7 +101,7 @@ { "cell_type": "markdown", "source": [ - "This is very similar to the NumberPuzzle solution" + "This is was inspired by the [NumberPuzzle solution ](https://github.com/conjure-cp/conjure/blob/main/docs/tutorials/NumberPuzzle.rst)" ], "metadata": { "id": "HCq_dM7FTbFr" @@ -356,6 +366,16 @@ } ] }, + { + "cell_type": "markdown", + "source": [ + "I created a new enum type to store all the letters.\n", + "Then asked the solver to define a function that would convert the letter representations into the number 1 to 19 so that all the diagonals sum to 38 (the constraints under the such as expression below)" + ], + "metadata": { + "id": "mzSiN1Nxrug9" + } + }, { "cell_type": "code", "source": [ diff --git a/magicHexagon.ipynb b/magicHexagon.ipynb deleted file mode 100644 index 5932c714d0..0000000000 --- a/magicHexagon.ipynb +++ /dev/null @@ -1,442 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "authorship_tag": "ABX9TyPPu7u5eTnEZUwSBEXHkApl", - "include_colab_link": true - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "view-in-github", - "colab_type": "text" - }, - "source": [ - "\"Open" - ] - }, - { - "cell_type": "markdown", - "source": [ - "# Magic Hexagon" - ], - "metadata": { - "id": "srcaE1j-RzBh" - } - }, - { - "cell_type": "markdown", - "source": [ - "A description of a solution to a problem from [CSPlib](https://www.csplib.org/Problems/prob023/)\n", - "\n" - ], - "metadata": { - "id": "yMVsDbCbSYQT" - } - }, - { - "cell_type": "markdown", - "source": [ - "### The Problem" - ], - "metadata": { - "id": "ZOC8Sgugq41u" - } - }, - { - "cell_type": "markdown", - "source": [ - "Try to find an arrangement of the numbers 1 to 19 in a hexagon shape so that all the diagonals sum to 38." - ], - "metadata": { - "id": "U-1h22D0SPqx" - } - }, - { - "cell_type": "markdown", - "source": [ - "i.e: find A-S from 1-19 as" - ], - "metadata": { - "id": "Wv4EHWojrNuw" - } - }, - { - "cell_type": "markdown", - "source": [ - "\n", - "\n", - "```\n", - " A, B, C\n", - " D, E, F, G\n", - " H, I, J, K, L\n", - " M, N, O P\n", - " Q, R, S\n", - "```\n", - "\n", - "\n", - " such that\n", - "\n", - " ```\n", - "A+B+C = D+E+F+G = ... = Q+R+S = 38,\n", - "A+D+H = B+E+I+M = ... = L+P+S = 38,\n", - "C+G+L = B+F+K+P = ... = H+M+Q = 38.\n", - " ```" - ], - "metadata": { - "id": "b2IbpCrGSgwS" - } - }, - { - "cell_type": "markdown", - "source": [ - "This is was inspired by the [NumberPuzzle solution ](https://github.com/conjure-cp/conjure/blob/main/docs/tutorials/NumberPuzzle.rst)" - ], - "metadata": { - "id": "HCq_dM7FTbFr" - } - }, - { - "cell_type": "code", - "source": [ - "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.2/scripts/install-colab.sh)\n", - "%load_ext conjure" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 121 - }, - "id": "qrA8mhVNtXCw", - "outputId": "8e641e21-aa3c-419e-cf70-080ab7dee043" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Installing Conjure...\n", - "Conjure: The Automated Constraint Modelling Tool\n", - "Release version 2.4.0\n", - "Repository version a7382e3d9 (2022-11-21 10:41:03 +0000)\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "" - ], - "application/javascript": [ - "\"use strict\";\n", - "\n", - "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", - "\n", - " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", - "\n", - " var keywords = {\n", - " \"forall\": true,\n", - " \"allDifferent\": true,\n", - " \"allDiff\": true,\n", - " \"alldifferent_except\": true,\n", - " \"dim\": true,\n", - " \"toSet\": true,\n", - " \"toMSet\": true,\n", - " \"toRelation\": true,\n", - " \"maximising\": true,\n", - " \"minimising\": true,\n", - " \"forAll\": true,\n", - " \"exists\": true,\n", - " \"toInt\": true,\n", - " \"sum\": true,\n", - " \"be\": true,\n", - " \"bijective\": true,\n", - " \"bool\": true,\n", - " \"by\": true,\n", - " \"complete\": true,\n", - " \"defined\": true,\n", - " \"domain\": true,\n", - " \"in\": true,\n", - " \"or\": true,\n", - " \"and\": true,\n", - " \"false\": true,\n", - " \"find\": true,\n", - " \"from\": true,\n", - " \"function\": true,\n", - " \"given\": true,\n", - " \"image\": true,\n", - " \"indexed\": true,\n", - " \"injective\": true,\n", - " \"int\": true,\n", - " \"intersect\": true,\n", - " \"freq\": true,\n", - " \"lambda\": true,\n", - " \"language\": true,\n", - " \"letting\": true,\n", - " \"matrix\": true,\n", - " \"maxNumParts\": true,\n", - " \"maxOccur\": true,\n", - " \"maxPartSize\": true,\n", - " \"maxSize\": true,\n", - " \"minNumParts\": true,\n", - " \"minOccur\": true,\n", - " \"minPartSize\": true,\n", - " \"minSize\": true,\n", - " \"mset\": true,\n", - " \"numParts\": true,\n", - " \"of\": true,\n", - " \"partial\": true,\n", - " \"partition\": true,\n", - " \"partSize\": true,\n", - " \"preImage\": true,\n", - " \"quantifier\": true,\n", - " \"range\": true,\n", - " \"regular\": true,\n", - " \"relation\": true,\n", - " \"representation\": true,\n", - " \"set\": true,\n", - " \"size\": true,\n", - " \"subset\": true,\n", - " \"subsetEq\": true,\n", - " \"such\": true,\n", - " \"supset\": true,\n", - " \"supsetEq\": true,\n", - " \"surjective\": true,\n", - " \"that\": true,\n", - " \"together\": true,\n", - " \"enum\": true,\n", - " \"total\": true,\n", - " \"true\": true,\n", - " \"new\": true,\n", - " \"type\": true,\n", - " \"tuple\": true,\n", - " \"union\": true,\n", - " \"where\": true,\n", - " \"branching\": true,\n", - " \"on\": true\n", - " }; \n", - " var punc = \":;,.(){}[]\";\n", - "\n", - " function tokenBase(stream, state) {\n", - " var ch = stream.next();\n", - " if (ch == '\"') {\n", - " state.tokenize.push(tokenString);\n", - " return tokenString(stream, state);\n", - " }\n", - " if (/[\\d\\.]/.test(ch)) {\n", - " if (ch == \".\") {\n", - " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", - " } else if (ch == \"0\") {\n", - " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", - " } else {\n", - " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", - " }\n", - " return \"number\";\n", - " }\n", - " if (ch == \"/\") {\n", - " if (stream.eat(\"*\")) {\n", - " state.tokenize.push(tokenComment);\n", - " return tokenComment(stream, state);\n", - " }\n", - " }\n", - " if (ch == \"$\") {\n", - " stream.skipToEnd();\n", - " return \"comment\";\n", - " }\n", - " if (isOperatorChar.test(ch)) {\n", - " stream.eatWhile(isOperatorChar);\n", - " return \"operator\";\n", - " }\n", - " if (punc.indexOf(ch) > -1) {\n", - " return \"punctuation\";\n", - " }\n", - " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", - " var cur = stream.current();\n", - " \n", - " if (keywords.propertyIsEnumerable(cur)) {\n", - " return \"keyword\";\n", - " }\n", - " return \"variable\";\n", - " }\n", - "\n", - " function tokenComment(stream, state) {\n", - " var maybeEnd = false, ch;\n", - " while (ch = stream.next()) {\n", - " if (ch == \"/\" && maybeEnd) {\n", - " state.tokenize.pop();\n", - " break;\n", - " }\n", - " maybeEnd = (ch == \"*\");\n", - " }\n", - " return \"comment\";\n", - " }\n", - "\n", - " function tokenUntilClosingParen() {\n", - " var depth = 0;\n", - " return function (stream, state, prev) {\n", - " var inner = tokenBase(stream, state, prev);\n", - " console.log(\"untilClosing\", inner, stream.current());\n", - " if (inner == \"punctuation\") {\n", - " if (stream.current() == \"(\") {\n", - " ++depth;\n", - " } else if (stream.current() == \")\") {\n", - " if (depth == 0) {\n", - " stream.backUp(1)\n", - " state.tokenize.pop()\n", - " return state.tokenize[state.tokenize.length - 1](stream, state)\n", - " } else {\n", - " --depth;\n", - " }\n", - " }\n", - " }\n", - " return inner;\n", - " }\n", - " }\n", - "\n", - " function tokenString(stream, state) {\n", - " var escaped = false, next, end = false;\n", - " while ((next = stream.next()) != null) {\n", - " if (next == '(' && escaped) {\n", - " state.tokenize.push(tokenUntilClosingParen());\n", - " return \"string\";\n", - " }\n", - " if (next == '\"' && !escaped) { end = true; break; }\n", - " escaped = !escaped && next == \"\\\\\";\n", - " }\n", - " if (end || !escaped)\n", - " state.tokenize.pop();\n", - " return \"string\";\n", - " }\n", - "\n", - " return {\n", - " startState: function (basecolumn) {\n", - " return {\n", - " tokenize: []\n", - " };\n", - " },\n", - "\n", - " token: function (stream, state) {\n", - " if (stream.eatSpace()) return null;\n", - " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", - " console.log(\"token\", style);\n", - " return style;\n", - " },\n", - "\n", - " blockCommentStart: \"/*\",\n", - " blockCommentEnd: \"*/\",\n", - " lineComment: \"$\"\n", - " };\n", - "});\n", - "\n", - "\n", - "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", - "\n", - "require(['notebook/js/codecell'], function (codecell) {\n", - " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", - " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", - " Jupyter.notebook.get_cells().map(function (cell) {\n", - " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", - " });\n", - " });\n", - "});\n", - "\n" - ] - }, - "metadata": {} - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Conjure extension is loaded.\n", - "For usage help run: %conjure_help\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "I created a new enum type to store all the letters.\n", - "Then asked the solver to define a function that would convert the letter representations into the number 1 to 19 so that all the diagonals sum to 38 (the constraints under the such as expression below)" - ], - "metadata": { - "id": "mzSiN1Nxrug9" - } - }, - { - "cell_type": "code", - "source": [ - "%%conjure\n", - "letting letters be new type enum {A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P ,Q, R, S}\n", - "find f : function (injective) letters --> int(1..19)\n", - "such that\n", - " f(A) + f(B) + f(C) = 38,\n", - " f(D) + f(E) + f(F) + f(G) = 38,\n", - " f(H) + f(I) + f(J) + f(K) + f(L) = 38,\n", - " f(M) + f(N) + f(O) + f(P) = 38,\n", - " f(Q) + f(R) + f(S) = 38,\n", - " f(A) + f(D) + f(H) = 38,\n", - " f(B) + f(E) + f(I) + f(M) = 38,\n", - " f(C) + f(F) + f(J) + f(N) + f(Q) = 38,\n", - " f(G) + f(K) + f(O) + f(R) = 38,\n", - " f(L) + f(P) + f(S) = 38,\n", - " f(C) + f(G) + f(L) = 38,\n", - " f(B) + f(F) + f(K) + f(P) = 38,\n", - " f(A) + f(E) + f(J) + f(O) + f(S) = 38,\n", - " f(D) + f(I) + f(N) + f(R) = 38,\n", - " f(H) + f(M) + f(Q) = 38\n" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "3KYc7-nsTr4q", - "outputId": "c01c7748-87ed-478c-9763-2dddd7f93df4" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "{'f': {'A': 3,\n", - " 'B': 17,\n", - " 'C': 18,\n", - " 'D': 19,\n", - " 'E': 7,\n", - " 'F': 1,\n", - " 'G': 11,\n", - " 'H': 16,\n", - " 'I': 2,\n", - " 'J': 5,\n", - " 'K': 6,\n", - " 'L': 9,\n", - " 'M': 12,\n", - " 'N': 4,\n", - " 'O': 8,\n", - " 'P': 14,\n", - " 'Q': 10,\n", - " 'R': 13,\n", - " 'S': 15}}" - ] - }, - "metadata": {}, - "execution_count": 4 - } - ] - } - ] -} \ No newline at end of file From 7ab18be98772542877068af5856543e3b1486fea Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Wed, 11 Oct 2023 10:25:29 +0100 Subject: [PATCH 314/378] fixed typo on function.md --- docs/bits/type/function.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md index 1b1fb62e75..ac3f7a73b1 100644 --- a/docs/bits/type/function.md +++ b/docs/bits/type/function.md @@ -9,7 +9,7 @@ the ```range``` set is the codomain of the function - the set of possible output ``` There are 3 groups of function attributes ~ related to cardinality = ```size```, ```minSize```, and ```maxSize```. They take arguments - ~ related to function properties = ```injective```, ```subjective```, ```bijective``` + ~ related to function properties = ```injective```, ```surjective```, ```bijective``` ~ related to partiality = ```total``` Functions are partial by default From 72e6ad1e974554f2b67dd259fd693701d7c0db26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 11 Oct 2023 19:47:47 +0100 Subject: [PATCH 315/378] Update SR version to 5f0cb0f19 (2023-10-06 18:53:03 +0100) --- etc/savilerow/savilerow.jar | Bin 781092 -> 785800 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index d4e574664c5ad901f1cdcc3e35a5ca1d99130dec..0dcbf4f79374971785bc4edd79e6e36c0eec83b5 100644 GIT binary patch delta 249931 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

-IJ-J=1=#fu9xgCrnFugH`P2wLh%{@x!lV%hJe|U65HPN?ATJ zCO1ZOfc#)h`Q&oF-VufF;2T)#NQmiRn;8_kLsj}3k77s#-_(hlh73fNl9-PgvR{V7 zc5|B5W8$E=l`c(xjIEnDl#lLw(f7XBz;l6S?G&Li?8K93aEoQG$44h?bqnmK%pv2U zZQ^v|8Vt+0YatOmkI7xdk=2wxQ(ff|Ul~ZI0y8(NA;INHULOK`^BC!QgFJg<&T2<* zu1k;1a)^iEZh!;og`@h3v3z^g*=HbULXm|)9=|_0{S>($gCmiE_SJ#vA(UT(PX9n8 zh@qg)`&^AeM>SFIFwPoFeGjz1~i}jZ$siJ&PwJW zKu_JW=)>reDeeo7J0p3BRvsDo%heZScUC4by!w z>e6P);OMz?NK0lCisim@sRy$~YuytLNIAKro?*UWRQR(u*ZR3M{b(|z9>1>NBThmQ5lg}CBhb;bMlWi!!tY;|K_x;Yjgg4%u2=4U9 zW&mF$G`HM~O5gxs;A;JQVli-<$p2Kc(!szTa#isCC^%MaP=AC5wyiwlU$^>W88&@F zBdrDu>;S(5HYB}fulq!wBe{$i2L_&xyau<&cXXX*1Lzk#_Y*!DHcfj0qVDI~J(!L- z`WG-c?oel3i+mHUoB&jXo$nMP3%d(Uv17%?#DC4D2!+UJ*aMFB+)$ID4tpOL?Sy(3 zPsuEDgr>jiZn3)v-lC-WD%L+Jm<(7Sj*UyJl+%lwvV_yZNoh2 z1gFDdPbw~Zi$e0wr`N^X4N;KsAE$dWjxI1hxQ)&kq7OKTotAThO|eoWF#&^jK`ud1 zEvj`7;$Mqb%`@=Lhno- zD?=5lzKEjF?_WCqT0pJFk!z$NCK%c7ehLq(PS!8h6~T+us`G+PyFliU8CZUU=UTj# zynt}oIczvNAM%f*SwZPqy8OV@;Mjm$lZl;*qrP8?_k6ppUCOe~{DZB&#klL=FQ7Jl zDhPcUZWAAPRNsbNN1?lsLC# z!roHJ|K`L7L0k~)5=*`%fZgq6!x1bN>5^8xWspCzl^ZYww2xuZ_=Or%cq?}kr36F$ z;x5^7bryGuz^Eu<1xof_ASjLT%n}-0`OtXd7vlalfO(eUThZd@%uDtN`I{@xEHz}2o@RIS#h;WL(NRqf3}YMsHr-{QkavsDNZX?mvlpY zWi>NoM(_Gcv`}VdvQ3swl^)Tpl<>L*J9c+4UTRv!@@5yB=7Yx zs$!GL64XUy>SfkA$3oamq13k2;{$1)eAQdfE*Ut$DF$=jGUl$g4A)OcmPu-YDm+b9 zp!#Qp8#Bg&3{8=`ns7Q5qaoZdt3>euSVm<*xas-Jcg(&brt>!Of|Nh;aDmh8KVmIo z{9`%;5NM&={n{I^_70DtELhXYB)~x(u*YxP`CM3!U|0v_V|=B4j?d|=`XnYyPF`Ch z6S-glf9vD

EFO4odWFpDT_^Uy=U(9Rzf)ktAxiIOn|RFZTpu>!Hebu2O1_TD9N@G?tK6=?Mq*n5N2P2Bt)7qrr026~20G z#59c6c`B>qY^Yk(qQ+T^HkAuars+uOX{f1sJ#TZj`+6P`me4{(@O?Iv7>Jy(QB(#K{Y5?+@4MgV(jGpQ7NAW>Zip6?!MK+}TK=v6uNXY?(xY+$ zndU5N6}iPQ?*-gGeRMT0&)Ba+M4$x>HM+hz^Jb+Uf)yUEl$)$8QrABbm9lZ0wU zB0gO%jgG~U(pg>c1sVrBX9|?9HtX9Q;+bdVZdXKvrlOJz)U81i=qE_!8(RFY;|04u zMQpp5Wfd0-Y29J=Pz*`lAG7!~@e`TA$4|X~l%u}NO7EVutIo&?OG^JJys8-^#;w5j zQwjY2yW}P)X#*fqAe?Bn+ACXNW^8$2EPz&^katwVljdepayqcMbQocdh35Z|_0GYO zZSNazY}>Z&iESGbPCT)bj&0kvZQHgnu{B9<&i98h?(z1Ln{U8~>yS7^gEH7o=xH6UZa07r7ME8r*>`9m>2cW#{Rfov&GqPZsbu}&ey#e0 zzTg&wix5l2Gfb44fU6HaX`0TU+i4wpiiumiThQpSS6q}G=c$cnQSR1pY!VkdK-BEe z5_v$?IXEs(Q&E&0Os=zumfe+!yiAIyp5OVt9-t-sCd4TJRn2c=zHH%t<$H;g84V~I z|LD$x%@9%B$nOeZ?+UPeR}tAZ_s@ZULfd?Bjx6~7lf@g=@sw%&6#Ggy`-lk;y@Tk@ zCHUbMr@ve4gZ%qe=fK+|?0m&F^wjgP;CexnM;h28sd(0kEi0P3W-5U9i20HYw6@$N z$?SG-?h!^s;b%YeDu3YAuzaUqvKF9PcdRNSD1o0N0u-ciCtCFNpK%4NH*3Z>ro-F}jwwWT$}zw#6Is zrRm5Yo3uWB=z17+t~a;aef9Gt5@aK|cC#_eS=)mk9uYYnzwcSE@UJF){0jho3q4bO zf(;gCu(f>hCi$?V7iQUEXj^v-)1O7G(ON0n<815o=~dc368QBWElATnJ!XVcGtxX@ z2U4}Bj_aW;VD4Df-F)yOH~;c~HyqLVY;Bg|6SuBfqu)GA?WD8QvQE>09t0uL2LixzyE6y$g&1y{g40tFKhbB4wUiV z@s{uV5`h2r^2`I^I4wSYpo#xY_rJSg3I~n*Z@iD{8zt|gfRg;zG=QuDjnhJy4I27i zwsp)66i!NK8Z2zfY#C_8fAjy3H@jDX>cRbg)*zAoy#|;-lF_d^MY zEjTH;1EA;tSl&7^@oqBt%uVuX(|%8=$huvTZcOrya1!z$jr>wn^9m#0BAg2Z-zXQ? z*et!co1S(ryYj2@E6B~5_V%mnG;hN`t!+@Xe4q=W<(kB{W% z=;tf?YhKr`YmaOAPQt(0Jx3kP3g0~m3p)`+gl^Y>ACdD^U)H-_yqmB4(XJaEjuRX0 z=iW0N8(92WWx8Zc(ilu<1HT@~;yW1Ysir91DctUMlb?TqUY9g+bMs{i(ByNWttCHq zKVR8ghk#ytqJDCOgL_glV*9)obZp0TAp)az>xQ%8xqaSf;f@AmHPygvLb`V5cmRAR z-Xl5y+cTXxh@FUNLNkX)SN16UVXwOIojSk8ib>M?51eOPx(whtb87cw>Jn+jO`DAj zPWM7CqMv1Aw(fkKS2o0V1!{aX3VLd50jW(r9hV=EyJHf(I+F&WZetu>p`mmJqT%Gi z)clwSRaIlkU~|^sSoI^)VQffT49IlSDPq$AGv5#%uu-Ky5#&GILU)SzkaLn^XHvLx z`;0NBQoYB0N5l2RU;S-j9v3g`AQ}&`720=eF<(RvNl2LxQ!9b12S}m7qPMA^6p@nz ztgc?dCQ-6kS8IhMTa8%L>P)SW50!xzSJx%EKf()CiRdC0i8rFfvPsYK6${+r{-WPI=f zAAc%7=C+|eKWrbCwoiSxKWsaQ>2h<)2t^IiV!_aKizDGhm=DAa6-1#Fu?X2dTXkioy}nBDKz2H^hiS@0;6 zKk+Ah!h!tOfR%2@ULs09pvb$(fIF(h);1^;Dvn+dnOFdJk>45>G3Pr4d&2OA<46&y!zzc~jgwq+X+7@IJ1fnWjP#gs%J zSwmcQY_JTLJ-s%tM$wMdK26M>L0Omqm1qu_I9e1I1H2N?mPk86-RvS&E}tyieb~XG zEIQZZ_(XZQ9FZz*ZdNYWu4jj+rCmP(&&2PS;n0HgF}8xn(zCq$I2PZ)D%IF9c;Cwr zIVwpmBP9Q8og1vK@{np+<`_1>9$y2$P5sE8j!{X?9q2;6)fv2&MUg!!*624W!e{T8 zbqAS<5d`e6M?fz9oA1*bj9cxkvxA3=6JMFt=;3L;I9ZY|tGk2Co&c}+AOg<)%!Sua z_V_ddn_)r5>ybHJr4ak!8cXxqsw&3;oAa5*H4SSjuGLgifmbj~ep-|@fGl!@Aa}fM4Ige z$0kEV;0QE)@t{$D0NyocsilAplq4P%a`fH|N?_q1RRBhSaf0XbzZ*h-`LruU-oJOJ zIOfANVVb@+06l>Np^E03Eey=%3`~z7-)zJ6s{@k-3<(xVf>!0-05^l=S&SCb zvN$ksr6Q7G40tlpcebeHu|gd5l+Ud|mq+woFt2jjO_XZaz7phTO3qRynuos5Z%U}K z#Ovz5CR!zSkU!z;f?lzi^1+d^cw^bgKS>DY=z?+kky(g(O7))|8juLtiAZ*izNlK` zlEjbk8_XZ8#q%LjUYEup`TuZekdF$JDvWW$FrOt(4U+a0 zUv&>%BPot3RP3k_j7YiIS#BK{V&?sdf zRA_JN1kG$)+jM~?6|Wc$No^~XkgU9n(VTqC#WKevZCODg9ErRWA4D)FH{(inTLi8H zv^+&hu4rs}!`{^jFR4p*-QG&a&9NAS6Z1F|H40^%UtwLO?`Wqe&A0~J4=SaA-l5IGY?-u~NXeYm2qfAm`zl#E8zOAsNSW=n+$AHF)KL%^Zb2enSq;J( zr^AqCrk=zfqiWJblOHd*`HMw>qncs)wz5HRvUZYDWRE9D{69EP#7z~g1)!?v@ZQ?z>nl#2hH*@l`qiiNPxD?8Y(tAx)r0#6EX(iA7WM0<9b{ zY)3G)A!cJ2I3J}oi6CKS`@S?he1Z5~zeTIYVs1C7x=At*-BkEE^gwIP6F3JZ6$VYR z(^^K~F$O=$^|bvGJYS^hT^J&Qs{PPaa#-jP&GrN1US1gBoD5A98u^WIfuV_A zJ|~MAa5Lg?Sq+e3Ym(md@!Vb%PDVKzFb8uJM-3ayqwf8;Aiw|O^hyfhGsKRp+?cy zex|9QL_MPy4wMwjk!5|;cEii_m7!J?ji#SjlrT{6dTRb7ERvwt>+GqAcpZA?Di7P8j5}ap0B^JVGA|B_LY;5py_T7JlsC7FZ;}(irNxJ z*=;j#kt$dXs455GE=jpa;RHZ_ADpMyS*cRZJ)G+s8@Oj#s-Y%J$~gsq6j!17g$&*z zb0tr~`Cr~9L|KNg_0Sj4rynqhgo-e-Vzs8iNeCtF$|m<7QixiwwZXVJt+A8R;Iq^Z zKWR^>r_ZXDnHoKah<$Aj6aO{~_1xUht|}>d2G^xkTnds-Fe0Re zZ{F3Zh`Xi+xvo2EAEL(&fN{b2U8`>&us?O2E+-ZF+1Tq_qc>{~_oH7Jykrwhk%Pf$ zNlD3Gf+<6qhDW+337IlAdK`LVy+0sgWH~8)eJqb3^*#k9k-%}~>D-Y?4VGZ$?|NIA z3#l6mC{1|pq>`2Z_flO@8PgwgISmeq_fnA0L*GHhxNd5>svh|VKtMr*WBTU{9vUA< z9*=}Zf3!huK-UMrNCshgC}>&Hd6P!c=RiBE0GW?Eie{NgM^gY*gR zOI9Dh<6yQ#fl>T|{3A#JR<5Gt7v_nns3`I?nuFZaew+>+6K#HD;~9+7V2dU>4%Xla z|L{D&CJRTP-sP+bz#jZovors<)j|~<@kDa5|9mM?0UUn7=%&g=E}mfvQ}xtvJ~SN| z*0Mequ3C%NX$rL-HWo_QNg7?UEon&fEx$#R9tVWLtS+iP=4s7C0E24D98WP@i5F9* zc-hpd^rkD1pO9=vHV>Yk(v&;gso9%sYx>&$vT_(n;wPyifP~HK*1TkDUwNj)2gSvi zH`8$T_#E_L9w-Po$5>(!sn8YQ(U;vo-=){1yg|B_nl`kI)J-Pp`{$Wr64GXWviXa} zPC+e2FA4@#@_P1ZpA7c_9BKRL_+dMj@4BAq_y#%@zux`Qd(8jsPKz=!1?_~b#5KT@ zsNq!b_zXM)fPoC=O147v7wM))bV9XA+nEZwb;qhD@ok3cfoH*aCjvpW5w2Om=M6Tm znQj$guz_I=)b9eL>&x$uxKe)ZoY0*K)D&$>E-9`ZH;?~c7ijINU&KKGAPSPn23BS%JYIAk(m z5G&et5I>}RrYrFgL9QR}!@;%OLS=?))gwmSG5#npqMs|m?k*mK!NZc8Ke5~xhy<(s zr0{=c14yw(O9DnrJ}(}25v8rnsuVG%k& zkQE0x=fg_9<*BN^^_CxmT0#)h5EV)+22#42_tCp2>WND?<{?{Vu8pX{H|h%JfaBUt zH#A^hF1Vy%?{f-`rHNt36;Pm;?>S4J(1yP?07xF?I#Add_h4eiE!6I}I9Hl1tszYL z0q%r`mHC3Da*&7eSUp8+(_|-35KhgGH>w`MUb45bgDBH{=f+x0S4FSdGrbHW_U=To zSw1wQ`DMK9VNMY6N>sIk^b@q%hF9Vkhv)=0lN^(LP0*Lh$LkY@Q_M|e?p1+s%zbsT zfP2|t)yUFu&{l{i^s|A2keB8)q%W8bEq_gj-%ej~1fiyMNY!kE^(?@SmnbsGG$}Gg zDvLaH;M^o5R~CvzXtaO35W3__{A?LCl?!0C4fPKgV}R{Wty6$3q{m7PB)86i1T9~V z>cM#as7P=K|H(L3ur!tb72FHmW2wjW6EJfswbUUAd%SpSGYrX$p#Y77RUP|-O}z=; zg2d+CbqzUpl*c|Hw6_2WQMYt)e?0_2Rd9*$bpJbVN{L5kOLRAXLc{psG{IOClpVaQ9#1@QB>^X>I&xe@vsL(5)zh+&Sl?2RRmU)J zD_gs<*YJV+LjEBPhdvKXTDiKy(dX5YmXMF7glK6C2Y}<;6q_N#-6Z1U$Ycyds)SBS z_{8k4iZ_xW-yT5K$X}%%JPZWAX=wP{Rn;2?|Ayk2Do&c}F*ul+S(cMX6OdRpyj;-W z_afOx$W5fzQl&+!CpqBvf#4xq)5|kxrXz&tw(12tfDxNxL^Q51xk`IXZ(_Ve?1|8b zUsodW11776CVQzRO>Chc%56F%{HVc54=7uQ%#@J-rr?TV{hx?%@Iwce86Hg%kl#Ow_c1l zk$cvTB)RlmWSM4^8#bsQChGg6WQ#v}1X%reYafEWx4cG@8T(bTu;SjzK`RdF6g3rl zHYxu3RH8lW5)t)65K}#5qZJ3cCGzLRqG@y89kaY&l}wJdP}VZEVcdbZ)faCpAaM>#gafa5BENgwlX6cgvw z1FIg~aFUz^82BPj&p;C!yu}nx6wVHw?_=fO33$}Rl(-NZytRD|AZxbGcTqzg z=L~wC`P(b;h>D6Ed}i=j8lF2cr~bTbqs~@%l}xZ#K}9HwuPBQ}^2Y`uDZRbLU=fN0!V-0vqV{$iO3E zr+e+u$NKwAGH3hw>$cnON9h5l8^m@Mxlj0l-?QP$%&C|C#D>*h$?4ysot;P;uf6Zn z%%?BC@1Lx8l{01h&VGNf-CUu_5b)e~U&85-6aXY%H{Dr$!$F+}?j7F|Ro&aS5HA5D zH?D;IA0VHEyEy9wpj&T{uk>0k5d~SeJ8B{%Xt6Ce32eNp%MRIu$=Oq0SgU?(tvhD zJHqy%>=?67_8WyEo&}2dxoU!%uU;4*N&(Ey3>lAwP~lR~D+R&9J8?mW663M5?4dC< z*q|QK)aXBg67{R9NzHR(pt-rJs*5paTXN_*$JiAWg%JAvT42ZP%e8ao7Vv)8p}-Hi z>t>;jBz7})LrWzd7RYVk9Fh%~l|A_T=3*=u!+!pKa1j_U{-aFCicD2v{T@$l>qnNj zu2rhP>J}|2k)heAoD~3o#NrQQCK!i=HCvf1^aD9Xk-(xVTR3p{30x_d)MQc}sXq?I zjBuEOIJH@pl)HAD&AgORxl1fFts++!59-eu25DOJVj+2faR1*NCtXIZSlFGIWu}ly*(J_B=|qEa=c2O7v*Y z*&>9h46G4$GHjVlP^%?4dnk&9jiTSYm<=GED`Hg({88gRnCFch;P zc9|&nb^AOCj(|(+0Dtk!!G`2Hn=}sx-#5}Fa0njN;R};Yk^(6qR_)V!6Nr9v)?nqp zijmaAeA+%{^DKWAdmQhZ`oU(i>=G8^v#>Xc1=Wy^$40TLD)R(@eXzfalO&e|3_*Ie zPI{SkFm=BwRmoBj=cFL!@&uPkAB3O5sT~G1OW*mTi?)A@M4#5FsWh2XDqJWoGw?PA zct%}Nwax%FJxA$Kvy`S{D)rWYh_`sY1lTzItps}JLGd*NeV%rE9Nm!nODde25TOxj z9=^QJI#PhCiTN-j2qRfK@UmjBoEaVLU_xZ^2K<>F0cbIqzY5@@$kbi}+{&IS*f6M(&cp(HF5!|;fyE{SYgB6ecR3JaP5dme(U#!45kE(7sC zjb-@AfOj#@MzPjet!bc~&1f!(bEyL1=;`uJxN`Dn5=?bJ<>@sGPC*)p*u2$aqa=yA z;5x}c0tyY_t~{Nu+PT<*=}^O%$X9{Ys_`<8sCwX$#TH4ZHSTdwXf^ZfdPSDLdk$@g zG_QE}DOqUg!mMRJo_Q()d4}sdSZk+pm$h~13J1Sa050DE+agEXZ2$wf-v%YzasYT! z9 z+vGq%x|E8$ePNXx+sOzsLu-!FYn)L6!!RpMHu{H%uF0>WCbNuh33d&XQJKhvwGGN* z4UJo!@A{RZf%45Gh~@dZ%UrU7`VEXex(j?8QD`!e;Taeak4G_;R{ImZm(H*&nwLi6 z*(5Y16usWT@U8sMPY0kH}WCod_>x<2(pgPSL&zw1|!G|^z-(64zuOb z(qvW+Y-p-h;YYkX62=>#Xm{lWKA_jCvY@0*L)CZ#tr_A*CmVqfmp|Cwhp|}}O!|fN zlk8vy=946snwBaE%qrFyb!A>Q)~$N6oqlP&aA>P0tv&s8Np_BH#!^ovU_I22({mNj zAkLf#K>3Y!;=y3GlA!&|tW<&Za>9?%NZe9W^T$%JsGlm<#&TY?*rvI@=^MdtL-xdeR0bxpDxFjLFt?YI1!?SfnfLx`ma-6?}mhP=?3)C2i8J0ZSVa zf{eA1IiaBnUu23QRfB=;VpU)9CK?AV@Qqw1}`n1 zxxpdiJ|V-zzpHOem9!5|>Iqq&kEfGY@ziv=saj7kZgdnQ{(4f}inRticu}g<9%r$5!=ikAH66yg#in9FZ^X3g|{CHSVJ29rk3`&FdfpEMCE6u=;ywV6{vPGyiUQ zH|v(k227Mzmu)BxEt*SD_-Ckao- zz1Ks!)sKIf9pTjNeXjeZt^1+5Qb6AkGDBr*)45khJ8sDI?X7O8GaU9G1`IKT1w=w!pxlTYZAnL@gU&V@-e>Q-6KEo?MU3T&@PD|YHEdo^BP;Pwx52tq4|8({M+m3b-(I%W zORjsLiUGRkDu?N+PwpvSFQ0BkXZlyWmsyWp%|x87Yrosx|JemB0OQ z)LT1{`~sjxPk8{L(%7buwTD3A2zUH?itfGQsRLAM&_pb@GPYh|8j<;x4rr{y_Utwv ziw$$L>{_}VbHm)@N5$r+>KVH;s4md`-I;q4sV87b_N~zx{f}&)5Kj}hTGgC+z?`0S zPxJgRQRYvHI*&=x!EoEC4@bFg(iTC3#_JFE*W-<5r^%;R6|6{ z*yUtX9P~QZXFIoI?j?UPdCldg`Ki!|m0)a}WAD37G8y2cF5HA=a<_FbR;c*&Bju zBmF(g4^psZS1!=j_@92Ch3}qO(KFelb?K5MnsS8ccU< z`xYN2{H@MrtAo1fAg}qA)FY@Qm3TKH!?H)0?ev{D-GDy0sopuAv3sb30rP~qPno80 zpy^k#dX;0Q12FTa9%`%Jyl^=ZGj{X%=IJ9hc&y*lATr+x&LHDTAJ7L;3)T&j)4E!O zBITl2VU!+91W~|l4ZSnEpOHYBlA<_n03Bp8Yyer!9&m_Mb?gM0O4q%z*W0gGvVz$? z^H6?7`2bo{XAS=`TF`l=9se8%c%Q7$J~hfpt=JB-FO9MKz$35iHR(W6WqTQdFtUC6{aV z8KXvFWWn6ndzXNvOkJDKf%%Idl!+He5;=@y? zRj^Lzjqs87WF32+bC|@MI2JLUVrk&tWJ;JZ2vaUB&U{i8@6* zX8E$YM271V@Dq`1^9>(?Czw=Y7mLFON(-T;a8vz$EG3R$n||!^UqpUV*q;~;6SZ=T z$NN9W)G4M?&PxSj*EnV_*z=+N@&y+>j02SL*^Ts;s=iS~te#4@xJXiOAYF-(A^Z}E zNARNM*d#un{D6rLDHV&uhO|+>C|#(`ZKEqSNBUA2Ut*ui@3wCH3NIO=?ffwxg?)Z# z2xI}o>Nx>U*w_feX;M^pURY_moO5})?W|d)7 zbQ6kKx3?BpqqBJa(5AV}wu)0`_(Etr7BpRN$jh*0k7C8T{v;Qzw|8LD=jj$uPAD$nfXRnSNBjY0OK@DYa9!1YVsfwrE9} zp@S7EI&rC6W;(@ldIdtqj55Q=W*Rn(DpoAdTjqDWvVP!?wCau3nui+Xgvu@-d2W*& zBz1uT7%^(xL;IYZPnv<42O|`Wb1?&pyosh%TnmC&2cp8rA zcv+3qWuZUssBs(53jLG6m z6x-8_husb98u?>wSpsp*qi|CsM6uLC_+o+W1Yt#^xSa@@8$I}pBHR=dGi*KQt-S+4 zzWB=Lx0h9@K?gq(-B{uc(ZK*`{D++S+-`tT{=5UJt6d=+S`v8=JT?7fMgpaXZ>G#*7-F| zVyt%%0&7!D>Xfw(u@MCmXS90WMr{t_F`2H|*p#o+nL2)p zR7$5yrd0Dx^q??-b;-CiqL2K+5j(-f&j1{Hf^eKJXx7^0fDTQg5>*HL7+p!gC)rTa z9Wnm%o==hPFl`d-3Iav1(>R{o{(t{L$TNp`YZ4vF+iTMQe55{vhv2E>yezV2KsYsf&+>Fi_ zcKwx`;OL#*mQE*@HjD6y^d*i_+O8%Qh~-qhZU>#m7f$ED`rGvkZ`79`LL(b)Ay4A@ z+J@4;4PS|1!=2Qsd?~v>@BxXh$pM35&<*OyUxf!V@tUzD&1`f@i-^vEzvL0?iTOU2 z2Q^xY!KQL|%WtA1JGY2wkG3bVCLL(02?^E5NyZPX!_U~CWqSrZ{3%lw!qGr6*~AWU z;qw7svra^|ub_3UmnoDFVUV6=p;|%)V+G`)e>3-A1}zr||B9GBlQ(ClD66 zf-wpDq*!(UrF4Qq?kzn4%dj2VPNPl=Cp}q3wUi~O{EKe`979$ilVAzk2ab(ePgDm> zma0%>8%}z6mCV)J$WJ?{)Y$B%MWmFNMFAm4XPDI>xeGb^t}XoHA_g(r!2KWI^JjJ9 zax{f~v)EJOF#}gpquG7SdC<`jkdf?fwQZs(mWhs{Mh;axNg1dB8&In@ALG#rCF4kn zzgo{?BIlzB-fHA^G)6T#>m7AlwZnAZmcOwl$v>|aoU>?(kG;dC@&hgoSdlDK?hW6n zgbu`r1XGMu9!p;<|X9P+}d4(9j3-5^lCB~noTb_ zqyA{*HT&=ae}!q*=uIbRnX_=ucdBk_es5B*k@@PvWST80*^3YbEk&8BE_mA&7j$Lu z0WapL8LvaR6F6E?`}MWXnKbw)04%;KqtM`Qk25X^;>*va*roTW&0dH{{w zW73})ly13-BaijCSBn6?t2O-s4x2JUaFzS6;kZ|o`(MA?e0EHxE+u;RjvR`^>20hB zy9diwnf-Hs^KmtOjqs-Dxj`WBH~whi4GC)nE+_>6prZGBo53=qx)7XK{XF=_ggt`s zuJgm5g;-q*#N1|S!e1_xhaN#Hks@BD>QO2NJu=A{dM)d)tp+hF(RJ+WSA$gs@wwFC zZdvz%vG%E*LQf3CHD;-|MO$9b>N=q_C&-I2jpqA&0BZJ1XDL+6qG791K^=S4H0u!@ zhp3wX9GKUgO9+a~qbMS@?F#5G>@SIof6_ECS2OLOMy7_1AGiOe~t+_C7 zt$Y$-Hlp}yV%A^5kIcXP^`!6g#lfefGG}$aPZJj=+#Q)QDPj5i`;%#mP9J~|JDN4f zkqHFX^iFZaIWLF3e@JN-+Dhg#hTZFKv|MftjgRhx51|*quwY6Nl_cZH(9^pzAJHf~ zh`dB!v+(O~sQK~jO%K*Vp}uZLVz+)9$*?p}(XK96lWA6yXjY4pLSCWPg6p+Hoa|`> zbS0T=NNiYtsbF8rx;^z4>=pi?I?dxl;c~c4U_u6YacYyO>aOfR%x) zcgO(wLI+JvD+?eeW$(@MQHAu@Ah&;{aqbr4uZDf|DTTU%+w+iG4Iah;?LC3#Tf^0o=B#sSu2;1M9EW_+Yfb_42kO*iv$jQTgymeeV!1LIxR%pJ z25fM0Vj-Er01HnV?Y0zwVvg`axj8{`R&e>G+Xr=j(4BVt7|}wxk{q&ko^>tJZA&)c z8A^vhy)C`#{_p^&eu!vfE0a@(l2e)nUwGqNx^$11wgAi8`% z`3gIE9??q3Xo#t=o<<*dQu`y7G#thZU2ZkXo}2oZGg8Im5}}#KzuPnHUDg3IpxaQ) z?iUoNl(3n8>NJtB#+r!!fC<6}V8{(0avwg?@doowq`&XFY1+45eb2Sraf+V{XPE4< zfG+jU_jgR8tY@3_{;dtSjuc*HrX2>AXizqNOr|c6XPTTS%Z}4Q%G4k1AlSB|t)z z(MdHWs>maJlu#ukHsOSuYh_MJ0$XXBb?50I5eqT~%C1wAnoqY3 zl;XXykm_6McWb+NjprQu`M_6E;Yg>kf&K;l&$Cg{CLm}X4hRSZ9P9s_aQvfXZ)w2+ z!~Rd({;zDF91P`O8U6oGJP2sOT>d|A>lwgG{u905s(m}LVDo~(r_^S_LI8r)-yKm` z&_9>syXrN+cL-nOS~oIDjA1FfyWY-7d{jS0C=lM@;@Z^+tyq_&rSU~s6=A=?LU<{a zHzo_JJjA!$umlwDC|LL@S>6PLH$ta3of3d>g7Vu|hm{Nj-Nd^%;)>9 z98k=6=OGP}BJ!eQ7!7!oJHUH!5-Zxflhnq{5xZbz`cH9Du4RBl+7$)3pLwM~BvQFr zAp2xM@y|IWZ`Et6R!ZcTOu=`_ZkvmG&MVeAZA%V21HscOwt3jv&2w>nA zMG<_AI6XoF^;sl2=}9z*Je8kni5Kb6d6JbRoB($O!3@ZLFruQ9$*g8` zjD{Ay((n~_0`NH0oTbz_84D!Db=tlR$Og>tHlegoauYCeVXJuU{pR8w!A+-%igH&~ zE`2!D5md>Jtm52TPJqJX5H>zK7S0(OlakAFGww>2+tT2Xo0rPgmv|T&*tX2RmhWg# z>n^6Ih_GU{kN)5&91iH;Ru%!Hp{(V<=7VY7TFg&})svAIHnPU3G?lXx33w9>!{s*O zwQR*}f+>T%apF9tDh-dMRO;mV{>E#0T0?J#gxXnj1mn+>BLf(+j(+kQ8vzOwbLMZ@ zT?* z649Zao6)BO65r1C-~UF@=A~YPjU)~0hTdd=K?ajx(qv{!t~gR2NAoK5()M5xEEFkZ zoywZ0yXO1I)9|f^qm3nUA~<0C7lyI3;1B6BQXE-4Q}>Q$iNnCqZCc@NxOy5ocn*h! z1~ZqxXrIHdHWkM+C3(=kE_eE#;utGC3fNu%Ub&q zsL;O?J1h6_^bNf;Uiq2BqZ;i37Myd!uc!)8 zgst!}G3`hpPZIGLGie4J{eVihgh1k+yxjUyNc82R<7YdMO|)jaj$Nek&LlrH$0YM1 z=NRZYsmquyCCU=wT3cPmFQ2eZvn$qL19%PAsB0qb_HP*>VValg-q>5tLu2TXSE!Fq zV}J|jla}9HHkg^j1v6;!%Twk3P5!tOT5#wjnwtKuw_H2d_G*66`XFfb7q{=AR~I6J zcl0(Hfhdf^U7@eH)QfQPMn1@}5bLcPU)^XQKXRh#dy+{*(K}-*MNzLLUx@tkWhW)oq}F-(-QV6(GQ3^2H$cQhBQz5tTa<44c57QYqo)z)umOyI zi^||PVBT5^gzc>p#+x%kQuF>^uJXiWivnC>l<|I1^!xWPq{}4CoQ3OO;nJog+xmmY zeyr%@OT1sPFrB_tv3WZn_R!{o>W%p!?thBn`Gc!7^aaR4H9~rA7Fm?W0fSh$#KtH7ASPa>lk77y2G5|w9uY8<&H*w9BnLGJ z^^)DZd5OYnAwgbOgCzRqByJEDb+}fwDO-y%Xb`O)7$a`b_N!u)Zj;@D>lW%So?M|l zx0Ro~!8Zzc$$PeSr+5$sbb;YywQR~urVP9oFOB8eL=@v)?Zxx#`zmfq%-6RX}Sk2ow-dG{XO>KEAEj z2vYEQ!LR{Z3b-0*pVgS1KS4RjD*MhL^q~sLWmHi6)wMe)$e3e=7lI?&>L}q@uiRwQ zTe=Sk56jfZw%__iXvka3i^{!izLeD-H`ACoWXNJ$S-*>f?uPAyp0D>0M4%N#n11jU z#B8KabK_RcJ8=P0uCZMuJ}8{R+{&BlP-pMEE)0{zjVACh4I33pq-Er2)RD> z)V;9O%j^V_`}p%q;CPeKK+?N}^k4|^JU(o}BzpeUNNiy@Sy{u{U^*gmFs$6}58f?C8!$%ScpnbFIrCb_%H zZ8WIb+^iJkiRb6NSVZA_2&&#M%&jy1LIk7!5!aFUfwC$_QOE>CO zICq~8Si=S9CR_hz!t8OF)2wqfDU+_#Ry8&|^VmxtA{CPlMHZ%-V&zwELq8a27gG}7 z=7iLSGGhHLwl&7`*e{_UBOBPoA^de(4kfbpC!L8Vyt>K^Ba~(W$@alAszPlq=wk#x z)!}XlA@WOpE^uoJy}KxWP-S*vMj^R%j*rIwrF&fMj}X`IyZ&huMqU>mt5AC7c78PV z(^5l|saZf|ttmxVV?eIMV$_f7V{kcx-=u2?pu)3)`qY-2l{kmLzRiXfu^X7>iuI&T zmGtd|7}Srd8cDXesz=vSTD!zV+h~#i;`mk9zGaN%n`}W8kj^3wfw1jn^ZccnLCO1- zXpr|FOH`p^V#(&alT*wLD!HC#CG_B}XFR`d(XkvJj`~qP7C`E^d8>Xwo|(tZw#gbK zIJC?)uxf$IAan;Yaz9|~8JMQn$4pc4ISrr568Vy)l}I`gBI1FR89rQ;5AIm7iJ3tD5{S#jKPzj* zwy2O1D4L>9^LgI&6J_tx3(R~2Sll^5GEdI#XAD7M(8bu+BHszU58Wm@#YZjA{YF0s zD)dnr*d22)IrR#y!SARz6qSDegVlWLGhjNAn9UxU**HDd77Y($zxEbZe}7&^T6a}O zoFqez$m|oUKv0~XjIZ8ztwMrW8tCq2T=Wv!xUG!r^lS={aAY*~6q zSB?>fSHW}@s;r~0Wfte~;}WgM<0Xy>9;E>OmXZU@!%_IN-D+!JfNQaI(6Y*}^Q|`)(Yq%g z<|U*>_S_7y5;O9uxJuqNv1a*P^~6h^e_m}RnZl;-V{a|}c;4LMK5-?`{yOLZbinUI zd!dK`3Bi9SWmqGdyGFWK08G}CXh9E_FLcN7$|iBtwSG?Isx@zlfb^MIl7vI$;~4QY z3uB&^8H^|EIj%Q$=?o+}^l|9j*V^F1f^2xgjWFA+lqY5(PcRotn<)uqF4W599^^Cs zhD(gRd+6OuUsl?vUS(z@rh;$&6KdQcxR?*`xlP3l;&)%b+?b~~0FcMWUlk*TDfy#a z1Z>Lji@REIv`(Kj=~}C-M@IrgZ&M+I&sxSzrLFx{MFn%pKVz;|BG*~P#4*@ZVlJwS z=V?#K&#ug2s1durG?Bm1xF=rym#`!!qVl|z*xj7$fGOFk46k` zLrRQzFCV_~Nh7m^*B5iI^t*2u;E}s?`zund(t^mkw}r5h$dwF9YIL(2QX>fL*Se+( z25prZJ7Q?Q!J;v!jjUg*yNshaPE;H=FJ3O0&ML^nq?+iHR2{VxMqY7IXfoh?<1#y) zS~HZNFg|SuegR1jn;?y0Z(cEocYg7Cd8L1Z;Mid$nRXg#x%9eO&5F($5ScedC~C># zH?rn4W_L{ZM4%Cg<2naXEXa--saU+5Jzc0RfHpDj2u)CF5wjGyRdB>oZ2VfqOlvYW zrp|&zh<4EOJh zZ~0Ju(Ora4>oBm6GNkU>S2XD8(=yDJaF2Jc5Hz&M zQwHlky`H@*VYI|1J)?ENoYtyHx;NA4T~xaOm_MY>KiOYE<(N1Pc7wd+Pyg6bo{$!Vd z{BALPtpN?52<{lZz=nd35b^gm)z0n)LmA32jhRISO`ydqM-(QPiKxydh?ng31qElp zr~Me{^=kSIng(7OPt<#JT+eTc$vT>S!5VtXZhzKOKtd(m5WF#Pm#h>BK$&fRGq|G0 zOQ<05aLNY+cObhu^KKA>Q-20~zIX(YCCq)?HiW|P3Csxwwp_6W=6>Y(b9SLz|IoP! zGx@H^aB0FT;%@PLrwwtxvZH%`W)r>GMm!#mCB91xl8K(9mw)-B^F@080#)!0ckS{L zaRNe2VV|Gm5RC7ka3cR_bPi08GFGj$CoF|nCksuTGV+MruoMX-_59e{!Cze z@9E6*VAS3d@!V!2h6EX!<%q^MO=&J~tz*EK_%=cb*je1$w?BLs9(LKaOq;n*d2FR6 ziy>3*n^{a*XwXZDOu4da&ZjoQlWuGbR^{NKiE7iN&fkug*Y3-6Q+9h~fE+7;7ExeK zIya2EujSIWO4TwHyMfw=_pIDm5Y=^R8qLc}{NjvK&x z%(L(YPI2$shZ1=N*lK6Kq;vJ4d}d)8WJWk~UYtD#Rlon`;Zt_gg9E}pPGVSy9z@l& zW&fB%-x5w>MN#M2fvF#m@^@Bb&6;E+1X)9%3jYA4^KT3sJzoE%E@RXdYYe}enN_`) z3;*wz;D`VHX)qN5H~ovwcz-jJ#Am>MX+V$#AO8<&x#9g9;@|oppAI-lLS@D~1mn9B zIOE?j|CSiNwZPl{=D#Od|5qsCJp`Meoe2xwuwepT`4`{(&!GQA;Id#*8ivilr~Y$~ zhW9&Af(^9APN6QcyeHo8;TOaOaI>JAHK=IkpizY@W0po@gHqS z%>sY<%li0-aZ;ZL9)|K?bJb}CH~bG0cmwmi+;QF%W151$)@PX^X{Nj+DuZUl03Zo(0n9xhZAmz(3 zt^&DLm41AiR91OCRmZ~8{5mQ=L(2ZQS$NY6s*&*uhonKn4_Kc#hO($0L?l~0XF?Gu z6z7~~MhOHO+w|1~A|X@@WsULi8HsX?cPhK8`30UL@iD_io+CQRnek^TMfK#W_R>TY z0Aa;$lmLiFh@ixoN=1Uig1a88gcfzZ!?M1{NepIvq6kl?uJ@W*o@sRwbS8{SaEm!w zYn>yQm!{DE$x2IuvyDPwzvR-MEIE2q8U3$8mmUU7ixs%u{tJIpO%P+sy-!$ z8U~gl;gj$d<}JqN7Ud~IcJQX?$R&b3fQIqO32y6b_`;v@F$;&8>`1xF?IfXq-nyEG zpRD1K@D>iGLI%+(OHpv|7GgwV5LV%(PE7fghP0dqDYr0nX;f&6}-iR>0?V+c6$ z#1lofZX!U26Ifzucb9b^Eqh4e=Z_Y`X<%SYb|JWpIec3DdHVj8!OTLi<3x!_0Yr0n zQ6yGG#!$An$s`UmFzrizj$qlKl*k4>PK9u_MRb|oK%Bz>wMFEbemJU0%|Mn~i-jx$ zGN&(#`*!59xfpV9#nO81+9E-=@q*h8Vq2Cy@Epw(Wk{93)N)d(ImpA_muMS(lAdrF zld*@?j^+nBLas*7QWl1>YI6x30HI^GOuzTe)(gQj3t^759?3`|KI>#Sv%Dab<4SnL zwZBMscfQ8ls=eWg(cC>w?XR%2j1LH%6Lf_{pY|M;_^k3G;gUmMvOM*}yW;B70zQQ` zCHnDo`b1z%(!)q(X=Zj;jz+s|HEyRxez@DJj3ke&{EbQ~qaT^#%G{YP3Ym%x0gY_9nK3r@-BAEQ6lEVV?v+fB=ZB4#oZn+}7?+t(NxS@(C)Ln~o7Awd5;tpmv!aH}V&7RL=DF{v4M&a)K z9Qk1_h?99GZ~L{e1$x^_71)lS33ndAGC`Pga+-65xz9LyVAPuxjY?Ej{B_{R!9)CZ z8`Ya5?AxmoYO8E>LgS|3H<^LSlv+~h=x0?L0D0R`Zr zDq8i9-3k(|dXRpmL&vQ6}Wvua>0Yq=A_C{5EMz*l- z4PDYiz0~_nE;7MPZm{F1W@em5X<8pMe@taixnS{oy^zpYK$ofM?Dy+jvekLLzys

*tV5RSvae$!gM>_eN1{TXI;&O%<44)4_~Gkh-f;9+Pjlp7 z3I$0}qtXuEOZZ;%0f(t3p;K8EbsZ9LtQfidmn66*5cuLrg2Yg^2r_0a>ir3q&XOao zE9H%u%`CJSQ=B6o#G}7_=S1hp*)DO3SNb9|;hk0$>{k^Q`c$IF%4kE3n?8TZEEaU7 zICbL4DtgwMxh>?OrH6+tZUHzMNwZVu+iYoIz47%oTt=EOmCT*vy~&q>C1;1$@bgf55r$AHGi(^Du#@w%jGT(8u=V~9 z^9P?ul?$8R{lhbpJS+hL53?w&8O|ItqvckE^(coIPOlMv2M_W}=5FUM^giI|;X8Za z?}7H*#XTed$lg{Wh&Kx6#x3K2#mD8P%5*X+?3lRhfS8HI)yjTV;qanS-O3l3y=mwsaoW>N^B=Ty6X6+DnMGug!quT1)m@hm8+aLT6E~ zsJ>6vI@xkz)&;1=9TY1j4qsgtnJfPO?-=pvxWW0HK@a56bJQ}xmBTkY+=3>(=nYcWZ4v0|$>ZEk_9 zK4Yi(3FB#6|AI$?@v`7heRf1yh(D-xSX{ioRAIJRJ-;03+t&*8lacjXDXDj_iin%L>hsg&Va=3-?9 z$L8XM9@sHsJ%5o1!zkAg^fgGWvgo(Nu;_1DmNT;)y~9SBRMZ;Ud6po|a5-!v*O=v7 z$WP`qOW8%o4!6os;4n`Tv1Jj;2uWgLR)q7Nz>{USGzkfeaTh~2m@%Q)QF|nA>E+38 zS5tP}x9gzC6AR~!n(VMsTKgza9}2DDmO;OXHf7D>)(XUZvL%tU|0hdU|9$QdwrfMY z(O?{7qbA=MvEu>N8La$DyRddldP`>l((}j<_+-ThLyNA|`jPB38Van2V7-wGlPMZ{ zfE-7f>|4rRNbgbsDj z#!aS~ZfV)IK9k?b&diu9zpAzBnz4_X)PT$PR=Xu1HybRYTOJ;1gSDcSHTj@zEU&t( z<<*98rYtuPGLwth%aT`yhb|AhQpZQ>A?UI7&Zi5rkqp6*`&?%WsX@O54IKgZbYGSb zr85g#l-aZ6EwK@29V#*;4!`1eoiDYE5!UeWv}#h{k=YE?{N*P1qjpqs^Mh+Y0uW`; zZytNOD4I~71F%fQM=XR&9dy?;!> z4Yl4+Ezo^@g)8UW;Eu>w7~{v%Xj$nkTixuRSh~P)%4p>6-a}t>R1>VptE;IWru1c4 zUaCA%c`6$nhJ2=u18XuVy=l3m3igpmQQ26iYArHeORzt#cPy zm?_e%;~u31t4FS^M-5U}1OA+PEcFUyJ8Q0exusBYOswkuH_Q7@6|ef4SjZ#+WX8cvu!;d1~m3xqwpNKLfpG) z_liJE;$PGD#rlC8sLH-VDqEOtulHiVqlTW9OC|-DQ#-^m#-Y|e zejWV7*sS>2jzhaOQa=29I_71G`)fHAdC8W>ls{)CqA!_39coa`tuO8-NIIwj`A40{73JS_Zv{b>6R7d+cM z>hA2I;TYQQ?i2})yUJ^xmHZgPeS<=p}uTWTKEj&$`xudajD6%wf6XW^p$v1uo0&QP@E(Q6j#svg0 zWdEQ|rj6uE2l`N_-=QWfYN97%+f+q3v(e4{LVV&{$KsBBw6esrDKW{&8>#I5=JJ(4 zVZRyE3_ZReWPHy-S?_i8h(fvsb2|^ByC4!|*I5g}-`>Xg#v7!P7JHfF@cKe>Oi6iY zBb{OG(4xk(6}B6-!Crs$M5pxjisrld)J6Lz!ovv?6JW9}rSAPM=d(_yp=00kyit^> zgP}N^n6ltJaDtLlkRXhIA&ygIfbE5xg3j9?-hB!3lLt9ora7o$A1vs{f62qE*y& zZ=uYC(U~(gdzJUktI}7+LF19_rg(l8r9#=^iDL7K@^bzl7!X}6mUHE3yGB`Gnq{4{ zJ(DLt^G2z;18P@+&Ds+GdaNM)0v>i^tZ) z7@)m3uKfjNYJZd_H$=xB+9^rArpFd}FZO!q-A20CEqxZNJFB)hu`9calFW>+9f2wY zHgiDUYt*1dORBicCx=nG8J*uP&74we* zwh4U|Y5WIMaAtLU+6|@(U-6ThU1Z)eZyBZwv5{o8RLk8a_-Br?M4o3OM2oyU64&pG zULRtc2idt&!Zkx@V5GFJAiJ0cC#I>AWd@Y;L< zj8l5VC}kq@S;2@{9vtFXu&qJihQmKGG0_y~YG=oEMa^2`03(hedJ)-QTs->zLE#sA zon4wXZjp$HJ%nvpKF|s0^RfhqX&pdopsTN)h;fs^p@+|Uv{Ub|IqyKq&KGR{oUA8N za<{^EGECN-pk#%cx!~u@4`FDUv!9%$tTMiSMM|AJJ4;(l`J^RGXa)zFU3E|_ONb1c zl9kJD4z5om%oQ8ni<_AR1AzYXoE(mdL zeC4;GNmy7_Wrl?V2iGI8*)7a~EZX-8WWXkD$=?mOmld1D)xH!YQ6=4N#4%^!r#n{r z^P7I4qwT(0lnBt2Nl6xHP!$Xyht~IGhZvG4-{=ux%}iRMyO=*&JkNxx95kY6U}(V& z?5R?6n5vD#57e955gYbli%*23!)rL!>T9F}^?{k>y{Nl@naU8SLoLN1HKIQEOstGR7Kq}D>3SVX%lv5~64DVEzobj^ZxHy2Y6`7s~{UxK!nlOxl+ zb;3u434^G{{)IJLTT_Zvx#;C^9t3}9AJm=I9hf$k#wfVbGIEZoaQmTr+O{nc2@)LE zPM(sPOSdPj%`Fzux0m^}$?2*N3k}1M0}cl*mNFfhBtoF-0R$Vxg5OM^+uZ{%dDzIe z9wFDQ)|uh#)H2ga;SM0@WALqhJUw?BEBv(OmG~aly?ia zl{B*UI$H24gbP1nD>g3aUNP=N6@$M4$_*@Jn9z9F%!Cy_<40}^e~FjdEtEMuZ{t`i zxGTVi3mC-aR2V#^(eQNPwVu2X;o$M+9m}aH+bb-Z>gG0$WB^vomzFJ-GTs`!B`m%5EI{L z_p=T^#29C+T?N?WZ|Yxj(9YyCJwp|_r`hYNo*v;Q>2ms_vG94qI%Y1|g;Idtn2g1* zd|KApwQvDj+=e(rSS;10L+thIN0mGk+prH7VUmorFva67lU}=%6h0P4zr(&WepQB? zn{fjrFU+}sc%fKW-7dfBSj?VHaf}t8j*It+HVmQ~Grf~QX9om0@Mtjzn6zKub9hTp z2=EALpdOsHdJ5&dc(S+Ub_>RnHhZ@Zz903wKj)YR_CM zIJD)N3&Lqh+&J88 zU<<4MOkJ+K2>Gz2sx8QpC{%LUjHk6R-k`yy>TCkcFY5g^7t0fnV6-BE;VQ0%@SlTZ&rw=5;c&Xk3b zi2zH{(dft7yQ0hWPPUE|lf4DGZft0I3s8JnaPLu5u89Ob8toNM0Z++LD_k z+ht9dAdZRXR_fB_z$GY2_O@P)cGf6OGoPap4xV*(q>v-$f=k)R&vItRPK!kh%nZqbG@aHNe zSXHMXqt>W(ANiZ;<~cbkTQ%1XD}~$T>#*F1E+VO3@O)1*ZyY{DrvB}GSgp}qc5`gG zOrq+r_SAbtG9n}64LXnGxpfF|d)JP#+bl>DV<7w3lIvAofGZMU>PdWiEf$`CHtf(W z8T_bKUQ=T#5Tg;N3!V4}o8TJmEUu0P_<3?u@E+rL@AzFMOD7NA(5FWrxG8|Qu z?wm4PQBj3sE3@z0dc1vL%AdOCjiH*K zjB|q+FE?s?@$w){5~$su+*y$^0e@ciGfzwG3*_YYH~ZB_IJlV`7N#15Z3GT#_lu0; zW_HCs}x6I0|)(tGc4e(*NnPI!oU^lt5o(_M15F&+@&RS0gnqE&pd; z71SxWE&I=&YGJ~6Ox&tLB_PZviWWTVT}X5KC=Z*7dFI&)ik=-?biVuGC-nf*bB75D zgHw$6oqFTAJ$j0?1{h$*PR6$mrw$DOV~ulRTb=*m zApzi4&2Wy?Z_$+14Sx0M896CoRrT9alu=Qv%X{Q_4%hcrodSbZr(;#86qWDaRxKwO zbzg@spBFHE5oA9yALB%x*7!a7=k<1^*sWCMH(uwf5{Zu{ACHZUikLLi46#7{yeBW1 zUq-mnWpSw%sm*GvZk%EaNnv%d*Dby=*1Km5T#eKl=frT@$9~i8t2CmA`pVAz<@}z3 zwG+CcE6&h|1~@rNeq8kBHtp5>HBz=Prm>@x_yeka0L}}hWf8}DdwwKXWs-{aB-*G^ zUA;=iDM#mS1B>1J^-9}+hZu5z#qWvQ)BE^~}l3OEvqhm1;mDlzljnrGW-3XfN5jpK<4>sPR-k zb^reFSpu69f`~SnFR?bQSyv(T1L;B+wl}-am(ieDrKp@6oHJcxj}tkG>Y0#oaWcGo zhtx^eMZkMF@M(}S@~zc!!qD$&j8WQ}nltFkQ$dXGt8-fKs#ZyUQqt6o#WDPc|Y|ab_*&avbgZIrbwfFSEE#5Ng;%VYf6gE1#@VB(rgwM5XG3e-l1k7G+K6&@=m|7aZ zkx$%<;UiE<+mQ8`gzBACf5@upvtA8)!iDWGp+>9FgSH_IZLp24z301B)tHv8)jynC ztg+vg{`IT+zA;U%;7(P@>2()l$k(xxNn3gwAl*=k>abV7r8+|EEzwpCMug2}!k+t* z-dgEpR?Jqr*t^*!)=D3FB-Y9uIV1*vB62+BL;Dsu@_RWUM+Kyvzsfeps_lhsYHzLa zGak9aET6zSRk*dF67EXNqPt2P?Z|V~aEa&?v0Z@~T$pUctEp8mjK-5(EY~9#_G2k= z7pI?fIR23L5l<3Hq^wfkGl-!6%~I5bpf*D3`O!MwyRO6af+mr-!#u3jCmU>)o2QjjQTwPxE7+tNZd}x>{5e}oIa@**HJ!OpXl_ect>0Le8!tM-MH1`e z=fwdw7IuiV5<1aIHJEG8sY(Dqt>|T#y?8goN-?YOog^vY8Vzf)i}g?JEqwhg$$k}H z;-VtQK& z)$33T2S|`Zk6=^<%lV5ObekL)L|ZU2TP8Z^szuz8qIp(`pR0qv>p1BFYTEIC9Lxd9Fyu&8BcEIW5zakQtS^New?q2`LF74jSue(3hqs`}fwkDu9&e&$X~?#ih8J zE=gyRWgYd@jJrF%RP|GjVtg?iDU!=eLD(%9g9#_DiA=VE&1dnQI zQpxY8=+2-NJUa}2$Nn*vc`MzzXB%TNhJI^|nPEPeU86{4V6CPaIG^+-6^*2G+fwaB zH;5w!VGfIz;Pldd(jNl#?1D=VL^MWxjcwW4D{@0q#Umf*n~<0_$L<_eZu&;`AOO)T%=01?Gbt^8Fd^s@UM4^C0l298`6gln*{%F733dOG{A*wmehZ%VpLVeZnvW1Fe?$K|X5Zw$yK>imhG6ib|Sp4JC?S%yaoq$>RZXr{R0a5;+$iG%8 z?*U{$R`Z?Uk>MY}(&-ztd=( z24LgCYvW>0K-d{{j@kCqF0~ZL(`tJtaN&e}KA<_BR9z9T?P(&TYp50bEOk*^+*$3r zDz&NFT3>1w?kq%SIqMc3UD0|sb$&?ToOvQZE9+3t zSJS9EhsTij;(-ex-xyS#EVYC=r3<|yrJs3ItJ)72J3+*_#Qzy>W~EYG*XodMImPdC zNetJLqk$rZao_;G>r4obHukVlbi;S5D3=(Mc8(slCMjK)oOpwZo0Gxlm}FHGH;bB{^^7m>9`jBsxlhh|xpcK;_$fm;I> z);bXl2&Ue455^kRCAKvZSIM&g)m*)*NRq~Q%04D)^C-asyF^tZU)BI1hp(h%5l)@P z!R*dufHcO{NfvA>LbPJ*y)WNem0WK+*MK5^vZkIU+SVcL_pCxbsJN!@$D(y><>@MVbBlZ2w{g> z0&(4b!>o}s#mhyFUo`^#xYa$H@r!e7WOWrD zpOQ>!F_Vyo;rd1cdzA08X8EY7Ysx4q<;C)yC0I@g33x_S$Apzg4FnY>G|BA0q!q{m4tUU%(|X z4h=>Ft{-KV&PWQ7HjRsznxW+?-d=t{2&gop2?a-`pK2Dz#>O^+akH%oJWrntK9Gj8 z`G|pUnKCfwAb&`(>Ja&SOLLtzjVSzx5&P&3-^w`nSQuG*pNxR zo*LeXyn-2kt0q_-sec;yN~gQ^L+)N^7!VJ1d;83kF`q7mF+Pn6q3ju=?TD8qeWy!vap0$r_jj_%UCI4 zfvmQNW)s2A#LzyUSKI~7gVR$KKh7`zpE3zc)PYby#TN6zmqR7n3q-mhs7#uY3za*f zYvQYit2DvQ5AO??nt@M>a^prP=Ly?%9XMQ^zB!tUbU!*%{hP9NFX<0kJ@yf@ZCB++ zEU^UFI6!D$sc9+>`c>v0PG1x4QQo{1XA*G63qcDdX*^`S-&cbK?#vU$m8uaL;e*C^ z@7ZI3T%H621K#%L?0J$WVV?3r&|(R5hH&-IO^)!#+}UDCSx)aj^M>&@C>8Ozz%ULA zu3UTnyDkG4OA%YGrp;&;4BGCTMvt?PE4nV`nw|r3)$z|O;zrsLB`P`9+!gw}w2}!T z^NZ<1eczO)3+l++(zq<;;}fWcVTTm@_8wCKkxJ<_Kwevp!Mg&U&_YY-@m+3MY&sb1 z#GvqlxyG3U>J@8j+p#gRMvDUL!QGIcypOPS$DO8p+Ysdkbi_{6M`uueGve?CdHnWg z1c8>x@UOvs3G9P7#J8WP+65vJDfSHz=zxCV)GkOpKZ+I8-s72Oq$lX1%_-T!w`+eO z(4eQE!Z4UX(*;Yq$r($F22N!taYTc;W;hvJ@1o zIAEqqKCCzlSJ|`s4wkW%VxH>#9(vLcK53W``!UB4}3RA5k)2>~B*M?#E*^`Nue zy!Pp>>$J#oRDuQ z>pO$tWRS+Gg_{})yw6znf71%4Pp*>3c;!;#) zXlFYy{PUV6SIZl)=;2fezv^SDD(FtOzer2yNwt@gqS_JTvKFXe%SvyHNa6PLw-Z;e z`=W*${lINXYQx&@n9T(pPcP8}KxVOFk08VDB8g@%og79cMB@}pvOuA%pV0WFMTl&E zd4i-qM}f;5;gUQZmGh#Nt?T~VlOl7eP&)Xn8CoSq4~1cv-bl>AeuqptbtT1$^Yt^6 zgP0;azk_+v60%*;tU&g-QQS|(U^R~d^PT=4W~gi8ax>>@VQX^AwIE7&psstrP_(-= zcc7}Ok$+a4p*RlQt->$sr4W%(@wa_wXn#PHeBE>v-MD|>ewd=|hv`d{l);ZICw{6U z)53S2hvl^J4mE)$%XZVG?VWd{IuC>HonFE6`5<>p8(#^LW&1n^dX+AJ=mX8Hr)8b~ zrwq3AGvEy?fv?i0WO7OgIIe$A{Q`+?b^Oh(v8JsrrkJj`Y1Fo)IC?fZdT(+%OmeaE zyiUdBu{u25q42IG?>kj*+^NZ}A*#Pp;PCgTy@JT2Cy)+rd)x*nkW2bzJ6dk3$2C~Y z;vlD|IPP+5K=M47l?&C7t3IDKtjbI}xs<|PATXZL<%KRiF(WMl;Px`;N0rGLyVxbWgu7kEFkW={$)b*gaT5<>QcqMSaqJrsrq z%HGkhX1Q8w|UU($?f9P+#Bcy`#nMa;HwusK$IrskNf8*%c5334yl7Oe**UiW$rA zey{{0udTkEiL-pV7dR|HWqHMVyV9lH zxzvz^TIhZtkqD7r58Utgr?V0fhdu5F=EDb;cY5{zt=3NXccDE*0`UjwKXT)L)yVrS z5I_D)jV#0g!SZ+U{txInL0bp{vLS;XBJ1yB{a^a^`^EUbu8sdJ{{KmO=XVvqE2D{J zA+G>)z`OCOy;QUZ&Z5E2Ce+tBI)k^eXH@20@p z6Jqo4CgI;_@%D#U`8$t)pT#W-;`e{$CvcU*A~l%CLJa;L^zUS4QXtTQnBB)e+%{7l zVo$f3BmuUNJEmscBcFx3sLKfHYTk&gnrj9 zeU`>`k=#$cpD4OcZVQQX; zd&SxZ&3-%S&5NgsV``p08beQ3{j-cfM1=NI}Q6eC_ zE_*xkf4AzAqlIIx>~SP&v`4nvBI8sw@|u@^o6uYiw=ntf#s2sK*hw{SKS`{G8})c-#ELldCaZX#8BbzSRi?UqOzV7db-@ljGV>kCcH6#~K^N zPt9Q;>MvzPouDKHaP$QuD3qA1Cv&Knk#AmOe}W|1Hm)yKLk)(+LWg*P_bCjlvMilR zRqe(3n!N2O`CHI8%*^SCI=&h&%SKPmW|wWVm-sSi+Qk6NF|+{9pt>}%Yl~Ec&L-yj zc-Wi=#}HlI&sB`j(z_t#UKZvu<28S;)mlXhING}kgpm9dAhCQKZe)Xb^v#r7_B5(j z3cCP}FHykB-59SBGr#Vw7ZiFCNc(nz$nF>($S z%e%Tu+@z{;Or?mNBEu-RF;gG)%2*^kCLS9444dl&nQmkLKeRBrMZGoIlh9C)0hJ3N`j1$&yQaqs**i$^3HCpo zBb1mc0TIY~a1u_g-Ots_+fA9(QcQHM|2bz@m=^^Gg1<(@JOPiTn>oLCpcZeBy0( zE9D(KcSbK-E}#=Zj?K9o+L`fe2K3cS$W|O9shJS%YknEaaM)DpWTg9p>F)JjSodm) zK?1P@6{A(P0iyjD=D15y{%2gPEm_YOsc0p5AGVfbN(ApD?A0(ea+n70$1W#~~(JqnQk4SQX=Z@Jbd??i()!)J1 z#Y}wD?gNqiY6Xn@;}zu;8LTC9kz`3-L#kC5F5>;u58NVL*IIRJ`0(PArCSPVg4arR zPrL^%%F^d29BqD`gZ3Qh{jidpQ-p_k03$Z-Mj40{>4FvH<{Ee-|A}Z0?Nd#7Lq%>d>PaXA|M&s?4_XIvXeU;V@a`>7ULcU?Ln@Ke+4v)7T-uv-uMstfelSGlGS7cF z8t+?|rk>!PEY372wOdU(<&z64jJs0pPW-N!fjG3MxHwr@Y-#wDEHU~7c}_}x@!t57 zD!yrasySK2w4PAzJGuI^$W}TupfOJ*a$g!E$ej<3cbB^t|Dam#zcVpNVOZu9(b<^h zFsAuM*vv+>{Ada1E7=_rWS38&j;gC6z@iahCoOLV{!;-z?W$)jQX0H}BkbvDhoRLw ziCGb<8z-5wFhlxvaI{bR9I+03uYw@_fmNGgu~f1iVaDvIu8c^qNc?~kKn9v)x>NCu+)El(g1QO;#sksjy5~2@H*(3u!+KrYxvpR=Sv&zUiWq zB&LuJ2?gv9W3#D3CZ(nrU~81sqYF-)EGpvcdUbSH7iSoMBW|cH&!I0T@!5j$>=Lfs`q=px&J&A0%{s-?48_MEEm}JD5z^eyOXyMJ&=w-j zZ~)6wE`Tw^0Ycfl_Sdjkg&1wY4gBYNrM3?iFzZ!tUTMk-+(aR0IZ773lNeCpEh!DT zdl>OTte5p4$|eitfPy;tp{F!MT=!C5;^+>uS;%@TE~NN~V+RhI2eodW2#}n9jI zOz$ZuF^|C=QjBtxBklVkQ5a48H!Rag;UloB#I)Sb3Yv;Uic1U)BhzVV8cRqU`v#?O z=Vx~*d+`flSGoyZ!j!}qmPrUKPlW=T$p(eQwqad*iX?h^09(&+Gc<+}!XQXbOBkb8 zjc|ig3t4wWS&*N=thI@Vk#V<|LyM4Ia$jIjiNB8G%_w!Y^>&n|&n(peLaS&}iNh-E z{O*Hms@I&j6dbs~rwGb0%F~`;<$Ky|29&F6@fLQ_A}4*~lvCy-N=`Fs6a=g4 z=_voC=tDJLfNyN8jRIde*Bar8x}+o3Q|LL;0qNN>j7P?BwEPM$h!( zK3l=oneAQIO{=?~cp(hqM?cy+NYF39x6|DKRr8G_z&i*EiwoQLvW`1@uF%{0U`Cwx z>rUdCb+`I}TEBFMPHGKwOCB`!~#D2iC>4a43k)Y*&~W_I(YtEBSJJJ;6j`_MB-Fr66J_1_=@4Z4l-3+HaGbJ! zbNDud_kdC0XB|8!rtHRFK$eHI!<3RZtpluW6?UYToGJJdXwj3x8!#gK@pO!BUD9^I=U;ay1JdKDed!%u&S6zQO)ynMswVK zEVm5&0WX@tOA+g5Q=1QcS>|@LFX0@ZTT>gQFs1rp;n)%m6)U8o-0KN7nCJ3ccF;sV zx%_0P6M|2&BYw57u~EDLq#fbB^Je`^%Lo*vWKpV$wphuAavy|_y;Q8i?!gvEg^|Z_ z%6!frS5V?Ho4|f`3Ad23c5ry^{nbvV^a;erpipSL+p4Fs;yVG}f;AvaXCesfBvxXV zmJpbeo5%>GMw_lQx;|l9*(WK$D|9nEhL#J9My1SiCgz>nnEpf?*wj_Y0Ut<|&qLE! z2`H6Tki(mcEwJw+lPl}9RV>l}IAIn$i`g?&(r0d-THY6Sz3Wg`0{v*9$qDn2%h$J( z*5Dw2rjd)LREgpe#AIP?6War1smT|%%$8F8Sw+MUlITJD<%XF_D#poaU!=KRtw?h_ zh)wQQ@%H^OSE?oX3Ivzebg<(uk8KH8gOE-A^A9j!Z=PJ4Nc)nDD@B=kV)!*hC#Q*+ z`oXPb8unLu?$`%oihGW_sUwW4x#v(wo8!&E;AO4 zvr3g3dXk<6pP@h9Fe@$ngqGqGL}e~I8P>_CWcg0)WuBAiBd((BbrJ ze{WSaa`#5yryotPyJP7Y418BPl%i4_4V^zFD8CsRjAGyn*c23t$yUd5 zxXcXZ1TAIN39MJcx@uqn&)MJXnjIxUA@kWw69C1d#Gbvs1W5caatO?P5P&$n@$Rc>W`f!Aj)Y982u8rFH-N z+3CIRoEO@~f!D%nq_Qc4zL>5wRdIW$;_dvt0qRseIC|~2rCbQWpon7Z_@P^`6M9Dv z4KfQ!KyE~4Th2G+Wt~`(kHYw3-!e7}W?HV>#w#}G^Ops0wMKsv>)$w*y=slHv!c2@ zc>SNa#=jhnvtirleO?p6<>|3=#IjHE8_6NBGF44Xa`Z2GluIqoQdQ{QGq=Szk;8c@ z%UXNjRGf=uM=gc}1-rQRFL zqX88^Tc_6~Qxm(S70B?v$U3LsK%%x=&x8}(oY=OViJeSr+fK)}ZQHhOn-gx&-OGDPw2!j{Lj zC`6J$%d(%;s#eO9`&OEDYd)yv^QFbMn+#61^#B4&tB*N#y4y%pKdls)i|M8H0Gn=e z5z9!@06jOucGl5&TIv(Cdi?qHRqvGZmDa?di-iOSIL7?9L%Tym2_{8c~ZHf1Bmrapcx$fpN7FZf+A|QkiVXNn4awE!~o!>)LzZ z($0ipHj`xsQ?H$N`Rwesbedz;#gahEu`2m8+^kqa=BYJ}XV-@J2V!Q*4zq%9S5B(T zhH|Pt(S+Po%F%5wDdD^e+JudQmERD z5A-E)ZT`_EHV^QgyxK>>4v2f}7KBr>?;3IpqP?X@~Y56MGA+E=hxJ z9Pl<2rqD;7L!t1Q-;Jp}w@`vt)Md0AE@4C$tPXaP&Vo_?F!oGlbiB{Z9>Junmpzo4 zVq~v{?{xq-Bk-N03G~NZ@x6T@mLN69A3-_DZrpxPo9olcOu3}EmAkXex%g{8atW|G zX)BME5f5{+EF%6Z8pc#-q_Xy zHo`vA@cXsze_R!l+ad4UaM6zHpm$t5~d=E zDFxvv4>st*js`9N5mScDQ$4%~C5s_f#{4B@4l`TuedZ?bs;h(?EBo#pb9ELHxv7iZ zmahYYznqwL)G!Xv(argKGu?LvnJf9X#mTDvaIVf-ilQI=@AT1LJk^=a`{0GihIcD?r(-YB7+%Hj4 zuBd!IgfqvZyI&1R{|-(fG83!_4-jT|63T#>-G7`%CO+WK(@Vta$k-29Ox*&*p;r=W zNm$*?NeS01tXtCEnZ;4zk_izg9LfhpZw!NWOMD$SF`(Mn>wa>a)Oghgb8KGQ!Sr6L zH5(R`61$}v>4X-d1UX4r>^U6NT`RJWg&4;u;&X!A#_e|8#!==aT0UP_nP`gDo*00r zCDnuJk4vuxT!<|;<_gO)^^T&&J%?6S_{Kh)4oyc+vSuYge~88fJ>mi`j`r`2j}5ZZVB80{Oe}> zvhY1WwTvgm!p|j$+h)he5VC{}6Ig*ahhhGGrp*q2Q^vrHQ~}vc*|bzy&Q2w9aO1r6 zdd8erJ=!Bfl!pU>^BGjg-4d2qP%A_q3E|p|U;}!{vxfH%WXSUo77%fB)W5h>oe^oC zNT)2pq?l5mX1EiKexz7(#HY#wRpf&F{y#66D_HAI@PwO`EpG8$^ju3o5gY*^xSQEM z$hdAeaK3dG>q3ZG*&R8t>PQ_YhJQz}1Pfj$;TY>vNa;*+eRO17QR$+I#4Md%kXaI0 zIWCvED|q2>TI!s6iTrtzt~@QJ@zth$ufIZ$THGM`;KnF+~` zmgWKlHHQdR;1rvePLu~9UP$Y#M@}$9FP^iS%%xgXV4co$H!B3^$U%2ts~UpK>}pZK zbD4G6>`Qx;)fgM*#dsT=8LncFT!LK2#1Z6&?pX~5Y2!sqj0cuYA%ME09G>){;4*vl z7Qu$AVtH=SN8$v2??}hX7t{yyYFK9&9Y^&RgNT#)Pr|cvnxQ7=<@ojXNU!jf<+V)> z>#StCbIT2LLmcgshNcD4==0`%mKNF^IPrYMYZK#`u-ANfpa3;oLW&vn{gE*Q zyGX3zeBz1a7T_WV)7irZT^t;uj>gr9@p1YNG1tPFNjGQ)0S$A4JWZ0)FPCD7r|m}( z5Iofgu6bhNmD4?P1;BNDB4843`lgsuZx>l-PT1^f4W~uh9MQPoWJ$Qn~%XXYD66u1y=mJX&BJZ2 zt~%Lc00G+Ob(;4>lU4=^eav2BhVB7xFR7X7xKgD}#mcWF8%ultY(^$+xJ#B-C-TAl zwBeq18Pcx3%>ut|6XfgKrJbY0CqD8X1P1@l@e267SUx5ecEqzEOmIzbi2&~u-0qr| z5p16OYozR6w!t3Dr;aS^VMBNz(ZKgeJIyCUKv`0{x+^|RR5oK&eF3_Jd%)D1_Y;== z5n}&@27AVS^cNn`7dWmnwi%AIS3fQMj7c8Ar=R3K4#_zg@(kN{ $#FE*EgDJ9;@ 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 delta 246020 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

NAN59mw~B@e((ZesJ2%nn_#eLwrJ0 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 From 01e40bbfa227ec40e0288f3ab8c2cc1fb0a87ee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 11 Oct 2023 21:21:21 +0100 Subject: [PATCH 316/378] Update Dockerfile to use ubuntu:23.10 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9b28719ba4..04fbad3017 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ # First stage: Building # Setting up -FROM ubuntu:20.04 AS builder +FROM ubuntu:23.10 AS builder ENV DEBIAN_FRONTEND noninteractive WORKDIR /conjure/ @@ -66,7 +66,7 @@ RUN du -sh /root/.local/bin ################################################################################ # Second stage: Copying the binaries -FROM alpine:3.17 +FROM ubuntu:23.10 WORKDIR /conjure ENV PATH /root/.local/bin:$PATH RUN mkdir -p /root/.local/bin/lib From d1bccf03028626dd4ded227a31f098142ea90717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 11 Oct 2023 22:25:55 +0100 Subject: [PATCH 317/378] Update Dockerfile - install JRE --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 04fbad3017..e59cad230c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -69,6 +69,7 @@ RUN du -sh /root/.local/bin FROM ubuntu:23.10 WORKDIR /conjure ENV PATH /root/.local/bin:$PATH +RUN apt-get install -y --no-install-recommends default-jre # SR RUN mkdir -p /root/.local/bin/lib COPY --from=builder /root/.local/bin /root/.local/bin From 4083631953e7d1a5784ab7f65fae248960557858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 11 Oct 2023 22:39:10 +0100 Subject: [PATCH 318/378] Update Dockerfile - using headless jre --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e59cad230c..9c02fd56b8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -69,7 +69,7 @@ RUN du -sh /root/.local/bin FROM ubuntu:23.10 WORKDIR /conjure ENV PATH /root/.local/bin:$PATH -RUN apt-get install -y --no-install-recommends default-jre # SR +RUN apt-get install -y --no-install-recommends default-jre-headless RUN mkdir -p /root/.local/bin/lib COPY --from=builder /root/.local/bin /root/.local/bin From 48198b6f92655493b9c8e4b4060a8d4a2a146b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Thu, 12 Oct 2023 00:22:44 +0100 Subject: [PATCH 319/378] Update Dockerfile - apt-get update --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 9c02fd56b8..e91d4de944 100644 --- a/Dockerfile +++ b/Dockerfile @@ -69,6 +69,7 @@ RUN du -sh /root/.local/bin FROM ubuntu:23.10 WORKDIR /conjure ENV PATH /root/.local/bin:$PATH +RUN apt-get update RUN apt-get install -y --no-install-recommends default-jre-headless RUN mkdir -p /root/.local/bin/lib COPY --from=builder /root/.local/bin /root/.local/bin From 10ace4416ef858bdc79a2380bfcdb44a03a010ed Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Thu, 12 Oct 2023 16:38:47 +0100 Subject: [PATCH 320/378] All function docs pages complete, need checking --- docs/bits/attribute/L_bijective.md | 7 + docs/bits/attribute/L_injective.md | 5 + docs/bits/attribute/L_maxSize.md | 7 + docs/bits/attribute/L_minSize.md | 7 + docs/bits/attribute/L_size.md | 7 + docs/bits/attribute/L_surjective.md | 5 + docs/bits/type/function.md | 12 +- docs/notebooks/functionDemonstration.ipynb | 503 +++++++++++++++++++++ 8 files changed, 548 insertions(+), 5 deletions(-) create mode 100644 docs/bits/attribute/L_bijective.md create mode 100644 docs/bits/attribute/L_injective.md create mode 100644 docs/bits/attribute/L_maxSize.md create mode 100644 docs/bits/attribute/L_minSize.md create mode 100644 docs/bits/attribute/L_size.md create mode 100644 docs/bits/attribute/L_surjective.md create mode 100644 docs/notebooks/functionDemonstration.ipynb diff --git a/docs/bits/attribute/L_bijective.md b/docs/bits/attribute/L_bijective.md new file mode 100644 index 0000000000..e61ae2d73d --- /dev/null +++ b/docs/bits/attribute/L_bijective.md @@ -0,0 +1,7 @@ +**bijective attribute** + +When used with a function domain will restrict solutions to functions that are both [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md) and [surjective.](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md) + +This means that every element of the defined set has a unique mapping to a range element and every range element has a defined element that maps to it. + +See it demonstrated [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file diff --git a/docs/bits/attribute/L_injective.md b/docs/bits/attribute/L_injective.md new file mode 100644 index 0000000000..beca024294 --- /dev/null +++ b/docs/bits/attribute/L_injective.md @@ -0,0 +1,5 @@ +**injective attribute** + +When used with a function domain will restrict solutions to functions where elements of the defined map uniquely to elements of the range. + +See it demonstrated [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file diff --git a/docs/bits/attribute/L_maxSize.md b/docs/bits/attribute/L_maxSize.md new file mode 100644 index 0000000000..828d7ca6c2 --- /dev/null +++ b/docs/bits/attribute/L_maxSize.md @@ -0,0 +1,7 @@ +**maxSize attribute** + +Takes an integer parameter, n. + +When used with a function domain will limit the solutions to functions that contains at most n mappings. + +See it demonstrated [here.] (https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file diff --git a/docs/bits/attribute/L_minSize.md b/docs/bits/attribute/L_minSize.md new file mode 100644 index 0000000000..3447927f6a --- /dev/null +++ b/docs/bits/attribute/L_minSize.md @@ -0,0 +1,7 @@ +**minSize attribute** + +Takes an integer parameter, n. + +When used with a function domain will limit the solutions to functions that contains at least n mappings. + +See it demonstrated [here.] (https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file diff --git a/docs/bits/attribute/L_size.md b/docs/bits/attribute/L_size.md new file mode 100644 index 0000000000..eab6785027 --- /dev/null +++ b/docs/bits/attribute/L_size.md @@ -0,0 +1,7 @@ +**size attribute** + +Takes an integer parameter, n. + +When used with a function domain will limit the solutions to functions that contain n mappings. + +See it demonstrated [here.] (https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file diff --git a/docs/bits/attribute/L_surjective.md b/docs/bits/attribute/L_surjective.md new file mode 100644 index 0000000000..54a82ae074 --- /dev/null +++ b/docs/bits/attribute/L_surjective.md @@ -0,0 +1,5 @@ +**surjective attribute** + +When used with a function domain will restrict solutions to functions where there is a mapping to every element in the range. + +See it demonstrated [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md index ac3f7a73b1..d4fb7a3f2c 100644 --- a/docs/bits/type/function.md +++ b/docs/bits/type/function.md @@ -1,4 +1,4 @@ -**function domains** +**Function Domains** Takes 2 ```domains```(this page yet to be written) as arguments: the ```defined``` set and the ```range``` set of the function. The ```defined```set is the domain of the function - the set of inputs for the function @@ -14,10 +14,12 @@ There are 3 groups of function attributes Functions are partial by default - You can also explicity define a function as seen [here.](...) - See demonstrations of the function attributes [here]() - Or see functions used to solve the Magic Hexagon Problem here [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/magicHexagon.ipynb) + You can also explicity define a function as seen [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) - Much of the informatin about functions lifted from [the readthedocs](https://conjure.readthedocs.io/en/latest/essence.html) + See demonstrations of the function attributes [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) + + Or see functions used to solve the Magic Hexagon Problem [here.](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/magicHexagon.ipynb) + + Much of the informatin about functions lifted from [the readthedocs.](https://conjure.readthedocs.io/en/latest/essence.html) diff --git a/docs/notebooks/functionDemonstration.ipynb b/docs/notebooks/functionDemonstration.ipynb new file mode 100644 index 0000000000..bfda4bc58b --- /dev/null +++ b/docs/notebooks/functionDemonstration.ipynb @@ -0,0 +1,503 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yJb1FZ0maDVX" + }, + "source": [ + "# Function Domains Demonstrations" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 139 + }, + "id": "LXXtCG_TAc82", + "outputId": "96847a67-34c8-4678-e519-96cd5b9345e2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "eDfXxvyTB4QS" + }, + "source": [ + "You can assign a function with no attributes, as below. This gives every possible combination (the power set of solutions)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "LwUJCuKHA1Xi", + "outputId": "957187f1-ca26-4604-9521-7cafe55ad30f" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {}}, {\"f\": {\"C\": 1}}, {\"f\": {\"C\": 2}}, {\"f\": {\"C\": 3}}, {\"f\": {\"B\": 1}}, {\"f\": {\"B\": 2}}, {\"f\": {\"B\": 3}}, {\"f\": {\"B\": 1, \"C\": 1}}, {\"f\": {\"B\": 1, \"C\": 2}}, {\"f\": {\"B\": 1, \"C\": 3}}, {\"f\": {\"B\": 2, \"C\": 1}}, {\"f\": {\"B\": 2, \"C\": 2}}, {\"f\": {\"B\": 2, \"C\": 3}}, {\"f\": {\"B\": 3, \"C\": 1}}, {\"f\": {\"B\": 3, \"C\": 2}}, {\"f\": {\"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 1}}, {\"f\": {\"A\": 2}}, {\"f\": {\"A\": 3}}, {\"f\": {\"A\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 1}}, {\"f\": {\"A\": 1, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 3}}, {\"f\": {\"A\": 2, \"B\": 1}}, {\"f\": {\"A\": 2, \"B\": 2}}, {\"f\": {\"A\": 2, \"B\": 3}}, {\"f\": {\"A\": 3, \"B\": 1}}, {\"f\": {\"A\": 3, \"B\": 2}}, {\"f\": {\"A\": 3, \"B\": 3}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 3}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8K9l1r_PCnAD" + }, + "source": [ + "The ```injective``` attribute means elements of the defined map uniquely to elements of the range." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "pEBUYKmHCB77", + "outputId": "f0d44114-a359-48c3-80eb-b25a98c930e6" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {}}, {\"f\": {\"C\": 1}}, {\"f\": {\"C\": 2}}, {\"f\": {\"C\": 3}}, {\"f\": {\"B\": 1}}, {\"f\": {\"B\": 2}}, {\"f\": {\"B\": 3}}, {\"f\": {\"B\": 1, \"C\": 2}}, {\"f\": {\"B\": 1, \"C\": 3}}, {\"f\": {\"B\": 2, \"C\": 1}}, {\"f\": {\"B\": 2, \"C\": 3}}, {\"f\": {\"B\": 3, \"C\": 1}}, {\"f\": {\"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 1}}, {\"f\": {\"A\": 2}}, {\"f\": {\"A\": 3}}, {\"f\": {\"A\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 3}}, {\"f\": {\"A\": 2, \"B\": 1}}, {\"f\": {\"A\": 2, \"B\": 3}}, {\"f\": {\"A\": 3, \"B\": 1}}, {\"f\": {\"A\": 3, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (injective) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ANVgWTG-Vf_4" + }, + "source": [ + "The ```surjective``` attribute means there is a mapping to every element of the range." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "K4KWVr1CC_Nz", + "outputId": "283b9f30-f20c-41f2-bed9-0d10f6d202e7" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (surjective) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RWNFwuWoC7pM" + }, + "source": [ + "The ```bijective``` makes the definition unique both ways. As in every defined element maps to one range element and every range element has a defined element that maps to it. The function is both ```injective``` and ```surjective```." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "OfT-MuABCqRb", + "outputId": "ed9c078e-b29b-4864-97ec-041d40d0cb48" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (bijective) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Ey2x92DOV6kp" + }, + "source": [ + "The ```size(n)``` attribute means there are ```n``` number of mappings in the function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "XzfL8zBnDnZl", + "outputId": "6d81c7c2-1653-4736-c94c-b68ca6b28e3d" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {\"B\": 1, \"C\": 1}}, {\"f\": {\"B\": 1, \"C\": 2}}, {\"f\": {\"B\": 1, \"C\": 3}}, {\"f\": {\"B\": 2, \"C\": 1}}, {\"f\": {\"B\": 2, \"C\": 2}}, {\"f\": {\"B\": 2, \"C\": 3}}, {\"f\": {\"B\": 3, \"C\": 1}}, {\"f\": {\"B\": 3, \"C\": 2}}, {\"f\": {\"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 1}}, {\"f\": {\"A\": 1, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 3}}, {\"f\": {\"A\": 2, \"B\": 1}}, {\"f\": {\"A\": 2, \"B\": 2}}, {\"f\": {\"A\": 2, \"B\": 3}}, {\"f\": {\"A\": 3, \"B\": 1}}, {\"f\": {\"A\": 3, \"B\": 2}}, {\"f\": {\"A\": 3, \"B\": 3}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (size(2)) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aep2w82yWFFI" + }, + "source": [ + "The ```minSize(n)``` attribute means there are at least ```n``` mappings in the function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "QpV9X_B1D8oV", + "outputId": "5b3415a3-1834-44c9-e8ee-a39bbe01f082" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {\"B\": 1, \"C\": 1}}, {\"f\": {\"B\": 1, \"C\": 2}}, {\"f\": {\"B\": 1, \"C\": 3}}, {\"f\": {\"B\": 2, \"C\": 1}}, {\"f\": {\"B\": 2, \"C\": 2}}, {\"f\": {\"B\": 2, \"C\": 3}}, {\"f\": {\"B\": 3, \"C\": 1}}, {\"f\": {\"B\": 3, \"C\": 2}}, {\"f\": {\"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 1}}, {\"f\": {\"A\": 1, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 3}}, {\"f\": {\"A\": 2, \"B\": 1}}, {\"f\": {\"A\": 2, \"B\": 2}}, {\"f\": {\"A\": 2, \"B\": 3}}, {\"f\": {\"A\": 3, \"B\": 1}}, {\"f\": {\"A\": 3, \"B\": 2}}, {\"f\": {\"A\": 3, \"B\": 3}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 3}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (minSize(2)) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Je6Oc9RdWJJ4" + }, + "source": [ + "The ```maxSize(n)``` attribute means there are at most ```n``` mappings in the function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "BvNsmmVTEDpl", + "outputId": "0f36e733-7541-419a-afc9-4e4b1fda2ba7" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {}}, {\"f\": {\"C\": 1}}, {\"f\": {\"C\": 2}}, {\"f\": {\"C\": 3}}, {\"f\": {\"B\": 1}}, {\"f\": {\"B\": 2}}, {\"f\": {\"B\": 3}}, {\"f\": {\"B\": 1, \"C\": 1}}, {\"f\": {\"B\": 1, \"C\": 2}}, {\"f\": {\"B\": 1, \"C\": 3}}, {\"f\": {\"B\": 2, \"C\": 1}}, {\"f\": {\"B\": 2, \"C\": 2}}, {\"f\": {\"B\": 2, \"C\": 3}}, {\"f\": {\"B\": 3, \"C\": 1}}, {\"f\": {\"B\": 3, \"C\": 2}}, {\"f\": {\"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 1}}, {\"f\": {\"A\": 2}}, {\"f\": {\"A\": 3}}, {\"f\": {\"A\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 1}}, {\"f\": {\"A\": 1, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 3}}, {\"f\": {\"A\": 2, \"B\": 1}}, {\"f\": {\"A\": 2, \"B\": 2}}, {\"f\": {\"A\": 2, \"B\": 3}}, {\"f\": {\"A\": 3, \"B\": 1}}, {\"f\": {\"A\": 3, \"B\": 2}}, {\"f\": {\"A\": 3, \"B\": 3}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (maxSize(2)) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9dHSikBaWV7I" + }, + "source": [ + "The ```total``` attribute means that there is a mapping for every element in the defined set." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "T_YgYjAFEKkV", + "outputId": "cacfc785-7818-4833-bd5c-15d059c47f64" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {\"A\": 1, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 3, \"C\": 3}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (total) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IRnQdT4sWcBY" + }, + "source": [ + "You can define the function to have multiple attributes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "IpJi8lVhERbl", + "outputId": "82528d5e-0cc7-467a-cc8c-277d3ad2ab78" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"f\": {\"B\": 1, \"C\": 2}}, {\"f\": {\"B\": 1, \"C\": 3}}, {\"f\": {\"B\": 2, \"C\": 1}}, {\"f\": {\"B\": 2, \"C\": 3}}, {\"f\": {\"B\": 3, \"C\": 1}}, {\"f\": {\"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 2}}, {\"f\": {\"A\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"C\": 1}}, {\"f\": {\"A\": 2, \"C\": 3}}, {\"f\": {\"A\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"C\": 2}}, {\"f\": {\"A\": 1, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 3}}, {\"f\": {\"A\": 2, \"B\": 1}}, {\"f\": {\"A\": 2, \"B\": 3}}, {\"f\": {\"A\": 3, \"B\": 1}}, {\"f\": {\"A\": 3, \"B\": 2}}, {\"f\": {\"A\": 1, \"B\": 2, \"C\": 3}}, {\"f\": {\"A\": 1, \"B\": 3, \"C\": 2}}, {\"f\": {\"A\": 2, \"B\": 1, \"C\": 3}}, {\"f\": {\"A\": 2, \"B\": 3, \"C\": 1}}, {\"f\": {\"A\": 3, \"B\": 1, \"C\": 2}}, {\"f\": {\"A\": 3, \"B\": 2, \"C\": 1}}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "letting letters be new type enum {A, B, C}\n", + "find f: function (injective, minSize(2)) letters --> int (1..3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "D_ObHMeeXiAi" + }, + "source": [ + "You can define a function explicitly too, using input --> value pairs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "JJ8d_g2oWm0p", + "outputId": "2019a1cc-8279-4d6a-9b47-c3370c4f5434" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=minion\n", + "letting f be function(0-->1, 1-->0)\n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From c75daf037f66e76f804a5703d54adb58f41644fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 14 Oct 2023 20:41:01 +0100 Subject: [PATCH 321/378] SR defined imply as non-associative now. We also change the definition in Conjure to match it. --- src/Conjure/Language/Expression/Op/Internal/Common.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Conjure/Language/Expression/Op/Internal/Common.hs b/src/Conjure/Language/Expression/Op/Internal/Common.hs index e23b25904f..5591cf8513 100644 --- a/src/Conjure/Language/Expression/Op/Internal/Common.hs +++ b/src/Conjure/Language/Expression/Op/Internal/Common.hs @@ -211,7 +211,7 @@ operators = , ( BinaryOp L_Eq FNone , 400 ) , ( BinaryOp L_Or FLeft , 110 ) , ( BinaryOp L_And FLeft , 120 ) - , ( BinaryOp L_Imply FLeft , 50 ) + , ( BinaryOp L_Imply FNone , 50 ) , ( BinaryOp L_Iff FNone , 50 ) , ( BinaryOp L_union FLeft , 600 ) , ( BinaryOp L_intersect FLeft , 700 ) From 80046675a05222afd0294e0c5e0fda0c826605a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 14 Oct 2023 20:42:13 +0100 Subject: [PATCH 322/378] Run the tests when savilerow version changes as well --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 30a2893a1f..3c4a905ecf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,6 +11,7 @@ on: - src/** - tests/** - etc/build/** + - etc/savilerow - .github/workflows/test.yml pull_request: # and for PRs paths: @@ -19,6 +20,7 @@ on: - src/** - tests/** - etc/build/** + - etc/savilerow - .github/workflows/test.yml # other branches that want testing must create a PR From a302b95e68577751bdc5718434a60aa64574bfcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 14 Oct 2023 20:42:34 +0100 Subject: [PATCH 323/378] tidy --- conjure-cp.cabal | 3 + src/Conjure/Prelude.hs | 2 +- src/Conjure/UI/ErrorDisplay.hs | 194 ++++++++++++++++----------------- 3 files changed, 98 insertions(+), 101 deletions(-) diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 86c8efa75d..9b03e22b76 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -333,6 +333,7 @@ Library ScopedTypeVariables TypeOperators ViewPatterns + ImportQualifiedPost ghc-options: -O1 -fwarn-incomplete-patterns @@ -370,6 +371,7 @@ Executable conjure ScopedTypeVariables TypeOperators ViewPatterns + ImportQualifiedPost ghc-options: -O1 -fwarn-incomplete-patterns @@ -432,6 +434,7 @@ Test-Suite conjure-testing ScopedTypeVariables TypeOperators ViewPatterns + ImportQualifiedPost ghc-options: -fwarn-incomplete-patterns -fwarn-incomplete-uni-patterns diff --git a/src/Conjure/Prelude.hs b/src/Conjure/Prelude.hs index bd2d693752..fb3269fbd8 100644 --- a/src/Conjure/Prelude.hs +++ b/src/Conjure/Prelude.hs @@ -105,7 +105,7 @@ import Control.Category as X ( (<<<), (>>>) ) import Data.Data as X ( Data, Typeable ) import Data.Default as X ( Default, def ) -import Data.Either as X ( Either(..), either, lefts, rights, partitionEithers ) +import Data.Either as X ( Either(..), either, lefts, rights, partitionEithers, fromRight, fromLeft ) import Data.Function as X ( id, const, flip, on, ($), (.) ) import Data.List as X ( (\\), intercalate, intersperse, minimumBy, nub, nubBy , group, groupBy, sort, sortBy diff --git a/src/Conjure/UI/ErrorDisplay.hs b/src/Conjure/UI/ErrorDisplay.hs index 4fc8756149..e2530e418a 100644 --- a/src/Conjure/UI/ErrorDisplay.hs +++ b/src/Conjure/UI/ErrorDisplay.hs @@ -1,42 +1,42 @@ module Conjure.UI.ErrorDisplay where -import Conjure.Prelude -import Conjure.Language.Validator -import Text.Megaparsec -import qualified Data.Set as Set -import Conjure.Language.AST.Syntax import Conjure.Language.AST.ASTParser -import Conjure.Language.Lexer +import Conjure.Language.AST.Reformer +import Conjure.Language.AST.Syntax import Conjure.Language.Lexemes -import qualified Data.Text -import qualified Data.Text as T -import Data.Map.Strict (assocs) +import Conjure.Language.Lexer import Conjure.Language.Pretty -import Conjure.Language.AST.Reformer +import Conjure.Language.Validator +import Conjure.Prelude import Data.Data - +import Data.Map.Strict (assocs) +import qualified Data.Set as Set +import qualified Data.Text +import qualified Data.Text as T +import Text.Megaparsec type Parser t = Parsec DiagnosticForPrint Text t -data DiagnosticForPrint = DiagnosticForPrint { - dStart :: Int, +data DiagnosticForPrint = DiagnosticForPrint + { dStart :: Int, dLength :: Int, dMessage :: Diagnostic -} deriving (Show,Eq,Ord) + } + deriving (Show, Eq, Ord) instance ShowErrorComponent DiagnosticForPrint where + errorComponentLen (DiagnosticForPrint {dLength = l}) = l - errorComponentLen (DiagnosticForPrint {dLength=l}) = l - - showErrorComponent DiagnosticForPrint {dMessage=message}= case message of - Error et -> displayError et + showErrorComponent DiagnosticForPrint {dMessage = message} = case message of + Error et -> displayError et Warning wt -> displayWarning wt Info it -> "Info: " ++ show it tokenErrorToDisplay :: LToken -> String -tokenErrorToDisplay (RealToken _ ) = error "tokenError with valid token" +tokenErrorToDisplay (RealToken _) = error "tokenError with valid token" tokenErrorToDisplay (SkippedToken t) = "Unexpected " ++ lexemeFace (lexeme t) -tokenErrorToDisplay (MissingToken (lexeme->l)) = "Missing " ++ case l of +tokenErrorToDisplay (MissingToken (lexeme -> l)) = + "Missing " ++ case l of L_Missing s -> show s LMissingIdentifier -> "" _ -> T.unpack $ lexemeText l @@ -52,10 +52,10 @@ displayError x = case x of SemanticError txt -> "Error: " ++ T.unpack txt CustomError txt -> "Error: " ++ T.unpack txt TypeError expected got -> "Type error:\n\tExpected: " ++ show (pretty expected) ++ "\n\tGot: " ++ show (pretty got) - ComplexTypeError msg ty -> "Type error:\n\tExpected: " ++ show msg ++ "\n\tGot: " ++ (show $ pretty ty) + ComplexTypeError msg ty -> "Type error:\n\tExpected: " ++ show msg ++ "\n\tGot: " ++ show (pretty ty) SkippedTokens -> "Skipped tokens" UnexpectedArg -> "Unexpected argument" - MissingArgsError expected got -> "Insufficient args, expected " ++ (show expected) ++ " got " ++ (show got) + MissingArgsError expected got -> "Insufficient args, expected " ++ show expected ++ " got " ++ show got InternalError -> "Pattern match failiure" InternalErrorS txt -> "Something went wrong: " ++ T.unpack txt WithReplacements e alts -> displayError e ++ "\n\tValid alternatives: " ++ intercalate "," (show <$> alts) @@ -63,105 +63,99 @@ displayError x = case x of CategoryError categ reason -> show $ "Cannot use variable of category :" <+> pretty categ <+> "in the context of " <> pretty reason showDiagnosticsForConsole :: [ValidatorDiagnostic] -> Maybe String -> Text -> String -showDiagnosticsForConsole errs fileName text - = case runParser (captureErrors errs) (fromMaybe "Errors" fileName) text of - Left peb -> errorBundlePretty peb - Right _ -> "No printable errors from :" ++ (show . length $ errs) - +showDiagnosticsForConsole errs fileName text = + case runParser (captureErrors errs) (fromMaybe "Errors" fileName) text of + Left peb -> errorBundlePretty peb + Right _ -> "No printable errors from :" ++ (show . length $ errs) printSymbolTable :: SymbolTable -> IO () -printSymbolTable tab = putStrLn "Symbol table" >> ( mapM_ printEntry $ assocs tab) - where - printEntry :: (Text ,SymbolTableValue) -> IO () - printEntry (a,(_,c,t)) = putStrLn $ T.unpack a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" +printSymbolTable tab = putStrLn "Symbol table" >> mapM_ printEntry (assocs tab) + where + printEntry :: (Text, SymbolTableValue) -> IO () + printEntry (a, (_, c, t)) = putStrLn $ T.unpack a ++ ":" ++ show (pretty t) ++ if c then " Enum" else "" captureErrors :: [ValidatorDiagnostic] -> Parser () -captureErrors = (mapM_ captureError) . collapseSkipped . removeAmbiguousTypeWarning +captureErrors = mapM_ captureError . collapseSkipped . removeAmbiguousTypeWarning ---Remove these warnings from a console print of errors as they are just clutter +-- Remove these warnings from a console print of errors as they are just clutter removeAmbiguousTypeWarning :: [ValidatorDiagnostic] -> [ValidatorDiagnostic] -removeAmbiguousTypeWarning = filter ( - \(ValidatorDiagnostic _ x)-> +removeAmbiguousTypeWarning = + filter + ( \(ValidatorDiagnostic _ x) -> case x of - Warning AmbiguousTypeWarning->False; - _->True + Warning AmbiguousTypeWarning -> False + _ -> True ) - collapseSkipped :: [ValidatorDiagnostic] -> [ValidatorDiagnostic] collapseSkipped [] = [] collapseSkipped [x] = [x] -collapseSkipped ((ValidatorDiagnostic regx ex) :(ValidatorDiagnostic regy ey):rs) - | isSkipped ex && isSkipped ey && sameLine (drSourcePos regx) (drSourcePos regy) - = collapseSkipped $ ValidatorDiagnostic (catDr regx regy) (Error $ SkippedTokens ) : rs - where - isSkipped (Error (TokenError (SkippedToken _))) = True - isSkipped (Error SkippedTokens) = True - isSkipped _ = False - sameLine :: SourcePos -> SourcePos -> Bool - sameLine (SourcePos _ l1 _) (SourcePos _ l2 _) = l1 == l2 - catDr :: DiagnosticRegion -> DiagnosticRegion -> DiagnosticRegion - catDr (DiagnosticRegion sp _ o _) (DiagnosticRegion _ en _ _) = DiagnosticRegion sp en o ((unPos (sourceColumn en) - unPos (sourceColumn sp))) -collapseSkipped (x:xs) = x : collapseSkipped xs - +collapseSkipped ((ValidatorDiagnostic regx ex) : (ValidatorDiagnostic regy ey) : rs) + | isSkipped ex && isSkipped ey && sameLine (drSourcePos regx) (drSourcePos regy) = + collapseSkipped $ ValidatorDiagnostic (catDr regx regy) (Error $ SkippedTokens) : rs + where + isSkipped (Error (TokenError (SkippedToken _))) = True + isSkipped (Error SkippedTokens) = True + isSkipped _ = False + sameLine :: SourcePos -> SourcePos -> Bool + sameLine (SourcePos _ l1 _) (SourcePos _ l2 _) = l1 == l2 + catDr :: DiagnosticRegion -> DiagnosticRegion -> DiagnosticRegion + catDr (DiagnosticRegion sp _ o _) (DiagnosticRegion _ en _ _) = DiagnosticRegion sp en o (unPos (sourceColumn en) - unPos (sourceColumn sp)) +collapseSkipped (x : xs) = x : collapseSkipped xs captureError :: ValidatorDiagnostic -> Parser () -captureError (ValidatorDiagnostic reg message) |reg == global = do - let printError = DiagnosticForPrint 0 0 message - registerFancyFailure (Set.singleton(ErrorCustom printError) ) +captureError (ValidatorDiagnostic reg message) | reg == global = do + let printError = DiagnosticForPrint 0 0 message + registerFancyFailure (Set.singleton (ErrorCustom printError)) captureError (ValidatorDiagnostic area message) = do - setOffset $ drOffset area - let printError = DiagnosticForPrint (drOffset area) (drLength area) message - registerFancyFailure (Set.singleton(ErrorCustom printError) ) - - + setOffset $ drOffset area + let printError = DiagnosticForPrint (drOffset area) (drLength area) message + registerFancyFailure (Set.singleton (ErrorCustom printError)) val :: String -> String -> IO () val path s = do - let str = s - let other = [] - let txt = Data.Text.pack str - let lexed = runLexer txt (Just path) - let stream = either (const $ ETokenStream txt other) id lexed - let (ETokenStream _ toks) = stream - putStrLn $ concat $ map (T.unpack . capture) toks - - -- parseTest parseProgram stream - let progStruct = runParser parseProgram "TEST" stream - - case progStruct of - Left _ -> putStrLn "error" - Right p@(ProgramTree{}) -> let qpr = runValidator (validateModel p) (initialState p (Just txt)){typeChecking=True} in - case qpr of - (model, vds,st) -> do - print (show model) - putStrLn $ show vds - printSymbolTable $ symbolTable st - putStrLn $ show $ (regionInfo st) - putStrLn $ showDiagnosticsForConsole vds Nothing txt - putStrLn $ show . reformList $ flatten p - putStrLn $ show p - - -- putStrLn $ show qpr - + let str = s + let other = [] + let txt = Data.Text.pack str + let lexed = runLexer txt (Just path) + let stream = fromRight (ETokenStream txt other) lexed + let (ETokenStream _ toks) = stream + putStrLn $ concatMap (T.unpack . capture) toks + + -- parseTest parseProgram stream + let progStruct = runParser parseProgram "TEST" stream + + case progStruct of + Left _ -> putStrLn "error" + Right p@(ProgramTree {}) -> + let qpr = runValidator (validateModel p) (initialState p (Just txt)) {typeChecking = True} + in case qpr of + (model, vds, st) -> do + print (show model) + print vds + printSymbolTable $ symbolTable st + print (regionInfo st) + putStrLn $ showDiagnosticsForConsole vds Nothing txt + print (reformList $ flatten p) + print p valFile :: String -> IO () valFile p = do - path <- readFileIfExists p - case path of - Nothing -> putStrLn "NO such file" - Just s -> val p s - return () --- putStrLn validateFind - -withParseTree :: String -> (ProgramTree -> IO ()) -> IO() + path <- readFileIfExists p + case path of + Nothing -> putStrLn "NO such file" + Just s -> val p s + return () + + +withParseTree :: String -> (ProgramTree -> IO ()) -> IO () withParseTree pa f = do - fil <- readFileIfExists pa - case runParser parseProgram "TEST" (either (const $ error "bad") id $ runLexer (maybe "" T.pack fil) Nothing) of - Left _ -> error "bad" - Right pt -> void $ f pt + fil <- readFileIfExists pa + case runParser parseProgram "TEST" (fromRight (error "bad") $ runLexer (maybe "" T.pack fil) Nothing) of + Left _ -> error "bad" + Right pt -> void $ f pt -listBounds :: Int -> Int -> ProgramTree -> IO () +listBounds :: Int -> Int -> ProgramTree -> IO () listBounds a b t = do - let hlt = makeTree t - sequence_ [print $ toConstr t' | x@(HLTagged t' _) <- universe hlt,contains (SourcePos "" (mkPos a) (mkPos b)) x] \ No newline at end of file + let hlt = makeTree t + sequence_ [print $ toConstr t' | x@(HLTagged t' _) <- universe hlt, contains (SourcePos "" (mkPos a) (mkPos b)) x] \ No newline at end of file From 70c0340b3c9aabc254890b60931a8f0abefa13e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 14 Oct 2023 20:42:42 +0100 Subject: [PATCH 324/378] vscode --- .vscode/extensions.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..bc4b9ed588 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "haskell.haskell" + ] +} \ No newline at end of file From 23a3410e306be0851ef128d9d351fd64cc307244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sat, 14 Oct 2023 20:43:11 +0100 Subject: [PATCH 325/378] update test files --- .../basic/parsing-imply/stderr.expected | 77 ++++++++ .../basic/parsing-imply/stdout.expected | 187 +++++++----------- 2 files changed, 149 insertions(+), 115 deletions(-) create mode 100644 tests/custom/basic/parsing-imply/stderr.expected diff --git a/tests/custom/basic/parsing-imply/stderr.expected b/tests/custom/basic/parsing-imply/stderr.expected new file mode 100644 index 0000000000..9eff12ba63 --- /dev/null +++ b/tests/custom/basic/parsing-imply/stderr.expected @@ -0,0 +1,77 @@ +Error: + 1_noparens.essence:7:19: + | +7 | such that a -> !b -> c -> d + | ^ +Missing Expression + +1_noparens.essence:7:19: + | +7 | such that a -> !b -> c -> d + | ^ +Missing , + +1_noparens.essence:7:24: + | +7 | such that a -> !b -> c -> d + | ^ +Missing Expression + +1_noparens.essence:7:24: + | +7 | such that a -> !b -> c -> d + | ^ +Missing , + +Error: + 1_noparens.essence:7:19: + | +7 | such that a -> !b -> c -> d + | ^ +Missing Expression + +1_noparens.essence:7:19: + | +7 | such that a -> !b -> c -> d + | ^ +Missing , + +1_noparens.essence:7:24: + | +7 | such that a -> !b -> c -> d + | ^ +Missing Expression + +1_noparens.essence:7:24: + | +7 | such that a -> !b -> c -> d + | ^ +Missing , + +cat: conjure-output/model000001.solutions: No such file or directory +Error: + 4_mixparens.essence:7:26: + | +7 | such that a -> (!b -> c) -> d + | ^ +Missing Expression + +4_mixparens.essence:7:26: + | +7 | such that a -> (!b -> c) -> d + | ^ +Missing , + +Error: + 4_mixparens.essence:7:26: + | +7 | such that a -> (!b -> c) -> d + | ^ +Missing Expression + +4_mixparens.essence:7:26: + | +7 | such that a -> (!b -> c) -> d + | ^ +Missing , + diff --git a/tests/custom/basic/parsing-imply/stdout.expected b/tests/custom/basic/parsing-imply/stdout.expected index accd8165e7..47e9e92e3a 100644 --- a/tests/custom/basic/parsing-imply/stdout.expected +++ b/tests/custom/basic/parsing-imply/stdout.expected @@ -1,12 +1,23 @@ ======================================== 1_noparens.essence -Generating models for 1_noparens.essence +1,8d0 +< language Essence 1.3 +< +< find a: bool +< find b: bool +< find c: bool +< find d: bool +< such that a -> !b -> c -> d +< +======================================== +2_leftparens.essence +Generating models for 2_leftparens.essence Generated models: model000001.eprime Saved under: conjure-output Savile Row: model000001.eprime Running minion for domain filtering. Running solver: minion -Copying solution to: 1_noparens.solutions +Copying solution to: 2_leftparens.solutions $ Solution: 000001 language Essence 1.3 @@ -107,16 +118,14 @@ letting d be true ======================================== -2_leftparens.essence -7c7 -< such that ((a -> !b) -> c) -> d ---- -> such that a -> !b -> c -> d -Using cached models. +3_rightparens.essence +Generating models for 3_rightparens.essence +Generated models: model000001.eprime +Saved under: conjure-output Savile Row: model000001.eprime Running minion for domain filtering. Running solver: minion -Copying solution to: 2_leftparens.solutions +Copying solution to: 3_rightparens.solutions $ Solution: 000001 language Essence 1.3 @@ -141,19 +150,28 @@ language Essence 1.3 letting a be false letting b be false letting c be true -letting d be true +letting d be false $ Solution: 000004 language Essence 1.3 +letting a be false +letting b be false +letting c be true +letting d be true + + +$ Solution: 000005 +language Essence 1.3 + letting a be false letting b be true letting c be false letting d be false -$ Solution: 000005 +$ Solution: 000006 language Essence 1.3 letting a be false @@ -162,7 +180,16 @@ letting c be false letting d be true -$ Solution: 000006 +$ Solution: 000007 +language Essence 1.3 + +letting a be false +letting b be true +letting c be true +letting d be false + + +$ Solution: 000008 language Essence 1.3 letting a be false @@ -171,7 +198,7 @@ letting c be true letting d be true -$ Solution: 000007 +$ Solution: 000009 language Essence 1.3 letting a be true @@ -180,7 +207,7 @@ letting c be false letting d be false -$ Solution: 000008 +$ Solution: 000010 language Essence 1.3 letting a be true @@ -189,7 +216,7 @@ letting c be false letting d be true -$ Solution: 000009 +$ Solution: 000011 language Essence 1.3 letting a be true @@ -198,7 +225,16 @@ letting c be true letting d be true -$ Solution: 000010 +$ Solution: 000012 +language Essence 1.3 + +letting a be true +letting b be true +letting c be false +letting d be false + + +$ Solution: 000013 language Essence 1.3 letting a be true @@ -207,7 +243,16 @@ letting c be false letting d be true -$ Solution: 000011 +$ Solution: 000014 +language Essence 1.3 + +letting a be true +letting b be true +letting c be true +letting d be false + + +$ Solution: 000015 language Essence 1.3 letting a be true @@ -217,14 +262,16 @@ letting d be true ======================================== -3_rightparens.essence -Generating models for 3_rightparens.essence -Generated models: model000001.eprime -Saved under: conjure-output -Savile Row: model000001.eprime -Running minion for domain filtering. -Running solver: minion -Copying solution to: 3_rightparens.solutions +4_mixparens.essence +1,8d0 +< language Essence 1.3 +< +< find a: bool +< find b: bool +< find c: bool +< find d: bool +< such that a -> (!b -> c) -> d +< $ Solution: 000001 language Essence 1.3 @@ -360,93 +407,3 @@ letting c be true letting d be true -======================================== -4_mixparens.essence -Generating models for 4_mixparens.essence -Generated models: model000001.eprime -Saved under: conjure-output -Savile Row: model000001.eprime -Running minion for domain filtering. -Running solver: minion -Copying solution to: 4_mixparens.solutions -$ Solution: 000001 -language Essence 1.3 - -letting a be false -letting b be false -letting c be false -letting d be true - - -$ Solution: 000002 -language Essence 1.3 - -letting a be false -letting b be false -letting c be true -letting d be true - - -$ Solution: 000003 -language Essence 1.3 - -letting a be false -letting b be true -letting c be false -letting d be true - - -$ Solution: 000004 -language Essence 1.3 - -letting a be false -letting b be true -letting c be true -letting d be true - - -$ Solution: 000005 -language Essence 1.3 - -letting a be true -letting b be false -letting c be false -letting d be false - - -$ Solution: 000006 -language Essence 1.3 - -letting a be true -letting b be false -letting c be false -letting d be true - - -$ Solution: 000007 -language Essence 1.3 - -letting a be true -letting b be false -letting c be true -letting d be true - - -$ Solution: 000008 -language Essence 1.3 - -letting a be true -letting b be true -letting c be false -letting d be true - - -$ Solution: 000009 -language Essence 1.3 - -letting a be true -letting b be true -letting c be true -letting d be true - - From ab7ea1c393a74c9beaa6e6fedfb3927e225b77da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Sun, 15 Oct 2023 23:50:51 +0100 Subject: [PATCH 326/378] Run the docker action only on the main branch --- .github/workflows/docker-publish.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index c661b7c9f5..6dfa093e97 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -8,6 +8,8 @@ name: Publishing Docker image to ghcr.io on: workflow_dispatch: # can be triggered manually workflow_run: # run only when all tests pass + branches: + - main workflows: - Running all tests types: From f6d4d8cb6cf40a75a54a54b730156555eb8b219d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Mon, 16 Oct 2023 00:26:31 +0100 Subject: [PATCH 327/378] pretty printing to use more parens --- .../12c6764f3c578badfe13d0f23b70d7f8/stdout.expected | 2 +- .../13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected | 2 +- .../1a74e085d474d94e75d0b67e14b3dc55/stdout.expected | 2 +- .../4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected | 2 +- .../5e518b6bd904bec61aee47caffd90b28/stdout.expected | 2 +- .../604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected | 2 +- .../8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected | 2 +- .../9766d2cb8dbc532f788d40e27b2a738f/stdout.expected | 3 ++- .../9c56771bea5197295b15462aa78ce28f/stdout.expected | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/stdout.expected b/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/stdout.expected index 57c171272a..041eadd243 100644 --- a/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/12c6764f3c578badfe13d0f23b70d7f8/stdout.expected @@ -32,7 +32,7 @@ such that int(-4..0)], relation((toMSet({true -> true}), (function(true --> 7, true --> 9) != function(true --> 5, true --> 1), - true <-> false -> true /\ true), + (true <-> false) -> true /\ true), partition({-5, 9}, {0}, {|partition({true, true})|}, {-1 * -5 % toInt(false)}, {6})), (mset(true != false -> false, true != false /\ (false \/ false), false in mset(true, false), false -> 3 != 9, function(3 --> true) != function(-4 --> false), diff --git a/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected b/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected index 2fd14c15df..abfb46f0f3 100644 --- a/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/13eda547bb0b8ccccb4b8cc348f66d91/stdout.expected @@ -2,7 +2,7 @@ language Essence 1.3 find var1: function (size 3) int(2, 1..3) --> int(5, 1..3) such that - !(factorial(5) < 1 % 4 -> (true <-> false -> true > true)), + !(factorial(5) < 1 % 4 -> ((true <-> false) -> true > true)), apart(({} : `set of function matrix indexed by [int] of int --> int`), partition({(function() : `function matrix indexed by [int] of int --> int`), function([1, 1; int(0, 2)] --> 0), diff --git a/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/stdout.expected b/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/stdout.expected index a830ac4eb5..30c2a9a278 100644 --- a/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/1a74e085d474d94e75d0b67e14b3dc55/stdout.expected @@ -11,7 +11,7 @@ find var7: function function int(3..5, -3) --> bool --> tuple (int(-1)) find var8: partition from int(3) find var9: function bool --> set of int(-5, 5) such that - function(var4 --> 10 != -7, var4 --> var5) in ({} : `set of function int --> bool`) -> false \/ true in {true} -> + (function(var4 --> 10 != -7, var4 --> var5) in ({} : `set of function int --> bool`) -> false \/ true in {true}) -> function(({} : `set of partition from int`) --> partition({mset(7)}, {mset(4, -9)}), {var8} --> partition({mset(7)}, {(mset() : `mset of int`)}), {var8} --> partition({mset(-4, -8)}, {mset(-1, 10), mset(6, 1)})) diff --git a/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected b/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected index c3c1961bce..880e3cf42c 100644 --- a/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/4dc66fe54b35bc9bc0cacbfe377f4dc6/stdout.expected @@ -2,5 +2,5 @@ language ESSENCE' 1.0 find var1: bool such that - var1 <-> var1 -> false, + (var1 <-> var1) -> false, false diff --git a/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/stdout.expected b/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/stdout.expected index 1e4bf02e53..7b2ee724d8 100644 --- a/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/5e518b6bd904bec61aee47caffd90b28/stdout.expected @@ -8,4 +8,4 @@ such that and(([] : `matrix indexed by [int] of bool`)), (relation() : `relation of (int)`) subset relation(tuple (var2), tuple (var1), tuple (var1), tuple (var2), tuple (var2)), - false <-> true -> false < false + (false <-> true) -> false < false diff --git a/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected b/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected index 4570231f04..9d82303618 100644 --- a/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/604b6c20eee4ffd4f5166d275bfb2f99/stdout.expected @@ -2,5 +2,5 @@ language Essence 1.3 find var1: bool such that - (var1 <-> var1 -> false) /\ true, + ((var1 <-> var1) -> false) /\ true, false diff --git a/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected b/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected index 5ef5a51987..47b56a64cd 100644 --- a/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/8c0bcfe9b50c5da384fe5264b05fe32f/stdout.expected @@ -13,6 +13,6 @@ such that toMSet(toSet(toMSet({false}))) != toMSet({var2}) intersect (mset(false) - - mset(true = true <-> false, true, false, true <-> false -> 10 != -1, (false <-> true) /\ (false \/ true), + mset(true = true <-> false, true, false, (true <-> false) -> 10 != -1, (false <-> true) /\ (false \/ true), toInt(false) in mset(-3)) union mset(var4 != var4, var4 = var4, false, {false} != ({} : `set of bool`), var1 in mset(8, -2))) diff --git a/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/stdout.expected b/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/stdout.expected index 3714d62649..19bb7628f8 100644 --- a/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/9766d2cb8dbc532f788d40e27b2a738f/stdout.expected @@ -20,4 +20,5 @@ such that or([l_1 | l_1 : bool, l_1]), max(var2) in party(4 / 2, partition({1, 2, 1, 1, 4}, {2, 1, 5, 5}, {2, 3, 0, 3}, {3, 1})), true, - (false -> true) <-> false <= false -> [true; int(2)] <=lex [false, true, false, true, false; int(11..12, 7, 13, 14)] + ((false -> true) <-> false <= false) -> + [true; int(2)] <=lex [false, true, false, true, false; int(11..12, 7, 13, 14)] diff --git a/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected b/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected index 436dc7dd4d..10d0f0f0ed 100644 --- a/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected +++ b/tests/parse_print/autogen-bilals-fixed/9c56771bea5197295b15462aa78ce28f/stdout.expected @@ -22,7 +22,7 @@ such that relation((9 / -2 + var1, toInt(true) in {0}, true), (toInt(false) + 0 % -5, 3 != 1 /\ 0 != 8, false \/ true -> false != false), (var1, function(true --> false, false --> false) = function(true --> true, false --> true), - false -> false -> (false -> true)))), + (false -> false) -> (false -> true)))), ([partition({3}); int(-3)], -4, relation((var1 in (mset() : `mset of int`), true, toInt(var3)), (true != (false != false), true, toInt(var3)), From 8e9296aea77d8483e5b47c0b471c254d235d4fc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 18 Oct 2023 22:49:36 +0100 Subject: [PATCH 328/378] fiddle with the printing a bit --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6de0aa75dc..7f7dc646b4 100644 --- a/Makefile +++ b/Makefile @@ -40,7 +40,7 @@ install: @bash etc/build/install.sh @etc/build/copy-conjure-branch.sh @cp -r etc/savilerow/* ${BIN_DIR} - @echo - savilerow + @echo "* savilerow" @echo @${BIN_DIR}/conjure --version @${BIN_DIR}/savilerow -help | head -n1 From 67bd173fecf1c53116a255b394278aa0dbca6bc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 18 Oct 2023 22:59:56 +0100 Subject: [PATCH 329/378] Delete etc/savilerow/savilerow.bat --- etc/savilerow/savilerow.bat | 1 - 1 file changed, 1 deletion(-) delete mode 100755 etc/savilerow/savilerow.bat diff --git a/etc/savilerow/savilerow.bat b/etc/savilerow/savilerow.bat deleted file mode 100755 index 173cf784b2..0000000000 --- a/etc/savilerow/savilerow.bat +++ /dev/null @@ -1 +0,0 @@ -java -ea -XX:ParallelGCThreads=1 -jar "%~p0savilerow.jar" -minion-bin "%~p0bin\minion.exe" %* From c878c92b6f45d316fcee08ca571472132308752c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Wed, 18 Oct 2023 23:05:21 +0100 Subject: [PATCH 330/378] Revert "Update SR version to 5f0cb0f19 (2023-10-06 18:53:03 +0100)" This reverts commit 72e6ad1e974554f2b67dd259fd693701d7c0db26. --- etc/savilerow/savilerow.jar | Bin 785800 -> 781092 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index 0dcbf4f79374971785bc4edd79e6e36c0eec83b5..d4e574664c5ad901f1cdcc3e35a5ca1d99130dec 100644 GIT binary patch delta 246020 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

NAN59mw~B@e((ZesJ2%nn_#eLwrJ0 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 delta 249931 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

-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 $#FE*EgDJ9;@ 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 From a5a6171447e1568c035e7aeb8736c070acd9440e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zg=C3=BCr=20Akg=C3=BCn?= Date: Wed, 18 Oct 2023 23:27:18 +0100 Subject: [PATCH 331/378] Update Makefile - just the printing again --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 7f7dc646b4..d568e70562 100644 --- a/Makefile +++ b/Makefile @@ -40,10 +40,12 @@ install: @bash etc/build/install.sh @etc/build/copy-conjure-branch.sh @cp -r etc/savilerow/* ${BIN_DIR} - @echo "* savilerow" + @echo "Copied savilerow to ${BIN_DIR}" @echo @${BIN_DIR}/conjure --version @${BIN_DIR}/savilerow -help | head -n1 + @echo + @echo .PHONY: test test: From e2867d5a9f9b84a997048b7ea9eae8119cdb4b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 19 Oct 2023 00:11:57 +0100 Subject: [PATCH 332/378] Enable ccache in more Github actions --- .github/workflows/build.yml | 5 +++++ .github/workflows/test-coverage.yml | 5 +++++ .github/workflows/test.yml | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e5ca1d192c..d0dd26997c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -49,6 +49,11 @@ jobs: key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ runner.os }} + - name: Setting PATH shell: bash run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH} diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index d29951b80c..09f271b444 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -41,6 +41,11 @@ jobs: key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ runner.os }} + - name: Setting PATH shell: bash run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 30a2893a1f..5961b9bb51 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,6 +50,11 @@ jobs: key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ runner.os }} + - name: Setting PATH shell: bash run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH} From 8166daebf47266c4639b42f735aacab247d46af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 20 Oct 2023 21:52:14 +0100 Subject: [PATCH 333/378] Adding the "bits" in the documentation to sphinx --- .gitignore | 1 + docs/bits.rst | 25 +++++++++++++++++++++++++ docs/bits/attribute/L_regular.md | 4 +++- docs/bits/function/allDiff.md | 3 ++- docs/bits/function/and.md | 2 ++ docs/bits/function/max.md | 3 ++- docs/bits/function/min.md | 3 ++- docs/bits/keyword/expr_projection.md | 3 ++- docs/bits/keyword/find.md | 2 +- docs/bits/keyword/new_type_enum.md | 3 ++- docs/bits/operator/L_Div.md | 1 + docs/bits/operator/L_Mod.md | 3 ++- docs/bits/operator/L_in.md | 3 ++- docs/build.sh | 8 ++++++-- docs/conf.py | 8 ++++---- docs/contact.rst | 2 +- docs/index.rst | 1 + docs/requirements.txt | 8 +++++--- 18 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 docs/bits.rst diff --git a/.gitignore b/.gitignore index 27f214a864..bb46664dbb 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ docs/_build docs/BNFLexer.pyc docs/EssenceLexer.pyc docs/__pycache__ +docs/myenv # to be used during development conjure-output diff --git a/docs/bits.rst b/docs/bits.rst new file mode 100644 index 0000000000..5e42e1151f --- /dev/null +++ b/docs/bits.rst @@ -0,0 +1,25 @@ + +.. _bits: + +Bits +==== + +These *bits* of documentation are used in the Visual Studio Code extension for Conjure. +Search for `conjure-vs-code` inside VS Code to install this extension. +The extension is open source as well, and it is hosted at https://github.com/conjure-cp/conjure-vs-code. + +We include them here for reference and convenience, but this part of the documentation is intended to be useful primarily through the VS Code extension. + +.. toctree:: + + bits/attribute/L_regular.md + bits/function/min.md + bits/function/and.md + bits/function/max.md + bits/function/allDiff.md + bits/keyword/find.md + bits/keyword/expr_projection.md + bits/keyword/new_type_enum.md + bits/operator/L_Div.md + bits/operator/L_in.md + bits/operator/L_Mod.md diff --git a/docs/bits/attribute/L_regular.md b/docs/bits/attribute/L_regular.md index 9787a27c15..52ce18732d 100644 --- a/docs/bits/attribute/L_regular.md +++ b/docs/bits/attribute/L_regular.md @@ -1,3 +1,5 @@ -## `regular` : partition attribute +# regular + Regular is an attribute for partitions that takes no arguments. + It enforces that the sizes of the parts are equal. diff --git a/docs/bits/function/allDiff.md b/docs/bits/function/allDiff.md index 69c8b7462c..4070a7ccde 100644 --- a/docs/bits/function/allDiff.md +++ b/docs/bits/function/allDiff.md @@ -1,4 +1,5 @@ -# AllDifferent +# allDiff + ```essence allDiff(_) ``` diff --git a/docs/bits/function/and.md b/docs/bits/function/and.md index ce24e6e042..854cdb13c3 100644 --- a/docs/bits/function/and.md +++ b/docs/bits/function/and.md @@ -1,3 +1,5 @@ +# and + Conjunction (logical and) operator. Can be applied on a list of Booleans and produces a single Boolean as the result. diff --git a/docs/bits/function/max.md b/docs/bits/function/max.md index a540247866..ac53d84496 100644 --- a/docs/bits/function/max.md +++ b/docs/bits/function/max.md @@ -1,4 +1,5 @@ -# Max +# max + ```essence max(expr) $or max(`domain`) diff --git a/docs/bits/function/min.md b/docs/bits/function/min.md index 5639d2e359..5ba503ca5a 100644 --- a/docs/bits/function/min.md +++ b/docs/bits/function/min.md @@ -1,4 +1,5 @@ -# Min +# min + ```essence min(expr) $or min(`domain`) diff --git a/docs/bits/keyword/expr_projection.md b/docs/bits/keyword/expr_projection.md index 989b511aee..12e3c1b652 100644 --- a/docs/bits/keyword/expr_projection.md +++ b/docs/bits/keyword/expr_projection.md @@ -1,4 +1,5 @@ -## Expression Projection `<-` +# Expression Projection `<-` + The expression projection syntax is used in comprehensions to create a generator from a container data type. The left side can either be a single variable which will have the type of a member of the expression or an abstract pattern used to destructure the member type. diff --git a/docs/bits/keyword/find.md b/docs/bits/keyword/find.md index de873262b9..1f2538b63e 100644 --- a/docs/bits/keyword/find.md +++ b/docs/bits/keyword/find.md @@ -1,3 +1,3 @@ -## Find +# Find The `find` keyword is used to declare decision variables. diff --git a/docs/bits/keyword/new_type_enum.md b/docs/bits/keyword/new_type_enum.md index 0d0d513a81..5b92908c5a 100644 --- a/docs/bits/keyword/new_type_enum.md +++ b/docs/bits/keyword/new_type_enum.md @@ -1,4 +1,5 @@ -## Enum Domains +# Enumerated Domains + Enumerated types can be declared in two ways: using a given-enum syntax or using a letting-enum syntax. The given-enum syntax defers the specification of actual values of the enumerated type until instantiation. With this syntax, an enumerated type can be declared by only giving its name in the problem specification file. In a parameter file, values for the actual members of this type can be given. This allows Conjure to produce a model independent of the values of the enumerated type and only substitute the actual values during parameter instantiation. diff --git a/docs/bits/operator/L_Div.md b/docs/bits/operator/L_Div.md index 1a6e4e2c6e..6a64d4ed8a 100644 --- a/docs/bits/operator/L_Div.md +++ b/docs/bits/operator/L_Div.md @@ -1,3 +1,4 @@ +# / - integer division This is the integer division operator. diff --git a/docs/bits/operator/L_Mod.md b/docs/bits/operator/L_Mod.md index 09b2ee3023..128d3848ab 100644 --- a/docs/bits/operator/L_Mod.md +++ b/docs/bits/operator/L_Mod.md @@ -1,4 +1,5 @@ -**Mod operator** +# % - modulo + ``` % ``` diff --git a/docs/bits/operator/L_in.md b/docs/bits/operator/L_in.md index 836aab6e2b..d90dda5505 100644 --- a/docs/bits/operator/L_in.md +++ b/docs/bits/operator/L_in.md @@ -1,4 +1,5 @@ -## Operator in +# in - membership check + ```essence in ``` diff --git a/docs/build.sh b/docs/build.sh index 8d83542b96..d96420f010 100644 --- a/docs/build.sh +++ b/docs/build.sh @@ -1,2 +1,6 @@ -python3 -m pip install -r requirements.txt -python3 -m sphinx . _build +rm -rf myenv +python3 -m venv myenv +source myenv/bin/activate +pip install -r requirements.txt +make html +deactivate diff --git a/docs/conf.py b/docs/conf.py index d75181935f..6fb08c9f23 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -34,7 +34,8 @@ 'sphinx.ext.todo', 'sphinxcontrib.bibtex', 'sphinxcontrib.jquery', - 'nbsphinx' + 'nbsphinx', + 'sphinx_mdinclude' ] bibtex_bibfiles = ['refs.bib'] @@ -43,8 +44,7 @@ # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' +source_suffix = ['.rst', '.md'] # The encoding of source files. #source_encoding = 'utf-8-sig' @@ -92,7 +92,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. -exclude_patterns = ['_build'] +exclude_patterns = ['_build', 'myenv'] # The reST default role (used for this markup: `text`) to use for all # documents. diff --git a/docs/contact.rst b/docs/contact.rst index 8ddb863d38..70710de51b 100644 --- a/docs/contact.rst +++ b/docs/contact.rst @@ -4,7 +4,7 @@ Contact ======= -Conjure's main developer is `Özgür Akgün `_. +Conjure's main developer is `Özgür Akgün `_. Please get in touch via `email `_ if you have comments, suggestions, or if you encounter any problems. You can also use the `issue tracker `_ to report bugs. diff --git a/docs/index.rst b/docs/index.rst index 701ab0799d..43636f2685 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,6 +17,7 @@ Conjure: The Automated Constraint Modelling Tool essence tutorials tutorials-notebook + bits zreferences contact diff --git a/docs/requirements.txt b/docs/requirements.txt index 56d028ff4c..81afc3ab99 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,5 +1,7 @@ +nbsphinx==0.9.3 +sphinx-mdinclude==0.5.3 +sphinx==7.2.6 +sphinx_rtd_theme==1.3.0 sphinxcontrib-bibtex==2.5.0 sphinxcontrib-inlinesyntaxhighlight==0.2 -sphinx_rtd_theme==1.2.0 -sphinx==6.1.3 -nbsphinx==0.9.1 \ No newline at end of file +sphinxcontrib-jquery==4.1 From e0aeb58a9df5ead6f7a28e8521eac978c9be5b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 20 Oct 2023 21:57:27 +0100 Subject: [PATCH 334/378] consistent titles --- docs/bits/keyword/expr_projection.md | 2 +- docs/bits/keyword/find.md | 2 +- docs/bits/keyword/new_type_enum.md | 2 +- docs/bits/operator/L_Div.md | 2 +- docs/bits/operator/L_Mod.md | 2 +- docs/bits/operator/L_in.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/bits/keyword/expr_projection.md b/docs/bits/keyword/expr_projection.md index 12e3c1b652..026cf47748 100644 --- a/docs/bits/keyword/expr_projection.md +++ b/docs/bits/keyword/expr_projection.md @@ -1,4 +1,4 @@ -# Expression Projection `<-` +# <- (expression projection) The expression projection syntax is used in comprehensions to create a generator from a container data type. The left side can either be a single variable which diff --git a/docs/bits/keyword/find.md b/docs/bits/keyword/find.md index 1f2538b63e..1411dd2bb8 100644 --- a/docs/bits/keyword/find.md +++ b/docs/bits/keyword/find.md @@ -1,3 +1,3 @@ -# Find +# find The `find` keyword is used to declare decision variables. diff --git a/docs/bits/keyword/new_type_enum.md b/docs/bits/keyword/new_type_enum.md index 5b92908c5a..da63f6a4a3 100644 --- a/docs/bits/keyword/new_type_enum.md +++ b/docs/bits/keyword/new_type_enum.md @@ -1,4 +1,4 @@ -# Enumerated Domains +# new type enum Enumerated types can be declared in two ways: using a given-enum syntax or using a letting-enum syntax. diff --git a/docs/bits/operator/L_Div.md b/docs/bits/operator/L_Div.md index 6a64d4ed8a..069f8c92d5 100644 --- a/docs/bits/operator/L_Div.md +++ b/docs/bits/operator/L_Div.md @@ -1,4 +1,4 @@ -# / - integer division +# / (integer division) This is the integer division operator. diff --git a/docs/bits/operator/L_Mod.md b/docs/bits/operator/L_Mod.md index 128d3848ab..2e4c386edc 100644 --- a/docs/bits/operator/L_Mod.md +++ b/docs/bits/operator/L_Mod.md @@ -1,4 +1,4 @@ -# % - modulo +# % (modulo) ``` % diff --git a/docs/bits/operator/L_in.md b/docs/bits/operator/L_in.md index d90dda5505..13455c57ed 100644 --- a/docs/bits/operator/L_in.md +++ b/docs/bits/operator/L_in.md @@ -1,4 +1,4 @@ -# in - membership check +# in (membership check) ```essence in From c976b2182af54469142610134ca1f036469aef6e Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 24 Oct 2023 17:28:15 +0100 Subject: [PATCH 335/378] made adjustments --- docs/bits/attribute/L_bijective.md | 6 +++--- docs/bits/attribute/L_injective.md | 4 ++-- docs/bits/attribute/L_maxSize.md | 4 ++-- docs/bits/attribute/L_minSize.md | 4 ++-- docs/bits/attribute/L_size.md | 4 ++-- docs/bits/attribute/L_surjective.md | 4 ++-- docs/bits/type/function.md | 26 +++++++++++++++----------- docs/notebooks/magicHexagon.ipynb | 2 +- 8 files changed, 29 insertions(+), 25 deletions(-) diff --git a/docs/bits/attribute/L_bijective.md b/docs/bits/attribute/L_bijective.md index e61ae2d73d..3f05399ca9 100644 --- a/docs/bits/attribute/L_bijective.md +++ b/docs/bits/attribute/L_bijective.md @@ -1,7 +1,7 @@ -**bijective attribute** +# bijective -When used with a function domain will restrict solutions to functions that are both [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md) and [surjective.](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md) +When used with a function domain will restrict solutions to functions that are both [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md) and [surjective](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md). This means that every element of the defined set has a unique mapping to a range element and every range element has a defined element that maps to it. -See it demonstrated [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/attribute/L_injective.md b/docs/bits/attribute/L_injective.md index beca024294..5249b9431a 100644 --- a/docs/bits/attribute/L_injective.md +++ b/docs/bits/attribute/L_injective.md @@ -1,5 +1,5 @@ -**injective attribute** +# injective When used with a function domain will restrict solutions to functions where elements of the defined map uniquely to elements of the range. -See it demonstrated [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/attribute/L_maxSize.md b/docs/bits/attribute/L_maxSize.md index 828d7ca6c2..5d51fdc4d5 100644 --- a/docs/bits/attribute/L_maxSize.md +++ b/docs/bits/attribute/L_maxSize.md @@ -1,7 +1,7 @@ -**maxSize attribute** +# maxSize Takes an integer parameter, n. When used with a function domain will limit the solutions to functions that contains at most n mappings. -See it demonstrated [here.] (https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/attribute/L_minSize.md b/docs/bits/attribute/L_minSize.md index 3447927f6a..4f1078698b 100644 --- a/docs/bits/attribute/L_minSize.md +++ b/docs/bits/attribute/L_minSize.md @@ -1,7 +1,7 @@ -**minSize attribute** +# minSize Takes an integer parameter, n. When used with a function domain will limit the solutions to functions that contains at least n mappings. -See it demonstrated [here.] (https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/attribute/L_size.md b/docs/bits/attribute/L_size.md index eab6785027..6d1d15229e 100644 --- a/docs/bits/attribute/L_size.md +++ b/docs/bits/attribute/L_size.md @@ -1,7 +1,7 @@ -**size attribute** +# size attribute Takes an integer parameter, n. When used with a function domain will limit the solutions to functions that contain n mappings. -See it demonstrated [here.] (https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/attribute/L_surjective.md b/docs/bits/attribute/L_surjective.md index 54a82ae074..080e0b5241 100644 --- a/docs/bits/attribute/L_surjective.md +++ b/docs/bits/attribute/L_surjective.md @@ -1,5 +1,5 @@ -**surjective attribute** +# surjective attribute When used with a function domain will restrict solutions to functions where there is a mapping to every element in the range. -See it demonstrated [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md index d4fb7a3f2c..75d6fece03 100644 --- a/docs/bits/type/function.md +++ b/docs/bits/type/function.md @@ -1,25 +1,29 @@ -**Function Domains** +# function -Takes 2 ```domains```(this page yet to be written) as arguments: the ```defined``` set and the ```range``` set of the function. -The ```defined```set is the domain of the function - the set of inputs for the function +Takes 2 [domains](https://conjure.readthedocs.io/en/latest/essence.html#domains) as arguments: the ```defined``` set and the ```range``` set of the function. +The ```defined``` set is the domain of the function - the set of inputs for the function the ```range``` set is the codomain of the function - the set of possible outputs for the function ```essence **function** < comma separated attributes(optional)> --> ``` -There are 3 groups of function attributes - ~ related to cardinality = ```size```, ```minSize```, and ```maxSize```. They take arguments - ~ related to function properties = ```injective```, ```surjective```, ```bijective``` - ~ related to partiality = ```total``` + +There are 3 groups of function attributes: + +- related to cardinality = [size](https://github/conjure-cp/conjure/docs/bits/attribute/L_size.md), [minSize](https://github/conjure-cp/conjure/docs/bits/attribute/L_minSize.md), and [maxSize](https://github/conjure-cp/conjure/docs/bits/attribute/L_maxSize.md). They take arguments. + +- related to function properties = [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md), [surjective](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md), [bijective](https://github/conjure-cp/conjure/docs/bits/attribute/L_size.md). + +- related to partiality = ```total```. Functions are partial by default - You can also explicity define a function as seen [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) + You can also explicity define a function as seen [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). - See demonstrations of the function attributes [here.](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb) + See demonstrations of the function attributes [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). - Or see functions used to solve the Magic Hexagon Problem [here.](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/magicHexagon.ipynb) + Or see functions used to solve the Magic Hexagon Problem [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/magicHexagon.ipynb). - Much of the informatin about functions lifted from [the readthedocs.](https://conjure.readthedocs.io/en/latest/essence.html) + Much of the information about functions lifted from [the readthedocs](https://conjure.readthedocs.io/en/latest/essence.html). diff --git a/docs/notebooks/magicHexagon.ipynb b/docs/notebooks/magicHexagon.ipynb index 5932c714d0..8cd558f045 100644 --- a/docs/notebooks/magicHexagon.ipynb +++ b/docs/notebooks/magicHexagon.ipynb @@ -23,7 +23,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { From 647a47b5c08aecb8174303d29e453877fdb0db46 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 24 Oct 2023 17:34:47 +0100 Subject: [PATCH 336/378] added L_total.md --- docs/bits/attribute/L_total.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/bits/attribute/L_total.md diff --git a/docs/bits/attribute/L_total.md b/docs/bits/attribute/L_total.md new file mode 100644 index 0000000000..583c0fef2b --- /dev/null +++ b/docs/bits/attribute/L_total.md @@ -0,0 +1,5 @@ +# total + +When used with a function domain will only return solutions that have mappings for every element in the defined set. + +See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file From 8b22ea97152f086bf48f7bb2f6feb7f76e12faa6 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Tue, 24 Oct 2023 17:39:50 +0100 Subject: [PATCH 337/378] add total link to function.md --- docs/bits/type/function.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md index 75d6fece03..b6032c63bc 100644 --- a/docs/bits/type/function.md +++ b/docs/bits/type/function.md @@ -14,7 +14,7 @@ There are 3 groups of function attributes: - related to function properties = [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md), [surjective](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md), [bijective](https://github/conjure-cp/conjure/docs/bits/attribute/L_size.md). -- related to partiality = ```total```. +- related to partiality = [total](https://github/conjure-cp/conjure/docs/bits/attribute/L_total.md). Functions are partial by default From 930f49aa05d2d369474aa9e59e26153247a667a1 Mon Sep 17 00:00:00 2001 From: Nadine Martin Date: Wed, 25 Oct 2023 14:40:44 +0100 Subject: [PATCH 338/378] fixed title again --- docs/bits/attribute/L_size.md | 2 +- docs/bits/attribute/L_surjective.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/bits/attribute/L_size.md b/docs/bits/attribute/L_size.md index 6d1d15229e..403ef73179 100644 --- a/docs/bits/attribute/L_size.md +++ b/docs/bits/attribute/L_size.md @@ -1,4 +1,4 @@ -# size attribute +# size Takes an integer parameter, n. diff --git a/docs/bits/attribute/L_surjective.md b/docs/bits/attribute/L_surjective.md index 080e0b5241..d4139da4ba 100644 --- a/docs/bits/attribute/L_surjective.md +++ b/docs/bits/attribute/L_surjective.md @@ -1,4 +1,4 @@ -# surjective attribute +# surjective When used with a function domain will restrict solutions to functions where there is a mapping to every element in the range. From 703a14ecde172661332c852e881f888968bde388 Mon Sep 17 00:00:00 2001 From: Han Zheng <117105566+hz66-404@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:12:44 +0100 Subject: [PATCH 339/378] add L_bool demonstration --- docs/notebooks/L_bool.ipynb | 326 ++++++++++++++++++++++++++++++++++++ 1 file changed, 326 insertions(+) create mode 100644 docs/notebooks/L_bool.ipynb diff --git a/docs/notebooks/L_bool.ipynb b/docs/notebooks/L_bool.ipynb new file mode 100644 index 0000000000..1aff2e6563 --- /dev/null +++ b/docs/notebooks/L_bool.ipynb @@ -0,0 +1,326 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 139 + }, + "id": "Py-frzW3oLJw", + "outputId": "db8b61d4-f897-4ea6-a1d2-ab62aa1092b1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%reload_ext conjure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "RSxMkx9_tOix", + "outputId": "9a95bb3f-2ac6-47f5-ae94-9ee614e723ec" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": false}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = false" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "BEB2ZC8sujJU", + "outputId": "93fb4d84-efc2-432a-e2da-acbb01040cf6" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": true}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = true" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "6iItGzVrumKb", + "outputId": "d5b60f4a-0e49-4b97-f47e-dd2e868407b3" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": true}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (false \\/ true)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "35PgkEuPIyIL" + }, + "source": [ + " \\/ means \"or\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "qtFUXvzdu1Hu", + "outputId": "fe004e53-855f-4fdd-df09-43717954febd" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": false}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (false \\/ false)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "2Aq9ZpwSvj3F", + "outputId": "842b442f-da54-4337-d051-d102c918e59a" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": true}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (1 in {0,1})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x0_fNS5CJUu9" + }, + "source": [ + "1 is in the set" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "RaW_xxVpvp6G", + "outputId": "f49b8bb9-5cf4-468f-ac39-38274e01c934" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": true}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (0 in {0,1})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BiCBzudlJnEz" + }, + "source": [ + "0 is in the set" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "CBcPR6s2vnZb", + "outputId": "0c99c2e3-cfd4-40a9-dd1b-dfc726ed5930" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"a\": false}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (2 in {0,1})" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "szZ6Vy75JwYX" + }, + "source": [ + "2 is not in the set" + ] + } + ], + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} From f47f9eade0112f49a683f7509dfd71448dedc5e1 Mon Sep 17 00:00:00 2001 From: Han Zheng <117105566+hz66-404@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:33:50 +0100 Subject: [PATCH 340/378] Update L_bool.ipynb try to add badge --- docs/notebooks/L_bool.ipynb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/notebooks/L_bool.ipynb b/docs/notebooks/L_bool.ipynb index 1aff2e6563..597e3b9802 100644 --- a/docs/notebooks/L_bool.ipynb +++ b/docs/notebooks/L_bool.ipynb @@ -1,5 +1,16 @@ { + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, { "cell_type": "code", "execution_count": null, From 5e97386359ea4540f799a5a8ab326a13c2e27d4a Mon Sep 17 00:00:00 2001 From: Han Zheng <117105566+hz66-404@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:36:19 +0100 Subject: [PATCH 341/378] Update L_bool.ipynb to add title --- docs/notebooks/L_bool.ipynb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/notebooks/L_bool.ipynb b/docs/notebooks/L_bool.ipynb index 597e3b9802..c59feae944 100644 --- a/docs/notebooks/L_bool.ipynb +++ b/docs/notebooks/L_bool.ipynb @@ -11,6 +11,15 @@ "\"Open" ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "yJb1FZ0maDVX" + }, + "source": [ + "# Boolean Domains Demonstrations" + ] + }, { "cell_type": "code", "execution_count": null, From 8fec2119ddf10492f5834a46a33f164284c4b96e Mon Sep 17 00:00:00 2001 From: Han Zheng <117105566+hz66-404@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:51:17 +0100 Subject: [PATCH 342/378] Create L_bool.md --- docs/bits/type/L_bool.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/bits/type/L_bool.md diff --git a/docs/bits/type/L_bool.md b/docs/bits/type/L_bool.md new file mode 100644 index 0000000000..a044c2048a --- /dev/null +++ b/docs/bits/type/L_bool.md @@ -0,0 +1,10 @@ +# bool + +The Boolean domain is denoted with the keyword `bool` and has two values: `false` and `true`. + +```essence +find a : bool such that a = (1 in {0,1}) +``` +This syntax is checking if 1 is in the set {0,1} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/L_bool.ipynb). From 6540737b2af993b6ccd6344c128b93a0b9bd1798 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:33:32 +0000 Subject: [PATCH 343/378] fixed colab link L_bool.ipynb --- docs/notebooks/L_bool.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks/L_bool.ipynb b/docs/notebooks/L_bool.ipynb index c59feae944..a672b94026 100644 --- a/docs/notebooks/L_bool.ipynb +++ b/docs/notebooks/L_bool.ipynb @@ -8,7 +8,7 @@ "id": "view-in-github" }, "source": [ - "\"Open" + "\"Open" ] }, { From 784e75af2d1c155869d370311d52df4cb814bbe0 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:35:29 +0000 Subject: [PATCH 344/378] fix division_and_mod_demonstration.ipynb links --- docs/notebooks/division_and_mod_demonstration.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks/division_and_mod_demonstration.ipynb b/docs/notebooks/division_and_mod_demonstration.ipynb index 80bf50117b..c5e3afe0c1 100644 --- a/docs/notebooks/division_and_mod_demonstration.ipynb +++ b/docs/notebooks/division_and_mod_demonstration.ipynb @@ -22,7 +22,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { From 1618651af075030a41cfc2b92ceac12de1f3009b Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:43:56 +0000 Subject: [PATCH 345/378] fix division_n_fractions.ipynb link --- docs/notebooks/division_n_fractions.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks/division_n_fractions.ipynb b/docs/notebooks/division_n_fractions.ipynb index f8ee993507..7d9417dec4 100644 --- a/docs/notebooks/division_n_fractions.ipynb +++ b/docs/notebooks/division_n_fractions.ipynb @@ -23,7 +23,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { From fa911fc4a75714346eb6bf5af55c65d77b6cf5a5 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:44:39 +0000 Subject: [PATCH 346/378] fix functionDemonstration.ipynb --- docs/notebooks/functionDemonstration.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks/functionDemonstration.ipynb b/docs/notebooks/functionDemonstration.ipynb index bfda4bc58b..e0aadfbb7e 100644 --- a/docs/notebooks/functionDemonstration.ipynb +++ b/docs/notebooks/functionDemonstration.ipynb @@ -7,7 +7,7 @@ "id": "view-in-github" }, "source": [ - "\"Open" + "\"Open" ] }, { From 5bad8c1a5fcbf8f567f2816573768d2a22eabb3d Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:45:13 +0000 Subject: [PATCH 347/378] fix magicHexagon.ipynb link --- docs/notebooks/magicHexagon.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notebooks/magicHexagon.ipynb b/docs/notebooks/magicHexagon.ipynb index 8cd558f045..3f6c84fa3f 100644 --- a/docs/notebooks/magicHexagon.ipynb +++ b/docs/notebooks/magicHexagon.ipynb @@ -23,7 +23,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -439,4 +439,4 @@ ] } ] -} \ No newline at end of file +} From cb275b2201f284fbe4e9a2646cc862df13c4fb68 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:46:26 +0000 Subject: [PATCH 348/378] fix L_bijective.md links --- docs/bits/attribute/L_bijective.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/bits/attribute/L_bijective.md b/docs/bits/attribute/L_bijective.md index 3f05399ca9..b763e6f2cd 100644 --- a/docs/bits/attribute/L_bijective.md +++ b/docs/bits/attribute/L_bijective.md @@ -1,7 +1,7 @@ # bijective -When used with a function domain will restrict solutions to functions that are both [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md) and [surjective](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md). +When used with a function domain will restrict solutions to functions that are both [injective](https://github/conjure-cp/conjure/blob/main/docs/bits/attribute/L_injective.md) and [surjective](https://github/conjure-cp/conjure/blob/main/docs/bits/attribute/L_surjective.md). This means that every element of the defined set has a unique mapping to a range element and every range element has a defined element that maps to it. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 52a0424b605f6dc7fae217f3f8703906b08ab373 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:48:19 +0000 Subject: [PATCH 349/378] fix L_bijective.md --- docs/bits/attribute/L_bijective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_bijective.md b/docs/bits/attribute/L_bijective.md index b763e6f2cd..0f5faf7158 100644 --- a/docs/bits/attribute/L_bijective.md +++ b/docs/bits/attribute/L_bijective.md @@ -1,6 +1,6 @@ # bijective -When used with a function domain will restrict solutions to functions that are both [injective](https://github/conjure-cp/conjure/blob/main/docs/bits/attribute/L_injective.md) and [surjective](https://github/conjure-cp/conjure/blob/main/docs/bits/attribute/L_surjective.md). +When used with a function domain will restrict solutions to functions that are both [injective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_injective.md) and [surjective](https://github/conjure-cp/conjure/blob/main/docs/bits/attribute/L_surjective.md). This means that every element of the defined set has a unique mapping to a range element and every range element has a defined element that maps to it. From fa4872eb86e60468a9dd253fcc035f813d3dac98 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:49:15 +0000 Subject: [PATCH 350/378] actually fixed L_bijective.md --- docs/bits/attribute/L_bijective.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/bits/attribute/L_bijective.md b/docs/bits/attribute/L_bijective.md index 0f5faf7158..f0c966b3f7 100644 --- a/docs/bits/attribute/L_bijective.md +++ b/docs/bits/attribute/L_bijective.md @@ -1,7 +1,7 @@ # bijective -When used with a function domain will restrict solutions to functions that are both [injective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_injective.md) and [surjective](https://github/conjure-cp/conjure/blob/main/docs/bits/attribute/L_surjective.md). +When used with a function domain will restrict solutions to functions that are both [injective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_injective.md) and [surjective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_surjective.md). This means that every element of the defined set has a unique mapping to a range element and every range element has a defined element that maps to it. -See it demonstrated [here](https://github/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 845bce3a1c51fa7cfc58a2a2612067fde0d6b4ac Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:50:45 +0000 Subject: [PATCH 351/378] fix L_injective.md links --- docs/bits/attribute/L_injective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_injective.md b/docs/bits/attribute/L_injective.md index 5249b9431a..a935c4b01d 100644 --- a/docs/bits/attribute/L_injective.md +++ b/docs/bits/attribute/L_injective.md @@ -2,4 +2,4 @@ When used with a function domain will restrict solutions to functions where elements of the defined map uniquely to elements of the range. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 3bd4ae679795d21eb35192372cb7ee1d941271c3 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:51:24 +0000 Subject: [PATCH 352/378] fix L_maxSize.md links --- docs/bits/attribute/L_maxSize.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_maxSize.md b/docs/bits/attribute/L_maxSize.md index 5d51fdc4d5..97833a4355 100644 --- a/docs/bits/attribute/L_maxSize.md +++ b/docs/bits/attribute/L_maxSize.md @@ -4,4 +4,4 @@ Takes an integer parameter, n. When used with a function domain will limit the solutions to functions that contains at most n mappings. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 332fba166a3958ca6305513f06ff0f8e559ce083 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:52:09 +0000 Subject: [PATCH 353/378] fixed L_minSize.md links --- docs/bits/attribute/L_minSize.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_minSize.md b/docs/bits/attribute/L_minSize.md index 4f1078698b..295b7bb7fb 100644 --- a/docs/bits/attribute/L_minSize.md +++ b/docs/bits/attribute/L_minSize.md @@ -4,4 +4,4 @@ Takes an integer parameter, n. When used with a function domain will limit the solutions to functions that contains at least n mappings. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 69348faeac61261fa0ace7fbd75134ee8e8e7e7d Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:52:49 +0000 Subject: [PATCH 354/378] fix L_size.md --- docs/bits/attribute/L_size.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_size.md b/docs/bits/attribute/L_size.md index 403ef73179..4d45e2a043 100644 --- a/docs/bits/attribute/L_size.md +++ b/docs/bits/attribute/L_size.md @@ -4,4 +4,4 @@ Takes an integer parameter, n. When used with a function domain will limit the solutions to functions that contain n mappings. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 2001a36ddd20c452a4f9e5aed968e326442de4d3 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:53:32 +0000 Subject: [PATCH 355/378] fix L_surjective.md links --- docs/bits/attribute/L_surjective.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_surjective.md b/docs/bits/attribute/L_surjective.md index d4139da4ba..fee6b4d615 100644 --- a/docs/bits/attribute/L_surjective.md +++ b/docs/bits/attribute/L_surjective.md @@ -2,4 +2,4 @@ When used with a function domain will restrict solutions to functions where there is a mapping to every element in the range. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From f9006458135191585810e4598b1a54172d7e816b Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:54:19 +0000 Subject: [PATCH 356/378] fix L_total.md links --- docs/bits/attribute/L_total.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/bits/attribute/L_total.md b/docs/bits/attribute/L_total.md index 583c0fef2b..8a799b8f66 100644 --- a/docs/bits/attribute/L_total.md +++ b/docs/bits/attribute/L_total.md @@ -2,4 +2,4 @@ When used with a function domain will only return solutions that have mappings for every element in the defined set. -See it demonstrated [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). \ No newline at end of file +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). From 92dbd15145e387e49a78e937ed80b6aef11aaa3e Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sun, 29 Oct 2023 16:58:50 +0000 Subject: [PATCH 357/378] fix function.md links --- docs/bits/type/function.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/bits/type/function.md b/docs/bits/type/function.md index b6032c63bc..768a6a738b 100644 --- a/docs/bits/type/function.md +++ b/docs/bits/type/function.md @@ -10,19 +10,19 @@ the ```range``` set is the codomain of the function - the set of possible output There are 3 groups of function attributes: -- related to cardinality = [size](https://github/conjure-cp/conjure/docs/bits/attribute/L_size.md), [minSize](https://github/conjure-cp/conjure/docs/bits/attribute/L_minSize.md), and [maxSize](https://github/conjure-cp/conjure/docs/bits/attribute/L_maxSize.md). They take arguments. +- related to cardinality = [size](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_size.md), [minSize](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_minSize.md), and [maxSize](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_maxSize.md). They take arguments. -- related to function properties = [injective](https://github/conjure-cp/conjure/docs/bits/attribute/L_injective.md), [surjective](https://github/conjure-cp/conjure/docs/bits/attribute/L_surjective.md), [bijective](https://github/conjure-cp/conjure/docs/bits/attribute/L_size.md). +- related to function properties = [injective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_injective.md), [surjective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_surjective.md), [bijective](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_size.md). -- related to partiality = [total](https://github/conjure-cp/conjure/docs/bits/attribute/L_total.md). +- related to partiality = [total](https://github.com/conjure-cp/conjure/blob/main/docs/bits/attribute/L_total.md). Functions are partial by default - You can also explicity define a function as seen [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). + You can also explicity define a function as seen [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). - See demonstrations of the function attributes [here](https://github/conjure-cp/conjure/docs/notebooks/functionDemonstration.ipynb). + See demonstrations of the function attributes [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/functionDemonstration.ipynb). - Or see functions used to solve the Magic Hexagon Problem [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/magicHexagon.ipynb). + Or see functions used to solve the Magic Hexagon Problem [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/magicHexagon.ipynb). Much of the information about functions lifted from [the readthedocs](https://conjure.readthedocs.io/en/latest/essence.html). From 37112e04ad4a97de6ec0c918d571ea8dfcbc00ff Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:24:49 +0000 Subject: [PATCH 358/378] adding docs for operators (#598) * write start of L_Plus.md * Plus and Minus docs and its notebook * wrote doc pages for all the operators. * fix to meet agreed format * Created using Colaboratory * add multiplicationDemonstration.ipynb * add absoluteValues.ipynb * add factorial.ipynb * add toInt_demonstration.ipynb * fixed absoluteValues.ipynb * added notebook links * fixed L_Minus.md typo * improved these notebooks with hz66-404 suggestions * fixed typo --- docs/bits/function/toInt.md | 7 + docs/bits/operator/L_Div.md | 4 +- docs/bits/operator/L_Minus.md | 13 + docs/bits/operator/L_Plus.md | 10 + docs/bits/operator/L_Pow.md | 18 + docs/bits/operator/L_Times.md | 10 + docs/bits/operator/L_abs.md | 14 + docs/bits/operator/post_factorial.md | 11 + docs/notebooks/absoluteValues.ipynb | 213 +++++++++ .../addition_subtraction_examples.ipynb | 220 +++++++++ docs/notebooks/factorial.ipynb | 173 +++++++ .../multiplication_demonstration.ipynb | 127 ++++++ docs/notebooks/powers.ipynb | 421 ++++++++++++++++++ docs/notebooks/toInt_demonstration.ipynb | 382 ++++++++++++++++ 14 files changed, 1621 insertions(+), 2 deletions(-) create mode 100644 docs/bits/function/toInt.md create mode 100644 docs/bits/operator/L_Minus.md create mode 100644 docs/bits/operator/L_Plus.md create mode 100644 docs/bits/operator/L_Pow.md create mode 100644 docs/bits/operator/L_Times.md create mode 100644 docs/bits/operator/L_abs.md create mode 100644 docs/bits/operator/post_factorial.md create mode 100644 docs/notebooks/absoluteValues.ipynb create mode 100644 docs/notebooks/addition_subtraction_examples.ipynb create mode 100644 docs/notebooks/factorial.ipynb create mode 100644 docs/notebooks/multiplication_demonstration.ipynb create mode 100644 docs/notebooks/powers.ipynb create mode 100644 docs/notebooks/toInt_demonstration.ipynb diff --git a/docs/bits/function/toInt.md b/docs/bits/function/toInt.md new file mode 100644 index 0000000000..e453aef190 --- /dev/null +++ b/docs/bits/function/toInt.md @@ -0,0 +1,7 @@ +# toInt + +```boolean --> integer``` +This function converts a boolean value to an integer. +```false``` values map to ```0``` and ```true``` values map to ```1```. + +See how this works [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/toInt_demonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/operator/L_Div.md b/docs/bits/operator/L_Div.md index 069f8c92d5..2803c13472 100644 --- a/docs/bits/operator/L_Div.md +++ b/docs/bits/operator/L_Div.md @@ -9,6 +9,6 @@ This is meant to ensure that for integers x and y, y!=0 ``` holds -See a worked example [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/division_and_mod_demonstration.ipynb) +See a worked example [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/division_and_mod_demonstration.ipynb) -And a slightly more complex example using an instance of the n-fractions puzzle [here](https://github.com/conjure-cp/conjure/tree/main/docs/notebooks/division_n_fractions.ipynb) +And a slightly more complex example using an instance of the n-fractions puzzle [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/division_n_fractions.ipynb) diff --git a/docs/bits/operator/L_Minus.md b/docs/bits/operator/L_Minus.md new file mode 100644 index 0000000000..df7e565876 --- /dev/null +++ b/docs/bits/operator/L_Minus.md @@ -0,0 +1,13 @@ +# - (minus) +The subtraction operator. +It is both a unary and a binary operator. This means that, +``` +a - b +``` +will subtract b from a. As well as negate values such that +``` +-a = (-1) * a +``` + +This can only be performed on integers. +See this in action [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/addition_and_subtraction_examples.ipynb). diff --git a/docs/bits/operator/L_Plus.md b/docs/bits/operator/L_Plus.md new file mode 100644 index 0000000000..3fb95b005b --- /dev/null +++ b/docs/bits/operator/L_Plus.md @@ -0,0 +1,10 @@ +# + (plus) +This is the addition operator. +``` +a + b +``` +will return the sum of ```a```and ```b```. + +This operation can only be performed on integers. + +See this in action [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/addition_and_subtraction_examples.ipynb). \ No newline at end of file diff --git a/docs/bits/operator/L_Pow.md b/docs/bits/operator/L_Pow.md new file mode 100644 index 0000000000..34c4e70104 --- /dev/null +++ b/docs/bits/operator/L_Pow.md @@ -0,0 +1,18 @@ +# ** (power) + +This is the exponent operator. + +``` +a ** b +``` + +will return ```a``````b``` if ```a``` and ```b``` are positive integers. + +Savile Row will flag negative exponents (negative values of ```b```) as errors. However, conjure will not flag this as an error. + +``` x ** y = x * (x ** (y-1))``` holds if ```x``` is an integer and ```y``` is a positive integer. +This ensures that ```x ** 0 = 1``` for all ```x```. + +For more information see [here](https://conjure.readthedocs.io/en/latest/essence.html#arithmetic-operators). + +See this in action [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/powers.ipynb). \ No newline at end of file diff --git a/docs/bits/operator/L_Times.md b/docs/bits/operator/L_Times.md new file mode 100644 index 0000000000..1c4f3f3b2d --- /dev/null +++ b/docs/bits/operator/L_Times.md @@ -0,0 +1,10 @@ +# * (times) +This is the multiplication operator. + +For example, +``` +a * b +``` +will return ```a``` multiplied by ```b```, if ```a``` and ```b``` are integers. + +See this in action [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/multiplication_demonstration.ipynb). \ No newline at end of file diff --git a/docs/bits/operator/L_abs.md b/docs/bits/operator/L_abs.md new file mode 100644 index 0000000000..fa40dd560a --- /dev/null +++ b/docs/bits/operator/L_abs.md @@ -0,0 +1,14 @@ +# |x| (absolute value) + +This is the absolute value operator. It returns the absolute value of ```x```. +This is calculated using +```( 2 * toInt( x >= 0) - 1) * x = |x|``` + +If ```x``` is a positive integer, then [toInt](https://github.com/conjure-cp/conjure/blob/main/docs/bits/function/toInt.md) returns 1, making ```1 * x = |x|```. + +If ```x``` is a non-positive integer, then [toInt](https://github.com/conjure-cp/conjure/blob/main/docs/bits/function/toInt.md) returns 0, making ```-1 * x = |x|```. + +This holds for integers ```x``` such that ```|x| <= 2``````62``````-2```. +Outside of this range, errors may be flagged up by Savile Row or Minion. + +See how this works [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/absoluteValues.ipynb). \ No newline at end of file diff --git a/docs/bits/operator/post_factorial.md b/docs/bits/operator/post_factorial.md new file mode 100644 index 0000000000..b89522b11c --- /dev/null +++ b/docs/bits/operator/post_factorial.md @@ -0,0 +1,11 @@ +# x! (factorial) + +This is the factorial operator. + +```x!``` will return the factorial of x - as in the product of all integers from ```1``` to ```x```. + +When ``` x <= 0 ```, ```x! = 0```. + +It can't be directly used in expressions with decision variables. For more information about this see [here.](https://conjure.readthedocs.io/en/latest/essence.html#arithmetic-operators) + +To see how this works see [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/factorial.ipynb). \ No newline at end of file diff --git a/docs/notebooks/absoluteValues.ipynb b/docs/notebooks/absoluteValues.ipynb new file mode 100644 index 0000000000..b7c62331b2 --- /dev/null +++ b/docs/notebooks/absoluteValues.ipynb @@ -0,0 +1,213 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "c8dzxMmmUdOv" + }, + "source": [ + "## Absolute Value" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 138 + }, + "id": "ymW8a8GxPCWV", + "outputId": "d7fe26e5-e479-4ac6-fccf-efa39690b5e6" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oaLG9qniVBXy" + }, + "source": [ + "You can find the absolute value of an integer x by writing |x|." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "hZ3N7FSRUn8K", + "outputId": "0932d240-fd53-42ae-94d7-0f88575b8d85" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"x\": -5, \"y\": 5}, {\"x\": -4, \"y\": 4}, {\"x\": -3, \"y\": 3}, {\"x\": -2, \"y\": 2}, {\"x\": -1, \"y\": 1}, {\"x\": 0, \"y\": 0}, {\"x\": 1, \"y\": 1}, {\"x\": 2, \"y\": 2}, {\"x\": 3, \"y\": 3}, {\"x\": 4, \"y\": 4}, {\"x\": 5, \"y\": 5}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y: int (-5..5) such that |x| = y" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "afDKvxbnW9DT" + }, + "source": [ + "This works while |x| <= 262 - 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So this works:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "W5TXkLeYXgyE", + "outputId": "bf56da8f-3f31-4187-9d67-8374dc64c02f" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"x\": 4611686018427387902, \"y\": 4611686018427387902}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all --solver=minion\n", + "\n", + "find x, y: int(2**62-2) such that |x| = y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "But this doesn't:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7qxV01yPYV4c", + "outputId": "849237f5-45c2-49cb-d44f-49d0ad33ce7c" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception: Error:\n", + " Savile Row stdout: \n", + " Savile Row stderr: ERROR: Number exceeds 64-bit integer range: 18446744073709551616\n", + "\n", + " Savile Row exit-code: 1\n", + "\n" + ] + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "\n", + "find x, y: int(2**64) such that |x| = y" + ] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyNS0NGUrTvuqDF07X0yUo5V", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/notebooks/addition_subtraction_examples.ipynb b/docs/notebooks/addition_subtraction_examples.ipynb new file mode 100644 index 0000000000..5e7050b830 --- /dev/null +++ b/docs/notebooks/addition_subtraction_examples.ipynb @@ -0,0 +1,220 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Addition and Subtraction" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 138 + }, + "id": "LXXtCG_TAc82", + "outputId": "7bcad187-8e0b-41df-a33b-775268c81aa8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bh5XxFmsIksp" + }, + "source": [ + "The + operator works exactly as you'd expect. Although, this only works for integer domains." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f5KPXa-vgU8p" + }, + "source": [ + "For example, the cell below finds all the pairs of numbers between -10 and 10 that sum to 5" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "Nz4eS1PDfaLm", + "outputId": "48b4ca56-cc2f-4537-a84e-2ebd57532d29" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"x\": -5, \"y\": 10}, {\"x\": -4, \"y\": 9}, {\"x\": -3, \"y\": 8}, {\"x\": -2, \"y\": 7}, {\"x\": -1, \"y\": 6}, {\"x\": 0, \"y\": 5}, {\"x\": 1, \"y\": 4}, {\"x\": 2, \"y\": 3}, {\"x\": 3, \"y\": 2}, {\"x\": 4, \"y\": 1}, {\"x\": 5, \"y\": 0}, {\"x\": 6, \"y\": -1}, {\"x\": 7, \"y\": -2}, {\"x\": 8, \"y\": -3}, {\"x\": 9, \"y\": -4}, {\"x\": 10, \"y\": -5}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y: int(-10..10) such that x + y = 5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5zc4fmBOI5sE" + }, + "source": [ + "Similarly, subtraction works as you would expect for integers." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nUbpKg1IJE2l" + }, + "source": [ + "For example, the cell below finds all the pairs of numbers between -10 and 10 that subtract to 5" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "HBPe3V4wJMEL", + "outputId": "e43a7556-250d-4616-95bc-83c107113cc2" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"x\": -5, \"y\": -10}, {\"x\": -4, \"y\": -9}, {\"x\": -3, \"y\": -8}, {\"x\": -2, \"y\": -7}, {\"x\": -1, \"y\": -6}, {\"x\": 0, \"y\": -5}, {\"x\": 1, \"y\": -4}, {\"x\": 2, \"y\": -3}, {\"x\": 3, \"y\": -2}, {\"x\": 4, \"y\": -1}, {\"x\": 5, \"y\": 0}, {\"x\": 6, \"y\": 1}, {\"x\": 7, \"y\": 2}, {\"x\": 8, \"y\": 3}, {\"x\": 9, \"y\": 4}, {\"x\": 10, \"y\": 5}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y: int(-10..10) such that x - y = 5" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3-bZgsPaOB0l" + }, + "source": [ + "The minus operator can also negate values." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "1cgUQNRVOFJq", + "outputId": "48dd5c96-ed6e-4aad-8425-d2e1dd381047" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"x\": -5, \"y\": 5}, {\"x\": -4, \"y\": 4}, {\"x\": -3, \"y\": 3}, {\"x\": -2, \"y\": 2}, {\"x\": -1, \"y\": 1}, {\"x\": 0, \"y\": 0}, {\"x\": 1, \"y\": -1}, {\"x\": 2, \"y\": -2}, {\"x\": 3, \"y\": -3}, {\"x\": 4, \"y\": -4}, {\"x\": 5, \"y\": -5}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y: int(-5..5) such that x = -y" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/notebooks/factorial.ipynb b/docs/notebooks/factorial.ipynb new file mode 100644 index 0000000000..5655d130d5 --- /dev/null +++ b/docs/notebooks/factorial.ipynb @@ -0,0 +1,173 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6fTWYGk1OgZA" + }, + "source": [ + "# Factorial" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 138 + }, + "id": "ymW8a8GxPCWV", + "outputId": "faff68ed-33c0-477c-d2af-c7879a7920a2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VN7go2LHOiOU" + }, + "source": [ + "You can use ! after an integer, to get the factorial (product of 1..n) of the integer." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8BNfe5RkTTwt" + }, + "source": [ + "However it can't be used directly in decision variables as shown below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "IaqN_CePQ5C8", + "outputId": "69429735-d484-4b7d-8168-98960e50b9a9" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Exception: Error:\n", + " The factorial function does not work on decision expressions.\n", + " Context: factorial(x)\n", + "\n" + ] + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x: int (1..5) such that x! < 200" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FKqGKVnvTfzs" + }, + "source": [ + "but can be used as demonstrated below instead." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "_wPVqB1AOzHy", + "outputId": "e9fcf0c6-f687-46d0-8cab-35293707fe58" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"z\": 1}, {\"z\": 2}, {\"z\": 3}, {\"z\": 4}, {\"z\": 5}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find z : int(-1..13)\n", + "such that (exists x : int(1..5) . (x! < 200) /\\ (z=x))" + ] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyPaxR8SAAQ+jGXpyFZsvZrM", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/notebooks/multiplication_demonstration.ipynb b/docs/notebooks/multiplication_demonstration.ipynb new file mode 100644 index 0000000000..c189ac5a6a --- /dev/null +++ b/docs/notebooks/multiplication_demonstration.ipynb @@ -0,0 +1,127 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FA6wZ_D2GqOX" + }, + "source": [ + "# Multiplication Demonstration" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 138 + }, + "id": "gcoCqIHYHz2x", + "outputId": "e87e0764-dbe6-4ccc-8de3-c8c45f6c1a01" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "data": { + "application/javascript": "\"use strict\";\n\nCodeMirror.defineMode(\"text/conjure\", function (config) {\n\n var isOperatorChar = /[+\\-*=<>%^\\/]/;\n\n var keywords = {\n \"forall\": true,\n \"allDifferent\": true,\n \"allDiff\": true,\n \"alldifferent_except\": true,\n \"dim\": true,\n \"toSet\": true,\n \"toMSet\": true,\n \"toRelation\": true,\n \"maximising\": true,\n \"minimising\": true,\n \"forAll\": true,\n \"exists\": true,\n \"toInt\": true,\n \"sum\": true,\n \"be\": true,\n \"bijective\": true,\n \"bool\": true,\n \"by\": true,\n \"complete\": true,\n \"defined\": true,\n \"domain\": true,\n \"in\": true,\n \"or\": true,\n \"and\": true,\n \"false\": true,\n \"find\": true,\n \"from\": true,\n \"function\": true,\n \"given\": true,\n \"image\": true,\n \"indexed\": true,\n \"injective\": true,\n \"int\": true,\n \"intersect\": true,\n \"freq\": true,\n \"lambda\": true,\n \"language\": true,\n \"letting\": true,\n \"matrix\": true,\n \"maxNumParts\": true,\n \"maxOccur\": true,\n \"maxPartSize\": true,\n \"maxSize\": true,\n \"minNumParts\": true,\n \"minOccur\": true,\n \"minPartSize\": true,\n \"minSize\": true,\n \"mset\": true,\n \"numParts\": true,\n \"of\": true,\n \"partial\": true,\n \"partition\": true,\n \"partSize\": true,\n \"preImage\": true,\n \"quantifier\": true,\n \"range\": true,\n \"regular\": true,\n \"relation\": true,\n \"representation\": true,\n \"set\": true,\n \"size\": true,\n \"subset\": true,\n \"subsetEq\": true,\n \"such\": true,\n \"supset\": true,\n \"supsetEq\": true,\n \"surjective\": true,\n \"that\": true,\n \"together\": true,\n \"enum\": true,\n \"total\": true,\n \"true\": true,\n \"new\": true,\n \"type\": true,\n \"tuple\": true,\n \"union\": true,\n \"where\": true,\n \"branching\": true,\n \"on\": true\n }; \n var punc = \":;,.(){}[]\";\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"') {\n state.tokenize.push(tokenString);\n return tokenString(stream, state);\n }\n if (/[\\d\\.]/.test(ch)) {\n if (ch == \".\") {\n stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n } else if (ch == \"0\") {\n stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n } else {\n stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n }\n return \"number\";\n }\n if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize.push(tokenComment);\n return tokenComment(stream, state);\n }\n }\n if (ch == \"$\") {\n stream.skipToEnd();\n return \"comment\";\n }\n if (isOperatorChar.test(ch)) {\n stream.eatWhile(isOperatorChar);\n return \"operator\";\n }\n if (punc.indexOf(ch) > -1) {\n return \"punctuation\";\n }\n stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n var cur = stream.current();\n \n if (keywords.propertyIsEnumerable(cur)) {\n return \"keyword\";\n }\n return \"variable\";\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize.pop();\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return \"comment\";\n }\n\n function tokenUntilClosingParen() {\n var depth = 0;\n return function (stream, state, prev) {\n var inner = tokenBase(stream, state, prev);\n console.log(\"untilClosing\", inner, stream.current());\n if (inner == \"punctuation\") {\n if (stream.current() == \"(\") {\n ++depth;\n } else if (stream.current() == \")\") {\n if (depth == 0) {\n stream.backUp(1)\n state.tokenize.pop()\n return state.tokenize[state.tokenize.length - 1](stream, state)\n } else {\n --depth;\n }\n }\n }\n return inner;\n }\n }\n\n function tokenString(stream, state) {\n var escaped = false, next, end = false;\n while ((next = stream.next()) != null) {\n if (next == '(' && escaped) {\n state.tokenize.push(tokenUntilClosingParen());\n return \"string\";\n }\n if (next == '\"' && !escaped) { end = true; break; }\n escaped = !escaped && next == \"\\\\\";\n }\n if (end || !escaped)\n state.tokenize.pop();\n return \"string\";\n }\n\n return {\n startState: function (basecolumn) {\n return {\n tokenize: []\n };\n },\n\n token: function (stream, state) {\n if (stream.eatSpace()) return null;\n var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n console.log(\"token\", style);\n return style;\n },\n\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n lineComment: \"$\"\n };\n});\n\n\nCodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n\nrequire(['notebook/js/codecell'], function (codecell) {\n codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n Jupyter.notebook.get_cells().map(function (cell) {\n if (cell.cell_type == 'code') { cell.auto_highlight(); }\n });\n });\n});\n\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6Dsl6SsVICfr" + }, + "source": [ + "You can use ```*``` to multiply two integers as shown below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "IdgCsoYHISqU", + "outputId": "8d2106fc-835f-4f35-d8ce-c593552b5a86" + }, + "outputs": [ + { + "data": { + "text/markdown": [ + "```json\n", + "{\"conjure_solutions\": [{\"x\": -3, \"y\": -3, \"z\": 9}, {\"x\": -3, \"y\": -2, \"z\": 6}, {\"x\": -3, \"y\": -1, \"z\": 3}, {\"x\": -3, \"y\": 0, \"z\": 0}, {\"x\": -3, \"y\": 1, \"z\": -3}, {\"x\": -3, \"y\": 2, \"z\": -6}, {\"x\": -3, \"y\": 3, \"z\": -9}, {\"x\": -2, \"y\": -3, \"z\": 6}, {\"x\": -2, \"y\": -2, \"z\": 4}, {\"x\": -2, \"y\": -1, \"z\": 2}, {\"x\": -2, \"y\": 0, \"z\": 0}, {\"x\": -2, \"y\": 1, \"z\": -2}, {\"x\": -2, \"y\": 2, \"z\": -4}, {\"x\": -2, \"y\": 3, \"z\": -6}, {\"x\": -1, \"y\": -3, \"z\": 3}, {\"x\": -1, \"y\": -2, \"z\": 2}, {\"x\": -1, \"y\": -1, \"z\": 1}, {\"x\": -1, \"y\": 0, \"z\": 0}, {\"x\": -1, \"y\": 1, \"z\": -1}, {\"x\": -1, \"y\": 2, \"z\": -2}, {\"x\": -1, \"y\": 3, \"z\": -3}, {\"x\": 0, \"y\": -3, \"z\": 0}, {\"x\": 0, \"y\": -2, \"z\": 0}, {\"x\": 0, \"y\": -1, \"z\": 0}, {\"x\": 0, \"y\": 0, \"z\": 0}, {\"x\": 0, \"y\": 1, \"z\": 0}, {\"x\": 0, \"y\": 2, \"z\": 0}, {\"x\": 0, \"y\": 3, \"z\": 0}, {\"x\": 1, \"y\": -3, \"z\": -3}, {\"x\": 1, \"y\": -2, \"z\": -2}, {\"x\": 1, \"y\": -1, \"z\": -1}, {\"x\": 1, \"y\": 0, \"z\": 0}, {\"x\": 1, \"y\": 1, \"z\": 1}, {\"x\": 1, \"y\": 2, \"z\": 2}, {\"x\": 1, \"y\": 3, \"z\": 3}, {\"x\": 2, \"y\": -3, \"z\": -6}, {\"x\": 2, \"y\": -2, \"z\": -4}, {\"x\": 2, \"y\": -1, \"z\": -2}, {\"x\": 2, \"y\": 0, \"z\": 0}, {\"x\": 2, \"y\": 1, \"z\": 2}, {\"x\": 2, \"y\": 2, \"z\": 4}, {\"x\": 2, \"y\": 3, \"z\": 6}, {\"x\": 3, \"y\": -3, \"z\": -9}, {\"x\": 3, \"y\": -2, \"z\": -6}, {\"x\": 3, \"y\": -1, \"z\": -3}, {\"x\": 3, \"y\": 0, \"z\": 0}, {\"x\": 3, \"y\": 1, \"z\": 3}, {\"x\": 3, \"y\": 2, \"z\": 6}, {\"x\": 3, \"y\": 3, \"z\": 9}]}\n", + "```" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x, y: int(-3..3), z: int(-10..10) such that x * y = z" + ] + } + ], + "metadata": { + "colab": { + "authorship_tag": "ABX9TyPb1SULixds5ENbt7fLeUMa", + "include_colab_link": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/notebooks/powers.ipynb b/docs/notebooks/powers.ipynb new file mode 100644 index 0000000000..639bad28d9 --- /dev/null +++ b/docs/notebooks/powers.ipynb @@ -0,0 +1,421 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyO8WaLBQ6BK1qNmK4R2j3Kc", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Powers" + ], + "metadata": { + "id": "MR7BihK0soKd" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 138 + }, + "id": "ymW8a8GxPCWV", + "outputId": "a15da3fa-626c-40b8-cdf4-2ec30226fef3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Use ```a ** b``` to write ab for positive integers a and b as below" + ], + "metadata": { + "id": "jgBf3Q9Nstzj" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x: int(-3..3), y: int(0..3), z: int(-10..10) such that x ** y = z" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 54 + }, + "id": "YnLNb6sDtDjE", + "outputId": "9b113963-afd4-4d51-cb61-f300974fa5d7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"x\": -3, \"y\": 0, \"z\": 1}, {\"x\": -3, \"y\": 1, \"z\": -3}, {\"x\": -3, \"y\": 2, \"z\": 9}, {\"x\": -2, \"y\": 0, \"z\": 1}, {\"x\": -2, \"y\": 1, \"z\": -2}, {\"x\": -2, \"y\": 2, \"z\": 4}, {\"x\": -2, \"y\": 3, \"z\": -8}, {\"x\": -1, \"y\": 0, \"z\": 1}, {\"x\": -1, \"y\": 1, \"z\": -1}, {\"x\": -1, \"y\": 2, \"z\": 1}, {\"x\": -1, \"y\": 3, \"z\": -1}, {\"x\": 0, \"y\": 1, \"z\": 0}, {\"x\": 0, \"y\": 2, \"z\": 0}, {\"x\": 0, \"y\": 3, \"z\": 0}, {\"x\": 1, \"y\": 0, \"z\": 1}, {\"x\": 1, \"y\": 1, \"z\": 1}, {\"x\": 1, \"y\": 2, \"z\": 1}, {\"x\": 1, \"y\": 3, \"z\": 1}, {\"x\": 2, \"y\": 0, \"z\": 1}, {\"x\": 2, \"y\": 1, \"z\": 2}, {\"x\": 2, \"y\": 2, \"z\": 4}, {\"x\": 2, \"y\": 3, \"z\": 8}, {\"x\": 3, \"y\": 0, \"z\": 1}, {\"x\": 3, \"y\": 1, \"z\": 3}, {\"x\": 3, \"y\": 2, \"z\": 9}]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Savile Row does not accept negative exponents (```b```) values. Therefore any negative exponents won't produce a solution. As the error is only flagged by Savile Row, not conjure This is demonstrated below" + ], + "metadata": { + "id": "GpZ9KY3UujHh" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x: int(-3..3), y: int(-3..-1), z: int(-10..10) such that x ** y = z" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 64 + }, + "id": "wsDg_IuruuqP", + "outputId": "e69c4726-1555-4852-9880-b01e4530e55d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "No solution" + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": []}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "```x**0 = 1``` for all x. (shown below)\n", + "\n" + ], + "metadata": { + "id": "iItdHaaZt9hu" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all\n", + "find x: int(-3..3), y: int(-10..10) such that x ** 0 = y" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "xaWHSdjouFFy", + "outputId": "9e90f0e3-d42f-420c-9531-17002663c1e0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"conjure_solutions\": [{\"x\": -3, \"y\": 1}, {\"x\": -2, \"y\": 1}, {\"x\": -1, \"y\": 1}, {\"x\": 1, \"y\": 1}, {\"x\": 2, \"y\": 1}, {\"x\": 3, \"y\": 1}]}\n```" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/notebooks/toInt_demonstration.ipynb b/docs/notebooks/toInt_demonstration.ipynb new file mode 100644 index 0000000000..dcb6ab34d2 --- /dev/null +++ b/docs/notebooks/toInt_demonstration.ipynb @@ -0,0 +1,382 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "authorship_tag": "ABX9TyMr7uQsTcEDq99QLmPeHEQY", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## toInt" + ], + "metadata": { + "id": "sbzhbXQbhFeA" + } + }, + { + "cell_type": "code", + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%load_ext conjure" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 138 + }, + "id": "DJGTAwg2hRPK", + "outputId": "8f405db8-ad07-4d4c-f035-55507c906d4d" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "The ```toInt``` function converts boolean values to integer values." + ], + "metadata": { + "id": "SZWLfrTnhRiF" + } + }, + { + "cell_type": "markdown", + "source": [ + "false -> 0" + ], + "metadata": { + "id": "w-jjggWAhcb1" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=minion\n", + "find x: int (-3..3) such that x = toInt(false)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "qkhyF2VuhfuV", + "outputId": "89ce363d-88ab-4271-9e20-76a2aa310659" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"x\": 0}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "true -> 1" + ], + "metadata": { + "id": "TbFG9bPchwkQ" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=minion\n", + "find x: int (-3..3) such that x = toInt(true)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "6901b490-feed-445d-d61e-b4366fbc3cce", + "id": "J3s8Jb_KiObM" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"x\": 1}\n```" + }, + "metadata": {} + } + ] + } + ] +} \ No newline at end of file From 05401d5268df973523d01e8c6ae369acddefc50a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 2 Nov 2023 22:51:08 +0000 Subject: [PATCH 359/378] hlinting --- src/Conjure/Language/Domain.hs | 4 ++-- src/Conjure/Language/Instantiate.hs | 2 +- src/Conjure/Process/Enums.hs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Conjure/Language/Domain.hs b/src/Conjure/Language/Domain.hs index f42875b219..1d3ea5184a 100644 --- a/src/Conjure/Language/Domain.hs +++ b/src/Conjure/Language/Domain.hs @@ -266,9 +266,9 @@ applyReprTree dom@DomainUnnamed{} (Tree Nothing []) = return (defRepr dom) applyReprTree (DomainTuple as ) (Tree Nothing asRepr) = DomainTuple <$> zipWithM applyReprTree as asRepr applyReprTree (DomainRecord as ) (Tree Nothing asRepr) = - (DomainRecord . zip (map fst as)) <$> zipWithM applyReprTree (map snd as) asRepr + DomainRecord . zip (map fst as) <$> zipWithM applyReprTree (map snd as) asRepr applyReprTree (DomainVariant as) (Tree Nothing asRepr) = - (DomainVariant . zip (map fst as)) <$> zipWithM applyReprTree (map snd as) asRepr + DomainVariant . zip (map fst as) <$> zipWithM applyReprTree (map snd as) asRepr applyReprTree (DomainMatrix b a) (Tree Nothing [aRepr]) = DomainMatrix b <$> applyReprTree a aRepr applyReprTree (DomainSet _ attr a ) (Tree (Just r) [aRepr]) = DomainSet r attr <$> applyReprTree a aRepr applyReprTree (DomainMSet _ attr a ) (Tree (Just r) [aRepr]) = DomainMSet r attr <$> applyReprTree a aRepr diff --git a/src/Conjure/Language/Instantiate.hs b/src/Conjure/Language/Instantiate.hs index d35ecff0ff..7ca7ce59f9 100644 --- a/src/Conjure/Language/Instantiate.hs +++ b/src/Conjure/Language/Instantiate.hs @@ -255,7 +255,7 @@ instantiateD (DomainEnum nm Nothing _) = do instantiateD (DomainEnum nm rs0 _) = do let fmap4 = fmap . fmap . fmap . fmap let e2c' x = either bug id (e2c x) - rs <- transformBiM (\ x -> Constant <$> instantiateE x ) (rs0 :: Maybe [Range Expression]) + rs <- transformBiM (fmap Constant . instantiateE ) (rs0 :: Maybe [Range Expression]) |> fmap4 e2c' st <- gets id mp <- forM (universeBi rs :: [Name]) $ \ n -> case lookup n st of diff --git a/src/Conjure/Process/Enums.hs b/src/Conjure/Process/Enums.hs index 2d02eafa66..2e81286120 100644 --- a/src/Conjure/Process/Enums.hs +++ b/src/Conjure/Process/Enums.hs @@ -67,7 +67,7 @@ removeEnumsFromModel = (fromIntWithTag (genericLength names) (TagEnum enameText)) case names `intersect` namesBefore of [] -> modify ( ( [(ename, outDomain)] - , zip names (zip (cycle [ename]) allNats) + , zip names (map (ename,) allNats) ) `mappend` ) repeated -> userErr1 $ vcat [ "Some members of this enum domain (" <> pretty ename <> ") seem to be defined" From c97c56353537cf8daeb7398903df3e2bcd7d4f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Thu, 2 Nov 2023 23:46:09 +0000 Subject: [PATCH 360/378] bugfix: some corner cases for enums in partitions --- src/Conjure/Language/Definition.hs | 2 +- .../Language/Expression/DomainSizeOf.hs | 2 + src/Conjure/Language/NameResolution.hs | 11 +++- src/Conjure/Process/Enums.hs | 6 +- src/Conjure/UI/Model.hs | 1 + tests/custom/enum-in-partition/eip.essence | 65 +++++++++++++++++++ tests/custom/enum-in-partition/run.sh | 4 ++ .../custom/enum-in-partition/stdout.expected | 16 +++++ 8 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 tests/custom/enum-in-partition/eip.essence create mode 100755 tests/custom/enum-in-partition/run.sh create mode 100644 tests/custom/enum-in-partition/stdout.expected diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index a5752e47b2..691c7283ba 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -264,7 +264,7 @@ initInfo model = model { mInfo = info } ] , miEnumGivens = [ nm | Declaration (GivenDomainDefnEnum nm) <- mStatements model ] , miEnumLettings = [ d | Declaration d@LettingDomainDefnEnum{} <- mStatements model ] - , miLettings = bug "Not initialised yet: miLettings" + , miLettings = [] , miUnnameds = [ (nm,s) | Declaration (LettingDomainDefnUnnamed nm s) <- mStatements model ] } diff --git a/src/Conjure/Language/Expression/DomainSizeOf.hs b/src/Conjure/Language/Expression/DomainSizeOf.hs index f5f6bf1a24..81c339ee3b 100644 --- a/src/Conjure/Language/Expression/DomainSizeOf.hs +++ b/src/Conjure/Language/Expression/DomainSizeOf.hs @@ -36,6 +36,8 @@ instance DomainSizeOf Expression Expression where domainSizeOf (DomainEnum n Nothing _) = return $ let n' = n `mappend` "_EnumSize" in Reference n' (Just (DeclHasRepr Given n' (DomainInt TagInt []))) + domainSizeOf (DomainEnum _ (Just rs) _) = do + make opSum . fromList <$> mapM domainSizeOfRange rs domainSizeOf (DomainUnnamed _ x) = return x domainSizeOf (DomainTuple []) = return 1 domainSizeOf (DomainTuple xs) = make opProduct . fromList <$> mapM domainSizeOf xs diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index 115bdb8cad..2c8722ff11 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -15,8 +15,8 @@ import Conjure.Language.Definition import Conjure.Language.Domain ( changeRepr, typeOfDomain, - Domain(DomainUnnamed, DomainReference, DomainRecord, - DomainVariant) ) + Domain(..), + Range(..) ) import Conjure.Language.Constant import Conjure.Language.Type import Conjure.Language.Pretty @@ -147,6 +147,7 @@ resolveStatement st = addName nm $ Alias (Domain (DomainUnnamed nm x')) return (Declaration (LettingDomainDefnUnnamed nm x')) LettingDomainDefnEnum (Name ename) nms -> do + addName (Name ename) $ Alias $ Domain $ DomainEnum (Name ename) (Just [RangeBounded 1 (fromInt $ genericLength nms)]) (Just (zip nms [1..])) sequence_ [ addName nm $ Alias (Constant (ConstantInt (TagEnum ename) i)) | (nm, i) <- zip nms [1..] ] @@ -290,6 +291,12 @@ resolveD (DomainReference nm Nothing) = do Nothing -> userErr1 ("Undefined reference to a domain:" <+> pretty nm) Just (Alias (Domain r)) -> DomainReference nm . Just <$> resolveD (changeRepr def r) Just x -> userErr1 ("Expected a domain, but got an expression:" <+> pretty x) +resolveD (DomainEnum nm Nothing Nothing) = do + mval <- gets (lookup nm) + case mval of + Nothing -> userErr1 ("Undefined reference to a domain:" <+> pretty nm) + Just (Alias (Domain d)) -> resolveD (changeRepr def d) + Just x -> userErr1 ("Expected a domain, but got an expression:" <+> pretty x) resolveD (DomainRecord ds) = fmap DomainRecord $ forM ds $ \ (n, d) -> do d' <- resolveD d t <- typeOfDomain d' diff --git a/src/Conjure/Process/Enums.hs b/src/Conjure/Process/Enums.hs index 2e81286120..1d85cf418d 100644 --- a/src/Conjure/Process/Enums.hs +++ b/src/Conjure/Process/Enums.hs @@ -44,13 +44,11 @@ removeEnumsFromModel = preCheckForNameReuse model = do let enumNames = concat [ names | Declaration (LettingDomainDefnEnum _ names) <- mStatements model ] let redefinedTopLevel = [ name | Declaration (FindOrGiven _ name _) <- mStatements model, name `elem` enumNames ] - let redefinedQuantified = [ name | Generator gen <- universeBi (mStatements model), name@Name{} <- universeBi gen, name `elem` enumNames ] - let redefined = redefinedTopLevel ++ redefinedQuantified let duplicates = [ name | (name, count) <- histogram enumNames, count > 1 ] unless (null duplicates) $ userErr1 $ "Enumerated value defined multiple times:" <+> prettyList id "," duplicates - unless (null redefined) $ userErr1 $ vcat + unless (null redefinedTopLevel) $ userErr1 $ vcat [ "Members of an enum domain are later redefined as top-level or quantified variables." - , "Check:" <+> prettyList id "," redefined + , "Check:" <+> prettyList id "," redefinedTopLevel ] return model diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index baf8cb0579..2cf538b09a 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -1236,6 +1236,7 @@ prologue model = do >>= removeUnderscores >>= logDebugIdModel "[removeUnderscores]" >>= return . addSearchOrder >>= logDebugIdModel "[addSearchOrder]" >>= attributeAsConstraints >>= logDebugIdModel "[attributeAsConstraints]" + >>= resolveNames >>= logDebugIdModel "[resolveNames]" >>= inferAttributes >>= logDebugIdModel "[inferAttributes]" >>= inlineLettingDomainsForDecls >>= logDebugIdModel "[inlineLettingDomainsForDecls]" >>= lettingsForComplexInDoms >>= logDebugIdModel "[lettingsForComplexInDoms]" diff --git a/tests/custom/enum-in-partition/eip.essence b/tests/custom/enum-in-partition/eip.essence new file mode 100644 index 0000000000..b5ce5b4aec --- /dev/null +++ b/tests/custom/enum-in-partition/eip.essence @@ -0,0 +1,65 @@ +letting w be 6000 +letting v be 6000 +letting b be 2 + +letting groceries be new type enum{ + "Bread", + "Carrots", + "Broccoli", + "Spinach", + "Apples", + "Bananas", + "Oranges", + "Rice", + "Cereal", + "Soft Drinks", + "Ice Cream" +} + +letting weight be function( + "Bread" --> 500, + "Carrots" --> 500, + "Broccoli" --> 600, + "Spinach" --> 200, + "Apples" --> 1000, + "Bananas" --> 700, + "Oranges" --> 900, + "Rice" --> 1000, + "Cereal" --> 500, + "Soft Drinks" --> 1000, + "Ice Cream" --> 700 +) + +letting volume be function( + "Bread" --> 1000, + "Carrots" --> 1000, + "Broccoli" --> 1500, + "Spinach" --> 500, + "Apples" --> 1500, + "Bananas" --> 1000, + "Oranges" --> 1600, + "Rice" --> 1200, + "Cereal" --> 700, + "Soft Drinks" --> 2000, + "Ice Cream" --> 1000 +) + +letting importance be function( + "Bread" --> 8, + "Carrots" --> 7, + "Broccoli" --> 8, + "Spinach" --> 8, + "Apples" --> 8, + "Bananas" --> 7, + "Oranges" --> 9, + "Rice" --> 10, + "Cereal" --> 7, + "Soft Drinks" --> 4, + "Ice Cream" --> 5 +) + +find bag : partition (numParts 2) from groceries +$ find bag : set of groceries + +such that forAll i in bag . |i| < 10 + diff --git a/tests/custom/enum-in-partition/run.sh b/tests/custom/enum-in-partition/run.sh new file mode 100755 index 0000000000..af03f50777 --- /dev/null +++ b/tests/custom/enum-in-partition/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution +conjure solve eip.essence +cat *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/enum-in-partition/stdout.expected b/tests/custom/enum-in-partition/stdout.expected new file mode 100644 index 0000000000..f67ac24291 --- /dev/null +++ b/tests/custom/enum-in-partition/stdout.expected @@ -0,0 +1,16 @@ +Generating models for eip.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: eip.solution +language Essence 1.3 + +letting bag be + partition({"Bread", "Ice Cream"}, + {"Carrots", "Broccoli", "Spinach", "Apples", "Bananas", "Oranges", "Rice", "Cereal", "Soft Drinks"}) +$ Visualisation for bag +$ "Bread" "Ice Cream" +$ "Carrots" "Broccoli" "Spinach" "Apples" "Bananas" "Oranges" "Rice" "Cereal" "Soft Drinks" + From 9d06150a00810d0be461c3892c7d54a6ba1c8cc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Fri, 3 Nov 2023 00:33:44 +0000 Subject: [PATCH 361/378] do not complain if the enum domain isn't in the symbol table (yet) --- src/Conjure/Language/NameResolution.hs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index 2c8722ff11..6e5e9415c1 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -291,12 +291,11 @@ resolveD (DomainReference nm Nothing) = do Nothing -> userErr1 ("Undefined reference to a domain:" <+> pretty nm) Just (Alias (Domain r)) -> DomainReference nm . Just <$> resolveD (changeRepr def r) Just x -> userErr1 ("Expected a domain, but got an expression:" <+> pretty x) -resolveD (DomainEnum nm Nothing Nothing) = do +resolveD d@(DomainEnum nm Nothing Nothing) = do mval <- gets (lookup nm) case mval of - Nothing -> userErr1 ("Undefined reference to a domain:" <+> pretty nm) - Just (Alias (Domain d)) -> resolveD (changeRepr def d) - Just x -> userErr1 ("Expected a domain, but got an expression:" <+> pretty x) + Just (Alias (Domain d')) -> resolveD (changeRepr def d') + _ -> return d resolveD (DomainRecord ds) = fmap DomainRecord $ forM ds $ \ (n, d) -> do d' <- resolveD d t <- typeOfDomain d' From 5061e57225d1d72d03ec5fe5a4f846ffae5695f8 Mon Sep 17 00:00:00 2001 From: N-J-Martin <146941515+N-J-Martin@users.noreply.github.com> Date: Sat, 4 Nov 2023 16:00:14 +0000 Subject: [PATCH 362/378] Fixed typo from PR #598 and documentation bits for set operators (#599) * write start of L_Plus.md * Plus and Minus docs and its notebook * wrote doc pages for all the operators. * fix to meet agreed format * Created using Colaboratory * add multiplicationDemonstration.ipynb * add absoluteValues.ipynb * add factorial.ipynb * add toInt_demonstration.ipynb * fixed absoluteValues.ipynb * added notebook links * fixed L_Minus.md typo * improved these notebooks with hz66-404 suggestions * fixed typo * add Set_operators demonstration * Create L_union.md * Update Set_operators.ipynb add badge and title * Create L_intersect.md * fixed badge Set_operators.ipynb * Create L_subset.md * Update Set_operators.ipynb Changed "subset" italics issue * Rename addition_subtraction_examples.ipynb to addition_and_subtraction_examples.ipynb fixed typo from recent PR * Update Set_operators.ipynb fix the grammar * Create L_subsetEq.md * Update L_subsetEq.md * Create L_supset.md * Create L_supsetEq.md * Update L_supset.md * Update Set_operators.ipynb update the last subset to subsetEq / some grammar changed * Update Set_operators.ipynb * add L_in.md * Delete docs/notebooks/Set_operators.ipynb this file lack of "in" this keyword * new Set_operators demonstration * Update Set_operators.ipynb add badge and title * Update L_in.md changed links * Update L_intersect.md changed links * Update L_subset.md changed links * Update L_subsetEq.md changed links * Update L_supset.md changed links * Update L_supsetEq.md changed links * Update L_union.md changed links --------- Co-authored-by: Han Zheng <117105566+hz66-404@users.noreply.github.com> --- docs/bits/operator/L_in.md | 10 +- docs/bits/operator/L_intersect.md | 10 + docs/bits/operator/L_subset.md | 10 + docs/bits/operator/L_subsetEq.md | 10 + docs/bits/operator/L_supset.md | 10 + docs/bits/operator/L_supsetEq.md | 10 + docs/bits/operator/L_union.md | 10 + docs/notebooks/Set_operators.ipynb | 999 ++++++++++++++++++ ...> addition_and_subtraction_examples.ipynb} | 0 9 files changed, 1066 insertions(+), 3 deletions(-) create mode 100644 docs/bits/operator/L_intersect.md create mode 100644 docs/bits/operator/L_subset.md create mode 100644 docs/bits/operator/L_subsetEq.md create mode 100644 docs/bits/operator/L_supset.md create mode 100644 docs/bits/operator/L_supsetEq.md create mode 100644 docs/bits/operator/L_union.md create mode 100644 docs/notebooks/Set_operators.ipynb rename docs/notebooks/{addition_subtraction_examples.ipynb => addition_and_subtraction_examples.ipynb} (100%) diff --git a/docs/bits/operator/L_in.md b/docs/bits/operator/L_in.md index 13455c57ed..5a925b5465 100644 --- a/docs/bits/operator/L_in.md +++ b/docs/bits/operator/L_in.md @@ -1,6 +1,10 @@ -# in (membership check) +# in + +test if element is in set ```essence -in +find a : bool such that a = (1 in {0,1}) ``` -The in operator is checks if the left operand is contained within the right operand. +This syntax is checking if 1 is in the set {0,1} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/bits/operator/L_intersect.md b/docs/bits/operator/L_intersect.md new file mode 100644 index 0000000000..d93b966cb9 --- /dev/null +++ b/docs/bits/operator/L_intersect.md @@ -0,0 +1,10 @@ +# intersect + +Set of elements in both sets + +```essence +find A : set of int(0..6) such that A = {1,2,3} intersect {2,3} +``` +This syntax is finding the intersection part of {1,2,3} and {2,3} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/bits/operator/L_subset.md b/docs/bits/operator/L_subset.md new file mode 100644 index 0000000000..8924a71992 --- /dev/null +++ b/docs/bits/operator/L_subset.md @@ -0,0 +1,10 @@ +# subset + +test if first set is strictly contained in second set (exclude two sets are equal) + +```essence +find b : bool such that b = ({0,1} subset {0,1,3}) +``` +This syntax is testing if {0,1,3} contains {0,1} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/bits/operator/L_subsetEq.md b/docs/bits/operator/L_subsetEq.md new file mode 100644 index 0000000000..72574140c6 --- /dev/null +++ b/docs/bits/operator/L_subsetEq.md @@ -0,0 +1,10 @@ +# subsetEq + +test if first set is strictly contained in second set (two sets can be equal) + +```essence +find b : bool such that b = ({0,1} subsetEq {0,1}) +``` +This syntax is testing if {0,1} contains {0,1} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/bits/operator/L_supset.md b/docs/bits/operator/L_supset.md new file mode 100644 index 0000000000..1d7330175c --- /dev/null +++ b/docs/bits/operator/L_supset.md @@ -0,0 +1,10 @@ +# supset + +test if the first set strictly contains the second set (exclude two sets are equal) + +```essence +find b : bool such that b = ({2,1} supset {1}) +``` +This syntax is testing if {2,1} contains {1} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/bits/operator/L_supsetEq.md b/docs/bits/operator/L_supsetEq.md new file mode 100644 index 0000000000..8872aa67a6 --- /dev/null +++ b/docs/bits/operator/L_supsetEq.md @@ -0,0 +1,10 @@ +# supsetEq + +test if the first set contains the second set (two sets can be equal) + +```essence +find b : bool such that b = ({2} supsetEq {2}) +``` +This syntax is testing if {2} contains {2} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/bits/operator/L_union.md b/docs/bits/operator/L_union.md new file mode 100644 index 0000000000..c319fb9dcc --- /dev/null +++ b/docs/bits/operator/L_union.md @@ -0,0 +1,10 @@ +# union + +Set of elements in either of the sets + +```essence +find B : set of int(0..6) such that B = {1,2,3} union {3,4} +``` +This syntax is finding the union of two sets {1,2,3} and {3,4} + +See it demonstrated [here](https://github.com/conjure-cp/conjure/blob/main/docs/notebooks/Set_operators.ipynb). diff --git a/docs/notebooks/Set_operators.ipynb b/docs/notebooks/Set_operators.ipynb new file mode 100644 index 0000000000..67e35d5f1e --- /dev/null +++ b/docs/notebooks/Set_operators.ipynb @@ -0,0 +1,999 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "colab_type": "text", + "id": "view-in-github" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yJb1FZ0maDVX" + }, + "source": [ + "# Set operators demonstration" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 139 + }, + "id": "y5eAvTeoY2N0", + "outputId": "c3dce89e-ae08-4418-809e-75c4d8d3e3e9" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Installing Conjure version v2.5.0 and Conjure Notebook version v0.0.8...\n", + "Downloading...\n", + "Conjure: The Automated Constraint Modelling Tool\n", + "Release version 2.5.0\n", + "Repository version 41536c055 (2023-05-18 14:03:02 +0100)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "application/javascript": [ + "\"use strict\";\n", + "\n", + "CodeMirror.defineMode(\"text/conjure\", function (config) {\n", + "\n", + " var isOperatorChar = /[+\\-*=<>%^\\/]/;\n", + "\n", + " var keywords = {\n", + " \"forall\": true,\n", + " \"allDifferent\": true,\n", + " \"allDiff\": true,\n", + " \"alldifferent_except\": true,\n", + " \"dim\": true,\n", + " \"toSet\": true,\n", + " \"toMSet\": true,\n", + " \"toRelation\": true,\n", + " \"maximising\": true,\n", + " \"minimising\": true,\n", + " \"forAll\": true,\n", + " \"exists\": true,\n", + " \"toInt\": true,\n", + " \"sum\": true,\n", + " \"be\": true,\n", + " \"bijective\": true,\n", + " \"bool\": true,\n", + " \"by\": true,\n", + " \"complete\": true,\n", + " \"defined\": true,\n", + " \"domain\": true,\n", + " \"in\": true,\n", + " \"or\": true,\n", + " \"and\": true,\n", + " \"false\": true,\n", + " \"find\": true,\n", + " \"from\": true,\n", + " \"function\": true,\n", + " \"given\": true,\n", + " \"image\": true,\n", + " \"indexed\": true,\n", + " \"injective\": true,\n", + " \"int\": true,\n", + " \"intersect\": true,\n", + " \"freq\": true,\n", + " \"lambda\": true,\n", + " \"language\": true,\n", + " \"letting\": true,\n", + " \"matrix\": true,\n", + " \"maxNumParts\": true,\n", + " \"maxOccur\": true,\n", + " \"maxPartSize\": true,\n", + " \"maxSize\": true,\n", + " \"minNumParts\": true,\n", + " \"minOccur\": true,\n", + " \"minPartSize\": true,\n", + " \"minSize\": true,\n", + " \"mset\": true,\n", + " \"numParts\": true,\n", + " \"of\": true,\n", + " \"partial\": true,\n", + " \"partition\": true,\n", + " \"partSize\": true,\n", + " \"preImage\": true,\n", + " \"quantifier\": true,\n", + " \"range\": true,\n", + " \"regular\": true,\n", + " \"relation\": true,\n", + " \"representation\": true,\n", + " \"set\": true,\n", + " \"size\": true,\n", + " \"subset\": true,\n", + " \"subsetEq\": true,\n", + " \"such\": true,\n", + " \"supset\": true,\n", + " \"supsetEq\": true,\n", + " \"surjective\": true,\n", + " \"that\": true,\n", + " \"together\": true,\n", + " \"enum\": true,\n", + " \"total\": true,\n", + " \"true\": true,\n", + " \"new\": true,\n", + " \"type\": true,\n", + " \"tuple\": true,\n", + " \"union\": true,\n", + " \"where\": true,\n", + " \"branching\": true,\n", + " \"on\": true\n", + " }; \n", + " var punc = \":;,.(){}[]\";\n", + "\n", + " function tokenBase(stream, state) {\n", + " var ch = stream.next();\n", + " if (ch == '\"') {\n", + " state.tokenize.push(tokenString);\n", + " return tokenString(stream, state);\n", + " }\n", + " if (/[\\d\\.]/.test(ch)) {\n", + " if (ch == \".\") {\n", + " stream.match(/^[0-9]+([eE][\\-+]?[0-9]+)?/);\n", + " } else if (ch == \"0\") {\n", + " stream.match(/^[xX][0-9a-fA-F]+/) || stream.match(/^0[0-7]+/);\n", + " } else {\n", + " stream.match(/^[0-9]*\\.?[0-9]*([eE][\\-+]?[0-9]+)?/);\n", + " }\n", + " return \"number\";\n", + " }\n", + " if (ch == \"/\") {\n", + " if (stream.eat(\"*\")) {\n", + " state.tokenize.push(tokenComment);\n", + " return tokenComment(stream, state);\n", + " }\n", + " }\n", + " if (ch == \"$\") {\n", + " stream.skipToEnd();\n", + " return \"comment\";\n", + " }\n", + " if (isOperatorChar.test(ch)) {\n", + " stream.eatWhile(isOperatorChar);\n", + " return \"operator\";\n", + " }\n", + " if (punc.indexOf(ch) > -1) {\n", + " return \"punctuation\";\n", + " }\n", + " stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n", + " var cur = stream.current();\n", + " \n", + " if (keywords.propertyIsEnumerable(cur)) {\n", + " return \"keyword\";\n", + " }\n", + " return \"variable\";\n", + " }\n", + "\n", + " function tokenComment(stream, state) {\n", + " var maybeEnd = false, ch;\n", + " while (ch = stream.next()) {\n", + " if (ch == \"/\" && maybeEnd) {\n", + " state.tokenize.pop();\n", + " break;\n", + " }\n", + " maybeEnd = (ch == \"*\");\n", + " }\n", + " return \"comment\";\n", + " }\n", + "\n", + " function tokenUntilClosingParen() {\n", + " var depth = 0;\n", + " return function (stream, state, prev) {\n", + " var inner = tokenBase(stream, state, prev);\n", + " console.log(\"untilClosing\", inner, stream.current());\n", + " if (inner == \"punctuation\") {\n", + " if (stream.current() == \"(\") {\n", + " ++depth;\n", + " } else if (stream.current() == \")\") {\n", + " if (depth == 0) {\n", + " stream.backUp(1)\n", + " state.tokenize.pop()\n", + " return state.tokenize[state.tokenize.length - 1](stream, state)\n", + " } else {\n", + " --depth;\n", + " }\n", + " }\n", + " }\n", + " return inner;\n", + " }\n", + " }\n", + "\n", + " function tokenString(stream, state) {\n", + " var escaped = false, next, end = false;\n", + " while ((next = stream.next()) != null) {\n", + " if (next == '(' && escaped) {\n", + " state.tokenize.push(tokenUntilClosingParen());\n", + " return \"string\";\n", + " }\n", + " if (next == '\"' && !escaped) { end = true; break; }\n", + " escaped = !escaped && next == \"\\\\\";\n", + " }\n", + " if (end || !escaped)\n", + " state.tokenize.pop();\n", + " return \"string\";\n", + " }\n", + "\n", + " return {\n", + " startState: function (basecolumn) {\n", + " return {\n", + " tokenize: []\n", + " };\n", + " },\n", + "\n", + " token: function (stream, state) {\n", + " if (stream.eatSpace()) return null;\n", + " var style = (state.tokenize[state.tokenize.length - 1] || tokenBase)(stream, state);\n", + " console.log(\"token\", style);\n", + " return style;\n", + " },\n", + "\n", + " blockCommentStart: \"/*\",\n", + " blockCommentEnd: \"*/\",\n", + " lineComment: \"$\"\n", + " };\n", + "});\n", + "\n", + "\n", + "CodeMirror.defineMIME(\"text/conjure\", \"text/conjure\");\n", + "\n", + "require(['notebook/js/codecell'], function (codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes['magic_text/conjure'] = { 'reg': [/%?%conjure/] };\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function () {\n", + " Jupyter.notebook.get_cells().map(function (cell) {\n", + " if (cell.cell_type == 'code') { cell.auto_highlight(); }\n", + " });\n", + " });\n", + "});\n", + "\n" + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Conjure extension is loaded.\n", + "For usage help run: %conjure_help\n" + ] + } + ], + "source": [ + "!source <(curl -s https://raw.githubusercontent.com/conjure-cp/conjure-notebook/v0.0.8/scripts/install-colab.sh)\n", + "%reload_ext conjure" + ] + }, + { + "cell_type": "markdown", + "source": [ + "intersect: find the intersection of two sets" + ], + "metadata": { + "id": "ZFPS85hAaesD" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find A : set of int(0..6) such that A = {1,2,3} intersect {1,2,3}" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "lczCH7n6ZAXF", + "outputId": "e0973831-71e0-4814-9cce-15518c42bfc9" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"A\": [1, 2, 3]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find A : set of int(0..6) such that A = {1,2,3} intersect {2,3}" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "cK641KP3aTwz", + "outputId": "ecb2a475-1858-408c-9005-2819542aa7b1" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"A\": [2, 3]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find A : set of int(0..6) such that A = {1,2,3} intersect {4}" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "QqwN10jYaWq_", + "outputId": "98ce60ec-3c05-462a-9166-b19b58312680" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"A\": []}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "union: set of elements in either of the sets" + ], + "metadata": { + "id": "st6qCJcYa40u" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find B : set of int(0..6) such that B = {1,2,3} union {3,4}" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "KkhKPCv4aq-7", + "outputId": "02533812-5d89-48cc-e89b-e22745cdd530" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"B\": [1, 2, 3, 4]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find B : set of int(0..6) such that B = {1} union {3,4}" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "JYGPCh5Ba7Nn", + "outputId": "54126e7d-69f4-48da-9a36-be79563cdc42" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"B\": [1, 3, 4]}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "subset: test if first set is strictly contained in second set (exclude two sets are equal)" + ], + "metadata": { + "id": "0NLn38-Ibqta" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({0,1} subset {0,1,3})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "NbtL5TLyblCo", + "outputId": "2999d7cf-13e4-44b2-fa7b-1fff91447cfb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({0,1} subset {0,1})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "Ydg8WBgYcC8C", + "outputId": "7e575738-eb47-4eaa-fa49-2ce77f119bea" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({2} subset {0,1,3})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "8ZLoqSBdcG24", + "outputId": "4a57606a-7dcc-4a5f-8a78-19a0706cfcc0" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({0} subset {0,1})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "Dn8-9jfzcLLt", + "outputId": "92e739be-362c-43f9-8192-50d1d99c314c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "subsetEq: test if the first set is contained in the second set\n", + "\n", + "the two sets can be equaled" + ], + "metadata": { + "id": "X12S6_L-cdqP" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({0,1} subsetEq {0,1})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "60HV5KPrcqP5", + "outputId": "73a3687b-90d7-4252-c58f-d12428417f14" + }, + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "UsageError: Cell magic `%%conjure` not found.\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({0,1} subsetEq {0,1,3})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "SXk_tOSMc4pU", + "outputId": "ba243e4a-e61a-4b05-f36e-47b2341e96ba" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({4} subset {0,1,3})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "on6mroHfc7cv", + "outputId": "a6ef6766-4d13-47e6-ea8c-4e84d62b2029" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "supset: test if the first set strictly contains the second set (exclude two sets are equal)" + ], + "metadata": { + "id": "gZf79AQEdLbq" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({4,3} supset {3})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "w3ZOdw6-dN6P", + "outputId": "126c97a1-bcd0-4fdc-8e13-c0c9082926f4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({2,1} supset {1,3})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "c2zO2c-6ddtM", + "outputId": "04c7c125-0246-4a7d-f8f9-07fa53101259" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({2,1} supset {1})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "avRpW7ecdo6c", + "outputId": "85105409-616f-49e5-e2c1-542dfae1e4c4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({4} supset {4})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "virvvsMvdVlZ", + "outputId": "c109ba56-0198-4466-c98a-0fbe84c723cb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({2,1} supset {4})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "Eqn6G8didZWh", + "outputId": "0653f060-7f1a-4750-d264-5fc766f38b3c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "supsetEq: test if the first set contains the second set (two sets can be equal)" + ], + "metadata": { + "id": "hPLN6VfGdyBt" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({2} supsetEq {2})" + ], + "metadata": { + "id": "PC3Nkmpod1BW", + "outputId": "74d2a084-d75b-459e-fdfb-8fa8107ea46a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + } + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find b : bool such that b = ({2,1} supsetEq {4})" + ], + "metadata": { + "id": "DP8ed5p4d5fW", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "a45257fc-53f5-4b0b-e30a-0562c893fab2" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"b\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "in: test if the element is in the set" + ], + "metadata": { + "id": "cXCy-OEDG9sP" + } + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (1 in {0,1})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "TkeMLqVbG37L", + "outputId": "cfb558cf-cddb-4a80-fa92-c93488cc61b9" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"a\": true}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "%%conjure --number-of-solutions=all --solver=kissat\n", + "find a : bool such that a = (3 in {0,1})" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "id": "g1E9nfseaEv6", + "outputId": "1228a8b7-3d10-426b-8fd7-0606b002d878" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/markdown": "```json\n{\"a\": false}\n```" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Summary:\n", + "Eq means two sets can be equaled.\n", + "\n", + "Define:\n", + "The First Set is before the keywords/\n", + "The Second Set is after the keywords\n" + ], + "metadata": { + "id": "EwOvbFfEFXHA" + } + }, + { + "cell_type": "markdown", + "source": [ + "such that b = ({2,1} supset {4})\n", + "\n", + "so {2,1} is the first set / {4} is the second set" + ], + "metadata": { + "id": "RE6KubTFHPew" + } + }, + { + "cell_type": "markdown", + "source": [ + "The different between \"subset\" and \"supset\"\n", + "check if the second set contains the contents of the first set and, conversely, supsut is checking if the first set contains the contents of the second set" + ], + "metadata": { + "id": "6yjzrrdeHbmi" + } + }, + { + "cell_type": "markdown", + "source": [ + "\"subset\": check if the second set contains the elements of the first set" + ], + "metadata": { + "id": "KjfxHhOhH4Xz" + } + }, + { + "cell_type": "markdown", + "source": [ + "\"supset\": conversely, check if the first set contains the elements of the second set" + ], + "metadata": { + "id": "Wf7qPqZmIGcV" + } + } + ] +} diff --git a/docs/notebooks/addition_subtraction_examples.ipynb b/docs/notebooks/addition_and_subtraction_examples.ipynb similarity index 100% rename from docs/notebooks/addition_subtraction_examples.ipynb rename to docs/notebooks/addition_and_subtraction_examples.ipynb From 2c1ab4a6d7d68f30f4c566d72f9f912a8e5deda1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 5 Nov 2023 11:39:39 +0000 Subject: [PATCH 363/378] Revert the 2 last commits Revert "do not complain if the enum domain isn't in the symbol table (yet)" This reverts commit 9d06150a00810d0be461c3892c7d54a6ba1c8cc1. Revert "bugfix: some corner cases for enums in partitions" This reverts commit c97c56353537cf8daeb7398903df3e2bcd7d4f68. --- src/Conjure/Language/Definition.hs | 2 +- .../Language/Expression/DomainSizeOf.hs | 2 - src/Conjure/Language/NameResolution.hs | 10 +-- src/Conjure/Process/Enums.hs | 6 +- src/Conjure/UI/Model.hs | 1 - tests/custom/enum-in-partition/eip.essence | 65 ------------------- tests/custom/enum-in-partition/run.sh | 4 -- .../custom/enum-in-partition/stdout.expected | 16 ----- 8 files changed, 7 insertions(+), 99 deletions(-) delete mode 100644 tests/custom/enum-in-partition/eip.essence delete mode 100755 tests/custom/enum-in-partition/run.sh delete mode 100644 tests/custom/enum-in-partition/stdout.expected diff --git a/src/Conjure/Language/Definition.hs b/src/Conjure/Language/Definition.hs index 691c7283ba..a5752e47b2 100644 --- a/src/Conjure/Language/Definition.hs +++ b/src/Conjure/Language/Definition.hs @@ -264,7 +264,7 @@ initInfo model = model { mInfo = info } ] , miEnumGivens = [ nm | Declaration (GivenDomainDefnEnum nm) <- mStatements model ] , miEnumLettings = [ d | Declaration d@LettingDomainDefnEnum{} <- mStatements model ] - , miLettings = [] + , miLettings = bug "Not initialised yet: miLettings" , miUnnameds = [ (nm,s) | Declaration (LettingDomainDefnUnnamed nm s) <- mStatements model ] } diff --git a/src/Conjure/Language/Expression/DomainSizeOf.hs b/src/Conjure/Language/Expression/DomainSizeOf.hs index 81c339ee3b..f5f6bf1a24 100644 --- a/src/Conjure/Language/Expression/DomainSizeOf.hs +++ b/src/Conjure/Language/Expression/DomainSizeOf.hs @@ -36,8 +36,6 @@ instance DomainSizeOf Expression Expression where domainSizeOf (DomainEnum n Nothing _) = return $ let n' = n `mappend` "_EnumSize" in Reference n' (Just (DeclHasRepr Given n' (DomainInt TagInt []))) - domainSizeOf (DomainEnum _ (Just rs) _) = do - make opSum . fromList <$> mapM domainSizeOfRange rs domainSizeOf (DomainUnnamed _ x) = return x domainSizeOf (DomainTuple []) = return 1 domainSizeOf (DomainTuple xs) = make opProduct . fromList <$> mapM domainSizeOf xs diff --git a/src/Conjure/Language/NameResolution.hs b/src/Conjure/Language/NameResolution.hs index 6e5e9415c1..115bdb8cad 100644 --- a/src/Conjure/Language/NameResolution.hs +++ b/src/Conjure/Language/NameResolution.hs @@ -15,8 +15,8 @@ import Conjure.Language.Definition import Conjure.Language.Domain ( changeRepr, typeOfDomain, - Domain(..), - Range(..) ) + Domain(DomainUnnamed, DomainReference, DomainRecord, + DomainVariant) ) import Conjure.Language.Constant import Conjure.Language.Type import Conjure.Language.Pretty @@ -147,7 +147,6 @@ resolveStatement st = addName nm $ Alias (Domain (DomainUnnamed nm x')) return (Declaration (LettingDomainDefnUnnamed nm x')) LettingDomainDefnEnum (Name ename) nms -> do - addName (Name ename) $ Alias $ Domain $ DomainEnum (Name ename) (Just [RangeBounded 1 (fromInt $ genericLength nms)]) (Just (zip nms [1..])) sequence_ [ addName nm $ Alias (Constant (ConstantInt (TagEnum ename) i)) | (nm, i) <- zip nms [1..] ] @@ -291,11 +290,6 @@ resolveD (DomainReference nm Nothing) = do Nothing -> userErr1 ("Undefined reference to a domain:" <+> pretty nm) Just (Alias (Domain r)) -> DomainReference nm . Just <$> resolveD (changeRepr def r) Just x -> userErr1 ("Expected a domain, but got an expression:" <+> pretty x) -resolveD d@(DomainEnum nm Nothing Nothing) = do - mval <- gets (lookup nm) - case mval of - Just (Alias (Domain d')) -> resolveD (changeRepr def d') - _ -> return d resolveD (DomainRecord ds) = fmap DomainRecord $ forM ds $ \ (n, d) -> do d' <- resolveD d t <- typeOfDomain d' diff --git a/src/Conjure/Process/Enums.hs b/src/Conjure/Process/Enums.hs index 1d85cf418d..2e81286120 100644 --- a/src/Conjure/Process/Enums.hs +++ b/src/Conjure/Process/Enums.hs @@ -44,11 +44,13 @@ removeEnumsFromModel = preCheckForNameReuse model = do let enumNames = concat [ names | Declaration (LettingDomainDefnEnum _ names) <- mStatements model ] let redefinedTopLevel = [ name | Declaration (FindOrGiven _ name _) <- mStatements model, name `elem` enumNames ] + let redefinedQuantified = [ name | Generator gen <- universeBi (mStatements model), name@Name{} <- universeBi gen, name `elem` enumNames ] + let redefined = redefinedTopLevel ++ redefinedQuantified let duplicates = [ name | (name, count) <- histogram enumNames, count > 1 ] unless (null duplicates) $ userErr1 $ "Enumerated value defined multiple times:" <+> prettyList id "," duplicates - unless (null redefinedTopLevel) $ userErr1 $ vcat + unless (null redefined) $ userErr1 $ vcat [ "Members of an enum domain are later redefined as top-level or quantified variables." - , "Check:" <+> prettyList id "," redefinedTopLevel + , "Check:" <+> prettyList id "," redefined ] return model diff --git a/src/Conjure/UI/Model.hs b/src/Conjure/UI/Model.hs index 2cf538b09a..baf8cb0579 100644 --- a/src/Conjure/UI/Model.hs +++ b/src/Conjure/UI/Model.hs @@ -1236,7 +1236,6 @@ prologue model = do >>= removeUnderscores >>= logDebugIdModel "[removeUnderscores]" >>= return . addSearchOrder >>= logDebugIdModel "[addSearchOrder]" >>= attributeAsConstraints >>= logDebugIdModel "[attributeAsConstraints]" - >>= resolveNames >>= logDebugIdModel "[resolveNames]" >>= inferAttributes >>= logDebugIdModel "[inferAttributes]" >>= inlineLettingDomainsForDecls >>= logDebugIdModel "[inlineLettingDomainsForDecls]" >>= lettingsForComplexInDoms >>= logDebugIdModel "[lettingsForComplexInDoms]" diff --git a/tests/custom/enum-in-partition/eip.essence b/tests/custom/enum-in-partition/eip.essence deleted file mode 100644 index b5ce5b4aec..0000000000 --- a/tests/custom/enum-in-partition/eip.essence +++ /dev/null @@ -1,65 +0,0 @@ -letting w be 6000 -letting v be 6000 -letting b be 2 - -letting groceries be new type enum{ - "Bread", - "Carrots", - "Broccoli", - "Spinach", - "Apples", - "Bananas", - "Oranges", - "Rice", - "Cereal", - "Soft Drinks", - "Ice Cream" -} - -letting weight be function( - "Bread" --> 500, - "Carrots" --> 500, - "Broccoli" --> 600, - "Spinach" --> 200, - "Apples" --> 1000, - "Bananas" --> 700, - "Oranges" --> 900, - "Rice" --> 1000, - "Cereal" --> 500, - "Soft Drinks" --> 1000, - "Ice Cream" --> 700 -) - -letting volume be function( - "Bread" --> 1000, - "Carrots" --> 1000, - "Broccoli" --> 1500, - "Spinach" --> 500, - "Apples" --> 1500, - "Bananas" --> 1000, - "Oranges" --> 1600, - "Rice" --> 1200, - "Cereal" --> 700, - "Soft Drinks" --> 2000, - "Ice Cream" --> 1000 -) - -letting importance be function( - "Bread" --> 8, - "Carrots" --> 7, - "Broccoli" --> 8, - "Spinach" --> 8, - "Apples" --> 8, - "Bananas" --> 7, - "Oranges" --> 9, - "Rice" --> 10, - "Cereal" --> 7, - "Soft Drinks" --> 4, - "Ice Cream" --> 5 -) - -find bag : partition (numParts 2) from groceries -$ find bag : set of groceries - -such that forAll i in bag . |i| < 10 - diff --git a/tests/custom/enum-in-partition/run.sh b/tests/custom/enum-in-partition/run.sh deleted file mode 100755 index af03f50777..0000000000 --- a/tests/custom/enum-in-partition/run.sh +++ /dev/null @@ -1,4 +0,0 @@ -rm -rf conjure-output *.solution -conjure solve eip.essence -cat *.solution -rm -rf conjure-output *.solution diff --git a/tests/custom/enum-in-partition/stdout.expected b/tests/custom/enum-in-partition/stdout.expected deleted file mode 100644 index f67ac24291..0000000000 --- a/tests/custom/enum-in-partition/stdout.expected +++ /dev/null @@ -1,16 +0,0 @@ -Generating models for eip.essence -Generated models: model000001.eprime -Saved under: conjure-output -Savile Row: model000001.eprime -Running minion for domain filtering. -Running solver: minion -Copying solution to: eip.solution -language Essence 1.3 - -letting bag be - partition({"Bread", "Ice Cream"}, - {"Carrots", "Broccoli", "Spinach", "Apples", "Bananas", "Oranges", "Rice", "Cereal", "Soft Drinks"}) -$ Visualisation for bag -$ "Bread" "Ice Cream" -$ "Carrots" "Broccoli" "Spinach" "Apples" "Bananas" "Oranges" "Rice" "Cereal" "Soft Drinks" - From 1443944924f6ee730c51fa55e926958eb23ac499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 5 Nov 2023 12:40:12 +0000 Subject: [PATCH 364/378] remember the size of letting-enum domains when removing the enum domain --- src/Conjure/Process/Enums.hs | 8 ++- tests/custom/enum-in-partition/eip.essence | 64 +++++++++++++++++++ tests/custom/enum-in-partition/run.sh | 4 ++ .../custom/enum-in-partition/stdout.expected | 16 +++++ 4 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 tests/custom/enum-in-partition/eip.essence create mode 100755 tests/custom/enum-in-partition/run.sh create mode 100644 tests/custom/enum-in-partition/stdout.expected diff --git a/src/Conjure/Process/Enums.hs b/src/Conjure/Process/Enums.hs index 2e81286120..c46be53277 100644 --- a/src/Conjure/Process/Enums.hs +++ b/src/Conjure/Process/Enums.hs @@ -75,8 +75,10 @@ removeEnumsFromModel = , "Repeated:" <+> prettyList id "," repeated , "While working on domain:" <+> pretty st ] - return (Declaration (Letting ename (Domain outDomain))) - _ -> return st + return [ Declaration (Letting (ename `mappend` "_EnumSize") (fromInt $ genericLength names)) + , Declaration (Letting ename (Domain outDomain)) + ] + _ -> return [st] let nameToIntMapping = M.fromList nameToIntMapping_ @@ -100,7 +102,7 @@ removeEnumsFromModel = onD p = return p statements'' <- (transformBiM onD >=> transformBiM onX) statements' - return model { mStatements = statements'' } + return model { mStatements = concat statements'' } removeEnumsFromModel_GivenEnums model = do (statements', enumDomainNames) <- diff --git a/tests/custom/enum-in-partition/eip.essence b/tests/custom/enum-in-partition/eip.essence new file mode 100644 index 0000000000..0d26e55042 --- /dev/null +++ b/tests/custom/enum-in-partition/eip.essence @@ -0,0 +1,64 @@ +letting w be 6000 +letting v be 6000 +letting b be 2 + +letting groceries be new type enum{ + "Bread", + "Carrots", + "Broccoli", + "Spinach", + "Apples", + "Bananas", + "Oranges", + "Rice", + "Cereal", + "Soft Drinks", + "Ice Cream" +} + +letting weight be function( + "Bread" --> 500, + "Carrots" --> 500, + "Broccoli" --> 600, + "Spinach" --> 200, + "Apples" --> 1000, + "Bananas" --> 700, + "Oranges" --> 900, + "Rice" --> 1000, + "Cereal" --> 500, + "Soft Drinks" --> 1000, + "Ice Cream" --> 700 +) + +letting volume be function( + "Bread" --> 1000, + "Carrots" --> 1000, + "Broccoli" --> 1500, + "Spinach" --> 500, + "Apples" --> 1500, + "Bananas" --> 1000, + "Oranges" --> 1600, + "Rice" --> 1200, + "Cereal" --> 700, + "Soft Drinks" --> 2000, + "Ice Cream" --> 1000 +) + +letting importance be function( + "Bread" --> 8, + "Carrots" --> 7, + "Broccoli" --> 8, + "Spinach" --> 8, + "Apples" --> 8, + "Bananas" --> 7, + "Oranges" --> 9, + "Rice" --> 10, + "Cereal" --> 7, + "Soft Drinks" --> 4, + "Ice Cream" --> 5 +) + +find bags : partition (numParts 2) from groceries + +such that forAll bag in bags . (sum item in bag . weight(item)) <= 5000 + diff --git a/tests/custom/enum-in-partition/run.sh b/tests/custom/enum-in-partition/run.sh new file mode 100755 index 0000000000..af03f50777 --- /dev/null +++ b/tests/custom/enum-in-partition/run.sh @@ -0,0 +1,4 @@ +rm -rf conjure-output *.solution +conjure solve eip.essence +cat *.solution +rm -rf conjure-output *.solution diff --git a/tests/custom/enum-in-partition/stdout.expected b/tests/custom/enum-in-partition/stdout.expected new file mode 100644 index 0000000000..084fff6f09 --- /dev/null +++ b/tests/custom/enum-in-partition/stdout.expected @@ -0,0 +1,16 @@ +Generating models for eip.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime +Running minion for domain filtering. +Running solver: minion +Copying solution to: eip.solution +language Essence 1.3 + +letting bags be + partition({"Bread", "Cereal", "Soft Drinks", "Ice Cream"}, + {"Carrots", "Broccoli", "Spinach", "Apples", "Bananas", "Oranges", "Rice"}) +$ Visualisation for bags +$ "Bread" "Cereal" "Soft Drinks" "Ice Cream" +$ "Carrots" "Broccoli" "Spinach" "Apples" "Bananas" "Oranges" "Rice" + From 77ef8ce232b9ef24d9333fc987bd74365e4e58e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 5 Nov 2023 14:08:38 +0000 Subject: [PATCH 365/378] update test files --- tests/custom/issues/440/stderr.expected | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/custom/issues/440/stderr.expected b/tests/custom/issues/440/stderr.expected index 481387a6e2..48db4e5259 100644 --- a/tests/custom/issues/440/stderr.expected +++ b/tests/custom/issues/440/stderr.expected @@ -2,4 +2,5 @@ Error: No value for: E3 Bindings in context: my_function: function(E3 --> 1) + my_enum_EnumSize: 2 my_enum: `int(1..2)` From 3b054f2c0de34c31599721071be47288190f040f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 5 Nov 2023 14:08:56 +0000 Subject: [PATCH 366/378] update test files --- .../730~1439082038_16/model.expected.json | 1321 +++++++++++++++++ .../730~1439082038_16/typecheck.expected | 14 + .../autogen/731~final/model.expected.json | 76 + .../autogen/731~final/typecheck.expected | 14 + .../768~1439583525_36/model.expected.json | 412 +++++ .../768~1439583525_36/typecheck.expected | 5 + .../autogen/769~final/model.expected.json | 67 + .../autogen/769~final/typecheck.expected | 5 + 8 files changed, 1914 insertions(+) create mode 100644 tests/parse_print/autogen/730~1439082038_16/model.expected.json create mode 100644 tests/parse_print/autogen/730~1439082038_16/typecheck.expected create mode 100644 tests/parse_print/autogen/731~final/model.expected.json create mode 100644 tests/parse_print/autogen/731~final/typecheck.expected create mode 100644 tests/parse_print/autogen/768~1439583525_36/model.expected.json create mode 100644 tests/parse_print/autogen/768~1439583525_36/typecheck.expected create mode 100644 tests/parse_print/autogen/769~final/model.expected.json create mode 100644 tests/parse_print/autogen/769~final/typecheck.expected diff --git a/tests/parse_print/autogen/730~1439082038_16/model.expected.json b/tests/parse_print/autogen/730~1439082038_16/model.expected.json new file mode 100644 index 0000000000..2648972b55 --- /dev/null +++ b/tests/parse_print/autogen/730~1439082038_16/model.expected.json @@ -0,0 +1,1321 @@ +{"mInfo": + {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], + "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, + "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, + "mStatements": + [{"Declaration": + {"FindOrGiven": + ["Find", {"Name": "var1"}, + {"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, + {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}]]}]}}, + {"SuchThat": + [{"Op": + {"MkOpEq": + [{"AbstractLiteral": + {"AbsLitFunction": + [[{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypePartition": {"TypeInt": {"TagInt": []}}}]}}]}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 7]}}}, + {"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 12]}}}, + {"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}}, + {"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": true}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}]}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": true}]}}]}}}]]}}], + [{"AbstractLiteral": + {"AbsLitSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": + [{"TagInt": []}, 5]}]]}}]]}}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 3]}}}, + {"RangeBounded": + [{"Constant": + {"ConstantInt": [{"TagInt": []}, 2]}}, + {"Constant": + {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, + [{"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 4]}]]}}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": {"AbsLitPartition": []}}}, + {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": + [{"TagInt": []}, 3]}]]}}]]}}}]}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}]}, + {"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 13]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 14]}}]}]]}, + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": true}, + {"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}]}}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}]]}}], + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": [{"TagInt": []}, 0]}}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 9]}, + {"ConstantInt": [{"TagInt": []}, 10]}]}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 6]}, + {"ConstantInt": [{"TagInt": []}, 6]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 3]}], + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 3]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 2]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 2]}]]}}]]}}, + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 6]}, + {"ConstantInt": [{"TagInt": []}, 7]}]}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 10]}, + {"ConstantInt": [{"TagInt": []}, 11]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 3]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 5]}]]}}]]}}, + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": [{"TagInt": []}, 6]}}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 0]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": + [{"TagInt": []}, 0]}]]}}]]}}]}}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}]}], + [{"AbstractLiteral": + {"AbsLitSet": + [{"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 5]}}}, + {"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 8]}}}, + {"RangeBounded": + [{"Constant": + {"ConstantInt": [{"TagInt": []}, 6]}}, + {"Constant": + {"ConstantInt": [{"TagInt": []}, 7]}}]}]]}, + [{"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}]]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 1]}]]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}]]}}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": {"AbsLitPartition": []}}}, + {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]]}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, + [{"Typed": + [{"Constant": + {"ConstantAbstract": {"AbsLitPartition": []}}}, + {"TypePartition": {"TypeInt": {"TagInt": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": + [{"TagInt": []}, 1]}]]}}}]]}}]}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}]}]]}}, + {"AbstractLiteral": + {"AbsLitFunction": + [[{"AbstractLiteral": + {"AbsLitSet": + [{"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 9]}}}, + {"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 6]}}}, + {"RangeBounded": + [{"Constant": + {"ConstantInt": [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": [{"TagInt": []}, 2]}}]}]]}, + [{"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 3]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}]]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}]]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 3]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}]]}}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": {"AbsLitPartition": []}}}, + {"TypePartition": {"TypeInt": {"TagInt": []}}}]}]]}}]}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": true}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": false}, + {"ConstantBool": false}]}}}]}}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}]}}}]}}]]}}], + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": [{"TagInt": []}, 0]}}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 10]}, + {"ConstantInt": [{"TagInt": []}, 13]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 2]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 5]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 4]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 3]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": + [{"TagInt": []}, 0]}]]}}]]}}]}}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, + {"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 8]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}]}]]}, + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeMSet": {"TypeBool": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": false}, + {"ConstantBool": true}]}}, + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": true}, + {"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": true}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": false}]}}]}}}]]}}], + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 4]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 3]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": + [{"TagInt": []}, 4]}]]}}]]}}]}}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, + {"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 15]}}}, + {"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 11]}}}, + {"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 9]}}]}]]}, + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}}]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": true}]}}, + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}]}}}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": false}, + {"ConstantBool": true}]}}}]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": true}]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": true}]}}, + {"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": true}]}}]}}}]]}}], + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 2]}]]}}]]}}, + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": [{"TagInt": []}, 3]}}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 2]}], + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 0]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 4]}]]}}]]}}, + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}]}]]}, + [{"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 2]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}], + [{"ConstantInt": [{"TagInt": []}, 5]}], + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 5]}]]}}, + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}], + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 3]}], + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": + [{"TagInt": []}, 3]}]]}}]]}}]}}}, + {"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 8]}}}, + {"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}}, + {"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}]}]]}, + [{"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": true}]}}]}}}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": false}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}, + {"ConstantBool": true}]}}}]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}, + {"ConstantBool": true}]}}]}}}]]}}]]}}]}}, + {"Op": + {"MkOpApart": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 1]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 3]}]}}]}}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 3]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 0]}]}}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 2]}]}}]}}]}}]}}}, + {"AbstractLiteral": + {"AbsLitPartition": + [[{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}}]}, + {"AbstractLiteral": + {"AbsLitSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 4]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 3]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}]}}]}}}]}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}]}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 4]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 4]}]}}]}}}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 4]}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 5]}]}}}]}}]}}], + [{"AbstractLiteral": + {"AbsLitSet": + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 5]}]}}]}}}]}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 2]}]}}}]}}]}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}}]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 1]}]}}]}}]}}}], + [{"AbstractLiteral": + {"AbsLitSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeSet": {"TypeInt": {"TagInt": []}}}}]}, + {"AbstractLiteral": + {"AbsLitMSet": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeInt": {"TagInt": []}}}]}]}}]}}]]}}]}}, + {"Op": + {"MkOpImage": + [{"AbstractLiteral": + {"AbsLitFunction": + [[{"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeSet": {"TypeMSet": {"TypeBool": []}}}]}]}, + {"Op": + {"MkOpTogether": + [{"AbstractLiteral": + {"AbsLitSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, 10]}}, + {"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, 3]}}, + {"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, 8]}}, + {"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 0]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}]]}, + [{"ConstantInt": [{"TagInt": []}, 0]}, + {"ConstantInt": [{"TagInt": []}, 3]}, + {"ConstantInt": [{"TagInt": []}, 2]}, + {"ConstantInt": [{"TagInt": []}, 1]}]]}}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, + 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeInt": {"TagInt": []}}]}]}]}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitPartition": []}}}, + {"TypePartition": + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeInt": {"TagInt": []}}]}}]}]}}], + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 6]}, + {"ConstantInt": [{"TagInt": []}, 7]}]}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 4]}, + {"ConstantInt": [{"TagInt": []}, 4]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": true}, + {"ConstantBool": true}, + {"ConstantBool": true}]}}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": [{"ConstantBool": false}]}}, + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": false}]}}]}}]]}}}, + {"Op": + {"MkOpIndexing": + [{"Comprehension": + [{"Op": + {"MkOpNeq": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 5]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_1"}}, {"DomainBool": []}]}}, + {"Condition": + {"Op": + {"MkOpIff": + [{"Constant": {"ConstantBool": true}}, + {"Constant": {"ConstantBool": false}}]}}}]]}, + {"Op": + {"MkOpMin": + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeInt": {"TagInt": []}}}]}}}]}}], + [{"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeSet": {"TypeMSet": {"TypeBool": []}}}]}]}, + {"Op": + {"MkOpAnd": + {"Op": + {"MkOpFlatten": + [null, + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 2]}]}]]}, + [{"ConstantBool": false}, + {"ConstantBool": false}]]}}}]}}}}], + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": {"ConstantInt": [{"TagInt": []}, 0]}}, + {"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 5]}, + {"ConstantInt": [{"TagInt": []}, 5]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}]}}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": false}]}}]}}]]}}}, + {"Op": + {"MkOpNot": + {"Op": + {"MkOpNot": + {"Op": + {"MkOpImply": + [{"Constant": {"ConstantBool": true}}, + {"Constant": {"ConstantBool": true}}]}}}}}}]]}}, + {"Comprehension": + [{"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": []}}}, + {"TypeSet": {"TypeMSet": {"TypeBool": []}}}]}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_2"}}, + {"DomainSet": + [[], {"SizeAttr_MinSize": {"Reference": [{"Name": "var1"}, null]}}, + {"DomainMSet": + [[], + [{"SizeAttr_MinMaxSize": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, + {"OccurAttr_MinOccur": + {"Op": + {"MkOpPow": + [{"Reference": [{"Name": "var1"}, null]}, + {"Reference": [{"Name": "var1"}, null]}]}}}], + {"DomainBool": []}]}]}]}}, + {"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_3"}}, + {"DomainSet": + [[], {"SizeAttr_None": []}, + {"DomainMSet": + [[], + [{"SizeAttr_MinMaxSize": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, + {"OccurAttr_MaxOccur": + {"Op": + {"MkOpMod": + [{"Reference": [{"Name": "var1"}, null]}, + {"Reference": [{"Name": "var1"}, null]}]}}}], + {"DomainBool": []}]}]}]}}, + {"Condition": + {"Op": + {"MkOpGeq": + [{"Op": + {"MkOpMax": + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 3]}]}}}}}, + {"Op": + {"MkOpPow": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, + {"Op": + {"MkOpPow": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}, + {"Op": + {"MkOpNegate": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 0]}}}}]}}]}}]}}}]]}]}}]}, + {"Objective": ["Minimising", {"Reference": [{"Name": "var1"}, null]}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/730~1439082038_16/typecheck.expected b/tests/parse_print/autogen/730~1439082038_16/typecheck.expected new file mode 100644 index 0000000000..147d15558c --- /dev/null +++ b/tests/parse_print/autogen/730~1439082038_16/typecheck.expected @@ -0,0 +1,14 @@ +Error: + Category checking failed. + The domain : set (minSize var1) of mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool + Its category : decision + + The domain : mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool + Its category : decision + + The domain : set of mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool + Its category : decision + + The domain : mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool + Its category : decision + \ No newline at end of file diff --git a/tests/parse_print/autogen/731~final/model.expected.json b/tests/parse_print/autogen/731~final/model.expected.json new file mode 100644 index 0000000000..e09b459fe0 --- /dev/null +++ b/tests/parse_print/autogen/731~final/model.expected.json @@ -0,0 +1,76 @@ +{"mInfo": + {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], + "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, + "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, + "mStatements": + [{"Declaration": + {"FindOrGiven": + ["Find", {"Name": "var1"}, + {"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}, + {"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}}]]}]}}, + {"SuchThat": + [{"Op": + {"MkOpImage": + [{"AbstractLiteral": + {"AbsLitFunction": + [[{"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}]}]]}, + [{"AbstractLiteral": + {"AbsLitSet": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMSet": + [{"ConstantBool": false}, + {"ConstantBool": false}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}]}}]]}}, + {"Constant": {"ConstantBool": false}}]]}}, + {"Comprehension": + [{"AbstractLiteral": + {"AbsLitSet": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": [{"ConstantBool": true}]}}}, + {"Typed": + [{"Constant": {"ConstantAbstract": {"AbsLitMSet": []}}}, + {"TypeMSet": {"TypeBool": []}}]}]}}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_2"}}, + {"DomainSet": + [[], {"SizeAttr_MinSize": {"Reference": [{"Name": "var1"}, null]}}, + {"DomainMSet": + [[], + [{"SizeAttr_MinMaxSize": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 3]}}]}, + {"OccurAttr_MinOccur": + {"Op": + {"MkOpPow": + [{"Reference": [{"Name": "var1"}, null]}, + {"Reference": [{"Name": "var1"}, null]}]}}}], + {"DomainBool": []}]}]}]}}, + {"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_3"}}, + {"DomainSet": + [[], {"SizeAttr_None": []}, + {"DomainMSet": + [[], + [{"SizeAttr_MinMaxSize": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}]}, + {"OccurAttr_MaxOccur": + {"Op": + {"MkOpMod": + [{"Reference": [{"Name": "var1"}, null]}, + {"Reference": [{"Name": "var1"}, null]}]}}}], + {"DomainBool": []}]}]}]}}]]}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/731~final/typecheck.expected b/tests/parse_print/autogen/731~final/typecheck.expected new file mode 100644 index 0000000000..147d15558c --- /dev/null +++ b/tests/parse_print/autogen/731~final/typecheck.expected @@ -0,0 +1,14 @@ +Error: + Category checking failed. + The domain : set (minSize var1) of mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool + Its category : decision + + The domain : mset (minSize 2, maxSize 3, minOccur var1 ** var1) of bool + Its category : decision + + The domain : set of mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool + Its category : decision + + The domain : mset (minSize 1, maxSize 2, maxOccur var1 % var1) of bool + Its category : decision + \ No newline at end of file diff --git a/tests/parse_print/autogen/768~1439583525_36/model.expected.json b/tests/parse_print/autogen/768~1439583525_36/model.expected.json new file mode 100644 index 0000000000..738127a697 --- /dev/null +++ b/tests/parse_print/autogen/768~1439583525_36/model.expected.json @@ -0,0 +1,412 @@ +{"mInfo": + {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], + "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, + "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, + "mStatements": + [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, + {"SuchThat": + [{"Reference": [{"Name": "var1"}, null]}, {"Reference": [{"Name": "var1"}, null]}, + {"Reference": [{"Name": "var1"}, null]}, + {"Op": + {"MkOpIn": + [{"Comprehension": + [{"Reference": [{"Name": "l_1"}, null]}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_1"}}, + {"DomainSet": + [[], + {"SizeAttr_MaxSize": + {"Op": + {"MkOpMinus": + [{"Op": + {"MkOpFreq": + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Reference": + [{"Name": "var1"}, null]}]}}, + {"Reference": [{"Name": "var1"}, null]}]}}, + {"Op": + {"MkOpMod": + [{"Op": + {"MkOpMinus": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 3]}}]}}, + {"Op": + {"MkOpPow": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 3]}}]}}]}}]}}}, + {"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, + {"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 4]}}}]]}]}]}}, + {"Condition": + {"Op": + {"MkOpImply": + [{"Op": + {"MkOpApart": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": + [{"TagInt": []}, 3]}, + {"ConstantBool": true}], + [{"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantBool": true}]]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": + [{"TagInt": []}, 0]}, + {"ConstantBool": true}], + [{"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantBool": true}], + [{"ConstantInt": + [{"TagInt": []}, 5]}, + {"ConstantBool": false}], + [{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantBool": true}]]}}, + {"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantBool": true}], + [{"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantBool": true}]]}}], + [{"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantBool": true}]]}}, + {"ConstantAbstract": + {"AbsLitFunction": + [[{"ConstantInt": + [{"TagInt": []}, 5]}, + {"ConstantBool": true}], + [{"ConstantInt": + [{"TagInt": []}, 3]}, + {"ConstantBool": + true}]]}}]]}}}]}}, + {"Op": + {"MkOpLeq": + [{"Op": + {"MkOpSum": + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, + 3]}}, + {"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, + 9]}}, + {"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, + 2]}}, + {"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, + 5]}, + {"ConstantInt": + [{"TagInt": []}, + 5]}]}]]}, + [{"ConstantInt": + [{"TagInt": []}, 3]}, + {"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 5]}]]}}}}}, + {"Op": + {"MkOpPow": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 0]}}, + {"Op": + {"MkOpPow": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 5]}}, + {"Op": + {"MkOpFactorial": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 3]}}}}]}}]}}]}}]}}}, + {"Condition": + {"Op": + {"MkOpOr": + {"Comprehension": + [{"Op": + {"MkOpTogether": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantBool": false}, + {"ConstantBool": true}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitPartition": + [[{"ConstantBool": true}, + {"ConstantBool": false}, + {"ConstantBool": true}, + {"ConstantBool": true}]]}}}]}}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_2"}}, {"DomainBool": []}]}}, + {"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_3"}}, {"DomainBool": []}]}}, + {"Condition": {"Reference": [{"Name": "l_3"}, null]}}]]}}}}]]}, + {"Op": + {"MkOpIndexing": + [{"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": {"Constant": {"ConstantInt": [{"TagInt": []}, 2]}}}, + {"RangeBounded": + [{"Constant": {"ConstantInt": [{"TagInt": []}, 6]}}, + {"Constant": {"ConstantInt": [{"TagInt": []}, 7]}}]}]]}, + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantInt": + [{"TagInt": []}, 2]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 4]}, + {"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, + 3]}]}}]]}}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantInt": + [{"TagInt": []}, 2]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, + 0]}]}}]]}}]}}}, + {"AbstractLiteral": + {"AbsLitSet": + [{"AbstractLiteral": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 5]}}]}]]}, + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 4]}, + {"ConstantInt": + [{"TagInt": []}, 3]}, + {"ConstantInt": + [{"TagInt": []}, 4]}]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 2]}, + {"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 5]}]}}}, + {"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitSet": []}}}, + {"TypeSet": + {"TypeInt": {"TagInt": []}}}]}]]}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, 7]}}, + {"RangeSingle": + {"ConstantInt": + [{"TagInt": []}, 4]}}, + {"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 6]}, + {"ConstantInt": + [{"TagInt": []}, 7]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 0]}, + {"ConstantInt": + [{"TagInt": []}, 1]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 3]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 4]}, + {"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}}, + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 0]}]}}]]}}}, + {"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": + [{"TagInt": []}, 0]}, + {"ConstantInt": + [{"TagInt": []}, 0]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, 1]}, + {"ConstantInt": + [{"TagInt": []}, + 3]}]}}]]}}}]}}]]}}, + {"Op": + {"MkOpProduct": + {"Comprehension": + [{"Op": + {"MkOpFactorial": + {"Op": + {"MkOpNegate": + {"Reference": [{"Name": "l_4"}, null]}}}}}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_4"}}, + {"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 2]}}}, + {"RangeSingle": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 4]}}}]]}]}}, + {"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_5"}}, + {"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 2]}}}, + {"RangeSingle": + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 0]}}}]]}]}}, + {"Condition": + {"Op": + {"MkOpAllDiff": + {"Typed": + [{"Constant": + {"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": + [{"TagInt": + []}, + 1]}, + {"ConstantInt": + [{"TagInt": + []}, + 0]}]}]]}, + []]}}}, + {"TypeMatrix": + [{"TypeInt": {"TagInt": []}}, + {"TypeInt": {"TagInt": []}}]}]}}}}, + {"Condition": + {"Op": + {"MkOpIff": + [{"Op": + {"MkOpLt": + [{"Reference": [{"Name": "l_5"}, null]}, + {"Reference": [{"Name": "l_5"}, null]}]}}, + {"Op": + {"MkOpNot": + {"Constant": + {"ConstantBool": + false}}}}]}}}]]}}}]}}]}}, + {"Reference": [{"Name": "var1"}, null]}, {"Reference": [{"Name": "var1"}, null]}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/768~1439583525_36/typecheck.expected b/tests/parse_print/autogen/768~1439583525_36/typecheck.expected new file mode 100644 index 0000000000..ceb0e13ff5 --- /dev/null +++ b/tests/parse_print/autogen/768~1439583525_36/typecheck.expected @@ -0,0 +1,5 @@ +Error: + Category checking failed. + The domain : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of int(1, 4) + Its category : decision + \ No newline at end of file diff --git a/tests/parse_print/autogen/769~final/model.expected.json b/tests/parse_print/autogen/769~final/model.expected.json new file mode 100644 index 0000000000..733477c240 --- /dev/null +++ b/tests/parse_print/autogen/769~final/model.expected.json @@ -0,0 +1,67 @@ +{"mInfo": + {"finds": [], "givens": [], "enumGivens": [], "enumLettings": [], "lettings": [], "unnameds": [], + "strategyQ": {"Auto": {"Interactive": []}}, "strategyA": {"Auto": {"Interactive": []}}, "trailCompact": [], + "nameGenState": [], "nbExtraGivens": 0, "representations": [], "representationsTree": [], "originalDomains": [], + "trailGeneralised": [], "trailVerbose": [], "trailRewrites": []}, + "mLanguage": {"language": {"Name": "Essence"}, "version": [1, 3]}, + "mStatements": + [{"Declaration": {"FindOrGiven": ["Find", {"Name": "var1"}, {"DomainBool": []}]}}, + {"SuchThat": + [{"Op": + {"MkOpIn": + [{"Comprehension": + [{"Constant": {"ConstantAbstract": {"AbsLitSet": [{"ConstantInt": [{"TagInt": []}, 2]}]}}}, + [{"Generator": + {"GenDomainNoRepr": + [{"Single": {"Name": "l_1"}}, + {"DomainSet": + [[], + {"SizeAttr_MaxSize": + {"Op": + {"MkOpMinus": + [{"Op": + {"MkOpFreq": + [{"AbstractLiteral": + {"AbsLitMSet": + [{"Reference": + [{"Name": "var1"}, null]}]}}, + {"Reference": [{"Name": "var1"}, null]}]}}, + {"Op": + {"MkOpMod": + [{"Op": + {"MkOpMinus": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, 3]}}]}}, + {"Op": + {"MkOpPow": + [{"Constant": + {"ConstantInt": + [{"TagInt": []}, 1]}}, + {"Constant": + {"ConstantInt": + [{"TagInt": []}, + 3]}}]}}]}}]}}}, + {"DomainInt": + [{"TagInt": []}, + [{"RangeSingle": + {"Constant": {"ConstantInt": [{"TagInt": []}, 1]}}}, + {"RangeSingle": + {"Constant": + {"ConstantInt": [{"TagInt": []}, 4]}}}]]}]}]}}]]}, + {"Constant": + {"ConstantAbstract": + {"AbsLitSet": + [{"ConstantAbstract": + {"AbsLitMatrix": + [{"DomainInt": + [{"TagInt": []}, + [{"RangeBounded": + [{"ConstantInt": [{"TagInt": []}, 1]}, + {"ConstantInt": [{"TagInt": []}, 1]}]}]]}, + [{"ConstantAbstract": + {"AbsLitSet": + [{"ConstantInt": [{"TagInt": []}, 5]}]}}]]}}]}}}]}}]}]} \ No newline at end of file diff --git a/tests/parse_print/autogen/769~final/typecheck.expected b/tests/parse_print/autogen/769~final/typecheck.expected new file mode 100644 index 0000000000..ceb0e13ff5 --- /dev/null +++ b/tests/parse_print/autogen/769~final/typecheck.expected @@ -0,0 +1,5 @@ +Error: + Category checking failed. + The domain : set (maxSize freq(mset(var1), var1) - (1 - 3) % 1 ** 3) of int(1, 4) + Its category : decision + \ No newline at end of file From e33849542ee9eedf02ecb3010d2f9ed3f57de6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Sun, 5 Nov 2023 14:09:18 +0000 Subject: [PATCH 367/378] whitespace --- src/test/Conjure/ParsePrint.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/Conjure/ParsePrint.hs b/src/test/Conjure/ParsePrint.hs index b846c95b41..76ab94abdf 100644 --- a/src/test/Conjure/ParsePrint.hs +++ b/src/test/Conjure/ParsePrint.hs @@ -131,7 +131,6 @@ testSingleDir TestDirFiles{..} = testCaseSteps (map (\ch -> if ch == '/' then '. Nothing -> assertFailure $ "JSON parser error in" ++ stdoutE Just [] -> return () Just ops -> assertFailure $ renderNormal $ vcat ["Difference in json:" <++> vcat (map (stringToDoc . show) ops)] - do step "Checking stdout" stdoutG <- fixWindowsPaths <$> readIfExists (tBaseDir "stdout") From 0d9a5fcbbe128ac4249b4bb689c56f1d8f6c6238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 01:01:52 +0000 Subject: [PATCH 368/378] adding a release github action --- .github/workflows/release.yml | 100 ++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..a3aa4065fa --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,100 @@ +name: Make a release + +on: + workflow_dispatch: # can be triggered manually + push: + tags: + - 'v*' + +permissions: + contents: write + +env: + GHC_VERSION: "9.4" + +jobs: + + Build: + + strategy: + matrix: + GHC_VERSION: ["9.4"] + os: [ubuntu-latest, macos-latest] + + runs-on: ${{ matrix.os }} + + steps: + + - uses: actions/checkout@v3 + name: Checkout repository + + - name: Stack version + shell: bash + run: GHC_VERSION=${{ matrix.GHC_VERSION }} make stack.yaml + + - uses: actions/cache@v3 + name: Cache stack + with: + path: | + ~/.stack + .stack-work + key: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }}-${{ github.event.repository.updated_at }} + restore-keys: stack-${{ runner.os }}-ghc${{ matrix.GHC_VERSION }} + + - name: ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ runner.os }} + + - name: Setting PATH + shell: bash + run: echo "${HOME}/.local/bin" >> ${GITHUB_PATH} + + - name: Build Conjure + shell: bash + run: BIN_DIR=${HOME}/.local/bin GHC_VERSION=${{ matrix.GHC_VERSION }} BUILD_TESTS=true make + + - name: Build solvers + shell: bash + run: BIN_DIR=${HOME}/.local/bin make solvers + + - name: Set variable for Ubuntu + if: runner.os == 'Linux' + run: echo "OS=linux" >> ${GITHUB_ENV} + + - name: Set variable for macOS + if: runner.os == 'macOS' + run: echo "OS=macos-intel" >> ${GITHUB_ENV} + +# when gecode comes back, this is the list +# conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + + - name: Strip binaries + shell: bash + run: | + cd ~/.local/bin + strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + zip -r -9 conjure-${{ github.ref_name }}-${OS}.zip conjure + zip -r -9 conjure-${{ github.ref_name }}-${OS}-with-solvers.zip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + +# See https://jon.sprig.gs/blog/post/2442 + - name: Create Release + id: create_release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: ${{ github.ref_name }} + draft: false + prerelease: false + generate_release_notes: true + + - name: Upload assets + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref_name }} + files: | + ~/.local/bin/conjure-${{ github.ref_name }}-${OS}.zip + ~/.local/bin/conjure-${{ github.ref_name }}-${OS}-with-solvers.zip From 6a2215015736bd47b3f76a24eaddce3ddbb04f37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 01:16:40 +0000 Subject: [PATCH 369/378] fiddles --- .github/workflows/release.yml | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3aa4065fa..81f9f80ff6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,17 +9,19 @@ on: permissions: contents: write -env: - GHC_VERSION: "9.4" - jobs: - Build: + Job: strategy: matrix: GHC_VERSION: ["9.4"] os: [ubuntu-latest, macos-latest] + include: + - os: ubuntu-latest + release_suffix: linux + - os: macos-latest + release_suffix: macos-intel runs-on: ${{ matrix.os }} @@ -56,15 +58,7 @@ jobs: - name: Build solvers shell: bash - run: BIN_DIR=${HOME}/.local/bin make solvers - - - name: Set variable for Ubuntu - if: runner.os == 'Linux' - run: echo "OS=linux" >> ${GITHUB_ENV} - - - name: Set variable for macOS - if: runner.os == 'macOS' - run: echo "OS=macos-intel" >> ${GITHUB_ENV} + run: BIN_DIR=${HOME}/.local/bin PROCESSES=2 make solvers # when gecode comes back, this is the list # conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 @@ -74,8 +68,8 @@ jobs: run: | cd ~/.local/bin strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 - zip -r -9 conjure-${{ github.ref_name }}-${OS}.zip conjure - zip -r -9 conjure-${{ github.ref_name }}-${OS}-with-solvers.zip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip conjure + zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 # See https://jon.sprig.gs/blog/post/2442 - name: Create Release @@ -96,5 +90,5 @@ jobs: with: tag_name: ${{ github.ref_name }} files: | - ~/.local/bin/conjure-${{ github.ref_name }}-${OS}.zip - ~/.local/bin/conjure-${{ github.ref_name }}-${OS}-with-solvers.zip + ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip + ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip From 72f30920be45d403a88d7db64e97a1ef903bcd01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 09:29:42 +0000 Subject: [PATCH 370/378] more path setting + installing gperf for make solvers --- .github/workflows/release.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 81f9f80ff6..a2d10ab1fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,6 +56,23 @@ jobs: shell: bash run: BIN_DIR=${HOME}/.local/bin GHC_VERSION=${{ matrix.GHC_VERSION }} BUILD_TESTS=true make + - name: Setting PATH (for solvers) + shell: bash + run: | + echo "${HOME}/.local/bin" >> ${GITHUB_PATH} + echo "/usr/lib/ccache" >> ${GITHUB_PATH} + echo "/usr/local/opt/ccache/libexec" >> ${GITHUB_PATH} + + - name: Installing dependencies (gperf) on Linux + shell: bash + run: sudo apt-get install -y gperf + if: runner.os == 'Linux' + + - name: Installing dependencies (gperf) on macOS + shell: bash + run: brew install gperf + if: runner.os == 'macOS' + - name: Build solvers shell: bash run: BIN_DIR=${HOME}/.local/bin PROCESSES=2 make solvers From a16783c32ddad57438b2ddae8f4e5deddb8c8cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 11:38:40 +0000 Subject: [PATCH 371/378] update test case to also track the json output --- tests/custom/enum-in-partition/run.sh | 8 ++++---- tests/custom/enum-in-partition/stdout.expected | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/custom/enum-in-partition/run.sh b/tests/custom/enum-in-partition/run.sh index af03f50777..d94851e1b7 100755 --- a/tests/custom/enum-in-partition/run.sh +++ b/tests/custom/enum-in-partition/run.sh @@ -1,4 +1,4 @@ -rm -rf conjure-output *.solution -conjure solve eip.essence -cat *.solution -rm -rf conjure-output *.solution +rm -rf conjure-output *.solution *.solution.json +conjure solve eip.essence --output-format=json +cat *.solution *.solution.json +rm -rf conjure-output *.solution *.solution.json diff --git a/tests/custom/enum-in-partition/stdout.expected b/tests/custom/enum-in-partition/stdout.expected index 084fff6f09..ec53a0564c 100644 --- a/tests/custom/enum-in-partition/stdout.expected +++ b/tests/custom/enum-in-partition/stdout.expected @@ -5,6 +5,7 @@ Savile Row: model000001.eprime Running minion for domain filtering. Running solver: minion Copying solution to: eip.solution +Copying solution to: eip.solution.json language Essence 1.3 letting bags be @@ -14,3 +15,6 @@ $ Visualisation for bags $ "Bread" "Cereal" "Soft Drinks" "Ice Cream" $ "Carrots" "Broccoli" "Spinach" "Apples" "Bananas" "Oranges" "Rice" +{"bags": + [["\"Bread\"", "\"Cereal\"", "\"Soft Drinks\"", "\"Ice Cream\""], + ["\"Carrots\"", "\"Broccoli\"", "\"Spinach\"", "\"Apples\"", "\"Bananas\"", "\"Oranges\"", "\"Rice\""]]} From 57d21a3610df86d51a6ebd7334fef65b6c13899b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 13:58:15 +0000 Subject: [PATCH 372/378] action-gh-release cannot find ~/.local/bin - use cp --- .github/workflows/release.yml | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a2d10ab1fe..fb8a71a0ea 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -79,16 +79,18 @@ jobs: # when gecode comes back, this is the list # conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 - - name: Strip binaries shell: bash run: | - cd ~/.local/bin + pushd ~/.local/bin strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip conjure zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + popd + cp ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip . + cp ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip . -# See https://jon.sprig.gs/blog/post/2442 +# See https://github.com/softprops/action-gh-release - name: Create Release id: create_release uses: softprops/action-gh-release@v1 @@ -99,13 +101,6 @@ jobs: draft: false prerelease: false generate_release_notes: true - - - name: Upload assets - uses: softprops/action-gh-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref_name }} files: | - ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip - ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip + conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip + conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip From e1089d58fe4bab022cc56580c67c43d00a0ebe79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 14:42:08 +0000 Subject: [PATCH 373/378] fix the directory structure of releases --- .github/workflows/release.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fb8a71a0ea..c3a7446405 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,10 +83,20 @@ jobs: shell: bash run: | pushd ~/.local/bin + strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 - zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip conjure - zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + + mkdir -p conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} + cp conjure conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} + + mkdir -p conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers + cp conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers + + zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} + zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers + popd + cp ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip . cp ~/.local/bin/conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip . From 2edef15400acd74eef9142b23def83ec423da00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 17:30:28 +0000 Subject: [PATCH 374/378] also package up savilerow --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c3a7446405..d946823b2c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -91,6 +91,7 @@ jobs: mkdir -p conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers cp conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers + cp -r savilerow savilerow.jar lib conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers.zip conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers From c94cde53a311c26a222e3f2e1665ba7f4e946851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Mon, 6 Nov 2023 17:43:12 +0000 Subject: [PATCH 375/378] also: package up minion --- .github/workflows/release.yml | 6 +++--- Dockerfile | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d946823b2c..69e7523eb6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,19 +78,19 @@ jobs: run: BIN_DIR=${HOME}/.local/bin PROCESSES=2 make solvers # when gecode comes back, this is the list -# conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 +# conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling minion nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 - name: Strip binaries shell: bash run: | pushd ~/.local/bin - strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 + strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling minion nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 mkdir -p conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} cp conjure conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} mkdir -p conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers - cp conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers + cp conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling minion nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers cp -r savilerow savilerow.jar lib conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}-with-solvers zip -r -9 conjure-${{ github.ref_name }}-${{ matrix.release_suffix }}.zip conjure-${{ github.ref_name }}-${{ matrix.release_suffix }} diff --git a/Dockerfile b/Dockerfile index e91d4de944..a36d3908c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -57,8 +57,8 @@ RUN make install # Make binaries a bit smaller RUN ls -l /root/.local/bin RUN du -sh /root/.local/bin -RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 -# RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 +RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed glucose glucose-syrup kissat lingeling minion nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 +# RUN cd /root/.local/bin ; strip conjure bc_minisat_all_release boolector cadical fzn-chuffed fzn-gecode glucose glucose-syrup kissat lingeling minion nbc_minisat_all_release open-wbo plingeling treengeling yices yices-sat yices-smt yices-smt2 z3 RUN ls -l /root/.local/bin RUN du -sh /root/.local/bin From 052b0413053a95eb5e9d40056d7256b52c598bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 7 Nov 2023 21:14:42 +0000 Subject: [PATCH 376/378] add new test case --- tests/custom/allDiff-chuffed/model.essence | 34 ++++++++++++++++++++ tests/custom/allDiff-chuffed/run.sh | 3 ++ tests/custom/allDiff-chuffed/stdout.expected | 7 ++++ 3 files changed, 44 insertions(+) create mode 100644 tests/custom/allDiff-chuffed/model.essence create mode 100755 tests/custom/allDiff-chuffed/run.sh create mode 100644 tests/custom/allDiff-chuffed/stdout.expected diff --git a/tests/custom/allDiff-chuffed/model.essence b/tests/custom/allDiff-chuffed/model.essence new file mode 100644 index 0000000000..509566eab8 --- /dev/null +++ b/tests/custom/allDiff-chuffed/model.essence @@ -0,0 +1,34 @@ + +letting n be 4 + + +letting hints be function( + (1,1) --> 2, + (2,2) --> 2 +) + + +letting less_than be relation( + ((1,1) , (2,1)), + ((4,2) , (3,2)), + ((3,3) , (3,4)), + ((3,4) , (4,4)) +) + + +letting DOMAIN be domain int(1..n) + + +find board : matrix indexed by [DOMAIN, DOMAIN] of DOMAIN + + +such that forAll (hint,num) in hints . + board[hint[1], hint[2]] = num, + + +such that forAll i: DOMAIN . + allDiff(board[i,..]), + + +such that forAll j: DOMAIN . + allDiff(board[..,j]), diff --git a/tests/custom/allDiff-chuffed/run.sh b/tests/custom/allDiff-chuffed/run.sh new file mode 100755 index 0000000000..f0c3e0c95f --- /dev/null +++ b/tests/custom/allDiff-chuffed/run.sh @@ -0,0 +1,3 @@ +rm -rf conjure-output *.solution +conjure solve model.essence --solver=chuffed +rm -rf conjure-output *.solution diff --git a/tests/custom/allDiff-chuffed/stdout.expected b/tests/custom/allDiff-chuffed/stdout.expected new file mode 100644 index 0000000000..2bee654671 --- /dev/null +++ b/tests/custom/allDiff-chuffed/stdout.expected @@ -0,0 +1,7 @@ +Generating models for model.essence +Generated models: model000001.eprime +Saved under: conjure-output +Savile Row: model000001.eprime +Running minion for domain filtering. +Running solver: chuffed +Copying solution to: model.solution From 95d1104cb9b0fbe647745da323199ac1a682a344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=88zgu=CC=88r=20Akgu=CC=88n?= Date: Tue, 7 Nov 2023 21:15:15 +0000 Subject: [PATCH 377/378] Update SR version to 9bcb74d31 (2023-11-07 15:13:41 +0000)) --- etc/savilerow/savilerow | 61 ++---------------------------------- etc/savilerow/savilerow.jar | Bin 781092 -> 785571 bytes 2 files changed, 3 insertions(+), 58 deletions(-) diff --git a/etc/savilerow/savilerow b/etc/savilerow/savilerow index 5d54197d43..bec411d645 100755 --- a/etc/savilerow/savilerow +++ b/etc/savilerow/savilerow @@ -1,68 +1,13 @@ #!/bin/bash - # get savilerow installation directory DIR="$( cd "$( dirname "$0" )" && pwd )" -if [ -f "$DIR/bin/minion" ]; then - MINION_ARG="-minion-bin $DIR/bin/minion" -else - MINION_ARG="" -fi - -if [ -f "$DIR/bin/fzn-chuffed" ]; then - CHUFFED_ARG="-chuffed-bin $DIR/bin/fzn-chuffed" -else - CHUFFED_ARG="" -fi - -if [ -f "$DIR/bin/fzn-gecode" ]; then - GECODE_ARG="-gecode-bin $DIR/bin/fzn-gecode" -else - GECODE_ARG="" -fi - -if [ -f "$DIR/bin/fzn-ortools" ]; then - ORTOOLS_ARG="-or-tools-bin $DIR/bin/fzn-ortools" -else - ORTOOLS_ARG="" -fi - -if [ -f "$DIR/bin/cadical" ]; then - CADICAL_ARG="-cadical-bin $DIR/bin/cadical" -else - CADICAL_ARG="" -fi - -if [ -f "$DIR/bin/yices-smt2" ]; then - YICES_ARG="-yices2-bin $DIR/bin/yices-smt2" -else - YICES_ARG="" -fi - -if [ -f "$DIR/bin/boolector" ]; then - BOOLECTOR_ARG="-boolector-bin $DIR/bin/boolector" -else - BOOLECTOR_ARG="" -fi - -if [ -f "$DIR/bin/z3" ]; then - Z3_ARG="-z3-bin $DIR/bin/z3" -else - Z3_ARG="" -fi - -if [ -f "$DIR/bin/symmetry_detect" ]; then - SYMDETECT_ARG="-symdetect-bin $DIR/bin/symmetry_detect" -else - SYMDETECT_ARG="" -fi - case "$@" in *"-cgroups"*) if [ $(uname) = "Darwin" ]; then echo "Ignoring -cgroups on macOS" - java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" ${MINION_ARG} ${CHUFFED_ARG} ${GECODE_ARG} ${ORTOOLS_ARG} ${SYMDETECT_ARG} ${GLUCOSE_ARG} ${CADICAL_ARG} ${YICES_ARG} ${BOOLECTOR_ARG} ${Z3_ARG} "$@" + java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" else TIMESTAMP=$(date +%s) GROUP_NAME="savilerow_${TIMESTAMP}_$$" @@ -72,11 +17,11 @@ case "$@" in cgcreate -g cpu:/$GROUP_NAME cgset -r cpu.cfs_quota_us=1000000 $GROUP_NAME cgset -r cpu.cfs_period_us=1000000 $GROUP_NAME - cgexec -g cpu:$GROUP_NAME java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" ${MINION_ARG} ${CHUFFED_ARG} ${GECODE_ARG} ${ORTOOLS_ARG} ${SYMDETECT_ARG} ${GLUCOSE_ARG} ${CADICAL_ARG} ${YICES_ARG} ${BOOLECTOR_ARG} ${Z3_ARG} "$@" + cgexec -g cpu:$GROUP_NAME java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" cgdelete -g cpu:/$GROUP_NAME fi ;; *) - java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" ${MINION_ARG} ${CHUFFED_ARG} ${GECODE_ARG} ${ORTOOLS_ARG} ${SYMDETECT_ARG} ${GLUCOSE_ARG} ${CADICAL_ARG} ${YICES_ARG} ${BOOLECTOR_ARG} ${Z3_ARG} "$@" + java -ea -XX:ParallelGCThreads=1 -Djava.library.path=$DIR/lib/ -Xmx8G -jar "$DIR/savilerow.jar" "$@" ;; esac diff --git a/etc/savilerow/savilerow.jar b/etc/savilerow/savilerow.jar index d4e574664c5ad901f1cdcc3e35a5ca1d99130dec..c6b478bca7b929e19470b83e60504fcaaa025e32 100644 GIT binary patch delta 249703 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

*#z+kH2j+ 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�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⪻y};g*Yj_=UCl$ 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,)JJ@_eTsC6Su93 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 Date: Tue, 7 Nov 2023 23:44:00 +0000 Subject: [PATCH 378/378] version 2.5.1 --- CITATION.cff | 4 ++-- conjure-cp.cabal | 2 +- docs/conf.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 1ddbc0c1ec..e4237cc90e 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -5,5 +5,5 @@ authors: given-names: Özgür orcid: https://orcid.org/0000-0001-9519-938X title: Conjure: The Automated Constraint Modelling Tool -version: v2.5.0 -date-released: 2023-05-18 +version: v2.5.1 +date-released: 2023-11-07 diff --git a/conjure-cp.cabal b/conjure-cp.cabal index 9b03e22b76..03b49a4e1d 100644 --- a/conjure-cp.cabal +++ b/conjure-cp.cabal @@ -1,6 +1,6 @@ Cabal-version: 2.4 Name: conjure-cp -Version: 2.5.0 +Version: 2.5.1 Synopsis: Conjure: The Automated Constraint Modelling Tool Description: . Homepage: http://github.com/conjure-cp/conjure diff --git a/docs/conf.py b/docs/conf.py index 6fb08c9f23..4feb1f6554 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -73,7 +73,7 @@ # built documents. # # The short X.Y version. -version = u'2.5.0' +version = u'2.5.1' # The full version, including alpha/beta/rc tags. release = version